# Sustainability action plan: DD4hep

From the EIC Software Sustainability Review, pass `2026-10-12-2`, assessed at commit `78ca69c4b2cc`. Full assessment: https://eic.github.io/SoftwareSustainabilityReview/projects/dd4hep.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 in the `master` branch protection rule. *(`eng.change-control`, now level 1, effort S)*
- [ ] Document the tagging and release-notes procedure in `RELEASING.md` and have a second maintainer tag the next release. *(`com.bus-factor`, now level 2, effort S)*
- [ ] Add `CODE_OF_CONDUCT.md` (for example the CERN Code of Conduct or Contributor Covenant) with a reporting contact. *(`com.conduct`, now level 1, effort S)*
- [ ] State the version scheme (major.minor.patch mapped to `vXX-YY[-ZZ]` tags) and its compatibility meaning in `README.md`. *(`dist.releases`, now level 1, effort S)*
- [ ] Correct the license statement in `doc/usermanuals/DD4hep/chapters/basics.tex`. *(`via.license`, now level 1, effort S)*
- [ ] Add `.clang-format` and a PR job (or pre-commit.ci) that checks formatting of changed C++ lines. *(`eng.static-quality`, now level 1, effort M)*
- [ ] Re-import GaudiPluginService from current Gaudi (Apache-2.0) or obtain relicensing, and update `GaudiPluginService/LICENCE`. *(`via.license`, now level 1, effort M)*

## Medium priority

- [ ] Add `.github/CODEOWNERS` assigning each top-level package (DDCore, DDG4, DDDigi, DDRec, ...) to at least one reviewer. *(`eng.change-control`, now level 1, effort S)*
- [ ] Ask in the PR template that bug-fix and feature PRs add or update a ctest. *(`eng.testing`, now level 2, effort S)*
- [ ] List minimum versions for every optional dependency on the installation page, matching `find_package` in `CMakeLists.txt`. *(`doc.user`, now level 1, effort S)*
- [ ] Add `spack install dd4hep`, Key4hep and eic-shell routes to the installation page. *(`doc.user`, now level 1, effort S)*
- [ ] Extend `.github/CONTRIBUTING.md` with an LCG-view or Key4hep setup, the CMake build, `ctest`, and Python/C++ style rules. *(`doc.contributing`, now level 1, effort S)*
- [ ] Document the label scheme and triage practice in `.github/CONTRIBUTING.md`. *(`com.responsiveness`, now level 2, effort S)*
- [ ] Add `.github/CODEOWNERS` with two owners per top-level package. *(`com.bus-factor`, now level 2, effort S)*
- [ ] Add `GOVERNANCE.md` naming the maintainers, how decisions are made, and how contributors become maintainers. *(`com.governance`, now level 1, effort S)*
- [ ] Add minimum versions to `find_package` for LCIO, HepMC3, TBB, XercesC and G4HepEm in `CMakeLists.txt`. *(`dist.dependencies`, now level 1, effort S)*
- [ ] State in each release note the LCG and Key4hep stacks the release was tested in. *(`dist.reproducibility`, now level 2, effort S)*
- [ ] Check the EDM4hep schema version from the podio metadata in `EDM4hepFileReader.cpp` and warn on mismatch. *(`eic.data-model`, now level 2, effort S)*
- [ ] Replace `Hoption.h`/`Hparam.h` in `DDCore/src/graphics/DrawBField.cpp` with the public `THistPainter` interface. *(`eic.currency`, now level 2, effort S)*
- [ ] Re-enable the Zenodo-GitHub integration so each release gets a DOI, and update `.zenodo.json` creators. *(`via.citation`, now level 2, effort S)*
- [ ] Add `CITATION.cff` citing the software DOI and the reference publication. *(`via.citation`, now level 2, effort S)*
- [ ] State the current supporting institutions and the plan for maintainer succession in the README. *(`via.support`, now level 2, effort S)*
- [ ] Run `ctest` in `.github/workflows/mac.yml` with Geant4 enabled (see issue *(`eng.ci`, now level 2, effort M)*
- [ ] Add a gcov/lcov build job to `.github/workflows/linux.yml` and upload results to Codecov. *(`eng.testing`, now level 2, effort M)*
- [ ] Add an `ubuntu-24.04-arm` job and run `ctest` in the macOS job. *(`dist.portability`, now level 2, effort M)*
- [ ] (EIC side) Add a scheduled eic/containers or epic CI job that builds DD4hep `master` in `eic_ci:nightly` and runs the epic geometry checks. *(`eic.environment`, now level 2, effort M)*
- [ ] Replace the vendored TinyXML 2.5.2 with an external maintained parser (TinyXML2 or Xerces-C as default). *(`dist.dependencies`, now level 1, effort L)*

## Low priority

- [ ] Close or schedule the open issues older than one year, starting with *(`com.responsiveness`, now level 2, effort S)*
- [ ] (EIC side) Add a scheduled eic-shell job that builds DD4hep `master` and runs the epic geometry checks before each DD4hep release. *(`eic.currency`, now level 2, effort M)*
