Overnight readiness · main against production, the last 10 nights
One row per night (UTC), newest on top, from the Main to RC forecasts kept on the main-preview branch. To pick a night, read two rows: what the later one added, and whether its Gate moved. The quality marks (Speed, Metrics, Tests) are a reading aid and never change the Gate. A night that kept nothing says why in words. The band is left off the rows while the review floor caps the score; the Gate is what decides. A forecast, never a gate.
Claims: known and gaps
The latest forecast, Mon 19 Oct 10:46 UTC: main sha-2bff81a beside production 17.0.0. 11 claimed (known), 92 unclaimed (gaps): 10% covered; 6 claims owed. The known side is what release/claims.yaml already says is intended; the gaps are what the next release owes a claim or a fix. Read from the kept report; it never changes the Gate.
| Artefact | Claimed (known) | Unclaimed (gaps) | Covered |
|---|---|---|---|
dom |
0 | 41 | 0% |
focus |
0 | 41 | 0% |
network |
10 | 0 | 100% |
persistence |
1 | 4 | 20% |
startup |
0 | 4 | 0% |
metrics |
0 | 2 | 0% |
Claim hygiene in the report
3 claims cover 11 failing differences: 3.67 per claim, at most 8 under one (flagged above 10).
No finding: no claim too broad, stale or expired.
Release size and the WIP limit
Below the centre line 16 unreleased PRs: no more than a usual release (21.1). Keep merging.
a releaseoutside the limits: a special causecentre line (mean)control limits (UCL, LCL)on main, not releasedshading: below centre, a good time to release, release now
Below the centre line: 16 PRs on main since v17.0.0, against a centre line of 21.1 and a WIP limit of 21.1. Limits provisional: 7 releases measured, 10 needed. 1 release outside the limits (special cause): v17.0.0 (113). Centre 21.1, mean moving range 22.8, UCL 81.9 (centre + 2.66 × 22.8), LCL 0, from 7 releases: provisional until 10, so the WIP limit is the centre line. WIP limit 21.1.
How to read this chart
Each point is one past release of the monorepo, counted in pull requests merged since the release before it (release branches and direct commits left out). The centre line is the mean release size. The UCL and LCL (upper and lower control limits) are the centre ± 2.66 × the mean moving range, the change from one release to the next: the band a release lands in when nothing unusual happened. A release outside them is a special cause, worth asking why.
The diamond is what is on main now, not yet released, against a WIP limit: at or below the centre line, below the centre line, keep merging; above it and up to the WIP limit, a good time to release; over the WIP limit, release now. The WIP limit is the UCL; with fewer than 10 releases the limits are provisional and the WIP limit is the centre line, so a short history never licenses a big batch. Smaller, regular releases keep each one easy to judge and to roll back.
The night-by-night chart is the same count from each night's forecast, so a batch can be seen climbing towards the limit. Advisory: none of this changes the Gate, a verdict or an exit code.
The numbers
| Release | Cut | PRs | Against the limits |
|---|---|---|---|
| v16.1.5 | 11 Sept | 6 | within the limits |
| v16.1.6 | 14 Sept | 1 | within the limits |
| v16.1.8 | 14 Sept | 8 | within the limits |
| v16.2.0 | 16 Sept | 5 | within the limits |
| v16.2.1 | 17 Sept | 11 | within the limits |
| v16.2.2 | 18 Sept | 4 | within the limits |
| v17.0.0 | 14 Oct | 113 | above UCL: a special cause |
| main now | 19 Oct | 16 | Below the centre line (not released; since v17.0.0) |
| Night | Main | PRs | Zone |
|---|---|---|---|
| 2026-09-28 | sha-185e87f | 58 | Release now (since 16.2.2) |
| 2026-09-29 | sha-90cb998 | 65 | Release now (since 16.2.2) |
| 2026-09-30 | sha-865d02f | 67 | Release now (since 16.2.2) |
| 2026-10-01 | sha-c0a0965 | 69 | Release now (since 16.2.2) |
| 2026-10-02 | sha-b35eddd | 79 | Release now (since 16.2.2) |
| 2026-10-03 | sha-4993e86 | 81 | Release now (since 16.2.2) |
| 2026-10-05 | sha-fa9e38f | 83 | Release now (since 16.2.2) |
| 2026-10-06 | sha-a5796e9 | 84 | Release now (since 16.2.2) |
| 2026-10-07 | sha-a40307a | 86 | Release now (since 16.2.2) |
| 2026-10-08 | sha-7c5f248 | 87 | Release now (since 16.2.2) |
| 2026-10-09 | sha-ff4fe9c | 94 | Release now (since 16.2.2) |
| 2026-10-10 | sha-a5d00c5 | 95 | Release now (since 16.2.2) |
| 2026-10-12 | sha-591c54e | 97 | Release now (since 16.2.2) |
| 2026-10-13 | sha-f0a9159 | 105 | Release now (since 16.2.2) |
| 2026-10-14 | sha-7feefea | 108 | Release now (since 16.2.2) |
| 2026-10-15 | sha-c867ee8 | 9 | Below the centre line (since 17.0.0) |
| 2026-10-16 | sha-c867ee8 | 9 | Below the centre line (since 17.0.0) |
| 2026-10-17 | sha-83d4ccf | 11 | Below the centre line (since 17.0.0) |
| 2026-10-18 | sha-83d4ccf | 11 | Below the centre line (since 17.0.0) |
| 2026-10-19 | sha-2bff81a | 16 | Below the centre line (since 17.0.0) |
Release history read 2026-10-19T11:07:04.135Z.
Soak toward 2.0: 0 of 10 clean nights
0 of 10 clean nights since 2026-10-19 broke the run; 10 more clean nights at the earliest. A night is clean when its nightly A/A was clean and verified and that night's Main to RC forecast found no difference between production and a second production stack in the same run (a-to-a2). A night on which main did not change pauses the count; anything else starts it again. Counted from Fri 2 Oct. Nothing becomes blocking by itself: 2.0 is a release, made by a person, once the count and the checks below say so.
| Night | Counts as | Run | What it read |
|---|---|---|---|
| Mon 19 Oct | broken | 0 of 10 | A/A 2 differences; a-to-a2 10 differences. |
| Sun 18 Oct | broken | 0 of 10 | A/A clean; a-to-a2 16 differences. |
| Sat 17 Oct | broken | 0 of 10 | A/A clean; a-to-a2 38 differences. |
| Fri 16 Oct | broken | 0 of 10 | A/A 1 difference; a-to-a2 8 differences. |
| Thu 15 Oct | broken | 0 of 10 | A/A on weak evidence; a-to-a2 12 differences. |
| Wed 14 Oct | broken | 0 of 10 | A/A on weak evidence; a-to-a2 clean. |
| Tue 13 Oct | broken | 0 of 10 | A/A on weak evidence; a-to-a2 clean. |
| Mon 12 Oct | broken | 0 of 10 | A/A on weak evidence; a-to-a2 clean. |
| Sun 11 Oct | broken | 0 of 10 | A/A on weak evidence; main unchanged, a-to-a2 not measured again. |
| Sat 10 Oct | broken | 0 of 10 | A/A on weak evidence; a-to-a2 1 difference. |
| Fri 9 Oct | broken | 0 of 10 | A/A on weak evidence; a-to-a2 clean. |
| Thu 8 Oct | clean | 4 of 10 | A/A clean; a-to-a2 clean. |
| Wed 7 Oct | clean | 3 of 10 | A/A clean; a-to-a2 clean. |
| Tue 6 Oct | clean | 2 of 10 | A/A clean; a-to-a2 clean. |
| Mon 5 Oct | clean | 1 of 10 | A/A clean; a-to-a2 clean. |
| Sun 4 Oct | paused | 0 of 10 | A/A clean; main unchanged, a-to-a2 not measured again: neither counts nor breaks. |
| Sat 3 Oct | broken | 0 of 10 | A/A 2 differences; a-to-a2 clean. |
| Fri 2 Oct | broken | 0 of 10 | A/A clean; a-to-a2 1 difference. |
Checks that 2.0 may make blocking
Each must be quiet on main for 10 judged nights and catch its planted mutant in the weekly self-test (latest: 16 of 16 caught, 2026-10-19, run). A check that fires on production too cannot get there until production is fixed.
| Check | Level now | Quiet nights | Planted mutant | For 2.0 |
|---|---|---|---|---|
image-hardening |
informing | 1 of 10 | caught (secret-env) · 2026-10-19 |
Quiet for 1 judged night of 10. |
build-provenance |
informing | 1 of 10 | caught (unsigned-build) · 2026-10-19 |
Quiet for 1 judged night of 10. |
vuln-ceiling |
informing | 16 of 10 | caught (vulnerable-package) · 2026-10-19 |
may become blocking. Quiet for 16 judged nights and its planted mutant is caught: it may become blocking at 2.0. |
timing-tolerance |
informing | 5 of 10 | caught (slow-ssr-mild) · 2026-10-19 |
Quiet for 5 judged nights of 10. |
asset-graph |
informing | 0 of 10 | caught (extra-chunk) · 2026-10-19 |
7 findings on main's last forecast, 7 new on b: quiet nights start again after the next clean forecast. |
replay |
informing | 1 of 10 | caught (replay-header) · 2026-10-19 |
Quiet for 1 judged night of 10. |
slo |
informing | 16 of 10 | none planted | Quiet for 16 judged nights of 10; its planted mutant is none. |
realtime |
informing | 0 of 10 | none planted | Fires every night on production too (1 finding): it cannot stay quiet until production is fixed, so it stays informing or is deleted at 2.0. |
The harness's own service levels: 5 of 6 hold
5 of 6 hold; missed: aa-clean. A stale or rare forecast is one nobody can trust, whatever its Gate. Freshness is how old the newest of each thing is; rates are counted over the last 14 finished nights. Opinionated on purpose: the targets are a ratchet, raised by PR and never lowered to turn this green. Advisory, like the rest of this page.
| Level | Target | Now | Holds |
|---|---|---|---|
forecast-fresh freshness |
the newest Main to RC forecast at most 26 hours old | 0 hours old | holds |
aa-fresh freshness |
the newest nightly A/A at most 26 hours old | 1 hour old | holds |
mutants-fresh freshness |
the newest mutants self-test at most 8 days old | 2 hours old | holds |
nights-judged rate |
at least 90% of the last 14 nights judged or unchanged | 14 of 14 nights (100%) | holds |
aa-clean rate |
at least 90% of the last 14 nights with a clean, verified A/A | 6 of 14 nights (43%) | missed |
mutants-caught rate |
100% of planted mutants caught by the newest self-test | 16 of 16 mutants (100%) | holds |
Tonight: Mon 19 Oct, 10:46 UTC
- Commit to branch from
2bff81a779424d44aab12c4e4074a75c4457eac8- Judged by
- harness
1.48.7
Tests read the monorepo's quality record for the judged commit, generated 2026-10-19 (68m before the forecast). The strip is a reading aid: it never changes the Gate, the score or an exit code.
What each light read
| Light | Check | State | Reading |
|---|---|---|---|
| Speed | No journey or startup significantly slower, or outside production's control limits | look | 4 slowdowns (advice, not a failure): catalogue: ready slower on b: median 2366 ms → 5471 ms (+131%), p=0.012, n=5/5; live: ready slower on b: median 2362 ms → 5342 ms (+126%), p=0.012, n=5/5; reader: ready slower on b: median 2370 ms → 5392 ms (+128%), p=0.012, n=5/5; and 1 more startup:catalogue/ready:105 · startup:live/ready:106 · startup:reader/ready:107 |
| Speed | k6 failure rate 0 on main | within reason | p95 2.03 ms on production, 2.01 ms on main; 0 of 600 requests failed the load |
| Metrics | No unclaimed metrics hunk | look | 2 unclaimed metrics hunks: time: new series on b: http_request_duration_seconds_count; time: new series on b: http_requests_total metrics:http_request_duration_seconds_count:54 · metrics:http_requests_total:55 |
| Tests (harness) | Every journey completed on both sides | within reason | every journey completed on both sides |
| Tests (harness) | The A/A it relied on clean, at most 2 days old | within reason | A/A clean (0 differences), 58m before the run the A/A |
| Tests (harness) | The newest weekly mutants self-test caught every mutant | within reason | 16 of 16 mutants caught, 2026-10-19 self-test of 2026-10-19 |
| Tests (monorepo) | The Nightly green on the commit | within reason | Nightly green on 2bff81a quality.json · the Nightly run |
| Tests (monorepo) | No changed package below 80% mutation score | look | 3 changed packages below 80%: @tutors/ui-navigators 55.11%, @tutors/i18n 72.73%, @tutors/metrics 75.93% quality.json · the Nightly run |
The 4 image digests
readersha256:73b1ebbdfe9bce2ab10e7a98152233b228b9fc77cdbb734fc1bce265f4fa4d6ecataloguesha256:b2ab9fd4335643301310e95f2cf72b5b92bd7a7dd5fd18294829d29195c78cdflivesha256:186f1ca2bdb02c72334940831a2f1addcc88bcfa7fc7e53a5f635e49e41e135ftimesha256:5925f643dc9a39f96eb5e9625fc1669662a23f91655b55d68bbad8cb061a3f76
Night by night
| Night | Main | Gate | Unclaimed | Claimed | Coverage | New / gone | Quality | Evidence |
|---|---|---|---|---|---|---|---|---|
| Mon 19 Oct 10:46 UTC | sha-2bff81a commitbeside 17.0.0 |
FAIL 8 informing | 92 | 11 | 10% | +0 / −0 | Speed: lookMetrics: lookTests: look | report · migration PASS · upgrade PASS · run |
| earlier, 10:14 UTC | sha-2bff81a commitbeside 17.0.0 |
FAIL 8 informing | 92 | 11 | 10% | +0 / −0 | Speed: lookMetrics: lookTests: look | report · migration PASS · upgrade PASS · run |
| earlier, 08:41 UTC | sha-8534430 commitbeside 17.0.0 |
WARN 21 informing | 92 | 11 | 10% | +6 / −0 | Speed: lookMetrics: lookTests: look | report · migration PASS · upgrade PASS · run |
| earlier, 02:24 UTC | sha-83d4ccf commitbeside 17.0.0 |
WARN 25 informing | 86 | 11 | 11% | +36 / −0 | Speed: within reasonMetrics: within reasonTests: look | report · migration PASS · upgrade PASS · run |
| Sun 18 Oct 12:16 UTC | sha-83d4ccf commitbeside 17.0.0 |
FAIL 26 informing | 50 | 11 | 18% | +1 / −6 | Speed: within reasonMetrics: within reasonTests: look | report · migration PASS · upgrade PASS · run |
| earlier, 07:39 UTC | sha-83d4ccf commitbeside 17.0.0 |
FAIL 25 informing | 55 | 11 | 16% | +20 / −0 | Speed: within reasonMetrics: within reasonTests: look | report · migration PASS · upgrade PASS · run |
| earlier, 02:06 UTC | sha-83d4ccf commitbeside 17.0.0 |
FAIL 24 informing | 35 | 10 | 22% | +17 / −0 | Speed: within reasonMetrics: within reasonTests: look | report · migration PASS · upgrade PASS · run |
| Sat 17 Oct 10:09 UTC | sha-83d4ccf commitbeside 17.0.0 |
PASS 32 informing | 18 | 5 | 21% | +0 / −0 | Speed: within reasonMetrics: within reasonTests: look | report · migration PASS · upgrade PASS · run |
| earlier, 09:47 UTC | sha-83d4ccf commitbeside 17.0.0 |
FAIL 22 informing | 18 | 5 | 21% | +0 / −0 | Speed: within reasonMetrics: within reasonTests: look | report · migration PASS · upgrade PASS · run |
| earlier, 09:25 UTC | sha-83d4ccf commitbeside 17.0.0 |
FAIL 31 informing | 18 | 5 | 21% | +0 / −0 | Speed: within reasonMetrics: within reasonTests: look | report · migration PASS · upgrade PASS · run |
| earlier, 09:04 UTC | sha-83d4ccf commitbeside 17.0.0 |
FAIL 34 informing | 18 | 5 | 21% | +6 / −0 | Speed: within reasonMetrics: within reasonTests: look | report · migration PASS · upgrade PASS · run |
| earlier, 07:12 UTC | sha-83d4ccf commitbeside 17.0.0 |
FAIL 28 informing | 12 | 5 | 29% | +12 / −0 | Speed: within reasonMetrics: within reasonTests: look | report · migration PASS · upgrade PASS · run |
| Fri 16 Oct 07:11 UTC | sha-c867ee8 commitbeside 17.0.0 |
PASS 24 informing | 0 | 5 | 100% | +0 / −0 | Speed: within reasonMetrics: within reasonTests: look | report · migration PASS · upgrade PASS · run |
| Thu 15 Oct 21:21 UTC | sha-c867ee8 commitbeside 17.0.0 |
PASS 32 informing | 0 | 5 | 100% | +0 / −1 | Speed: within reasonMetrics: within reasonTests: look | report · migration PASS · upgrade PASS · run |
| earlier, 19:51 UTC | sha-c867ee8 commitbeside 17.0.0 |
FAIL 14 informing | 1 | 5 | 83% | +0 / −5 | Speed: lookMetrics: within reasonTests: look | report · migration PASS · upgrade PASS · run |
| earlier, 18:04 UTC | sha-d3d7227 commitbeside 17.0.0 |
FAIL 14 informing | 6 | 0 | 0% | first beside 17.0.0 | Speed: lookMetrics: within reasonTests: look | report · migration PASS · upgrade PASS · run |
| earlier, 07:53 UTC | sha-51e5dcb commitbeside 16.2.2 |
FAIL 80 informing | 412 | 702 | 63% | +6 / −4 | Speed: lookMetrics: within reasonTests: look | report · upgrade FAIL · run |
| Wed 14 Oct 08:03 UTC | sha-7feefea commitbeside 16.2.2 |
FAIL 83 informing | 410 | 700 | 63% | +40 / −17 | Speed: lookMetrics: within reasonTests: look | report · migration PASS · upgrade FAIL · run |
| Tue 13 Oct 09:52 UTC | sha-f0a9159 commitbeside 16.2.2 |
FAIL 80 informing | 387 | 700 | 64% | +203 / −34 | Speed: within reasonMetrics: within reasonTests: look | report · migration PASS · upgrade FAIL · run |
| Mon 12 Oct 09:36 UTC | sha-591c54e commitbeside 16.2.2 |
FAIL 76 informing | 218 | 700 | 76% | +17 / −1 | Speed: lookMetrics: within reasonTests: look | report · migration PASS · upgrade FAIL · run |
| Sun 11 Oct | sha-a5d00c5unchanged since Sat 10 Oct |
FAIL | as then | as then | as then | +0 / −0 | as then | skipped: success |
| Sat 10 Oct 08:55 UTC | sha-a5d00c5 commitbeside 16.2.2 |
FAIL 72 informing | 202 | 700 | 77% | +0 / −0 | Speed: lookMetrics: within reasonTests: look | report · migration PASS · upgrade FAIL · run |