Overview /

ROOT

github.com/root-project/root analysisupstream · pass 2026-10-12-2 · commit 14a58f742115 · assessor claude-opus-5-5

The main risks are a default branch that is almost never fully green (2 of the last 43 ROOT CI push runs on master passed every job, with failures concentrated on new or pre-release platforms), 74% of open issues older than one year, and a license that GitHub cannot detect (LGPL-2.1-or-later notice plus GPL and BSD-style parts). Established practices are PR-based review by 22 reviewers, unit and reference-output tests with published coverage, formatting, clang-tidy, ruff and ASan on every PR, frequent releases with deprecation and removal notes and per-release Zenodo DOIs, and the latest release (6.40.04) shipped in eic-shell and upstream Spack.

2.2overall, of 3

Action plan

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

PriorityEffortCriterionAction
highS com.conduct (1) Add CODE_OF_CONDUCT.md (Contributor Covenant or the CERN Code of Conduct) with a reporting contact, and link it from the README.
highS com.governance (1) Add a GOVERNANCE.md naming the project leader and core team, how decisions are made, and how contributors become reviewers or code owners.
highS eng.ci (1) Fix the CLING_GIT_TOKEN checkout in .github/workflows/sync_cling.yml or disable the workflow.
highS via.license (1) Put the full LGPL-2.1 text in LICENSE (moving the notice to the README) so GitHub detects LGPL-2.1-or-later, and add LICENSES/ entries for GPL and RooFit parts.
highM eng.ci (1) Mark the ubuntu2610, fedora44, mac27 and mac-beta jobs as non-blocking (or fix issue 23675 and the platform failures) so ROOT CI on master passes.
mediumS com.bus-factor (2) Add a second owner to each single-owner path in .github/CODEOWNERS.
mediumS com.bus-factor (2) Document the release procedure (tagging, root-src-tarball.yml, root-relpage-ci.yml, binaries) in README/DEVELOPMENT.md.
mediumS doc.contributing (2) Document building and testing ROOT inside the public registry.cern.ch/root-ci/<os>:buildready images, or add .devcontainer/devcontainer.json based on one.
mediumS doc.user (2) Add minimum versions for each required library to https://root.cern/install/dependencies/ (matching SearchInstalledSoftware.cmake).
mediumS doc.user (2) Add a troubleshooting page for common build and runtime errors to the manual.
mediumS eng.change-control (2) Add a ruleset on master requiring one approving review (CODEOWNERS review where an owner exists).
mediumS via.citation (2) Add CITATION.cff with the concept DOI and the reference paper, and update README/CREDITS at each release.
mediumM com.responsiveness (1) Review the 282 issues open longer than one year and close, or label and milestone, each one.
mediumM dist.dependencies (1) Add the minimum supported version to every ROOT_FIND_REQUIRED_DEP and find_package call in cmake/modules/SearchInstalledSoftware.cmake.
mediumM dist.reproducibility (2) Publish rootproject/root:<version>-<os> images from a workflow triggered by each release tag.
mediumM eic.environment (2) (EIC side) Add an eic/containers job that builds the eic_xl environment with the next ROOT release candidate and runs the EICrecon tests.
lowS dist.dependencies (1) Add .github/dependabot.yml for github-actions.
lowS via.support (2) Document on root.cern the institutions committed to maintenance, their areas, and how ownership transfers when a team member leaves.
lowM eng.modularity (2) Document which libraries can be linked without Cling (for example the RNTuple and histogram v7 libraries) and test such a minimal consumer in CI.

Assessment by criterion

Code health & engineering practices 2.2

2

Change control & code review eng.change-control

Established · confidence high

All sampled first-parent commits in 12 months came through PRs, master is protected, CODEOWNERS and a PR template exist, and CONTRIBUTING describes review; 89.9% of merged PRs had a non-author review, just below the 90% required for level 3.

Evidence (7)

Gaps to the next level

  • 10.1% of merged PRs in 12 months had no review from someone other than the author.
  • The public rulesets require a PR and review only on v*-patches branches (with 0 required approvals), not on master.

Actions

  • medium S Add a ruleset on master requiring one approving review (CODEOWNERS review where an owner exists).
1

Continuous integration eng.ci

Initial · confidence high

ROOT CI builds and runs ctest on about 27 configurations on every PR and master push, but of the 50 push runs in the metric only 2 of 43 ROOT CI runs passed every job and all 7 Sync Cling repo runs failed at checkout. Failing ROOT CI runs have 1 to 7 of 27 jobs failing, mostly new or pre-release platforms: ubuntu2610 in 29 of 43 (a distributed-RDataFrame test timeout, issue 23675), fedora44 in 20, and mac27 and mac-beta in 12 each.

