# Sustainability action plan: epic-analysis

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

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

## High priority

- [ ] Add `.clang-format` and `.pre-commit-config.yaml` with clang-format, enable pre-commit.ci, and add `-Wall -Wextra` to `FLAGS` in the Makefile. *(`eng.static-quality`, now level 0, effort S)*
- [ ] Review the 22 open issues and 10 open PRs, close stale ones, and label the rest. *(`com.responsiveness`, now level 0, effort S)*
- [ ] Add `CODEOWNERS` or a README maintainer section naming at least two maintainers. *(`com.bus-factor`, now level 1, effort S)*
- [ ] Add a "Maintainers" section to the README naming the maintainers and the owning ePIC working group. *(`com.governance`, now level 0, effort S)*
- [ ] Add `CODE_OF_CONDUCT.md` linking the ePIC collaboration code of conduct and reporting contact, and a "Getting help" README section. *(`com.conduct`, now level 1, effort S)*
- [ ] Add `CITATION.cff` listing the contributors and enable the Zenodo-GitHub integration. *(`via.citation`, now level 0, effort S)*
- [ ] State the maintainers, their institutions, and the owning ePIC working group in the README. *(`via.support`, now level 0, effort S)*
- [ ] Fix the build failures in `build_all` and `build_no_delphes` (merge or rework PR *(`eng.ci`, now level 1, effort M)*
- [ ] Review and merge or close the open contributor PRs (#295, *(`com.contributors`, now level 1, effort M)*
- [ ] Switch `ci.yml` to `platform-release` `eic_xl:nightly` and fix the build so `build_all` and `build_no_delphes` pass. *(`eic.environment`, now level 0, effort M)*
- [ ] Merge the C++20 fixes from PR *(`eic.currency`, now level 1, effort M)*

## Medium priority

- [ ] Enable "Do not allow bypassing the above settings" (enforce for administrators) on the `main` protection rule. *(`eng.change-control`, now level 2, effort S)*
- [ ] Add `.github/CODEOWNERS` naming at least two reviewers for `src/`, `macro/ci/`, and `.github/`. *(`eng.change-control`, now level 2, effort S)*
- [ ] State the tested eic-shell release and Delphes tag in the README, and add a quick-start that runs `tutorial/analysis_template.C` on a public input file (for example via xrootd). *(`doc.user`, now level 1, effort S)*
- [ ] Add a `Doxyfile` covering `src/` and a GitHub Pages workflow that publishes it from `main`. *(`doc.developer`, now level 1, effort S)*
- [ ] Add `CONTRIBUTING.md` covering eic-shell setup, `make`, running the `macro/ci` macros locally, code style, and the PR review process. *(`doc.contributing`, now level 1, effort S)*
- [ ] State SemVer in the README and tag a release with generated notes once `main` CI passes, then at least every six months. *(`dist.releases`, now level 1, effort S)*
- [ ] Pin Delphes to a release tag in `deps/install_delphes.sh` and declare minimum versions of ROOT, podio, EDM4eic and fmt in the build files. *(`dist.dependencies`, now level 1, effort S)*
- [ ] Document the eic-shell release used for each tag and write the config file contents and seed into each output ROOT file. *(`dist.reproducibility`, now level 1, effort S)*
- [ ] Use `CXX ?= g++` in the Makefile and add a Clang build job to `ci.yml`; make the S3 host and xrootd prefix configurable. *(`dist.portability`, now level 1, effort S)*
- [ ] Add `doc/output.md` listing every branch of SidisTree, HFSTree and ParticleTree with units. *(`eic.data-model`, now level 1, effort S)*
- [ ] Document in the README that builds with Delphes are distributed under GPL-3.0 (or default to `EXCLUDE_DELPHES`), and record the `mstwpdf` license in `deps/README.md`. *(`via.license`, now level 1, effort S)*
- [ ] Add a test executable (Catch2, available in eic-shell) that checks `Kinematics::CalculateDIS` for each method on fixed four-vectors, run from `ci.yml`. *(`eng.testing`, now level 1, effort M)*
- [ ] Replace the Makefile with CMake that sets `CMAKE_CXX_STANDARD 20`, uses `find_package` for ROOT, podio, EDM4eic and fmt, and installs the library and headers. *(`eng.modularity`, now level 1, effort M)*
- [ ] Once a CMake install exists, add an `epic-analysis` recipe to eic-spack for the latest release. *(`dist.packaging`, now level 1, effort M)*
- [ ] Port `AnalysisEpic` to `podio::ROOTReader` frames with EDM4eic collections (issue *(`eic.reuse`, now level 1, effort M)*
- [ ] Contribute a SIDIS kinematics benchmark that uses the project to physics_benchmarks, and list known users in the README. *(`via.adoption`, now level 1, effort M)*
