docs(roadmap): sync the closed-beta roadmap to the W37 close
Runs the ### Weekly sync workflow at the foot of docs/roadmap/closed-beta.md, steps 1 through 10, for the W37 close (sprint 2026-09-07 – 2026-09-13). Primary input is the W37 end-of-week results note on #1202 (closed); every figure restated as current was re-derived on 2026-09-15 at origin/main efcdaafb3 from the plan Status tables, docs/specs/README.md, and the API. Defects are read from the ~AR-Blocks::* labels group-wide, not from the sprint issue's blockers table.
One file changes: docs/roadmap/closed-beta.md.
What moved
- Header and throughput —
Last updated: 2026-09-15; W37's 166 first-parent merges (111 feat/fix/docs, 90 non-bot; 55 other/bot, 23 non-bot) recorded with the stacking caveat: 63 merges went to stacked branches against W36's 6, so total merge activity fell 266 → 229, −14%, not −36%. 33.2 MRs/day against W36's 52.0; 58 releases; review queue 47 → 36 with !764 (closed) still oldest at 76 days. - Launch gate — rewritten around 2 open
~AR-Blocks::Closed-Beta(#417 (closed), #1326), both~priority::1, both assigned,~priority::2empty; down from 16 at the W36 close. Adds the per-item table of everything that left the list from 09-07 on, split into fixes, closures without a code fix, and the two de-labelled descopes.~AR-Blocks::GAis 40 group-wide (37 here) against 28 at 09-08. - Cross-service blockers — #1070 and #1162 closed 09-14 after five
runway-provisionerMRs, verified on production; both live caveats (#1331 cache-bypass observability, #1325 staging limit reverted) recorded. The External workstreams Runway row and the external-graph annotation both flip from "waits on" to "cleared". - Readiness gates — new paragraph for readiness!85: out of Draft 2026-09-14 after 180 days, split into readiness!151–!160 (merged), blocking discussions resolved, owning-team approvals outstanding.
- Spec coverage — 33/55 Approved, 40/55 approved-or-better, denominator 54 → 55 (monolith/S15 arrived
Approvedind48ab0e97),Implemented7 → 6 (S11 regressed toIn Progressin5d073958a). Per-table split refreshed; S11's regression added as a third named document-status inconsistency. - Scope table — S04 encryption (5/11 recorded, past due, live tail named), S09 (20/20 recorded, verdicts follow-on 10/10, #597 closed), S11 (spec regression), S17 (container manifest reads 18/21 added to
Remaining), S18 (repository-column-writers 4/5), S20-A, S22, S28 (81 days), S30, S31, S32, and the frontend row, which is renamed Frontend (monolith S01–S15) and rewritten around the four live monolith plans. - Delivery timeline — the 2026-09-11 readiness target is recorded as passed unmet, the second slip after 2026-09-07, with the
CD: Closed Betagroup milestone's 2026-09-15 due date noted and no successor date invented. Fast-follow list, milestone rows, and the capacity notes re-read at 2026-09-15; the binding constraint is restated as approvals rather than authoring throughput. - Gantt — bars that ended at the 2026-09-11 target now end at 2026-09-15, the sync date, and the Sourcing block says explicitly that this means "still open", not a new forecast. The readiness-target milestone stays on 2026-09-11, relabelled "passed". Added:
S17 Container manifest readsbar,PREP readiness !85 — out of Draftbar,Cross-service defects clearedmilestone. S30's bar moves to its plan-merge date and is labelledplan merged, 0/25. S28 and the integration bar extended to the sync date. No date was invented and no milestone date changed. - Dependency graphs (step 7c) — both graphs checked node by node against the scope table. No node was added, removed, or renamed:
S30andFEalready carry the two workstreams W37 moved furthest, and the frontend row's rename does not change theFEnode's label. What changed is prose: the external graph'sRUNWAY -.deployment environment.-> DEPLOYannotation no longer claims to carry launch-gating work, and a sentence now records the node-by-node check and why the monolith stream stays one node. - Agent instructions — source-of-truth hierarchy now says to count the gate from the label group-wide, not the epic tree, with W37's evidence; the sync-input paragraph points at the W37 note and W38 (#1352); a new paragraph warns that a results note is a reading, not a fact of record.
Claims corrected, with evidence
| Claim the file carried | Correction | Evidence |
|---|---|---|
| "roughly 35 merged monolith MRs are unrecorded" across 17 plans, 72 of 166 rows | 19 plans, 185 rows, 101 recorded, 7 plans complete; !2664 (open, green) fills 50 more, giving 151/185 with 34 blank | Counted at efcdaafb3; !2664's own diff |
| S09 has 7 blank rows holding merged MRs; S16 has rows 17 and 18 | S09 20/20 recorded since f1bbd312e (09-08); S16 26/26 since 0541936a2 (09-11) |
Both commits on main, inside the W37 window |
| S30 has "no plan file, no plan MR, and no branch" | Plan on main since 2026-09-10 at docs/plans/2026-09-10-s30-maven-virtual.md, 25 rows, none recorded |
File at efcdaafb3 |
| !2357 (merged) (virtual collection mode) open and gating S30/S31 step MRs | Merged 2026-09-08; unblocks the fast-follow, does not pull it into scope. !2219 (merged) merged 09-08 too | API |
| S09 permission-verdicts follow-on at 8/10; #597 open with a 2026-09-09 PSIRT date | 10/10 merged and recorded (both MRs merged 09-07); #597 closed 09-08 as a duplicate of #862 (closed), already fixed by !2266 (merged) | API, plan table |
| Severity retired as of 2026-09-07 | Retired in policy only: 98 open issues still carry one (6/34/58 at ::2/::3/::4) |
Label counts, 2026-09-15 |
"docs/dev/labels.md has not caught up — merge !2393 (merged) first" |
!2393 (merged) merged 2026-09-10; the file, the section and the epic now agree | API, docs/dev/labels.md |
| #513/#514 open administratively; three encryption findings open | #513/#514 closed 09-11; #1094/#1099/#1102 closed 09-08 | API |
S11: ".gitlab-ci.yml carries no npm conformance job" (contradicting the same row) |
The interim conformance:npm:s3-garage job is in .gitlab-ci.yml at efcdaafb3; what is missing is the registry-conformance runner |
.gitlab-ci.yml:3210 |
S18 row: trackArtifactEvent has "exactly one non-test site" |
Four in the npm package at efcdaafb3, none of them a remote read — #783 still unfixed |
grep at efcdaafb3 |
| S32 at 5/19 with step 2 open | Step 2 (!2277 (merged)) merged 09-11 into a blank row: 5 recorded, 6 merged | API, plan table |
| S22 follow-on !2262 (merged) open | Merged 2026-09-08 | API |
Correction to an earlier revision of this description (fixed in the second commit). It claimed the W37 note's monolith figures were each one high. They are not: 101 recorded of 185, 151 after !2664, 34 blank are all correct, and the file now carries them. The difference was a counting rule, not an error in the note — step 10 of docs/plans/monolith/2026-08-20-repository-crud-remote.md has an MR cell reading "closed as unnecessary, no MR", so the row is recorded under the convention's "an empty cell means not yet recorded" while naming no MR. Counting rows that name an MR gives 100/150/35; counting recorded rows gives 101/151/34. The file now states both readings so either is checkable, and ### Source of truth hierarchy records the two traps for the next sync: a Status row id is not always an integer (4a, 4b, 5a, 11a are real rows, and a counter keyed on ^\d+$ drops four of the 185 — the row total gives that miscount away), and a filled MR cell is not always an MR. !2664 fills exactly 50 rows across 12 plans under either rule, and the 7 complete plans are unaffected.
Two other divergences from the note stand, and neither is a monolith figure: reading the label rather than the note's blocker table surfaces two gate closures the table omits — #1043 (closed) (fixed 09-10) and gitlab#626558 (fixed 09-07, outside this project) — and the epic-issues endpoint returns 50 open children at 2026-09-15 against the note's 51, a gap this sync did not chase down and records as such rather than calling the note wrong.
Left alone under Step 10
- DRI assignments — unchanged. The two new rows in
### Workstream assignments(beta docs, e2e coverage) name the existing MR author/assignee and say so in the cell rather than assigning anyone. - "Credible closed beta" milestone — still "Week of Aug 24", untouched.
- No GA date or future-phase scope added. The GA-facing items recorded (#1273, #1275, #1325) are existing labels, not new scope.
- No row removed from the scope table; every stale row was corrected in place, and the frontend row was renamed rather than replaced.
docs/roadmap.mdnot touched, and noLast updateddate added to it.- No successor launch date invented for the 2026-09-11 slip; the committed 2026-09-07 date and the
spine.mdreconciliation note stand as they were. - Nothing outside
docs/roadmap/closed-beta.mdwas edited — no plan file, no spec, nodocs/dev/**.
Notes for the reviewer
- This is maintenance/toil (a weekly roadmap sync), so no
Related toline is required. - The diff is ~400 changed lines in one prose-and-tables file. Splitting it would break the sync's single-commit-per-close pattern and leave the document internally inconsistent between halves, so it ships whole; there is no code in it.
- The commit was created through the Commits API rather than pushed from the worktree: the local 1Password SSH agent is locked (
ssh-add -lreports no identities), which blocks both SSH push andcommit.gpgsign. The commit is therefore unsigned. If a signed commit is wanted, re-create it locally once 1Password is unlocked.