Overview /

EICrecon

github.com/eic/EICrecon reconstructioncore · pass 2026-10-12 · commit b67b442e26a3 · assessor claude-opus-5-5

The main risks are concentration of authorship (one author wrote 51.8% of commits in 24 months, no CODEOWNERS or maintainer list), a review rate just under 50% of merged PRs, and contradictory licensing (LGPL-3.0 file and headers versus a public-domain NOTICE.md, plus third-party code with an undetermined license). Established practices are a required-check, merge-queue CI in eic-shell (nightly and two stable releases) with sanitizer builds, full-chain simulation and reconstruction jobs, and capybara output comparisons, together with eic-spack packaging and inclusion in eic-shell at the latest release.

1.6overall, of 3

Action plan

The smallest steps that raise each criterion to its next level, in priority order. Download as Markdown ·

PriorityEffortCriterionAction
highS com.bus-factor (1) Add .github/CODEOWNERS naming at least two owners for each of src/algorithms/*, src/factories, src/services and .github/.
highS com.conduct (1) Add a CODE_OF_CONDUCT.md that links the ePIC code and gives a public reporting contact, and a README "Getting help" section linking the ePIC Mattermost reconstruction channel or the issue tracker.
highS com.governance (1) Add GOVERNANCE.md naming the maintainers by role, the owning ePIC working group, the decision process and the path to reviewer and maintainer.
highS eng.change-control (1) Keep the main ruleset's one-approval requirement active so that at least 50% (then 90%) of merged PRs carry a non-author review in the next 12-month window.
highS via.license (1) Replace NOTICE.md with a statement that the repository is LGPL-3.0-or-later and that contributions are accepted under it (inbound = outbound).
highS via.license (1) Determine the license of the STAR-derived src/algorithms/reco/Helix.*, record it in their SPDX headers, or replace the code.
mediumS com.contributors (1) Document in CONTRIBUTING.md how non-ePIC contributors can submit fork PRs that pass CI, and merge at least one such PR.
mediumS dist.dependencies (1) Add minimum versions to the find_package calls for Microsoft.GSL, nlohmann_json, Boost and cppzmq in CMakeLists.txt and the src/services/*/CMakeLists.txt files.
mediumS dist.releases (1) State in README.md that releases follow SemVer and define what bumps MAJOR (for example renamed or removed output collections).
mediumS doc.contributing (2) Label at least five current issues good first issue and add .github/ISSUE_TEMPLATE/ bug and feature templates.
mediumS doc.developer (1) Add docs/design/architecture.md with a component and data-flow diagram.
mediumS doc.user (1) Regenerate the dependency list in docs/get-started/manual-build.md from the *_VERSION_MIN values in CMakeLists.txt and remove the C++17 flags.
mediumS doc.user (1) Update or remove docs/howto/full_chain_simulation.md so the quick start uses npsim and eicrecon with a current input file.
mediumS eic.data-model (2) Re-enable the exception in JEventSourcePODIO.cc L139-L143 and add an EDM4eic/EDM4hep datamodel version check against the file metadata.
mediumS eic.reuse (1) Document in docs/design/tracking.md why SecondaryVerticesHelix is kept alongside the ACTS vertexer, or replace it with ACTS propagation and vertex fitting.
mediumS eng.modularity (2) Write docs/design/architecture.md describing the algorithms/factories/services/detectors layers and the data flow, and link it from docs/_sidebar.md.
mediumS eng.testing (1) Add a PR-template checkbox and review rule requiring a unit test for every new or changed algorithm.
mediumS via.support (2) State in README.md the owning ePIC working group, the maintaining institutions, and what happens when a maintainer leaves.
mediumM com.responsiveness (1) Review the 139 issues older than one year and close or label each, and apply a topic: label to every new issue at triage.
mediumM dist.portability (2) Add an ubuntu-24.04-arm build-and-ctest job in eic-shell to linux-eic-shell.yml.
mediumM dist.reproducibility (1) Write the EICrecon version and the full JANA parameter set (including the UniqueIDGenSvc seed) into a podio metadata frame in JEventProcessorPODIO::Finish.
mediumM eic.currency (2) Migrate the remaining deprecated Acts seeding calls and drop -Wno-error=deprecated-declarations from linux-eic-shell.yml.
mediumM eng.static-quality (2) Set WarningsAsErrors in .clang-tidy for the enabled check groups, or publish the clang-tidy warning count on main and drive it to zero.
mediumL doc.developer (1) Add Doxygen comments to every src/algorithms/*/*.h class and *Config.h member, and set WARN_IF_UNDOCUMENTED in the Doxyfile to track the remainder.
mediumL eng.testing (1) Add Catch2 tests in src/tests/algorithms_test/ for the untested algorithms in src/algorithms/reco and src/algorithms/tracking until each algorithm library reports coverage above 50%.
lowS doc.contributing (2) Add a "Build and test" section to CONTRIBUTING.md covering eic-shell, cmake and ctest --test-dir build.
lowS via.citation (2) Add CITATION.cff and .zenodo.json with the full contributor list and a preferred-citation entry for an EICrecon reference publication.
lowM eng.modularity (2) Install only headers of the algorithm interfaces and configs intended for downstream use, and mark the rest internal.
lowM eng.static-quality (2) Remove -Wno-error=deprecated-declarations from the CI matrix once the Acts deprecations are resolved.

Assessment by criterion

Code health & engineering practices 1.8

1

Change control & code review eng.change-control

Initial · confidence high

All first-parent commits arrive through PRs, but 49.2% of merged human PRs in 12 months had a review from someone other than the author, below the 50% needed for level 2.

Evidence (6)

Gaps to the next level

  • Fewer than 50% of merged PRs in 12 months were reviewed by a non-author; the ruleset requiring one approval exists only since 2026-09-15.
  • No CODEOWNERS file.

Actions

  • high S Keep the main ruleset's one-approval requirement active so that at least 50% (then 90%) of merged PRs carry a non-author review in the next 12-month window.
3

Continuous integration eng.ci

Sustained · confidence high

linux-eic-shell.yml builds and runs ctest on every PR, merge-queue entry and push to main in eic-shell (GCC and Clang, nightly and two stable releases), required status checks gate the merge queue, full simulation-plus-reconstruction jobs and an eic_container trigger provide integration checks, and 92% of default-branch runs succeed.

Evidence (7)
1

Testing eng.testing

Initial · confidence medium

Catch2 unit tests exist for 22 of about 87 algorithm sources, and the per-library coverage posted by CI ranges from 2.9% (reco) to 66.7% (pid_lut), so unit tests cover a minority of algorithms; end-to-end reconstruction jobs and capybara comparisons against the base-branch output do run in CI.

Evidence (6)

Gaps to the next level

  • Unit tests cover a minority of algorithms (coverage below 30% in 6 of 9 algorithm libraries, 2.9% in reco).
  • Only 14.5% of merged PRs touch test files.
  • tracking_test, track_propagation_test and geometry_navigation_test are not added in src/tests/CMakeLists.txt.

Actions

  • medium L Add Catch2 tests in src/tests/algorithms_test/ for the untested algorithms in src/algorithms/reco and src/algorithms/tracking until each algorithm library reports coverage above 50%.
  • medium S Add a PR-template checkbox and review rule requiring a unit test for every new or changed algorithm.
2

Static analysis & consistency eng.static-quality

Established · confidence high

clang-format, codespell and cmake-lint run through pre-commit.ci, clang-tidy and IWYU run on changed files in every PR, ASan/UBSan/TSan builds run in CI, and builds use -Werror -Wall -Wextra; clang-tidy findings are advisory and deprecation warnings are exempted from -Werror.

Evidence (4)

Gaps to the next level

  • .clang-tidy sets no WarningsAsErrors, so clang-tidy findings neither fail CI nor are tracked to zero.
  • -Wno-error=deprecated-declarations is applied repository-wide in the CI matrix.

Actions

  • medium M Set WarningsAsErrors in .clang-tidy for the enabled check groups, or publish the clang-tidy warning count on main and drive it to zero.
  • low M Remove -Wno-error=deprecated-declarations from the CI matrix once the Acts deprecations are resolved.
2

Architecture & language standards eng.modularity

Established · confidence medium

Code is split into algorithms, factories, services and detector plugins built with CMake (C++20) and exported via EICreconTargets and EICreconConfig.cmake, with parameters exposed through JANA -P options; every header is installed with no public/internal split and there is no architecture overview.

Evidence (5)

Gaps to the next level

  • All headers are installed (cmake/jana_plugin.cmake L168-L171); no public API is separated from internals.
  • No architecture overview of the plugin, factory and algorithm layers.
  • Detector calibration defaults are compiled into src/detectors/* plugins.

Actions

  • medium S Write docs/design/architecture.md describing the algorithms/factories/services/detectors layers and the data flow, and link it from docs/_sidebar.md.
  • low M Install only headers of the algorithm interfaces and configs intended for downstream use, and mark the rest internal.

Documentation & usability 1.3

1

User onboarding doc.user

Initial · confidence high

README and the hosted docs give the eic-shell build route and a tutorial that runs eicrecon on a sample file, and flags are listed on the site, but the from-source instructions list stale versions that contradict the build (JANA v2.0.7, ACTS v19.9.0, -DCMAKE_CXX_STANDARD=17 against the C++20 minimum).

Evidence (6)

Gaps to the next level

  • docs/get-started/manual-build.md dependency versions do not match the minimums in CMakeLists.txt and omit algorithms, onnxruntime, FastJet and IRT2.
  • docs/howto/full_chain_simulation.md still refers to athena.xml and Juggler.

Actions

  • medium S Regenerate the dependency list in docs/get-started/manual-build.md from the *_VERSION_MIN values in CMakeLists.txt and remove the C++17 flags.
  • medium S Update or remove docs/howto/full_chain_simulation.md so the quick start uses npsim and eicrecon with a current input file.
1

Developer & API documentation doc.developer

Initial · confidence medium

Doxygen is generated and published from main to the docs site, and design pages cover tracking, logging and CMake, but 42 of 169 algorithm headers carry Doxygen-style comments and there is no architecture overview.

Evidence (4)

Gaps to the next level

  • Most public algorithm headers have no Doxygen comments on classes, configs or methods.
  • No architecture overview page.

Actions

  • medium L Add Doxygen comments to every src/algorithms/*/*.h class and *Config.h member, and set WARN_IF_UNDOCUMENTED in the Doxyfile to track the remainder.
  • medium S Add docs/design/architecture.md with a component and data-flow diagram.
