# Sustainability action plan: G4OCCT

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

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

## High priority

- [ ] Add `CODE_OF_CONDUCT.md` (or link the ePIC collaboration code of conduct) with a reporting contact, and a "Getting help" README section pointing to Mattermost. *(`com.conduct`, now level 1, effort S)*
- [ ] Add `7.8` to `find_package(OpenCASCADE ...)` and minimum versions for ROOT and DD4hep, and mirror them in `G4OCCTConfig.cmake.in`. *(`dist.dependencies`, 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)*
- [ ] State the responsible ePIC working group and the maintainers' institutions and funding in the README. *(`via.support`, now level 1, effort S)*
- [ ] Recruit a second human reviewer and set `required_approving_review_count` to 1 in the "Default" ruleset. *(`eng.change-control`, now level 1, effort M)*
- [ ] Present G4OCCT at an ePIC simulation/geometry meeting and recruit co-developers from the groups adopting STEP geometry (e.g. the HCAL pilot in eic/epic#1140). *(`com.contributors`, now level 1, effort M)*
- [ ] Name a second maintainer with merge rights, add both to `.github/CODEOWNERS` and the eic-spack `maintainers(...)`, and have that person review PRs. *(`com.bus-factor`, now level 0, effort M)*

## Medium priority

- [ ] Add `.github/CODEOWNERS` naming at least two reviewers for `src/`, `include/` and `src/dd4hep/`. *(`eng.change-control`, now level 1, effort S)*
- [ ] Fix or quarantine the failing `TGeoOCCTSolid.*` tests under ASan so `main` passes, and add a `schedule:` trigger to `ci.yml` to detect nightly-stack breakage. *(`eng.ci`, now level 2, effort S)*
- [ ] Remove `|| true` from the clang-tidy-diff step in `ci.yml` so new clang-tidy findings on changed lines fail the PR. *(`eng.static-quality`, now level 2, effort S)*
- [ ] Extend the README Requirements table with ROOT, DD4hep, yaml-cpp and test dependencies, and add an "Installation" section covering eic-shell, eic-spack and `ghcr.io/eic/g4occt`. *(`doc.user`, now level 1, effort S)*
- [ ] Add `CONTRIBUTING.md` covering eic-shell setup, the `cmake`/`ctest` commands, pre-commit, and the PR and review process, linking to `AGENTS.md` for conventions. *(`doc.contributing`, now level 1, effort S)*
- [ ] Add `GOVERNANCE.md` (or a README section) naming the maintainers, the decision process, and the path to reviewer/maintainer. *(`com.governance`, now level 1, effort S)*
- [ ] Add `BUILD_ROOT_TGEO_SUPPORT=ON` (and a `root` dependency) for `+dd4hep` in the eic-spack recipe, then bump the eic/containers pin to 0.3.0. *(`dist.packaging`, now level 2, effort S)*
- [ ] Add a release workflow that bumps `project(VERSION)`, tags, and creates the GitHub release with a "Breaking changes" section, and add `CHANGELOG.md`. *(`dist.releases`, now level 2, effort S)*
- [ ] Document `docker run ghcr.io/eic/g4occt:<version>` and the eic-shell release each G4OCCT release was tested with in the README. *(`dist.reproducibility`, now level 1, effort S)*
- [ ] Add a Clang build-and-ctest job in eic_xl (`CXX=clang++`) and an `ubuntu-24.04-arm` ctest job. *(`dist.portability`, now level 1, effort S)*
- [ ] Add an "Using G4OCCT in eic-shell" README section (prebuilt package and from-source build). *(`eic.environment`, now level 1, effort S)*
- [ ] Resolve the LeakSanitizer reports in `TGeoOCCTSolid.MeshHooksProduceDrawableMesh`, `RootDrawingSmoke` and `TGeoOCCTSolidDD4hepEval.WrapsAsDD4hepSolid` under the current nightly. *(`eic.currency`, now level 2, effort S)*
- [ ] Add a CI job building and testing against Geant4 11.3 and OCCT 7.8 (e.g. from `.github/spack.yaml` with pinned versions). *(`eng.ci`, now level 2, effort M)*
- [ ] Land the HCAL pilot in eic/epic#1140 (or another epic subsystem) using `G4OCCT_STEPSolid`. *(`eic.reuse`, now level 2, effort M)*
- [ ] Merge a G4OCCT-based geometry path in eic/epic or add a detector_benchmarks job comparing a STEP-backed subsystem with its GDML/CSG version. *(`via.adoption`, now level 1, effort M)*

## Low priority

- [ ] Add a References section to `docs/solid_navigation.md` and `docs/low_level_optimization.md` citing the algorithms and OCCT/Geant4 documentation used. *(`doc.developer`, now level 2, effort S)*
- [ ] Label every new issue (bug/enhancement/question) and document the triage practice in `CONTRIBUTING.md`. *(`com.responsiveness`, now level 2, effort S)*
- [ ] Add a ctest that runs `step2dd4hep` on a fixture, loads the generated compact with DD4hep, and compares volumes with the fixture expectations. *(`eic.data-model`, now level 2, effort S)*
- [ ] Add an inbound=outbound statement to `CONTRIBUTING.md` and list the Geant4-licensed paths in `LICENSE.spdx` (or adopt REUSE with `REUSE.toml`). *(`via.license`, now level 2, effort S)*
- [ ] Replace the allocator-wide LSan suppressions with caller-scoped entries or explicit cleanup at test teardown. *(`eng.static-quality`, now level 2, effort M)*
