Overnight readiness · main against production, the last 10 nights

Built 2026-10-19 11:07 UTC by harness 1.49.0 · home · A3 · scoreboard · claims · control chart · soak toward 2.0 · service levels · readiness.json

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.

Claimed: known11differences a claim covers · in the report
Unclaimed: gaps92failing differences no claim covers · in the report
Coverage10%claimed of claimed plus unclaimed
Claims owed6draft claims, one per cause, to name a Rule for or fix · the drafts
ArtefactClaimed (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.

Merged PRs per release, and what is on main now (the diamond)
0100200UCL 81.9Centre 21.1LCL 0Provisional limits: 7 releases of the 10 neededv16.1.5 (11 Sept): 6 merged PRs since v16.1.416.1.5v16.1.6 (14 Sept): 1 merged PR since v16.1.516.1.6v16.1.8 (14 Sept): 8 merged PRs since v16.1.616.1.8v16.2.0 (16 Sept): 5 merged PRs since v16.1.816.2.0v16.2.1 (17 Sept): 11 merged PRs since v16.2.016.2.1v16.2.2 (18 Sept): 4 merged PRs since v16.2.116.2.2v17.0.0 (14 Oct): 113 merged PRs since v16.2.2, above UCL: a special cause17.0.0On main, not yet released: 16 PRs since v17.0.0. Below the centre line16: Below the centre linemain now0100200UCL 81.9Centre 21.1LCL 0Provisional limits: 7 releases of the 10 neededv16.1.5 (11 Sept): 6 merged PRs since v16.1.416.1.5v16.1.6 (14 Sept): 1 merged PR since v16.1.5v16.1.8 (14 Sept): 8 merged PRs since v16.1.6v16.2.0 (16 Sept): 5 merged PRs since v16.1.816.2.0v16.2.1 (17 Sept): 11 merged PRs since v16.2.0v16.2.2 (18 Sept): 4 merged PRs since v16.2.1v17.0.0 (14 Oct): 113 merged PRs since v16.2.2, above UCL: a special cause17.0.0On main, not yet released: 16 PRs since v17.0.0. Below the centre line16: Below the centre linenow

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

Unreleased PRs on main, night by night, from each kept forecast, against the same lines
0100200UCL 81.9Centre 21.1LCL 0Provisional limits: 7 releases of the 10 needed28 Sept: 58 PRs on main since 16.2.2 (sha-185e87f), Release now28 Sept29 Sept: 65 PRs on main since 16.2.2 (sha-90cb998), Release now30 Sept: 67 PRs on main since 16.2.2 (sha-865d02f), Release now30 Sept1 Oct: 69 PRs on main since 16.2.2 (sha-c0a0965), Release now2 Oct: 79 PRs on main since 16.2.2 (sha-b35eddd), Release now2 Oct3 Oct: 81 PRs on main since 16.2.2 (sha-4993e86), Release now5 Oct: 83 PRs on main since 16.2.2 (sha-fa9e38f), Release now5 Oct6 Oct: 84 PRs on main since 16.2.2 (sha-a5796e9), Release now7 Oct: 86 PRs on main since 16.2.2 (sha-a40307a), Release now7 Oct8 Oct: 87 PRs on main since 16.2.2 (sha-7c5f248), Release now9 Oct: 94 PRs on main since 16.2.2 (sha-ff4fe9c), Release now9 Oct10 Oct: 95 PRs on main since 16.2.2 (sha-a5d00c5), Release now12 Oct: 97 PRs on main since 16.2.2 (sha-591c54e), Release now12 Oct13 Oct: 105 PRs on main since 16.2.2 (sha-f0a9159), Release now14 Oct: 108 PRs on main since 16.2.2 (sha-7feefea), Release now14 Oct15 Oct: 9 PRs on main since 17.0.0 (sha-c867ee8), Below the centre line16 Oct: 9 PRs on main since 17.0.0 (sha-c867ee8), Below the centre line16 Oct17 Oct: 11 PRs on main since 17.0.0 (sha-83d4ccf), Below the centre line18 Oct: 11 PRs on main since 17.0.0 (sha-83d4ccf), Below the centre line19 Oct: 16 PRs on main since 17.0.0 (sha-2bff81a), Below the centre line19 Oct0100200UCL 81.9Centre 21.1LCL 0Provisional limits: 7 releases of the 10 needed28 Sept: 58 PRs on main since 16.2.2 (sha-185e87f), Release now28 Sept29 Sept: 65 PRs on main since 16.2.2 (sha-90cb998), Release now30 Sept: 67 PRs on main since 16.2.2 (sha-865d02f), Release now1 Oct: 69 PRs on main since 16.2.2 (sha-c0a0965), Release now2 Oct: 79 PRs on main since 16.2.2 (sha-b35eddd), Release now3 Oct: 81 PRs on main since 16.2.2 (sha-4993e86), Release now3 Oct5 Oct: 83 PRs on main since 16.2.2 (sha-fa9e38f), Release now6 Oct: 84 PRs on main since 16.2.2 (sha-a5796e9), Release now7 Oct: 86 PRs on main since 16.2.2 (sha-a40307a), Release now8 Oct: 87 PRs on main since 16.2.2 (sha-7c5f248), Release now9 Oct: 94 PRs on main since 16.2.2 (sha-ff4fe9c), Release now9 Oct10 Oct: 95 PRs on main since 16.2.2 (sha-a5d00c5), Release now12 Oct: 97 PRs on main since 16.2.2 (sha-591c54e), Release now13 Oct: 105 PRs on main since 16.2.2 (sha-f0a9159), Release now14 Oct: 108 PRs on main since 16.2.2 (sha-7feefea), Release now15 Oct: 9 PRs on main since 17.0.0 (sha-c867ee8), Below the centre line16 Oct: 9 PRs on main since 17.0.0 (sha-c867ee8), Below the centre line17 Oct: 11 PRs on main since 17.0.0 (sha-83d4ccf), Below the centre line18 Oct: 11 PRs on main since 17.0.0 (sha-83d4ccf), Below the centre line19 Oct: 16 PRs on main since 17.0.0 (sha-2bff81a), Below the centre line19 Oct

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
ReleaseCutPRsAgainst the limits
v16.1.511 Sept6within the limits
v16.1.614 Sept1within the limits
v16.1.814 Sept8within the limits
v16.2.016 Sept5within the limits
v16.2.117 Sept11within the limits
v16.2.218 Sept4within the limits
v17.0.014 Oct113above UCL: a special cause
main now19 Oct16Below the centre line (not released; since v17.0.0)
NightMainPRsZone
2026-09-28sha-185e87f58Release now (since 16.2.2)
2026-09-29sha-90cb99865Release now (since 16.2.2)
2026-09-30sha-865d02f67Release now (since 16.2.2)
2026-10-01sha-c0a096569Release now (since 16.2.2)
2026-10-02sha-b35eddd79Release now (since 16.2.2)
2026-10-03sha-4993e8681Release now (since 16.2.2)
2026-10-05sha-fa9e38f83Release now (since 16.2.2)
2026-10-06sha-a5796e984Release now (since 16.2.2)
2026-10-07sha-a40307a86Release now (since 16.2.2)
2026-10-08sha-7c5f24887Release now (since 16.2.2)
2026-10-09sha-ff4fe9c94Release now (since 16.2.2)
2026-10-10sha-a5d00c595Release now (since 16.2.2)
2026-10-12sha-591c54e97Release now (since 16.2.2)
2026-10-13sha-f0a9159105Release now (since 16.2.2)
2026-10-14sha-7feefea108Release now (since 16.2.2)
2026-10-15sha-c867ee89Below the centre line (since 17.0.0)
2026-10-16sha-c867ee89Below the centre line (since 17.0.0)
2026-10-17sha-83d4ccf11Below the centre line (since 17.0.0)
2026-10-18sha-83d4ccf11Below the centre line (since 17.0.0)
2026-10-19sha-2bff81a16Below 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.

NightCounts asRunWhat 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.

CheckLevel nowQuiet nightsPlanted mutantFor 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.

LevelTargetNowHolds
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

GateFAILmain sha-2bff81a beside production 17.0.0
Unclaimed92differences the next release owes a claim or a fix
Informing8realtime 1 · asset-graph 7. found by informing engines and not claimed: reported, never gates · see them
New / gone since the last forecast+0 / −0against sha-2bff81a, 2026-10-19 10:14 UTC
Commit to branch from
2bff81a779424d44aab12c4e4074a75c4457eac8
Evidence
report · migration PASS · upgrade PASS · run
Judged by
harness 1.48.7
Quality · a reading aid beside the Gate, never an input to it
Speed lookp95 2.03 ms on production, 2.01 ms on main; 0 of 600 requests failed; 4 slowdowns to look at, advice only: 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 moreWithin reason when: No journey, page or startup significantly slower (advice: timing never fails the Gate); k6 failure rate 0 on mainstartup:catalogue/ready:105 · startup:live/ready:106 · startup:reader/ready:107 · the load
Metrics look2 unclaimed metrics hunks: time: new series on b: http_request_duration_seconds_count; time: new series on b: http_requests_totalWithin reason when: No unclaimed metrics hunkmetrics:http_request_duration_seconds_count:54 · metrics:http_requests_total:55
Tests lookharness half: within reasonmonorepo half: lookHarness: within reason. Monorepo (record for the judged commit, 68m old): 3 changed packages below 80%: @tutors/ui-navigators 55.11%, @tutors/i18n 72.73%, @tutors/metrics 75.93%; the Nightly within reason.Within reason when: Harness: every journey completed on both sides, the A/A clean and at most 2 days old, every mutant caught. Monorepo: the Nightly green on the commit, no changed package below 80% mutation scorethe A/A · self-test of 2026-10-19 · quality.json · the Nightly run

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
LightCheckStateReading
SpeedNo journey or startup significantly slower, or outside production's control limitslook4 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
Speedk6 failure rate 0 on mainwithin reasonp95 2.03 ms on production, 2.01 ms on main; 0 of 600 requests failed
the load
MetricsNo unclaimed metrics hunklook2 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 sideswithin reasonevery journey completed on both sides
Tests (harness)The A/A it relied on clean, at most 2 days oldwithin reasonA/A clean (0 differences), 58m before the run
the A/A
Tests (harness)The newest weekly mutants self-test caught every mutantwithin reason16 of 16 mutants caught, 2026-10-19
self-test of 2026-10-19
Tests (monorepo)The Nightly green on the commitwithin reasonNightly green on 2bff81a
quality.json · the Nightly run
Tests (monorepo)No changed package below 80% mutation scorelook3 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
  • reader sha256:73b1ebbdfe9bce2ab10e7a98152233b228b9fc77cdbb734fc1bce265f4fa4d6e
  • catalogue sha256:b2ab9fd4335643301310e95f2cf72b5b92bd7a7dd5fd18294829d29195c78cdf
  • live sha256:186f1ca2bdb02c72334940831a2f1addcc88bcfa7fc7e53a5f635e49e41e135f
  • time sha256:5925f643dc9a39f96eb5e9625fc1669662a23f91655b55d68bbad8cb061a3f76

Night by night

NightMainGateUnclaimedClaimedCoverageNew / goneQualityEvidence
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