asf_roster: ok git: ok github: ok github_commit_authors: ok github_issues: not_applicable github_profile: ok jira: ok ponymail: ok release: ok release_lines: ok security: ok subproject_releases: not_applicable

How this site's numbers are produced: what's collected, what isn't, how metrics are defined, and what's still preliminary. This page is generated from the same code and config the site itself runs — see /corrections/ to report a problem with any of it.

What this is

This site publishes metrics only — no scores, no verdicts, and no judgment on whether a number is good or bad (DECISIONS.md D25, D29). Every metric shows its own definition, population, and window next to it; where a CHAOSS Knowledge Base definition exists, that metric links it directly. Each metric also carries a tier:

TierMeaning
establishedWidely used in CHAOSS and/or peer-reviewed literature, with a standard formula.
proxyA defensible stand-in for something not directly observable (e.g. "reviewer" from a commit-trailer convention).
experimentalMathematically well-defined, not yet validated for this project.
classifiedDerived from classifying message text (Phase 2 only; preliminary — see below).

Full principles: DECISIONS.md D1 (phasing) and the project's own METRICS.md conventions (§0).

Data sources

Nightly for Cassandra's own data; weekly (Sundays) for the five peer projects.

Source Collected Not collected Cadence
Git (apache/cassandra, trunk) Commit SHA, author/committer name and email, timestamp, message (including reviewer trailers), per-file line stats. Release branches (only the configured default branch, trunk, is walked) and any other apache/cassandra-* repo. Nightly (06:17 UTC)
GitHub (apache/cassandra PRs, reviews, comments, check runs) PR metadata, review events, review/issue comments, check runs. A PR's base branch; GitHub Issues/Discussions (disabled on this repo -- JIRA is the issue tracker). Nightly (06:17 UTC)
ASF JIRA (CASSANDRA project) Issue metadata, status-change history, the Reviewer/Reviewers custom fields, comment metadata. Comment bodies are fetched transiently for classification (Phase 2a) and never committed to the data branch. Nightly (06:17 UTC)
Pony Mail (dev@/user@cassandra.apache.org) Sender, timestamp, thread structure (Message-ID/In-Reply-To) -- metadata only in Phase 1. Message bodies -- fetched transiently for classification (Phase 2a) and never committed to the data branch or the public repo. Nightly (06:17 UTC)
ASF roster (Whimsy committee-info.json, public_ldap_people.json) PMC/committer ASF ids, display names, PMC join dates. A clean public committer-only (non-PMC) roster with join dates. Nightly (06:17 UTC)
Releases (git tags; archive.apache.org as an existence cross-check) GA release tags and dates (the git tag's own creatordate is authoritative); archive.apache.org directory existence as a cross-check, never for dating. GitHub Releases (apache/cassandra publishes none). Nightly (06:17 UTC)
Releases tab (ASF JIRA versions; Jenkins; Butler CI trends) JIRA fixVersions (blocker-ladder placeholder descriptions, quoted verbatim, and their open issues) for each active release line; each line's Jenkins job (ci-cassandra.apache.org) last-build color/result; Butler's (butler.cassandra.apache.org) per-build test-failure/run/duration trend history. Butler's per-test failure detail (its own per-suite endpoint times out); Butler history before roughly June 2026. Nightly (06:17 UTC)
Security (OpenSSF Scorecard, published advisories) Per-check Scorecard scores and reasons; published CVE/advisory records. — Nightly (06:17 UTC)
Peer projects (apache/kafka, spark, flink, pulsar, datafusion) Git commits (bounded lookback), GitHub PRs/reviews, GA releases -- the same code this project uses for Cassandra's own collection, for the metrics shown on /peers/. Issue-tracker metrics (JIRA and GitHub Issues aren't comparable across these six projects without more normalization work than this covers). Weekly, Sundays (20:00 UTC)
ASF Slack Nothing. Not collected at all -- gated behind PMC consensus on dev@ and ASF Infra approval of a read-only bot on public channels (Phase 2b). Not running

Full source-by-source detail (verification method, rate limits, identity-resolution notes): DATA-SOURCES.md.

Metric catalogue

Every metric this site publishes, generated directly from the same registry the site renders from — a metric added here always appears below automatically, with no separate list to update.

