# Sustainability action plan: eic-smear

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

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

## High priority

- [ ] Add a test that converts a committed tree with `TreeToHepMC` and checks particle counts and cross-section units in the HepMC3 output. *(`eng.testing`, now level 0, effort S)*
- [ ] Add `CODEOWNERS` naming two maintainers for `src/`, `include/` and `CMakeLists.txt`, and have the second maintainer author changes and cut a release. *(`com.bus-factor`, now level 1, effort S)*
- [ ] Add `CODE_OF_CONDUCT.md` with a reporting contact, or link the ePIC collaboration code of conduct from the README. *(`com.conduct`, now level 1, effort S)*
- [ ] Add `CITATION.cff` listing the authors in `AUTHORS` and enable the Zenodo-GitHub integration for releases. *(`via.citation`, now level 0, effort S)*
- [ ] Add `enable_testing()` and a CTest test that runs `BuildTree` on a small committed generator text file per supported format and checks the event count. *(`eng.testing`, now level 0, effort M)*

## Medium priority

- [ ] Add a `pull_request` rule with one required approving review to ruleset 10735385 so code fixes and version bumps go through PRs. *(`eng.change-control`, now level 1, effort S)*
- [ ] Add a step to `.github/workflows/linux-eic-shell.yml` that runs `ctest` (once tests exist) and a `BuildTree`/`SmearTree`/`TreeToHepMC` run on a small committed input file. *(`eng.ci`, now level 1, effort S)*
- [ ] Add `.clang-format` (Google-based, matching the README conventions) and a `.pre-commit-config.yaml` with clang-format, enabled on pre-commit.ci. *(`eng.static-quality`, now level 1, effort S)*
- [ ] Replace the vendored `eicpy/cpplint.py` with a CI job running upstream `cpplint` with the README filter on changed files. *(`eng.static-quality`, now level 1, effort S)*
- [ ] Set `target_compile_features(eicsmear PUBLIC cxx_std_17)` (or higher) on all targets in `CMakeLists.txt`. *(`eng.modularity`, now level 1, effort S)*
- [ ] Update the README "Prerequisites" to CMake >= 3.10, ROOT >= 6.20, HepMC3 and zlib, and add an "Using eic-shell" section. *(`doc.user`, now level 1, effort S)*
- [ ] Add `examples/` with a small generator text file and a macro running `BuildTree`, `SmearTree` and `TreeToHepMC`. *(`doc.user`, now level 1, effort S)*
- [ ] Add a workflow that runs `doxygen` on pushes to `master` and tags and deploys `doxygen/html` to GitHub Pages, and link it from the README. *(`doc.developer`, now level 2, effort S)*
- [ ] Move the README developer notes into `CONTRIBUTING.md` and add eic-shell setup, build, test commands and PR review expectations. *(`doc.contributing`, now level 1, effort S)*
- [ ] Close or label issues *(`com.responsiveness`, now level 1, effort S)*
- [ ] List contributors' institutions in `AUTHORS` and label newcomer issues to attract PRs from outside the maintainer group. *(`com.contributors`, now level 1, effort S)*
- [ ] Add `GOVERNANCE.md` (or a README section) naming the maintainers, how decisions are made, and how to become a maintainer. *(`com.governance`, now level 1, effort S)*
- [ ] Generate release notes for every tag (GitHub "Generate release notes") and backfill notes for 1.2.1 and 1.2.2. *(`dist.releases`, now level 1, effort S)*
- [ ] Add `VERSION` minimums to `find_package(HepMC3 3.2.4 ...)` and `find_package(ZLIB ...)` and delete `include/eicsmear/HepMC_3_2_4_ReaderFactory.h`. *(`dist.dependencies`, now level 1, effort S)*
- [ ] Document in the README which eic-shell release ships each eic-smear version and how to run in it. *(`dist.reproducibility`, now level 1, effort S)*
- [ ] Write the `gRandom` seed and eic-smear version as `TNamed` objects next to the `detector` object in `SmearTree` output. *(`dist.reproducibility`, now level 1, effort S)*
- [ ] Add a Clang build (`CXX=clang++` in eic-shell) and a `macos-latest` job with Homebrew ROOT to the CI matrix. *(`dist.portability`, now level 1, effort S)*
- [ ] Remove `include/eicsmear/HepMC_3_2_4_ReaderFactory.h` and require HepMC3 >= 3.2.4. *(`eic.reuse`, now level 1, effort S)*
- [ ] Add an eic-shell section to the README and run a `BuildTree`/`SmearTree` example in the existing eic-shell CI job. *(`eic.environment`, now level 1, effort S)*
- [ ] Raise minimums to the current eic-shell versions (ROOT 6.40, HepMC3 3.3, C++20) and remove the HepMC3 compatibility branch. *(`eic.currency`, now level 2, effort S)*
- [ ] State in the README the EIC/ePIC working group that owns eic-smear and any funding or institutional support. *(`via.support`, now level 1, effort S)*
- [ ] Document in the README why the EicTree/Smeared formats are kept instead of HepMC3/EDM4eic, or add an EDM4eic writer for smeared output. *(`eic.reuse`, now level 1, effort M)*
- [ ] Add a document listing every branch and field of the EicTree and Smeared trees and the EIC text input format. *(`eic.data-model`, now level 1, effort M)*

## Low priority

- [ ] Port `eicpy/` to Python 3 or remove it, and delete the `.orig` and `.betterbutdifferent` files. *(`eng.modularity`, now level 1, effort S)*
- [ ] Replace vendored `gzstream` with ROOT or Boost.Iostreams zlib streams, or document its version and provenance in a third-party notice. *(`dist.dependencies`, now level 1, effort M)*
- [ ] Add `SPDX-License-Identifier` headers, a REUSE `LICENSES/` directory covering gzstream and cpplint, and the REUSE lint to CI. *(`via.license`, now level 2, effort M)*