Evidence (6)

Gaps to the next level

  • 4% of recent default-branch runs succeed; ROOT CI on master fails in 41 of 43 recent push runs.
  • Sync Cling repo has failed on all 7 recent master pushes at the "Checkout Cling" step.
  • No required status checks on master (branch protection lists none).

Actions

  • high M Mark the ubuntu2610, fedora44, mac27 and mac-beta jobs as non-blocking (or fix issue 23675 and the platform failures) so ROOT CI on master passes.
  • high S Fix the CLING_GIT_TOKEN checkout in .github/workflows/sync_cling.yml or disable the workflow.
3

Testing eng.testing

Sustained · confidence high

1555 test files (GoogleTest unit tests per module, pytest, and roottest with 1029 .ref reference-output files) run through ctest in CI on every PR, tutorials run as tests, and coverage is uploaded nightly to Codecov (60.9% of lines). 40.7% of merged PRs in 12 months touched tests.

Evidence (6)
2

Architecture & language standards eng.modularity

Established · confidence medium

The code is split into libraries (core, io, tree, hist, math, roofit, ...) with inc/ and src/ separation, builds with CMake 3.20 and C++17/20/23, and exports ROOTConfig.cmake; the architecture page documents the components. Libraries are not usable independently of Core and the Cling interpreter, and components share global state (gROOT, gDirectory, gPad, gStyle).

Evidence (4)

Gaps to the next level

  • Every library depends on Core and Cling at runtime, so components cannot be reused independently.
  • Components communicate through documented global variables (gROOT, gDirectory, gPad).

Actions

  • low M Document which libraries can be linked without Cling (for example the RNTuple and histogram v7 libraries) and test such a minimal consumer in CI.

Documentation & usability 2.3

2

User onboarding doc.user

Established · confidence medium

root.cern documents installation through binaries, conda, Spack-based LCG views, distribution packages and from source, lists all build options, and has a getting-started guide, a manual and tutorials that run as ctest tests; reference docs are versioned per release. Required libraries are listed per distribution without minimum versions (only compilers and C++ standard), and there is no FAQ or troubleshooting page.

Evidence (6)

Gaps to the next level

  • The dependencies page gives no minimum versions for required libraries (only compilers and C++ standard).
  • No FAQ or troubleshooting page; users are referred to the forum.

Actions

  • medium S Add minimum versions for each required library to https://root.cern/install/dependencies/ (matching SearchInstalledSoftware.cmake).
  • medium S Add a troubleshooting page for common build and runtime errors to the manual.
3

Developer & API documentation doc.developer

Sustained · confidence high

The Doxygen reference guide is generated and published to root.cern by the docs CI for master and each release branch, the manual covers architecture and each functional area, and design documents exist in-tree (for example RNTuple architecture and binary format). Algorithm documentation cites references in the reference guide (for example Minuit2, RooFit, TMVA).

Evidence (5)
2

Contribution guidelines doc.contributing

Established · confidence high

CONTRIBUTING.md covers build and test links, coding conventions, commit and PR format, tests and the CI checks, with PR and issue templates; 89 issues carry good first issue, and some were closed by first-time contributors. No ready-made development environment (devcontainer or documented CI image) is described.

Evidence (5)

Gaps to the next level

  • No devcontainer or documented container image for development, although CI images exist (root-ci-images).

Actions

  • medium S Document building and testing ROOT inside the public registry.cern.ch/root-ci/<os>:buildready images, or add .devcontainer/devcontainer.json based on one.

Community & governance 1.6

1

Issue & PR responsiveness com.responsiveness

Initial · confidence high

Median first response is 0.68 days and 97.7% of new issues are labeled, but 282 of 380 open issues (74%) are older than one year, which is more than half.

Evidence (5)
  • issues.median_first_response_days_12m = 0.68
  • issues.labeled_fraction_12m = 0.977
  • issues.open_older_365d = 282
  • issues.open_total = 380
  • prs.median_days_to_merge_12m = 1.14

Gaps to the next level

  • 74% of open issues are older than one year.

Actions

  • medium M Review the 282 issues open longer than one year and close, or label and milestone, each one.
3

Contributor base com.contributors

Sustained · confidence high

173 authors in 24 months from 34 e-mail domains, 58 new authors in 12 months, and 55.5% of merged PRs from contributors outside the maintainer group.

Evidence (4)
  • git.authors_24m = 173
  • git.email_domains_24m = 34
  • git.new_authors_12m = 58
  • prs.external_fraction_12m = 0.555
2

Knowledge concentration (bus factor) com.bus-factor

Established · confidence high