Metric Definition Tier Window Based on Page
Active Contributors Distinct non-bot contributors with at least one code commit in the month. established monthly CHAOSS: Contributors Community
Contributor Churn Rate Share of contributors active 12-24 months before the month with no commit since. proxy monthly project-specific Community
Contributor Concentration (HHI) Herfindahl-Hirschman concentration of commit share across contributors. established trailing-12m DOJ/FTC: Herfindahl-Hirschman Index Community
Contributor Dependency (N for 50%) Smallest number of top contributors, by commit count, whose commits reach 50% of the total. established trailing-12m CHAOSS: Contributor Absence Factor Community
Contributor Funnel Conversion Share of a cohort month's first-time committers reaching each later funnel stage (2nd/5th/sustained/committer/PMC) within 24 months. proxy cohort-month (730d horizon) CHAOSS: Conversion Rate (adjacent), CHAOSS: New Contributors (adjacent) Community
Contributor Tenure (Kaplan–Meier) Kaplan-Meier survival probability over contributor tenure, using a 12-month-inactivity churn definition. experimental trailing-24m cohort, snapshot Lin, Robles & Serebrenik (2017), Developer Turnover in Global, Industrial Open Source Projects, Foucault et al. (2015), Impact of Developer Turnover on Quality in Open-Source Software Community
First → Second Contribution Conversion Share of a cohort month's first-time committers who land a second commit within 180 days. proxy cohort-month CHAOSS: Conversion Rate Community
New Contributors Contributors whose first-ever commit to apache/cassandra falls in the month. established monthly CHAOSS: New Contributors Community
PMC Joins per Quarter New PMC members per quarter, from the ASF roster's join dates. established quarterly project-specific Community
Sustained Contributors Count of contributors with at least 5 commits in the trailing 12 months. established trailing-12m CHAOSS: Contributors (adjacent) Community
Truck Factor (DOA) Minimum contributors whose departure would leave over 50% of files with no capable author (Avelino DOA algorithm). experimental point-in-time, recomputed monthly CHAOSS: Contributor Absence Factor / Bus Factor (adjacent), Avelino, Passos, Hora & Valente (2016), A Novel Approach for Estimating Truck Factors Community
Elephant Factor Smallest number of organizations, by commit share, whose commits reach 50% of the total. experimental trailing-12m CHAOSS: Elephant Factor, CHAOSS wg-risk: Elephant Factor Community
Organizational Concentration (HHI) Herfindahl-Hirschman concentration of commit share across organizations. established trailing-12m CHAOSS: Organizational Diversity Community
Single-Organization Share Share of commits from the single largest organization. established trailing-12m CHAOSS: Organizational Diversity Community
Unknown-Affiliation Rate Share of commits whose contributor has no resolved organizational affiliation. established trailing-12m project-specific Community
Days Between Releases (median) Median days between consecutive GA releases in the trailing 12 months. proxy trailing-12m CHAOSS: Release Frequency Community
Release Frequency Count of GA releases (git tags, excluding alpha/beta/rc) in the trailing 24 months. established trailing-24m CHAOSS: Release Frequency Community
Release Interval Regularity (CoV) Coefficient of variation of the intervals between GA releases. proxy trailing-24m project-specific Community
Time Since Last Release Days since the most recent GA release, as of the run date. established snapshot project-specific Community
Change Request Closure Ratio — GitHub PR GitHub PRs closed divided by GitHub PRs opened in the month (CHAOSS Change Request Closure Ratio). proxy monthly CHAOSS: Change Request Closure Ratio Community
Change Request Closure Ratio — JIRA Patch Submissions JIRA issues resolved divided by issues entering Patch Available in the month. established monthly CHAOSS: Change Request Closure Ratio Community
Issue Closure Ratio — GitHub Issues GitHub issues closed divided by GitHub issues opened in the month -- adapted from CHAOSS's Issues Closed metric (a count), not Change Request Closure Ratio: a GitHub issue is never a change request. proxy monthly CHAOSS: Issues Closed (adapted) Community
Median JIRA Resolution Latency Median days from a JIRA issue's creation to its resolution. established monthly CHAOSS: Issue Resolution Duration, CHAOSS: Change Request Closure Ratio (adjacent) Community
Median JIRA Resolution Latency (12m cohort) Median JIRA resolution latency, restricted to issues created within 12 months of resolution. established monthly (12m cohort) CHAOSS: Issue Resolution Duration Community
Open PR backlog Count of currently open GitHub PRs. established snapshot CHAOSS: Change Requests (adapted), CHAOSS: Issue Age (adapted, applied to change requests) Community
Open PR backlog — age 1-3y Count of open PRs aged 1-3 years. established snapshot CHAOSS: Change Requests (adapted), CHAOSS: Issue Age (adapted, applied to change requests) Community
Open PR backlog — age 30-90d Count of open PRs aged 30-90 days. established snapshot CHAOSS: Change Requests (adapted), CHAOSS: Issue Age (adapted, applied to change requests) Community
Open PR backlog — age 90d-1y Count of open PRs aged 90 days to 1 year. established snapshot CHAOSS: Change Requests (adapted), CHAOSS: Issue Age (adapted, applied to change requests) Community
Open PR backlog — age over 3y Count of open PRs older than 3 years. established snapshot CHAOSS: Change Requests (adapted), CHAOSS: Issue Age (adapted, applied to change requests) Community
Open PR backlog — age under 30d Count of open PRs younger than 30 days. established snapshot CHAOSS: Change Requests (adapted), CHAOSS: Issue Age (adapted, applied to change requests) Community
Open PR backlog — drafts Count of currently open GitHub PRs marked draft. established snapshot CHAOSS: Change Requests (adapted), CHAOSS: Issue Age (adapted, applied to change requests) Community
Open PR backlog — linked ticket Fixed Count of open PRs whose linked JIRA ticket is resolved Fixed. established snapshot CHAOSS: Change Requests (adapted), CHAOSS: Issue Age (adapted, applied to change requests) Community
Open PR backlog — linked ticket closed (other) Count of open PRs whose linked JIRA ticket is closed with a non-Fixed resolution. established snapshot CHAOSS: Change Requests (adapted), CHAOSS: Issue Age (adapted, applied to change requests) Community
Open PR backlog — linked ticket still open Count of open PRs whose linked JIRA ticket is still open. established snapshot CHAOSS: Change Requests (adapted), CHAOSS: Issue Age (adapted, applied to change requests) Community
Open PR backlog — no GitHub response Share of open PRs with no GitHub comment or review yet. established snapshot CHAOSS: Change Requests (adapted), CHAOSS: Issue Age (adapted, applied to change requests) Community
Open PR backlog — no ticket key in title Count of open PRs with no JIRA ticket key found in the title. established snapshot CHAOSS: Change Requests (adapted), CHAOSS: Issue Age (adapted, applied to change requests) Community
PR Merge Lead Time Median days from a GitHub PR's creation to its merge. proxy monthly CHAOSS: Change Request Closure Ratio (adjacent) Community
PR Time to Close Median days from a GitHub PR's creation to its close (merged or not). proxy monthly CHAOSS: Change Requests (adjacent) Community
Stale JIRA Issue Rate Share of open JIRA issues with no activity in the preceding 90 days. established monthly CHAOSS: Change Requests (adjacent), CHAOSS: Change Requests Declined (adjacent) Community
Stale PR Rate Share of open GitHub PRs with no activity in the preceding 90 days. established monthly CHAOSS: Change Requests (adjacent), CHAOSS: Change Requests Declined (adjacent) Community
Time to First Response (GitHub issues) Median hours from a GitHub issue's creation to its first comment by someone other than the issue's own author. established monthly CHAOSS: Issue Response Time, CHAOSS: Time to First Response Community
Time to First Response (JIRA) Median days from a JIRA issue's creation to its first comment or status change by someone else. established monthly CHAOSS: Time to First Response, CHAOSS: Responsiveness practitioner guide Community
PR Review Engagement (Reviewers/PR) Mean unique non-self reviewers, and mean/median non-self reviews, per reviewed GitHub PR. proxy monthly CHAOSS: Change Request Reviews (adjacent) Community
PR Time to First Review Median days from a GitHub PR's creation to its first non-self review. proxy monthly CHAOSS: Time to First Response (GitHub-only variant) Community
Reviewer Concentration (HHI) Herfindahl-Hirschman concentration of review credit across reviewers. proxy trailing-12m project-specific Community
Unique Reviewers Distinct non-bot individuals credited as a reviewer via commit trailer or JIRA field. proxy monthly CHAOSS: Change Request Reviews (adjacent) Community
Distinct Senders — dev@ Distinct dev@ sender addresses with at least one message in the month. established monthly project-specific Conversations
Distinct Senders — user@ Distinct user@ sender addresses with at least one message in the month. established monthly project-specific Conversations
Mailing List Messages — dev@ Total dev@ messages per month, no exclusions. established monthly project-specific Conversations
Mailing List Messages — user@ Total user@ messages per month, no exclusions. established monthly project-specific Conversations
New Threads — dev@ Distinct dev@ threads whose own earliest message falls in the month. established monthly project-specific Conversations
New Threads — user@ Distinct user@ threads whose own earliest message falls in the month. established monthly project-specific Conversations
Time to First Reply — dev@ Median time from a dev@ thread's first message to its first reply. established monthly CHAOSS: Time to First Response (applied to email) Conversations
Time to First Reply — user@ Median days from a user@ thread's first message to the first qualifying reply, excluding self-replies and automated senders. established monthly CHAOSS: Time to First Response (applied to email) Conversations
Unanswered Thread Rate — dev@ Share of dev@ threads with no reply at all. established monthly project-specific Conversations
Unanswered Thread Rate — user@ Share of user@ threads with no qualifying reply within 30 days of the thread's first message. established monthly project-specific Conversations
Commits referencing a ticket Share of commits whose message references a JIRA ticket. established monthly project-specific Governance
Commits with CI evidence on JIRA before commit Share of commits with CI evidence posted to JIRA before the commit landed. proxy monthly project-specific Governance
Commits with a named reviewer Share of commits carrying a named reviewer, from the commit trailer or a JIRA reviewer field. established monthly project-specific Governance
Commits with a successful checkstyle run Share of commits with a successful checkstyle run recorded. established monthly project-specific Governance
Commits with both CI artefacts attached Share of commits with both CI artefacts attached to their JIRA ticket. proxy monthly project-specific Governance

