# Sustainability action plan: IRT (Indirect Ray Tracing)

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

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

## High priority

- [ ] Add a `ctest --test-dir build --output-on-failure` step to the build job once tests exist (see eng.testing). *(`eng.ci`, now level 1, effort S)*
- [ ] Rewrite `README.md` for IRT2 with eic-shell and from-source builds, dependency versions, CMake options and a minimal usage example. *(`doc.user`, now level 1, effort S)*
- [ ] Add `.github/CODEOWNERS` naming two owners for the library code and the build/CI files. *(`com.bus-factor`, now level 1, effort S)*
- [ ] Add a "Maintainers" section to `README.md` naming the maintainers and the owning ePIC group. *(`com.governance`, now level 0, effort S)*
- [ ] Add `CODE_OF_CONDUCT.md` linking the ePIC code of conduct and a reporting contact, or add it once in `eic/.github`. *(`com.conduct`, now level 1, effort S)*
- [ ] Add `CITATION.cff` with the authors and enable the Zenodo-GitHub integration for release DOIs. *(`via.citation`, now level 0, effort S)*
- [ ] Add Catch2 unit tests (registered with `ctest`) for `SphericalSurface`, `FlatSurface` and the `IRT` ray-tracing solution. *(`eng.testing`, now level 0, effort M)*
- [ ] Add an end-to-end test that runs `ReconstructionFactory` on a small stored event file and checks the PID result. *(`eng.testing`, now level 0, effort M)*
- [ ] Present IRT2 at an ePIC PID or reconstruction meeting and recruit a co-developer from a third institution. *(`com.contributors`, now level 1, effort M)*

## Medium priority

- [ ] Add `required_pull_request_reviews` with one approval to the `main` branch protection and enable `enforce_admins`. *(`eng.change-control`, now level 1, effort S)*
- [ ] Add `.github/CODEOWNERS` naming at least two reviewers for `source/` and `include/`. *(`eng.change-control`, now level 1, effort S)*
- [ ] Add `.clang-format` and a `.pre-commit-config.yaml` with the clang-format hook, and enable pre-commit.ci. *(`eng.static-quality`, now level 1, effort S)*
- [ ] Replace the flag logic in `CMakeLists.txt` with `set(CMAKE_CXX_STANDARD 17)` and `CMAKE_CXX_STANDARD_REQUIRED ON`. *(`eng.modularity`, now level 1, effort S)*
- [ ] Remove or port `evaluation/` and drop `${CMAKE_INSTALL_PREFIX}/include` from `include_directories`. *(`eng.modularity`, now level 1, effort S)*
- [ ] Add `CONTRIBUTING.md` covering eic-shell setup, CMake build, clang-tidy expectations and the PR/release process. *(`doc.contributing`, now level 1, effort S)*
- [ ] Triage the six open issues and three stale PRs, labeling or closing each. *(`com.responsiveness`, now level 1, effort S)*
- [ ] State SemVer and the 1.x/2.x maintenance policy in `README.md` and bump `project(IRT2 VERSION ...)` in each release PR. *(`dist.releases`, now level 1, effort S)*
- [ ] Delete `evaluation/` (or port it to EDM4hep via `find_package(podio)`/`find_package(EDM4hep)`) and record the origin and version of `DrcPidFast`. *(`dist.dependencies`, now level 1, effort S)*
- [ ] Document in `README.md` the eic-shell release each IRT2 version is built and validated in. *(`dist.reproducibility`, now level 1, effort S)*
- [ ] Run the new ctest suite in each matrix entry of `linux-eic-shell.yml`. *(`dist.portability`, now level 1, effort S)*
- [ ] Remove the dd4pod-based `evaluation/` and document why the standalone `CherenkovEvent` tree is needed alongside EDM4hep input. *(`eic.reuse`, now level 1, effort S)*
- [ ] Document the `CherenkovDetectorCollection` file layout and the JSON configuration keys in `docs/formats.md`. *(`eic.data-model`, now level 1, effort S)*
- [ ] Add an eic-shell build section to `README.md` and run the ctest suite in the `eic_xl:nightly` job. *(`eic.environment`, now level 1, effort S)*
- [ ] Add `LICENSE.spdx` or a `license("LGPL-3.0-or-later")` entry in the eic-spack `irt2` recipe, and record the license of `DrcPidFast`. *(`via.license`, now level 1, effort S)*
- [ ] State the owning ePIC PID/reconstruction working group and maintainer institutions in `README.md`. *(`via.support`, now level 1, effort S)*
- [ ] Add a job that builds EICrecon with `-DIRT2_ROOT` pointing at the installed artifact in `eic_xl:nightly`. *(`eng.ci`, now level 1, effort M)*
- [ ] Add a `Doxyfile` and `docs/architecture.md` describing the detector, radiator, surface and reconstruction classes and their data flow. *(`doc.developer`, now level 1, effort M)*

## Low priority

- [ ] Remove the dd4pod/eicd-era `evaluation/` code and README sections. *(`eic.currency`, now level 2, effort S)*
