Time to First Reply — dev@
established2.1 h Sep 2026
Automated, reproducible metrics for the Apache Cassandra project.
Classified patterns in dev@ mailing-list and JIRA-comment messages and threads — escalation, constructive resolution, newcomer treatment and message-level patterns, 2017–2025. Counts and rates only, at the project level; no per-person data, no quotations, and no links from any number below back to an individual message (COMMUNITY-HEALTH.md §7.3/§7.4). Want to see individual sampled threads instead — linked to the public archive? See the Thread explorer (DECISIONS.md D27).
Weighted share of classified messages in each COMMUNITY-HEALTH.md §2.2 intensity tier, by quarter — a fixed, versioned mapping (never raw sentiment, §1.2), stacked to 100% per quarter. Tiers stack bottom (closing/positive) to top (attack); a quarter missing from a venue's chart is below the §5.1 minimum-sample floor ("insufficient data"), shown as a gap rather than a fabricated zero.
Omitted for insufficient_data:
dev@ mailing list (2012Q2, 2012Q3)
Counts per 1,000 classified messages at the headline (0.5 probability) cutoff, pooled and weighted across each window's sampled quarters, with thread-level bootstrap 95% confidence intervals. "CIs overlap" states only whether the two windows' intervals overlap — it does not characterize any difference as an improvement or a decline.
2017-2019: 3458 messages, 354 authors · 2023-2025: 4016 messages, 182 authors
| Label | 2017-2019 (per 1,000) | 2023-2025 (per 1,000) | CIs overlap |
|---|---|---|---|
| acknowledgment | 80.12 [69.37, 90.31] | 102.21 [89.66, 115.77] | overlapping |
| compromise_offer | 88.65 [74.71, 102.54] | 108.04 [94.09, 120.89] | overlapping |
| constructive_counterargument | 131.37 [114.79, 147.79] | 122.68 [105.00, 139.59] | overlapping |
| dismissiveness | 7.93 [3.97, 13.18] | 2.88 [1.23, 4.76] | overlapping |
| evidence_based_argument | 161.28 [144.45, 180.77] | 110.77 [98.65, 124.04] | not overlapping |
| gatekeeping | 0.26 [0.00, 0.84] | 0.24 [0.00, 0.75] | overlapping |
| hostility | 7.37 [4.40, 10.87] | 3.70 [1.77, 6.11] | overlapping |
| personal_attack | 0.58 [0.00, 1.53] | 0.22 [0.00, 0.69] | overlapping |
| resolution_marker | 43.52 [33.20, 55.78] | 40.61 [32.29, 49.87] | overlapping |
| sarcasm | 6.95 [4.02, 10.38] | 7.58 [4.50, 10.94] | overlapping |
| status_authority_invocation | 1.59 [0.30, 2.97] | 1.47 [0.29, 2.87] | overlapping |
| technical_disagreement | 106.04 [91.37, 122.64] | 120.59 [106.20, 135.85] | overlapping |
2017-2019: 4443 messages, 323 authors · 2023-2025: 3862 messages, 158 authors
| Label | 2017-2019 (per 1,000) | 2023-2025 (per 1,000) | CIs overlap |
|---|---|---|---|
| acknowledgment | 133.25 [121.01, 146.19] | 90.51 [79.13, 102.77] | not overlapping |
| compromise_offer | 166.02 [147.43, 185.86] | 116.09 [101.30, 130.24] | not overlapping |
| constructive_counterargument | 226.85 [207.34, 247.01] | 179.01 [158.79, 199.16] | not overlapping |
| dismissiveness | 2.95 [1.47, 4.59] | 1.96 [0.61, 3.37] | overlapping |
| evidence_based_argument | 379.06 [360.65, 398.89] | 365.61 [346.48, 386.84] | overlapping |
| gatekeeping | 0.25 [0.00, 0.76] | 0.00 [0.00, 0.00] | overlapping |
| hostility | 2.55 [0.87, 4.65] | 1.28 [0.28, 2.44] | overlapping |
| personal_attack | 0.55 [0.00, 1.45] | 0.34 [0.00, 1.09] | overlapping |
| resolution_marker | 113.66 [102.96, 124.85] | 113.86 [99.61, 127.65] | overlapping |
| sarcasm | 4.92 [2.52, 7.71] | 1.69 [0.52, 3.03] | overlapping |
| status_authority_invocation | 0.57 [0.00, 1.48] | 1.07 [0.22, 2.28] | overlapping |
| technical_disagreement | 198.52 [177.87, 221.37] | 134.97 [118.54, 150.07] | not overlapping |
How messages directed at a newcomer (fewer than 3 prior messages in that venue at message time) are classified — constructive (acknowledgment/compromise offer/resolution marker) and dismissive/hostile responses are reported as two separate rates, never netted into one number.
| Window | Newcomer-directed messages | Distinct newcomers | Constructive response rate | Dismissive/hostile response rate |
|---|---|---|---|---|
| 2017-2019 | 260 | 176 | 13.1% [8.8%, 17.3%] | 3.8% [1.5%, 6.5%] |
| 2023-2025 | 88 | 55 | 27.3% [18.2%, 38.6%] | 1.1% [0.0%, 3.4%] |
| Window | Newcomer-directed messages | Distinct newcomers | Constructive response rate | Dismissive/hostile response rate |
|---|---|---|---|---|
| 2017-2019 | 164 | 122 | 15.2% [9.8%, 20.7%] | 1.8% [0.0%, 4.3%] |
| 2023-2025 | 50 | 38 | 20.0% [10.0%, 30.0%] | 0.0% [0.0%, 0.0%] |
Thread-level rates, derived deterministically from message-level classifications (COMMUNITY-HEALTH.md §2.3) — escalation, constructive resolution, abandonment after friction, and pile-on. A rate renders as "insufficient data" below its own minimum sample floor (§5.1/§5.2), which is expected for the rarer pile-on rate.
| Window | Escalation rate | Constructive resolution rate | Abandonment after friction | Pile-on rate |
|---|---|---|---|---|
| 2017-2019 | 4.7% [1.4%, 8.6%] | 13.5% [8.2%, 19.2%] | 47.0% [32.6%, 62.3%] | insufficient data |
| 2023-2025 | 0.7% [0.0%, 1.8%] | 12.4% [8.5%, 16.7%] | 42.2% [26.8%, 57.8%] | insufficient data |
| Window | Escalation rate | Constructive resolution rate | Abandonment after friction | Pile-on rate |
|---|---|---|---|---|
| 2017-2019 | 1.1% [0.0%, 2.7%] | 48.0% [41.8%, 53.7%] | 32.4% [16.9%, 49.9%] | insufficient data |
| 2023-2025 | 2.1% [0.0%, 4.7%] | 46.8% [38.9%, 54.2%] | insufficient data | insufficient data |
Counts per 1,000 classified messages by label and year — one small mini-chart per
label, year on the horizontal axis, with a shaded 95% confidence-interval band.
Constructive and negative labels are two independent-scale groups of panels, and
each panel's own y-axis scales independently within its group, so a less-common
label's trend is never flattened by a more-common one. Years shown are whichever
the controls below select; a year with insufficient_data for the
selected venue is left out of the chart entirely (noted below) rather than shown
as zero.
Every message carries a small residual probability for every label, so the (secondary, trend-only) probability index has a floor even where a label essentially never applies. This is that floor — the unweighted median message probability per label, times 1,000, computed once across the whole run.
| Label | Floor (per 1,000) |
|---|---|
| acknowledgment | 120.00 |
| compromise_offer | 70.00 |
| constructive_counterargument | 80.00 |
| dismissiveness | 50.00 |
| evidence_based_argument | 70.00 |
| gatekeeping | 10.00 |
| hostility | 20.00 |
| personal_attack | 20.00 |
| resolution_marker | 30.00 |
| sarcasm | 30.00 |
| status_authority_invocation | 20.00 |
| technical_disagreement | 50.00 |
Applied only to labels with a strong public mapping, each calibrated against a specific public dataset's best-F1 threshold — see docs/benchmark/public-v1.md.
| Label | Threshold | Dataset | Permissive |
|---|---|---|---|
| hostility | 0.4 | Ferreira, Cheng & Adams -- LKML incivility ("Shut the f**k up", 2021) | no |
| personal_attack | 0.15 | Ferreira, Cheng & Adams -- LKML incivility ("Shut the f**k up", 2021) | yes |
| sarcasm | 0.6 | Ferreira, Adams & Cheng -- GitHub locked issues ("How heated is it?", 2022) | no |
38479 of 38520 sampled messages were classified for this run. Truncated to fit the classifier's per-request length budget: 0. Skipped (never classified): 0.
Total classification cost for this run: $0.00; cumulative: $1.23.
Mailing-list metrics, computed from metadata only — sender, timestamp and thread structure — never message content.
2.1 h Sep 2026
55.9% Aug 2026
Based on: project-specific (no established CHAOSS/literature equivalent)
Same definitions, population and exclusions as dev@'s pair above (self-replies and automated senders excluded, completed-period rule) — reported separately, never combined with dev@.
3.5 days Nov 2025 backfill pending
100.0% Apr 2026 backfill pending
Based on: project-specific (no established CHAOSS/literature equivalent)
Monthly volume for both lists — total messages, new threads started, and distinct sender addresses — computed from message metadata only. Unlike the reply- responsiveness metrics above, these are raw activity counts with no automated-sender exclusion.
dev@: JSON · CSV — user@: JSON · CSV
dev@: JSON · CSV — user@: JSON · CSV
Faint points mark a month flagged low-n or insufficient data —
its statistic (a rate, an HHI, a median) comes from too few underlying events to be
reliable on its own. Hover a point for its exact n and flag; the value itself is unchanged.