Full prose definitions, formulas, and strengths/weaknesses for every metric: METRICS.md.

Conversation patterns (classified) DECISIONS.md D26
  • Pinned classifier model: jev-1.13.0 — never -latest; a model change is a versioned recompute.
  • Thread sampling: up to K=60 threads per venue-quarter stratum, seeded (seed=110) for reproducibility.
  • Message-level labels map to one of 7 intensity tiers (−2 closing/positive … 4 attack); thread-level outcomes (escalation, resolution, abandonment) are derived deterministically from those tiers, never judged by the model directly.
  • Cutoffs (0.5 / 0.7 / 0.9) are the private run's own fixed values, not yet calibrated against a precision/recall gate.
  • Public-benchmark results against six human-labeled datasets: docs/benchmark/public-v1.md — strong ground truth for personal_attack/hostility/sarcasm, partial or none for the rest.
  • Not yet covered: GitHub PR comments and ASF Slack (Phase 2a/2b scope).

Full taxonomy, thread model, and validation gates: COMMUNITY-HEALTH.md.

Peers DECISIONS.md D30

Apache Kafka, Apache Spark, Apache Flink, Apache Pulsar, Apache DataFusion — the owner's choice of comparable ASF top-level projects at a broadly similar scale, picked for real GitHub-PR activity, a real git history, and real GA releases. Not a statistically representative sample, and not a ranking — the same code computes the same metrics for Cassandra and every peer; no targets, no color-coding, no sort order implying rank.