2

Contribution guidelines doc.contributing

Established · confidence medium

CONTRIBUTING.md covers the PR process, review criteria and coding conventions, the tutorials and AGENTS.md cover eic-shell setup, building and ctest, a PR template and a devcontainer exist; newcomer issues have not been labeled or closed since 2024 and there are no issue templates.

Evidence (5)

Gaps to the next level

  • The two open good first issue issues (#400,
  • CONTRIBUTING.md does not itself describe build and ctest steps; no issue templates.
  • docs/tutorial/04-contributing.md links GitHub Discussions, which are disabled.

Actions

  • medium S Label at least five current issues good first issue and add .github/ISSUE_TEMPLATE/ bug and feature templates.
  • low S Add a "Build and test" section to CONTRIBUTING.md covering eic-shell, cmake and ctest --test-dir build.

Community & governance 1.0

1

Issue & PR responsiveness com.responsiveness

Initial · confidence high

Median first response is 5.1 days, but 139 of 197 open issues are older than one year and 4.8% of new issues are labeled.

Evidence (5)
  • issues.median_first_response_days_12m = 5.11
  • issues.open_older_365d = 139
  • issues.open_total = 197
  • issues.labeled_fraction_12m = 0.048
  • issues.unanswered_fraction_12m = 0.352

Gaps to the next level

  • More than half of open issues (70.6%) are older than one year.
  • Most new issues are not labeled or otherwise triaged.

Actions

  • medium M Review the 139 issues older than one year and close or label each, and apply a topic: label to every new issue at triage.
1

Contributor base com.contributors

Initial · confidence medium

34 authors from 10 e-mail domains committed in 24 months with 10 new authors in 12 months, but no merged PR in 12 months came from outside the eic organization membership, and the four fork PRs merged in 24 months were by members.

Evidence (5)

Gaps to the next level

  • No PRs from contributors outside the maintainer organization were merged in 12 months.

Actions

  • medium S Document in CONTRIBUTING.md how non-ePIC contributors can submit fork PRs that pass CI, and merge at least one such PR.
1

Knowledge concentration (bus factor) com.bus-factor

Initial · confidence high

One author wrote 51.8% of commits in 24 months; review and merging are spread across 24 reviewers and 23 mergers, but no CODEOWNERS or maintainer list names owners.

Evidence (5)
  • git.bus_factor_50_24m = 1
  • git.top_author_share_24m = 0.518
  • prs.distinct_reviewers_12m = 24
  • prs.distinct_mergers_12m = 23
  • releases.authors_24m = 2

Gaps to the next level

  • Bus factor (50%) is 1.
  • No CODEOWNERS or maintainer list.

Actions

  • high S Add .github/CODEOWNERS naming at least two owners for each of src/algorithms/*, src/factories, src/services and .github/.
1

Governance & roadmap com.governance

Initial · confidence medium

CONTRIBUTING.md assigns review to an ePIC software review team and asks contributors to consult the reconstruction and simulation working groups, and decisions are visible in PRs; no maintainers are named, there is no maintainer path, and milestones stopped in 2024.

Evidence (2)

Gaps to the next level

  • No document naming maintainers, who decides, or how to become a reviewer or maintainer.
  • Milestones last used in 2024; no public roadmap.

Actions

  • high S Add GOVERNANCE.md naming the maintainers by role, the owning ePIC working group, the decision process and the path to reviewer and maintainer.
1

Code of conduct & user support com.conduct

Initial · confidence medium

CONTRIBUTING.md links the ePIC code of conduct and a review-team contact, but the public code of conduct page names no reporting contact, and GitHub Discussions, linked from the tutorial, are disabled.

Evidence (3)

Gaps to the next level

  • The linked code of conduct has no public reporting contact.
  • No "Getting help" section naming a user support channel.

Actions

  • high S Add a CODE_OF_CONDUCT.md that links the ePIC code and gives a public reporting contact, and a README "Getting help" section linking the ePIC Mattermost reconstruction channel or the issue tracker.

Infrastructure & distribution 1.6

3

Packaging & installability dist.packaging

Sustained · confidence high

eic-spack carries a recipe that provides the latest release 1.42.0, and eic-shell ships that version.

Evidence (4)
  • packaging.eic_spack.versions = [main, 1.42.0, 1.41.0, 1.40.1, 1.40.0]
  • packaging.in_eic_shell = true
  • packaging.eic_shell_version = 1.42.0
  • packaging.latest_release_packaged = true
1

Releases & versioning dist.releases

Initial · confidence high

43 releases in 24 months all have generated notes grouped by topic, but no version scheme is documented and there is no changelog, deprecation policy or release workflow.

Evidence (4)

Gaps to the next level

  • The version scheme (vMAJOR.MINOR.PATCH tags) is not documented.
  • Release notes do not flag breaking changes or give migration notes.

Actions

  • medium S State in README.md that releases follow SemVer and define what bumps MAJOR (for example renamed or removed output collections).
1

Dependency management & supply chain dist.dependencies

Initial · confidence medium

Most dependencies are declared with minimum versions in CMakeLists.txt, but Microsoft.GSL, nlohmann_json, Boost and cppzmq are found without version constraints; Dependabot covers GitHub Actions only, 37 uses: refs point to @main, and there is no SECURITY.md.

Evidence (6)

Gaps to the next level

  • Microsoft.GSL, nlohmann_json, Boost and cppzmq have no minimum version.

Actions

  • medium S Add minimum versions to the find_package calls for Microsoft.GSL, nlohmann_json, Boost and cppzmq in CMakeLists.txt and the src/services/*/CMakeLists.txt files.
1

Reproducibility & environments dist.reproducibility

Initial · confidence medium

The environment is machine-readable (eic-shell images, devcontainer on eic_ci:nightly) and its use is documented, but output files do not record the EICrecon version, parameter set or random seed.

Evidence (4)

Gaps to the next level

  • The podio writer stores no EICrecon version, configuration parameters or seed in the output metadata.

Actions

  • medium M Write the EICrecon version and the full JANA parameter set (including the UniqueIDGenSvc seed) into a podio metadata frame in JEventProcessorPODIO::Finish.
2

Portability & heterogeneous computing dist.portability

Established · confidence high

CI builds and tests with GCC and Clang on Linux x86_64 and there are no site-specific paths; no aarch64 or macOS job exists and accelerator use is not documented.

Evidence (3)

Gaps to the next level

  • No CI job on a second architecture (aarch64) or OS.
  • HTC/OSG usage and accelerator support (or why not) are not documented.

Actions

  • medium M Add an ubuntu-24.04-arm build-and-ctest job in eic-shell to linux-eic-shell.yml.

EIC ecosystem integration 2.0

1

Reuse of EIC-supported components eic.reuse

Initial · confidence medium

EICrecon builds on JANA2, algorithms, podio, EDM4eic, DD4hep and ACTS, but a 600-line helix propagation and pairing code derived from STAR (Helix.cc) runs secondary vertexing in parallel to the ACTS-based SecondaryVertexFinder without documented justification.

Evidence (3)

Gaps to the next level

  • Helix-based secondary vertexing reimplements track propagation and vertexing available in ACTS, with no documented reason.

Actions

  • medium S Document in docs/design/tracking.md why SecondaryVerticesHelix is kept alongside the ACTS vertexer, or replace it with ACTS propagation and vertex fitting.
2

Data formats & interoperability eic.data-model

Established · confidence high

Inputs are EDM4hep and outputs EDM4eic podio files, a two-stage CI job re-reads EICrecon output, and CI reads outputs with uproot; the podio file-version check is logged but its failure is commented out.

Evidence (3)

Gaps to the next level

  • The version mismatch check in JEventSourcePODIO.cc does not throw (FIXME), and no EDM4eic version check on read.

Actions

  • medium S Re-enable the exception in JEventSourcePODIO.cc L139-L143 and add an EDM4eic/EDM4hep datamodel version check against the file metadata.
2

Currency with the EIC stack eic.currency

Established · confidence high

Minimum versions (Acts 44, podio 1.3, EDM4eic 8.7, DD4hep 1.21) are satisfied by current eic-shell (Acts 46.8.1, podio 1.8, EDM4eic 8.10.0) and nightly CI passes, but Acts deprecation warnings are exempted from -Werror, so deprecated APIs remain in use.

Evidence (3)

Gaps to the next level

  • Code uses Acts APIs deprecated in Acts v46.

Actions

  • medium M Migrate the remaining deprecated Acts seeding calls and drop -Wno-error=deprecated-declarations from linux-eic-shell.yml.

Impact & long-term viability 2.0

1

Licensing via.license

Initial · confidence high

GitHub detects LGPL-3.0 and 374 files carry LGPL-3.0-or-later SPDX headers, but NOTICE.md declares the repository public domain except where a LICENSE.md exists (only src/algorithms), and STAR-derived Helix.h/.cc have license "TBD".

Evidence (3)

Gaps to the next level

  • NOTICE.md (public domain) contradicts LICENSE.LGPL3 and the SPDX headers.
  • Third-party STAR code is included without a recorded license.

Actions

  • high S Replace NOTICE.md with a statement that the repository is LGPL-3.0-or-later and that contributions are accepted under it (inbound = outbound).
  • high S Determine the license of the STAR-derived src/algorithms/reco/Helix.*, record it in their SPDX headers, or replace the code.
2

Citation & attribution via.citation

Established · confidence high

The Zenodo-GitHub integration issues a DOI per release under concept DOI 10.5281/zenodo.7942531 with a 27-creator list; there is no CITATION.cff and no reference publication.

Evidence (4)

Gaps to the next level

  • No reference publication or software paper is cited.
  • The Zenodo record credits 27 creators against 65 git authors; no .zenodo.json or CITATION.cff curates the list.

Actions

  • low S Add CITATION.cff and .zenodo.json with the full contributor list and a preferred-citation entry for an EICrecon reference publication.
2

Institutional backing & continuity via.support

Established · confidence medium

CONTRIBUTING.md places development under the ePIC reconstruction and simulation working groups and the ePIC software review team; there is no documented multi-institution maintenance commitment or succession plan.

Evidence (2)

Gaps to the next level

  • No documented multi-institution maintenance commitment or succession plan.

Actions

  • medium S State in README.md the owning ePIC working group, the maintaining institutions, and what happens when a maintainer leaves.

Key metrics

Collected automatically at the assessed commit. People are counted, never named. Full data: metrics.json.

Commits, 12 months256git.commits_12m
Active authors, 12 months29git.authors_12m
Active authors, 24 months34git.authors_24m
New authors, 12 months10git.new_authors_12m
Bus factor (50% of commits, 24 months)1git.bus_factor_50_24m
Top author share of commits, 24 months52%git.top_author_share_24m
Institutional e-mail domains, 24 months10git.email_domains_24m
Default-branch changes via PR, 12 months100%git.first_parent_pr_fraction_12m
PRs merged, 12 months567prs.merged_12m
Merged PRs reviewed by non-author49%prs.reviewed_fraction_12m
Median days to merge15%prs.median_days_to_merge_12m
Merged PRs touching tests14%prs.test_touching_fraction_12m
Distinct reviewers, 12 months24prs.distinct_reviewers_12m
Issues opened, 12 months105issues.created_12m
Median days to first response5.1issues.median_first_response_days_12m
Issues without response35%issues.unanswered_fraction_12m
Open issues older than 1 year139issues.open_older_365d
Releases, 24 months43releases.count_24m
Latest releasev1.42.0releases.latest_tag
Default-branch CI success rate92%ci.default_branch_success_rate
CI runs in eic-shellyesci.uses_eic_shell
License (SPDX)LGPL-3.0repo.license_spdx
Ships in eic-shellyespackaging.in_eic_shell
eic-shell version1.42.0packaging.eic_shell_version
Source lines (excluding vendored)54632code.source_lines
Test files34code.test_files