Where red-main time goes

Every red on main's full test, Oct 1–7 2026: how long, why, what would cut it. Measured Oct 7 from heavy-lane runs, red issues and fix PRs.

The week was 72% green, not 50%. The dashboard's 50% and 3.9 h are Oct 6 alone. Over Oct 1–7 main was red 40.8 h in 19 episodes (about 47 h a week). Median time to green was 1.9 h against a 60-min target.

No single phase owns the time. Figuring out what broke and opening the fix took 32%. Waiting for the next full run after the fix landed took 29%. Getting the fix reviewed and through the merge line took 21%. The run that spots the red took 17%.

Half the red time was several causes at once: three or more PRs' tests going stale together, or a revert stacked on a date bomb. A clean one-PR revert would have fixed 29%. Date bombs (mostly Columbus Day, Oct 12) were in 35%.

The three changes worth making

  1. Revert first, fix forward second: ~7 h a week. The automatic revert already exists. In 4 of 5 one-culprit reds it was held, closed, raced or never opened; only #16406 landed clean.
  2. A red-main fix goes straight to the front of the line: ~6 h a week. Fix PRs took 27 min median from open to merged, but 2.6 h on Oct 6.
  3. Freeze the clock in the 25 known test files before Oct 12: ~4–8 h a week near holidays. The new clock rule (#17276) stops new date bombs. It does not fix the 25 files already listed, and Columbus Day has already gone off 3 times.

Upper bounds that overlap: together roughly 47 → 25–30 h a week red; 95% green allows 8.

Every episode (19)

Red runs from the start of the first failing heavy run to the end of the next green one, using every heavy run (cron, CI-completed and manual). Times are UTC. Phases: detect = failing run start → red verdict or issue; notice+diagnose = verdict → the PR that finally cured it was opened; review+queue = opened → merged; re-test = merged → green verdict.

#RedGreenHoursDetectNotice + diagnoseReview + queueRe-testCause → fix
1Oct 1 05:5508:172.424731629Wave: stale tests after #14337, #14508, #14567 (left from Sep 30) → #14697
2Oct 1 09:4812:292.728512557Wave: #14733, #14741, #14758 → #14768, #14781
3Oct 1 12:2914:001.52632636One PR: #14754 → fix #14809 (revert #14816 held, closed)
4Oct 1 15:4520:184.5351113196One PR plus a race: revert of #14856 (#14906) and a fix for it (#14933) both landed at 17:23 and broke main again → #14966. The 2-hour revert of #14887 would not apply.
5Oct 1 20:45Oct 2 00:143.5521061338Wave: 11 culprit issues, mostly guard and pin counts moved by different PRs → 9 fix PRs
6Oct 2 02:3205:002.52259859Wave: #14019, #14929 → #15249, #15320
7Oct 2 05:0008:574.025987737Stacked: auto-revert of #15318 (#15353, 39 min) + Columbus Day date bomb (#15386) + two tests the revert itself broke (#15400, #15404)
8Oct 2 12:3413:210.8230024Flake: one red run, next run green
9Oct 3 04:4805:450.9150042Flaky: #15779 was blamed, but main went green before its revert landed
10Oct 3 06:3707:441.11501042Date bomb: a fixed "2026-10-02" expired at midnight → #15938
11Oct 3 23:28Oct 4 02:002.516204670One PR: #16196 non-ASCII → fix #16248. The heavy lane then ran only about hourly.
12Oct 4 10:3412:111.616332523Date bomb: test data dated Sep 20 aged out of a 14-day window → #16394
13Oct 4 22:1223:321.315103025One PR: #16333 → auto-revert #16406. The clean case.
14Oct 6 04:0009:355.6314615927Stacked: #16937 (revert #17007 closed after 4 min for fix #17022, which took 2 h in line) + #16983 (revert #17049 closed) + Columbus Day date bomb (#17046, 2.6 h open → merged) + a 64 KiB selection limit
15Oct 6 10:4612:371.919362828One PR: #16955 → revert #17069 opened at once, closed for fix #17071
16–18Oct 6 14:4616:452.0190061Flaky test (ci-full-set-known-red): the same commit went red, green, red. #17093 was blamed and reverted (#17119), but green came first.
19Oct 6 23:50Oct 7 01:542.134342828Columbus Day date bomb (#17288) plus #17001 and a stale golden file. Claimed at 00:51 (issue 00:24), fixed by #17293. Fede's side also built #17299 for the same fix.
Total40.87.1 h13.0 h8.7 h12.0 h
What a revert could and could not have fixed
KindEpisodesRed hoursShare
One culprit PR (a revert fixes it)3, 4, 11, 13, 1511.729%
Wave: 2–11 PRs' tests stale together1, 2, 5, 611.027%
Stacked: culprit + date bomb + knock-ons7, 149.523%
Date bomb only10, 12, 194.812%
Flaky test or runner8, 9, 16–183.79%

Even a perfect revert has a floor of about 55 min: about 20 min for the run that spots it, about 10 min to merge, and about 25 min for the next full run. The 5 one-culprit episodes took 11.7 h. At the floor they would take about 5 h, which saves roughly 7 h a week. The waves could in principle take "revert every named culprit" (#16314 does this since Oct 4), but 4 of the 4 waves were on Oct 1–2, before that existed, while the new lane was clearing debt from Sep 30.

Date bombs were in 14.4 h (35%) counting the two stacked episodes where one was on the critical path. Three of them were the same holiday: tests that pick "+6 days" or a reschedule date landed on Columbus Day (Oct 12). That will keep happening until Oct 12 passes or those files are frozen. Veterans Day (Nov 11) is next.

How each lever was sized
Measurement notes
Who owns what (CICD vs Gera's side)
PropFlow Docs