Bus factor (50%) is 5, 22 people reviewed and 18 merged in 12 months, CODEOWNERS names two owners for most directories, and the team spans CERN, Fermilab and GSI. Some components have a single owner (/geom/, /tmva/, /net/http/, /cmake/), and all releases in 24 months were published by one account.

Evidence (6)

Gaps to the next level

  • Single CODEOWNERS entries for /geom/, /tmva/, /net/http/, the web GUI directories and /cmake/.
  • Releases published by one account in 24 months; the release procedure is not publicly documented.

Actions

  • medium S Add a second owner to each single-owner path in .github/CODEOWNERS.
  • medium S Document the release procedure (tagging, root-src-tarball.yml, root-relpage-ci.yml, binaries) in README/DEVELOPMENT.md.
1

Governance & roadmap com.governance

Initial · confidence medium

The project leader and team are named, the yearly Program of Work process and weekly developer meetings are public, and milestones exist up to 7.00; there is no documented decision process or path to becoming a reviewer or maintainer.

Evidence (4)

Gaps to the next level

  • No document states who makes decisions or how a contributor becomes a reviewer or maintainer.
  • The latest Program of Work listed is for 2025.

Actions

  • high S Add a GOVERNANCE.md naming the project leader and core team, how decisions are made, and how contributors become reviewers or code owners.
1

Code of conduct & user support com.conduct

Initial · confidence medium

The README links the ROOT Forum, which is active, and the issue tracker; no code of conduct with a reporting contact applies to the repository or organization (the forum carries only generic Discourse guidelines).

Evidence (3)

Gaps to the next level

  • No code of conduct with a reporting contact.

Actions

  • high S Add CODE_OF_CONDUCT.md (Contributor Covenant or the CERN Code of Conduct) with a reporting contact, and link it from the README.

Infrastructure & distribution 2.4

3

Packaging & installability dist.packaging

Sustained · confidence high

ROOT 6.40.04, the latest feature-series release (2026-08-27), is in upstream Spack and ships in eic-shell, where it was pinned two days after release; conda-forge also provides 6.40.04. The collector's latest_tag (v6-36-14) is a later-dated patch release of an older series, so latest_release_packaged = false does not indicate lag.

Evidence (6)
3

Releases & versioning dist.releases

Sustained · confidence medium

40 releases in 24 months with notes, a documented MAJOR.MINOR.PATCH scheme with even/odd stable and development series and compatibility guarantees, per-version release notes with Deprecations and Removals sections that name the removal release and replacement, and workflows that build source tarballs, binaries and release pages.

Evidence (6)
1

Dependency management & supply chain dist.dependencies

Initial · confidence high

Dependencies are declared in SearchInstalledSoftware.cmake with builtin fallbacks pinned by version and hash, but many required packages have no minimum version (LZ4, LibLZMA, ZLIB, xxHash, Freetype, XRootD, OpenSSL, ...). There is a SECURITY.md, but no Dependabot or Renovate, and 72 action references are not pinned to a SHA.

Evidence (5)

Gaps to the next level

  • Most ROOT_FIND_REQUIRED_DEP calls give no minimum version.
  • No automated update monitoring for dependencies or GitHub Actions.

Actions

  • medium M Add the minimum supported version to every ROOT_FIND_REQUIRED_DEP and find_package call in cmake/modules/SearchInstalledSoftware.cmake.
  • low S Add .github/dependabot.yml for github-actions.
2

Reproducibility & environments dist.reproducibility

Established · confidence medium

Release-tagged Docker images (rootproject/root:<version>-<os>) are documented on the install page, CI uses public versioned build images, and ROOT files record the writing ROOT version and class schemas. The Docker images are not published for 6.40 (latest tag 6.38.00), and CI does not run in the published user images.

Evidence (3)

Gaps to the next level

  • No Docker image for the 6.40 releases; images are not built for every release.
  • CI runs in root-ci build images, not in the published release images.

Actions

  • medium M Publish rootproject/root:<version>-<os> images from a workflow triggered by each release tag.
3

Portability & heterogeneous computing dist.portability

Sustained · confidence high

CI builds and tests on 12 Linux distribution versions (GCC and Clang, x86_64 and aarch64), macOS ARM64 and x86_64, and Windows; ROOT is distributed on CVMFS through LCG views and runs on grid and batch resources; CUDA support exists as build options, although the GPU CI job is disabled.

Evidence (5)

EIC ecosystem integration 2.8

3

Reuse of EIC-supported components eic.reuse

Sustained · confidence medium

ROOT is a base component that needs no other EIC-supported domain functionality and uses the external Pythia8 and XRootD packages rather than copies; 25 eic-spack packages (including podio-based EDM4eic, JANA2, EICrecon and npsim) build on it.

Evidence (3)
2

EIC environment compatibility eic.environment

