# Sustainability action plan: epic-capybara

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

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

## High priority

- [ ] Add `.pre-commit-config.yaml` with `ruff` and `ruff-format` and enable pre-commit.ci on the repository. *(`eng.static-quality`, now level 0, effort S)*
- [ ] Add `.github/CODEOWNERS` naming two maintainers for `epic_capybara/` and `.github/workflows/`. *(`com.bus-factor`, now level 1, effort S)*
- [ ] Add `CODE_OF_CONDUCT.md` linking the ePIC collaboration code of conduct and its reporting contact. *(`com.conduct`, now level 1, effort S)*
- [ ] Add `CITATION.cff` listing all contributors and enable the Zenodo-GitHub integration for releases. *(`via.citation`, now level 0, effort S)*
- [ ] State in the README which ePIC software working group owns epic-capybara and the maintainers' institutions. *(`via.support`, now level 1, effort S)*
- [ ] Recruit a co-developer from another ePIC institution (for example among the EICrecon or epic CI users) and label newcomer issues as `good first issue`. *(`com.contributors`, now level 1, effort M)*

## Medium priority

- [ ] Set `required_approving_review_count` to 1 in ruleset 5452494 so every PR needs a non-author approval. *(`eng.change-control`, now level 1, effort S)*
- [ ] Add a step to `.github/workflows/build.yml` that runs `hatch run cov` (pytest) on every PR and push to `main`. *(`eng.ci`, now level 1, effort S)*
- [ ] Raise `requires-python` to `>=3.10` and update the classifiers and `tool.hatch.envs.test.matrix` accordingly. *(`eng.modularity`, now level 1, effort S)*
- [ ] Rewrite the README install section to cover eic-shell, `pip install epic-capybara`, and from-source, and add a `capybara bara a.root b.root --serve` example with sample files. *(`doc.user`, now level 1, effort S)*
- [ ] Add `docs/architecture.md` describing the capy → bara → cate flow and the KS/Anderson-Darling tests, and add docstrings to the CLI commands. *(`doc.developer`, now level 1, effort S)*
- [ ] Add `CONTRIBUTING.md` covering eic-shell or Hatch setup, `hatch run cov`, commit-message conventions and the review process. *(`doc.contributing`, now level 1, effort S)*
- [ ] Close resolved issues (for example 22) and apply the existing `bug`/`enhancement` labels to all open issues. *(`com.responsiveness`, now level 1, effort S)*
- [ ] Add a "Maintainers and governance" section to the README naming the maintainers, the owning ePIC group, and the decision process. *(`com.governance`, now level 1, effort S)*
- [ ] Add `version("1.2.0", ...)` (and later releases) to the eic-spack `py-epic-capybara` recipe and require it in eic/containers `packages.yaml`. *(`dist.packaging`, now level 2, effort S)*
- [ ] State in the README that releases follow SemVer and tag a release at least every six months. *(`dist.releases`, now level 1, effort S)*
- [ ] Add tested minimum versions to every entry in `[project] dependencies` in `pyproject.toml`. *(`dist.dependencies`, now level 1, effort S)*
- [ ] Document the eic-shell version in which each release is tested and write the capybara version into the generated `index.html`. *(`dist.reproducibility`, now level 1, effort S)*
- [ ] Add a Python-version matrix (for example 3.10 and 3.13) with `actions/setup-python` to the build job in `build.yml`. *(`dist.portability`, now level 1, effort S)*
- [ ] Read the podio/EDM4eic version from the input file metadata, print it in the report, and warn when the two inputs differ. *(`eic.data-model`, now level 2, effort S)*
- [ ] Add a job to `build.yml` that installs and runs `capybara bara` inside eic-shell with `eic/run-cvmfs-osg-eic-shell`. *(`eic.environment`, now level 1, effort S)*
- [ ] Add an eic-shell nightly job (`platform-release` set to `eic_xl:nightly`) to `build.yml`. *(`eic.currency`, now level 2, effort S)*
- [ ] Add pytest tests for `bara` that compare two small ROOT files (for example from `scikit-hep-testdata`) and assert p-values and generated report files. *(`eng.testing`, now level 1, effort M)*

## Low priority

- [ ] Enable `--doctest-modules` for the `epic_capybara` package so `bara.py` doctests run. *(`eng.testing`, now level 1, effort S)*
- [ ] Add `SPDX-License-Identifier` MIT headers to all source files and state inbound = outbound licensing in a CONTRIBUTING file. *(`via.license`, now level 2, effort S)*
- [ ] Split `bara()` into separate functions for reading, statistical comparison and report rendering. *(`eng.modularity`, now level 1, effort M)*
