Overview /

algorithms

github.com/eic/algorithms reconstructioncore · pass 2026-10-12 · commit 77a1ddb499c7 · assessor claude-opus-5-5

One author wrote all non-bot commits in 24 months, there are no tests, and the README has no build or usage instructions, no contribution guide, no code of conduct, and no citation metadata. The library ships in eic-shell at its latest release (2.0.0), is required by EICrecon through an exported CMake package config, and is built with GCC and Clang in eic-shell on every PR and nightly, with those builds required by a ruleset.

1.3overall, 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 with two maintainers and have the second maintainer author and merge changes.
highS com.conduct (1) Add CODE_OF_CONDUCT.md (or link the ePIC collaboration code of conduct) with a reporting contact, preferably in the eic/.github organization repository.
highS doc.user (0) Add README sections for using the eic-shell build, building from source with CMake (DD4hep, EDM4hep, EDM4eic, fmt, Microsoft GSL with versions), and a minimal Algorithm<Input<...>, Output<...>> example.
highS via.citation (0) Add CITATION.cff with the author list and enable the Zenodo-GitHub integration for release DOIs.
highS via.support (1) State in the README the ePIC working group that owns the library and the maintainers' institutions.
highM com.contributors (0) Recruit a second developer (for example from the EICrecon maintainer group) to own a component such as RandomSvc or GeoSvc and land PRs.
highM eng.testing (0) Move the checks in core/src/dummy.cpp into Catch2 unit tests under core/tests/ registered with ctest, and run them in CI.
mediumS com.governance (1) Add a "Maintainers and governance" README section naming the maintainers, the owning ePIC body, and how decisions are made.
mediumS com.responsiveness (1) Respond to and resolve or label issue
mediumS dist.dependencies (1) Add VERSION minimums to every find_package, make Microsoft.GSL REQUIRED, and drop EDM4hep/EDM4eic if unused.
mediumS dist.dependencies (1) Add find_dependency calls for all public link dependencies in cmake/algorithmsConfig.cmake.in and remove the Acts block.
mediumS dist.portability (1) Run the unit tests with ctest in both the g++ and clang++ matrix jobs.
mediumS dist.releases (1) State SemVer in the README and set version_number to the tag version in each release commit.
mediumS dist.reproducibility (1) Document in the README the eic-shell release each algorithms release was built and tested with.
mediumS doc.contributing (1) Add CONTRIBUTING.md covering eic-shell setup, CMake build, running tests, clang-format, and the PR/review process.
mediumS doc.developer (1) Add a Doxyfile for core/include and convert header comments to Doxygen form.
mediumS doc.developer (1) Write docs/architecture.md covering services, properties, and the algorithm interface.
mediumS eic.environment (1) Document the eic-shell build in the README and add a matrix entry for a pinned stable eic_xl release next to nightly.
mediumS eng.change-control (2) Remove the admin bypass from the "Default" ruleset so every PR, including maintainer and Dependabot PRs, needs one approval.
mediumS eng.change-control (2) Add .github/CODEOWNERS naming at least two reviewers for core/ and cmake/.
mediumS eng.ci (1) Add a ctest --test-dir build --output-on-failure step to .github/workflows/linux-eic-shell.yml once unit tests exist.
mediumS eng.modularity (2) Add docs/architecture.md describing the service lifecycle, AlgorithmSvc, and how EICrecon/JANA2 binds GeoSvc, RandomSvc, and LogSvc.
mediumS eng.static-quality (1) Add .pre-commit-config.yaml with the clang-format hook and enable pre-commit.ci (or a clang-format check job).
mediumS eng.static-quality (1) Add a CI job that configures with -DENABLE_CLANG_TIDY=ON in eic-shell.
lowS eic.currency (2) Remove -Wno-error=deprecated-declarations so the nightly eic-shell job fails on deprecated APIs.
lowS eic.data-model (2) Either use EDM4eic types in the public interface with a checked minimum version, or remove the EDM dependencies and document that the library is data-model agnostic.
lowS eng.ci (1) Delete the obsolete .gitlab-ci.yml.
lowS eng.modularity (2) Remove core/src/dummy.cpp from the library sources once its checks move to tests.
lowS via.license (2) Add SPDX headers to the four files, fix PackageName in LICENSE.spdx, and add the REUSE lint to CI.

Assessment by criterion

Code health & engineering practices 1.2

2

Change control & code review eng.change-control

Established · confidence medium

