# Sustainability action plan: JANA2

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

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

## High priority

- [ ] Require one approving review on `master` through branch protection or a ruleset, and have a second maintainer review each PR. *(`eng.change-control`, now level 1, effort S)*
- [ ] Add a `.clang-format` matching the documented conventions and a `.pre-commit-config.yaml` with clang-format, and enable pre-commit.ci on PRs. *(`eng.static-quality`, now level 0, effort S)*
- [ ] Respond to and label every new issue (existing `bug`/`enhancement` labels), and close or label the 44 open issues older than one year. *(`com.responsiveness`, now level 0, effort S)*
- [ ] Add `CODEOWNERS` naming at least two maintainers and have a second maintainer review and merge PRs. *(`com.bus-factor`, now level 0, effort S)*
- [ ] Replace LICENSE with the standard BSD-3-Clause text (keeping the government notice in a separate NOTICE file) so GitHub detects `BSD-3-Clause`. *(`via.license`, now level 1, effort S)*

## Medium priority

- [ ] Fix the failing `test_integration_gluex.yml` job and mark the Ubuntu, macOS, dependency-matrix and ePIC workflows as required status checks on `master`. *(`eng.ci`, now level 2, effort S)*
- [ ] Add a coverage build (`--coverage` with lcov or gcovr) to `test_platform_ubuntu.yml` and publish it to Codecov. *(`eng.testing`, now level 2, effort S)*
- [ ] Add a dependency table with minimum versions and an "Installing via eic-shell / eic-spack" section to `docs/install.md`. *(`doc.user`, now level 1, effort S)*
- [ ] Add `CONTRIBUTING.md` covering eic-shell setup, the CMake options used in CI, running `ctest`, and the PR process, plus `.github/pull_request_template.md` and issue templates. *(`doc.contributing`, now level 1, effort S)*
- [ ] Add `GOVERNANCE.md` naming the maintainers, the decision process, the path to maintainership and the link to the ePIC software meetings where JANA2 changes are discussed. *(`com.governance`, now level 1, effort S)*
- [ ] Add a "Getting help" section to `README.md` and `docs/index.md` linking GitHub Discussions (or the EIC Mattermost channel) and the issue tracker. *(`com.conduct`, now level 1, effort S)*
- [ ] Add minimum `VERSION` arguments to every `find_package` and use the Catch2 v3 package from eic-shell/Spack instead of `src/external/catch2`. *(`dist.dependencies`, now level 1, effort S)*
- [ ] State in `docs/Download.md` the eic-shell release each JANA2 release is tested with, and document running in that image. *(`dist.reproducibility`, now level 1, effort S)*
- [ ] Add a ctest that writes a podio file with PodioFileWriter, reads it back with PodioFileReader and compares collection contents. *(`eic.data-model`, now level 2, effort S)*
- [ ] Document in `docs/install.md` how to use the eic-shell JANA2 and how to build a development copy inside eic-shell. *(`eic.environment`, now level 1, effort S)*
- [ ] List the individual contributors in `CITATION.cff` (or `.zenodo.json`) and the ACAT 2019 paper as `preferred-citation`. *(`via.citation`, now level 1, effort S)*
- [ ] Document in the README the maintaining institutions, the owning ePIC/JLab software group, and the plan for maintainer turnover. *(`via.support`, now level 2, effort S)*
- [ ] Add a CI step that compares the TimesliceExample or EICrecon output with a stored reference using epic-capybara. *(`eng.testing`, now level 2, effort M)*
- [ ] Install only the user-facing headers (or move internals to an `internal/` directory excluded from install) and drop C++14 from the accepted standards. *(`eng.modularity`, now level 2, effort M)*
- [ ] Add Doxygen comments to every public method in the installed headers of `src/libraries/JANA/` starting with JApplication, JComponent, JEventProcessor and JEventUnfolder. *(`doc.developer`, now level 1, effort M)*
- [ ] Label newcomer issues and invite EICrecon and GlueX developers to take ownership of specific components through PRs. *(`com.contributors`, now level 2, effort M)*
- [ ] Add a tag-triggered `.github/workflows/release.yml` that creates the GitHub release, and add a "Breaking changes / Migration" section and a deprecation policy to `docs/Download.md`. *(`dist.releases`, now level 2, effort M)*