Established · confidence medium

ROOT is built in eic-shell from a pinned version in eic/containers, whose CI builds the image and runs EICrecon simulation and reconstruction jobs every six hours and on PRs. ROOT development versions or release candidates are not built or tested in an eic container before release.

Evidence (4)

Gaps to the next level

  • No CI tests ROOT master or a release candidate in an eic container image.

Actions

  • medium M (EIC side) Add an eic/containers job that builds the eic_xl environment with the next ROOT release candidate and runs the EICrecon tests.
3

Currency with the EIC stack eic.currency

Sustained · confidence medium

eic-shell ships the latest ROOT release; 6.40.04 was pinned in eic/containers two days after its release, and issues reported from the EIC stack (for example an RNTuple data race found with podio and JANA2) were fixed. ROOT uses only generic EIC-stack components (XRootD, Pythia8) and keeps a compatibility workaround for XRootD older than 5.8.4.

Evidence (4)

Impact & long-term viability 2.0

1

Licensing via.license

Initial · confidence high

ROOT is LGPL-2.1-or-later, but LICENSE is a notice with the text in LGPL2_1.txt, so GitHub reports NOASSERTION; MathMore is GPL-only and RooFit has a BSD-style license, and source files carry no SPDX headers.

Evidence (4)

Gaps to the next level

  • The license is not machine-detectable (SPDX NOASSERTION).
  • Licensing differs across components (LGPL, GPL for MathMore, BSD-style for RooFit) without per-file SPDX identifiers.

Actions

  • high S Put the full LGPL-2.1 text in LICENSE (moving the notice to the README) so GitHub detects LGPL-2.1-or-later, and add LICENSES/ entries for GPL and RooFit parts.
2

Citation & attribution via.citation

Established · confidence high

The Zenodo-GitHub integration gives every release a DOI under concept DOI 10.5281/zenodo.848818, the README gives the reference paper and BibTeX, and README/CREDITS lists contributors. CREDITS was last updated in 2023 although 58 authors were new in 12 months, and the README does not mention the DOI.

Evidence (4)

Gaps to the next level

  • README/CREDITS has not been updated since 2023; recent contributors are not credited.
  • No CITATION.cff, and the README does not cite the software DOI.

Actions

  • medium S Add CITATION.cff with the concept DOI and the reference paper, and update README/CREDITS at each release.
3

Adoption & downstream use via.adoption

Sustained · confidence high

ROOT ships in eic-shell and is a dependency of 25 eic-spack packages, including the ePIC production chain (EDM4eic, JANA2, EICrecon, npsim), and is used by experiments outside EIC.

Evidence (3)
  • packaging.in_eic_shell = true
  • eic.eic_spack_dependents
  • repo.forks = 1577
2

Institutional backing & continuity via.support

Established · confidence medium

The team page lists maintainers at CERN, Fermilab and GSI, and the Program of Work page states that the yearly plan is presented at the CERN EP-SFT group and agreed with experiments and funders. No document states a multi-institution maintenance commitment or a succession plan.

Evidence (2)

Gaps to the next level

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

Actions

  • low S Document on root.cern the institutions committed to maintenance, their areas, and how ownership transfers when a team member leaves.

Key metrics

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

Commits, 12 months4304git.commits_12m
Active authors, 12 months110git.authors_12m
Active authors, 24 months173git.authors_24m
New authors, 12 months58git.new_authors_12m
Bus factor (50% of commits, 24 months)5git.bus_factor_50_24m
Top author share of commits, 24 months19%git.top_author_share_24m
Institutional e-mail domains, 24 months34git.email_domains_24m
Default-branch changes via PR, 12 months100%git.first_parent_pr_fraction_12m
PRs merged, 12 months703prs.merged_12m
Merged PRs reviewed by non-author90%prs.reviewed_fraction_12m
Median days to merge1.1prs.median_days_to_merge_12m
Merged PRs touching tests41%prs.test_touching_fraction_12m
Distinct reviewers, 12 months22prs.distinct_reviewers_12m
Issues opened, 12 months442issues.created_12m
Median days to first response68%issues.median_first_response_days_12m
Issues without response7%issues.unanswered_fraction_12m
Open issues older than 1 year282issues.open_older_365d
Releases, 24 months40releases.count_24m
Latest releasev6-36-14releases.latest_tag
Default-branch CI success rate4%ci.default_branch_success_rate
CI runs in eic-shellnoci.uses_eic_shell
License (SPDX)NOASSERTIONrepo.license_spdx
Ships in eic-shellyespackaging.in_eic_shell
eic-shell version6.40.04packaging.eic_shell_version
Source lines (excluding vendored)8357875code.source_lines
Test files1555code.test_files