# Sustainability action plan: EICrecon

From the EIC Software Sustainability Review, pass `2026-10-12`, assessed at commit `b67b442e26a3`. Full assessment: https://eic.github.io/SoftwareSustainabilityReview/projects/eicrecon.html

Levels: 0 Absent · 1 Initial · 2 Established · 3 Sustained. Each item names the step to the next level.

## High priority

- [ ] Keep the `main` ruleset's one-approval requirement active so that at least 50% (then 90%) of merged PRs carry a non-author review in the next 12-month window. *(`eng.change-control`, now level 1, effort S)*
- [ ] Add `.github/CODEOWNERS` naming at least two owners for each of `src/algorithms/*`, `src/factories`, `src/services` and `.github/`. *(`com.bus-factor`, now level 1, effort S)*
- [ ] Add `GOVERNANCE.md` naming the maintainers by role, the owning ePIC working group, the decision process and the path to reviewer and maintainer. *(`com.governance`, now level 1, effort S)*
- [ ] Add a CODE_OF_CONDUCT.md that links the ePIC code and gives a public reporting contact, and a README "Getting help" section linking the ePIC Mattermost reconstruction channel or the issue tracker. *(`com.conduct`, now level 1, effort S)*
- [ ] Replace NOTICE.md with a statement that the repository is LGPL-3.0-or-later and that contributions are accepted under it (inbound = outbound). *(`via.license`, now level 1, effort S)*
- [ ] Determine the license of the STAR-derived `src/algorithms/reco/Helix.*`, record it in their SPDX headers, or replace the code. *(`via.license`, now level 1, effort S)*

## Medium priority

- [ ] Add a PR-template checkbox and review rule requiring a unit test for every new or changed algorithm. *(`eng.testing`, now level 1, effort S)*
- [ ] Write `docs/design/architecture.md` describing the algorithms/factories/services/detectors layers and the data flow, and link it from `docs/_sidebar.md`. *(`eng.modularity`, now level 2, effort S)*
- [ ] Regenerate the dependency list in `docs/get-started/manual-build.md` from the `*_VERSION_MIN` values in `CMakeLists.txt` and remove the C++17 flags. *(`doc.user`, now level 1, effort S)*
- [ ] Update or remove `docs/howto/full_chain_simulation.md` so the quick start uses npsim and eicrecon with a current input file. *(`doc.user`, now level 1, effort S)*
- [ ] Add `docs/design/architecture.md` with a component and data-flow diagram. *(`doc.developer`, now level 1, effort S)*
- [ ] Label at least five current issues `good first issue` and add `.github/ISSUE_TEMPLATE/` bug and feature templates. *(`doc.contributing`, now level 2, effort S)*
- [ ] Document in CONTRIBUTING.md how non-ePIC contributors can submit fork PRs that pass CI, and merge at least one such PR. *(`com.contributors`, now level 1, effort S)*
- [ ] State in README.md that releases follow SemVer and define what bumps MAJOR (for example renamed or removed output collections). *(`dist.releases`, now level 1, effort S)*
- [ ] Add minimum versions to the `find_package` calls for Microsoft.GSL, nlohmann_json, Boost and cppzmq in `CMakeLists.txt` and the `src/services/*/CMakeLists.txt` files. *(`dist.dependencies`, now level 1, effort S)*
- [ ] Document in `docs/design/tracking.md` why `SecondaryVerticesHelix` is kept alongside the ACTS vertexer, or replace it with ACTS propagation and vertex fitting. *(`eic.reuse`, now level 1, effort S)*
- [ ] Re-enable the exception in `JEventSourcePODIO.cc` L139-L143 and add an EDM4eic/EDM4hep datamodel version check against the file metadata. *(`eic.data-model`, now level 2, effort S)*
- [ ] State in README.md the owning ePIC working group, the maintaining institutions, and what happens when a maintainer leaves. *(`via.support`, now level 2, effort S)*
- [ ] Set `WarningsAsErrors` in `.clang-tidy` for the enabled check groups, or publish the clang-tidy warning count on main and drive it to zero. *(`eng.static-quality`, now level 2, effort M)*
- [ ] Review the 139 issues older than one year and close or label each, and apply a `topic:` label to every new issue at triage. *(`com.responsiveness`, now level 1, effort M)*
- [ ] Write the EICrecon version and the full JANA parameter set (including the UniqueIDGenSvc seed) into a podio `metadata` frame in `JEventProcessorPODIO::Finish`. *(`dist.reproducibility`, now level 1, effort M)*
- [ ] Add an `ubuntu-24.04-arm` build-and-ctest job in eic-shell to `linux-eic-shell.yml`. *(`dist.portability`, now level 2, effort M)*
- [ ] Migrate the remaining deprecated Acts seeding calls and drop `-Wno-error=deprecated-declarations` from `linux-eic-shell.yml`. *(`eic.currency`, now level 2, effort M)*
- [ ] Add Catch2 tests in `src/tests/algorithms_test/` for the untested algorithms in `src/algorithms/reco` and `src/algorithms/tracking` until each algorithm library reports coverage above 50%. *(`eng.testing`, now level 1, effort L)*
- [ ] Add Doxygen comments to every `src/algorithms/*/*.h` class and `*Config.h` member, and set `WARN_IF_UNDOCUMENTED` in the Doxyfile to track the remainder. *(`doc.developer`, now level 1, effort L)*

## Low priority

- [ ] Add a "Build and test" section to CONTRIBUTING.md covering eic-shell, cmake and `ctest --test-dir build`. *(`doc.contributing`, now level 2, effort S)*
- [ ] Add `CITATION.cff` and `.zenodo.json` with the full contributor list and a preferred-citation entry for an EICrecon reference publication. *(`via.citation`, now level 2, effort S)*
- [ ] Remove `-Wno-error=deprecated-declarations` from the CI matrix once the Acts deprecations are resolved. *(`eng.static-quality`, now level 2, effort M)*
- [ ] Install only headers of the algorithm interfaces and configs intended for downstream use, and mark the rest internal. *(`eng.modularity`, now level 2, effort M)*