Config: projects/peers.yaml.

Reproducibility

Every number on this site comes from a plain script, never an LLM at runtime (the pinned classifier above is the one exception — its output is cached by input hash, so re-rendering never calls the model again; D22).

data branch
├── raw/<source>/<table>/date=YYYY-MM-DD/part-*.parquet   # append-only
├── snapshots/<run_id>/metrics.parquet                     # this run's full metric output
└── manifests/<run_id>.json                                 # this run's manifest

This build's run id and code revision are in the footer below, on every page. To re-run the pipeline yourself: project-health run --project projects/cassandra.yaml --data-dir <data branch checkout>. Source: the data branch · this repository.

Known limitations
  • Identity resolution. Two raw identifiers (a git email, a GitHub login, a JIRA username) merge automatically only on a mechanical, high-confidence match (exact email, the GitHub-noreply pattern); everything else needs a human-reviewed identity_overrides.yaml entry and stays as separate, unresolved identities until then.
  • Sampling and small-n. Classified metrics rest on a stratified sample (see Conversation patterns above); every rate/ratio/concentration/latency metric also carries its own minimum-sample floor (METRICS.md §0.6) — below it, the site shows "insufficient data" rather than an unstable number.
  • GitHub-only vs. JIRA review. GitHub-PR-specific metrics (e.g. PR time to first review) see only the review activity that happened on GitHub, a subset of Cassandra's JIRA-centric review process — reported as a separate, narrower companion to the git-trailer/JIRA-reviewer-field proxy metrics, never merged with them.
  • Partial peer collection. A peer project's GitHub-PR backfill can span several weekly runs; /peers/ shows "Collecting — N of 3 passes complete" rather than a number that looks final while that's in progress.