You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(pm): re-pin H22's closed-issue update rate from a card-only measurement (#17627)
`MEASURED_CLOSED_ISSUE_UPDATES_PER_DAY` stood at 415.1/day, measured
2026-09-06, and every sweep since has printed `RATE PREMISE DRIFTED` —
so the coverage sentence H22 writes about itself was misdescribed by
that factor, four times a day.
Re-measured by the docblock's own recipe, and over the population the
sweep is actually rated against: the scheduled runner's `/issues` pages
come back card-only, while the byte-identical request from an agent
container returns 49.6% pull requests. The 2026-09-11T01:55Z run reports
5 pages, 428 in-window closures and ~141.3/day; replaying this pager
over a container read of the same hour reproduces 5 pages / 426 /
~139.4 on the card-only slice and 9 pages / 426 / ~256.2 on the whole
one, and 428 in-window closures cannot come out of 5 PR-inclusive pages
at all. The pin it replaces was taken PR-inclusive, so the 0.34 factor
the alarm printed was a real slowdown times a population difference.
Pinned at 139.4/day (500 card-only rows spanning 3.586 days — the five
pages a 3-day horizon costs), dated 2026-09-11, with the 200 / 400 /
605-row re-reads recorded in the same shape the old record used. The
alarm reads `ok` against the last run's own observation (factor 1.01).
The divisor stays a HAND pin: the alarm reports, it never writes.
Self-test: 3606 cases pass before and after — no case added or removed;
the pins that hardcode a number derived from the constant's value are
re-derived from it.
Claude-Session: https://claude.ai/code/session_01YKEjmbYNvYWJvWGSWx26zK
Co-authored-by: Claude <noreply@anthropic.com>
* H22's premise, in the shape `classifyRatePremise` judges (#16393).
@@ -22702,12 +22724,12 @@ async function selfTest() {
22702
22724
t('windows: …and 2.73d at the rate measured 8 days later — same cap, 25% more window', Number(windowCoverageDays(300, MEASURED_COMMITS_PER_DAY).toFixed(2)), 2.73);
22703
22725
t('windows: …which is why H23\'s cap became a TIME cap', COMMIT_WINDOW_DAYS, 3);
22704
22726
// ⛔ H22's is the one whose DIVISOR was the surprise: its rows are consumed by
22705
-
// closed-issue UPDATE activity, not by closures, and the two differ ~39x at
22706
-
// the divisor re-pinned 2026-09-06, against the ~10.7 closures/day measured
22727
+
// closed-issue UPDATE activity, not by closures, and the two differ ~13x at
22728
+
// the divisor re-pinned 2026-09-11, against the ~10.7 closures/day measured
22707
22729
// when the defect was found. The old 4-page cap read as a closure window and
22708
22730
// was nothing of the kind.
22709
-
t('windows: H22\'s old 4-page cap bought only 0.96d of UPDATE recency at the 2026-09-06 rate', Number(windowCoverageDays(400, MEASURED_CLOSED_ISSUE_UPDATES_PER_DAY).toFixed(2)), 0.96);
22710
-
t('windows: …and the honest divisor is ~39x the closure rate it read as', Number((MEASURED_CLOSED_ISSUE_UPDATES_PER_DAY / 10.7).toFixed(1)), 38.8);
22731
+
t('windows: H22\'s old 4-page cap bought 2.87d of UPDATE recency at the 2026-09-11 rate', Number(windowCoverageDays(400, MEASURED_CLOSED_ISSUE_UPDATES_PER_DAY).toFixed(2)), 2.87);
22732
+
t('windows: …and the honest divisor is ~13x the closure rate it read as', Number((MEASURED_CLOSED_ISSUE_UPDATES_PER_DAY / 10.7).toFixed(1)), 13);
22711
22733
t('windows: …which is why H22\'s cap became a CLOSURE-time cap', CLOSED_ISSUE_WINDOW_DAYS, 3);
22712
22734
t('windows: …and its horizon is seen by 12 consecutive runs', sweepOverlap(CLOSED_ISSUE_WINDOW_DAYS), 12);
22713
22735
// #13499 — H8's window is no longer a page cap at all, so the arithmetic that
@@ -22878,10 +22900,13 @@ async function selfTest() {
22878
22900
t('H22 window: a 1-day-old closure is inside', issueClosedWithinWindow(closed13606(1, 1), CH), true);
22879
22901
// Direction 2 — the row the OLD 4-page cap structurally could not reach. The
22880
22902
// cap covered ~0.96d of UPDATE recency at the divisor pinned 2026-09-06
22881
-
// (~2.12d at the one pinned when the repair landed), so a card closed 2.5
22882
-
// days ago and untouched since fell out of it: not late, GONE. Measured cost
22883
-
// at the time of the repair: 19 residue carriers closed within 3 days missed.
22884
-
t('H22 window: the old 4-page cap reached only ~1.0 days of update-recency', windowCoverageDays(400, MEASURED_CLOSED_ISSUE_UPDATES_PER_DAY) < 2.5, true);
22903
+
// (~2.12d at the one pinned when the repair landed, ~2.87d at the one pinned
22904
+
// 2026-09-11), so a card closed 2.5 days ago and untouched since fell out of
22905
+
// it: not late, GONE. Measured cost at the time of the repair: 19 residue
22906
+
// carriers closed within 3 days missed. ⚖️ The days this cap buys move with
22907
+
// every re-pin — which is the whole argument against a page cap — so what is
22908
+
// pinned below is its SHORTFALL against the horizon, not a fixed count of days.
22909
+
t('H22 window: the old 4-page cap reached ~2.9 days of update-recency, still short of the 3-day horizon', windowCoverageDays(400, MEASURED_CLOSED_ISSUE_UPDATES_PER_DAY) < 3, true);
22885
22910
t('H22 window: …but the 3-day closure horizon admits that card', issueClosedWithinWindow(closed13606(2, 2.5), CH), true);
22886
22911
// …and the window still HAS an edge; a boundary that admits everything is none.
22887
22912
t('H22 window: a 4-day-old closure is outside', issueClosedWithinWindow(closed13606(3, 4), CH), false);
@@ -23103,28 +23128,29 @@ async function selfTest() {
t('#16393 stream: the pass stops on the first page past the horizon', driftedStats16393.closedPages, 28);
23111
23136
t('#16393 stream: …and the rate is over the rows READ', Math.round(driftedStats16393.closedRateObserved * 100) / 100, 942.76);
23112
23137
t('#16393 stream: ⛔ …not over the rows ADMITTED, which is a different number', Math.round(observedRatePerDay(driftedRows16393, 'updated_at') * 100) / 100 === Math.round(driftedStats16393.closedRateObserved * 100) / 100, false);
23113
-
t('#16393 stream: …a board running 2x the pin FIRES the alarm', h22Premise(driftedStats16393.closedRateObserved).state, 'drifted');
23114
-
t('#16393 stream: …and the factor is stated so it can be acted on', h22Premise(driftedStats16393.closedRateObserved).message.includes('a factor of 2.27'), true);
t('#16393 stream: …a board running past the band FIRES the alarm', h22Premise(driftedStats16393.closedRateObserved).state, 'drifted');
23139
+
t('#16393 stream: …and the factor is stated so it can be acted on', h22Premise(driftedStats16393.closedRateObserved).message.includes('a factor of 6.76'), true);
t('#16393 clause: a drifted divisor is marked loud', clause16393(942.76).startsWith('⚠️ RATE PREMISE DRIFTED'), true);
23139
23165
t('#16393 clause: …and names the re-measure act', clause16393(942.76).includes('re-pinned by hand, from a fresh measurement'), true);
23140
-
t('#16393 clause: an expired pin is marked loud too', clause16393(415.1, { nowMs: Date.parse('2026-11-01T00:00:00Z') }).startsWith('⚠️ RATE PREMISE EXPIRED'), true);
23166
+
t('#16393 clause: an expired pin is marked loud too', clause16393(139.4, { nowMs: Date.parse('2026-11-01T00:00:00Z') }).startsWith('⚠️ RATE PREMISE EXPIRED'), true);
23141
23167
t('#16393 clause: an unobserved rate is marked loud, never silent', clause16393(null).startsWith('⚠️ RATE PREMISE UNOBSERVED'), true);
23142
-
t('#16393 clause: an in-band divisor is NOT marked loud', clause16393(433.33).includes('⚠️'), false);
23168
+
t('#16393 clause: an in-band divisor is NOT marked loud', clause16393(166.67).includes('⚠️'), false);
23143
23169
// ⛔ …but it still SPEAKS. A check that is only visible when it fires cannot
23144
23170
// be told apart from a check somebody deleted — `renderRatePremise`'s rule.
23145
-
t('#16393 clause: …and still speaks, so a deleted check cannot pass for a healthy board', clause16393(433.33).startsWith('rate premise OK'), true);
23146
-
t('#16393 clause: …naming both rates even when it agrees', clause16393(433.33).includes('observed ~433.3/day') && clause16393(433.33).includes('= 415.1/day'), true);
23171
+
t('#16393 clause: …and still speaks, so a deleted check cannot pass for a healthy board', clause16393(166.67).startsWith('rate premise OK'), true);
23172
+
t('#16393 clause: …naming both rates even when it agrees', clause16393(166.67).includes('observed ~166.7/day') && clause16393(166.67).includes('= 139.4/day'), true);
23147
23173
23148
23174
// ---- The clause on the summary line. Only time-INDEPENDENT properties are
23149
23175
// asserted here, for the reason above; the verdict wording is pinned by the
0 commit comments