9 of 10 first-parent commits came from PRs and 5 of 8 PRs merged in 12 months (6 bot-authored) were approved by a person other than the author; the metric counts only the one non-bot PR (#25), which was self-merged without review. The ruleset requiring one approval is bypassed by admins (#25, #28, #30 merged unapproved; b54ac87 pushed directly), and there is no CODEOWNERS.

Evidence (8)

Gaps to the next level

  • Fewer than 90% of merged PRs are reviewed by someone other than the author; admins bypass the required-approval ruleset.
  • No CODEOWNERS file.

Actions

  • medium S Remove the admin bypass from the "Default" ruleset so every PR, including maintainer and Dependabot PRs, needs one approval.
  • medium S Add .github/CODEOWNERS naming at least two reviewers for core/ and cmake/.
1

Continuous integration eng.ci

Initial · confidence high

The GitHub workflow builds and installs in eic-shell for GCC and Clang on every PR, push, and nightly, and these builds are required status checks, but it runs no tests because none exist.

Evidence (3)

Gaps to the next level

  • CI does not run any test suite (ctest is never invoked).
  • The legacy .gitlab-ci.yml targets the retired eicweb Juggler pipeline and C++17, which the project no longer builds with.

Actions

  • medium S Add a ctest --test-dir build --output-on-failure step to .github/workflows/linux-eic-shell.yml once unit tests exist.
  • low S Delete the obsolete .gitlab-ci.yml.
0

Testing eng.testing

Absent · confidence high

There are no test files and testing is a commented-out TODO; core/src/dummy.cpp contains property and logger checks that are compiled into the library but never executed.

Evidence (3)

Gaps to the next level

  • No unit tests for Property, LoggerMixin, ServiceSvc, AlgorithmSvc, RandomSvc, or GeoSvc.

Actions

  • high M Move the checks in core/src/dummy.cpp into Catch2 unit tests under core/tests/ registered with ctest, and run them in CI.
1

Static analysis & consistency eng.static-quality

Initial · confidence high

.clang-format and .clang-tidy are present and CI builds with -Werror -Wall -Wextra, but neither formatting nor clang-tidy is checked on PRs (clang-tidy runs only in the stale GitLab pipeline and is off by default in CMake).

Evidence (4)

Gaps to the next level

  • No formatter or linter is enforced on PRs.

Actions

  • medium S Add .pre-commit-config.yaml with the clang-format hook and enable pre-commit.ci (or a clang-format check job).
  • medium S Add a CI job that configures with -DENABLE_CLANG_TIDY=ON in eic-shell.
2

Architecture & language standards eng.modularity

Established · confidence medium

A C++20 CMake library with small headers, configuration through Property members, internals in detail/, install targets, and an exported algorithmsConfig.cmake consumed by EICrecon. The architecture description is a class summary in the README, and test scaffolding (dummy.cpp) is compiled into the installed library.

Evidence (4)

Gaps to the next level

  • No architecture document explaining how a host framework provides services and drives algorithms.
  • core/src/dummy.cpp (test code printing to stdout) is built into the shipped libalgocore.

Actions

  • medium S Add docs/architecture.md describing the service lifecycle, AlgorithmSvc, and how EICrecon/JANA2 binds GeoSvc, RandomSvc, and LogSvc.
  • low S Remove core/src/dummy.cpp from the library sources once its checks move to tests.

Documentation & usability 0.7

0

User onboarding doc.user

Absent · confidence high

The README is a class summary with no installation, dependency, build, or usage instructions, and the homepage named in the eic-spack recipe (https://eic.github.io/algorithms) returns 404.

Evidence (2)

Gaps to the next level

  • No install instructions, dependency list, or runnable example of writing an algorithm.

Actions

  • high S Add README sections for using the eic-shell build, building from source with CMake (DD4hep, EDM4hep, EDM4eic, fmt, Microsoft GSL with versions), and a minimal Algorithm<Input<...>, Output<...>> example.
1

Developer & API documentation doc.developer

Initial · confidence high

Public headers carry plain // comments describing classes and most methods, but no API reference is generated or published (the GitLab pages job references a nonexistent doc/Doxyfile), and there is no architecture overview beyond the README class summary.

Evidence (4)

Gaps to the next level

  • No generated API documentation and no architecture overview.

Actions

  • medium S Add a Doxyfile for core/include and convert header comments to Doxygen form.
  • medium S Write docs/architecture.md covering services, properties, and the algorithm interface.
1

Contribution guidelines doc.contributing

Initial · confidence high

Only the eic organization PR and issue templates apply; there is no CONTRIBUTING file in the repository or the organization describing setup, build, tests, or conventions.

Evidence (3)

Gaps to the next level

  • No CONTRIBUTING describing eic-shell setup, build, tests, and coding conventions.

Actions

  • medium S Add CONTRIBUTING.md covering eic-shell setup, CMake build, running tests, clang-format, and the PR/review process.

Community & governance 0.8

1

Issue & PR responsiveness com.responsiveness

Initial · confidence low

No issues were opened in 12 months; the single open issue (#24, opened 2025-05-01) is older than one year with no response.

Evidence (3)

Gaps to the next level

  • All open issues are older than one year and unanswered; no labels are used.

Actions

  • medium S Respond to and resolve or label issue
0

Contributor base com.contributors

Absent · confidence high

One non-bot author made all commits in 24 months; other changes came from Dependabot and the Copilot coding agent.

Evidence (3)
  • git.authors_24m = 1
  • git.new_authors_12m = 0
  • prs.external_fraction_12m = 0.0

Gaps to the next level

  • At most one active human author in 24 months.

Actions

  • high M Recruit a second developer (for example from the EICrecon maintainer group) to own a component such as RandomSvc or GeoSvc and land PRs.
1

Knowledge concentration (bus factor) com.bus-factor

Initial · confidence high

The top author wrote 100% of non-bot commits in 24 months and made every release, but a second person approved PRs #26, #27, #29, #31, and #32.

Evidence (4)

Gaps to the next level

  • Bus factor of 1; no CODEOWNERS or maintainer list in the repository.

Actions

  • high S Add .github/CODEOWNERS with two maintainers and have the second maintainer author and merge changes.
1

Governance & roadmap com.governance

Initial · confidence medium

Original authors are identifiable from copyright headers and LICENSE.spdx, and decisions are visible in PRs, but there is no documented decision process, maintainer path, or roadmap.

Evidence (3)

Gaps to the next level

  • No documented governance (who decides, how to become a maintainer).

Actions

  • medium S Add a "Maintainers and governance" README section naming the maintainers, the owning ePIC body, and how decisions are made.
1

Code of conduct & user support com.conduct

Initial · confidence high

The eic organization issue template links the ePIC Mattermost and weekly software meetings as support channels, but no code of conduct applies in the repository or organization.

Evidence (2)

Gaps to the next level

  • No code of conduct with a reporting contact.

Actions

  • high S Add CODE_OF_CONDUCT.md (or link the ePIC collaboration code of conduct) with a reporting contact, preferably in the eic/.github organization repository.

Infrastructure & distribution 1.4

3

Packaging & installability dist.packaging

Sustained · confidence high

The eic-spack recipe provides the latest release 2.0.0 (added 2026-06-15, about one month after the 2026-05-12 release), and eic-shell ships 2.0.0.

Evidence (4)
  • packaging.eic_spack.versions = ["main", "master", "2.0.0", "1.3.0", "1.2.0"]
  • packaging.in_eic_shell = true
  • packaging.eic_shell_version = 2.0.0
  • packaging.latest_release_packaged = true
1

Releases & versioning dist.releases

Initial · confidence high

Five releases in 24 months (at least two per year) have generated release notes, but no version scheme is documented and version_number still reads 1.0.0 at v2.0.0, so the installed library and CMake package report version 1.0.0.

Evidence (4)

Gaps to the next level

  • No documented version scheme; the in-tree version is not updated at release.

Actions

  • medium S State SemVer in the README and set version_number to the tag version in each release commit.
1

Dependency management & supply chain dist.dependencies

Initial · confidence high

Dependencies are declared in CMake, but only EDM4hep has a minimum version, Microsoft GSL is found without REQUIRED yet linked unconditionally, EDM4hep/EDM4eic are linked but unused in the code, and the package config re-finds only fmt (and a removed Acts component). Dependabot covers GitHub Actions, but actions are not SHA-pinned and run-cvmfs-osg-eic-shell@main floats.

Evidence (4)

Gaps to the next level

  • Minimum versions missing for DD4hep, EDM4eic, fmt, and Microsoft GSL; unused EDM4hep/EDM4eic dependencies remain.
  • algorithmsConfig.cmake does not find_dependency the public link dependencies DD4hep, EDM4hep, EDM4eic, and GSL.

Actions

  • medium S Add VERSION minimums to every find_package, make Microsoft.GSL REQUIRED, and drop EDM4hep/EDM4eic if unused.
  • medium S Add find_dependency calls for all public link dependencies in cmake/algorithmsConfig.cmake.in and remove the Acts block.
1

Reproducibility & environments dist.reproducibility

Initial · confidence medium

The only environment specification is the unpinned eic_xl:nightly image in the CI workflow, and building or running in it is not documented; RandomSvc accepts a seed property.

Evidence (2)

Gaps to the next level

  • No documented environment (eic-shell version) for development or releases.

Actions

  • medium S Document in the README the eic-shell release each algorithms release was built and tested with.
1

Portability & heterogeneous computing dist.portability

Initial · confidence medium

CI builds with GCC and Clang on Linux x86_64 with no site-specific paths, but no tests run on either configuration, so the two-toolchain condition is met for builds only.

Evidence (3)

Gaps to the next level

  • No tests run on the GCC and Clang builds.

Actions

  • medium S Run the unit tests with ctest in both the g++ and clang++ matrix jobs.

EIC ecosystem integration 2.0

3

Reuse of EIC-supported components eic.reuse

Sustained · confidence high

The geometry service wraps DD4hep rather than reimplementing it, and the library is itself an EIC-supported component that EICrecon requires and builds its algorithms on.

Evidence (4)
2

Data formats & interoperability eic.data-model

Established · confidence low

The library performs no event I/O; its only data input is DD4hep compact XML loaded by GeoSvc in standalone mode, and it declares no data-model version check or round-trip test.

Evidence (2)

Gaps to the next level

  • No declared or checked EDM4hep/EDM4eic version despite linking both.

Actions

  • low S Either use EDM4eic types in the public interface with a checked minimum version, or remove the EDM dependencies and document that the library is data-model agnostic.
1

EIC environment compatibility eic.environment

Initial · confidence high

CI builds in the eic_xl:nightly image via eic/run-cvmfs-osg-eic-shell, but building or using the library in eic-shell is not documented and no pinned stable release is tested.

Evidence (2)

Gaps to the next level

  • eic-shell usage is not documented; only the nightly image is tested.

Actions

  • medium S Document the eic-shell build in the README and add a matrix entry for a pinned stable eic_xl release next to nightly.
2

Currency with the EIC stack eic.currency

Established · confidence medium

The nightly eic-shell build passes without compiler deprecation warnings and eic-shell ships the latest release, but support for EDM4hep 1.0 (released 2026-01-20) landed only on 2026-04-07, and -Wno-error=deprecated-declarations keeps deprecations non-fatal.

Evidence (3)

Gaps to the next level

  • Adaptation to the EDM4hep 1.0 release took about 11 weeks, longer than one eic-shell release cycle.

Actions

  • low S Remove -Wno-error=deprecated-declarations so the nightly eic-shell job fails on deprecated APIs.

Impact & long-term viability 1.5

2

Licensing via.license

Established · confidence high

LGPL-3.0 is detected, LICENSE.spdx declares LGPL-3.0-or-later, and dependencies (DD4hep LGPL, EDM4hep Apache-2.0, fmt and GSL MIT) are compatible. Four source files lack SPDX headers, LICENSE.spdx names the package "Juggler", and no contribution terms are documented.

Evidence (3)

Gaps to the next level

  • SPDX headers missing in random.h, detail/random.h, detail/upcast.h, and src/random.cpp; no inbound=outbound or DCO statement.

Actions

  • low S Add SPDX headers to the four files, fix PackageName in LICENSE.spdx, and add the REUSE lint to CI.
0

Citation & attribution via.citation

Absent · confidence high

There is no CITATION.cff, Zenodo metadata, DOI, or citation request.

Gaps to the next level

  • No citation information of any kind.

Actions

  • high S Add CITATION.cff with the author list and enable the Zenodo-GitHub integration for release DOIs.
3

Adoption & downstream use via.adoption

Sustained · confidence high

EICrecon, the ePIC reconstruction framework, requires the library and builds its algorithms on it, and it ships in eic-shell.

Evidence (3)
1

Institutional backing & continuity via.support

Initial · confidence medium

The repository is in the eic organization and its authors are identifiable, but no owning ePIC body, institutional commitment, or funding is stated, and one person does all maintenance.

Evidence (2)

Gaps to the next level

  • No stated maintenance responsibility within the EIC or ePIC structure.

Actions

  • high S State in the README the ePIC working group that owns the library and the maintainers' institutions.

Key metrics

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

Commits, 12 months3git.commits_12m
Active authors, 12 months1git.authors_12m
Active authors, 24 months1git.authors_24m
New authors, 12 months0git.new_authors_12m
Bus factor (50% of commits, 24 months)1git.bus_factor_50_24m
Top author share of commits, 24 months100%git.top_author_share_24m
Institutional e-mail domains, 24 months0git.email_domains_24m
Default-branch changes via PR, 12 months90%git.first_parent_pr_fraction_12m
PRs merged, 12 months1prs.merged_12m
Merged PRs reviewed by non-author0%prs.reviewed_fraction_12m
Median days to merge0%prs.median_days_to_merge_12m
Merged PRs touching tests0%prs.test_touching_fraction_12m
Distinct reviewers, 12 months0prs.distinct_reviewers_12m
Issues opened, 12 months0issues.created_12m
Median days to first response–issues.median_first_response_days_12m
Issues without response–issues.unanswered_fraction_12m
Open issues older than 1 year1issues.open_older_365d
Releases, 24 months5releases.count_24m
Latest releasev2.0.0releases.latest_tag
Default-branch CI success rate100%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 version2.0.0packaging.eic_shell_version
Source lines (excluding vendored)1430code.source_lines
Test files0code.test_files