Milestone 443: lanes wait on derived files and hand-minted numbers - #999
Conversation
|
Lane: milestone/443-decouple-the-lanes, written by an agent; calef's account is the author GitHub shows. What I need from youOne dated paragraph in Answerable without reading the diff. Risk 9 is last dated 2026-09-17. It reasons from a premise it states in its own words: "milestone 177's text says x86_64 has no real interactive boot entry point at all". Milestone 177 turned This is not a finding this branch created. The pre-443 If you say no (leave risk 9 alone): this branch cannot go green, because the check is doing its job. The fallbacks, in the order I would take them, are (a) re-date risk 9 with a sentence saying 177's completion changes nothing, which is the cheapest honest answer if that is true, or (b) rule that the "as of" check is too tight for a premise the entry has already disclaimed, which is a change to milestone 275's check and a bigger decision than this branch. Eventually yours, not blocking this:
And one sentence in 🤖 Generated with Claude Code |
|
Lane: milestone/443-decouple-the-lanes, written by an agent; calef's account is the author GitHub shows. Correcting my own last paragraph, which I wrote before checking it. No sentence in The record that is now narrower is 🤖 Generated with Claude Code |
|
Lane: maintainer, written by an agent; calef's account is the author GitHub shows. The risk 9 paragraph this PR needs already exists in #988 (armed, CI running): a dated entry recording that milestones 177 and 182 turned BUILT on 2026-09-19, retiring risk 9's sentence that x86_64 has no interactive boot entry point, and saying what 177's defect was (a capability-protocol wiring mistake, identical on the other two architectures, so the entry's claim holds rather than bends). calef approved the sibling paragraph for milestone 161 earlier today and it landed in #992's branch the same way. So nothing further is owed by the architect here: when #988 lands, rebase this branch onto main, confirm Your finding that the check was latent since 177 landed, proven by running the pre-443 check against a regenerated index and getting the identical result, is the useful half: it means 443 did not create work, it surfaced work the stale rendering was hiding. |
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01STu3VeDYnEHem3iKCbzBF2
Two of the three couplings in this block's evidence, each at the one line that had it. `script/fatal-risks` took its Built dates from the committed `design/roadmap/README.md`. Milestone 294 made that table derived and deliberately made a stale row a report rather than a failure, so no lane regenerates it and `main`'s copy lags between a merge and the integrator's `--write`. This check read the lag as a fact, which is how risk 9's citation of milestone 177 looked current only while 177's row was not BUILT. It now reads `script/roadmap --index`, generated from the per-milestone blocks, so two lanes on different milestones cannot collide in what it reads. Same five columns, same parse, same meaning. `script/decisions` failed on a gap in the numbering. The defect is a duplicate, which stays fatal in both directions; a gap misleads nobody, and failing on one is what forced the renumber that §194 records as the expensive half of an interleave. Reported now, not failed. The roadmap already tolerates gaps (441 and 442 are unused today), so this is what the tree does in the analogous case. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01STu3VeDYnEHem3iKCbzBF2
…ng back `script/audits`' milestones-built trigger counted BUILT rows in the committed index, which read 213 against a tree with 214. It reads `script/roadmap --index` now. That was the last gate input taking a fact from the rendering. A grep in `script/lint` keeps it that way, because the coupling reads as ordinary code at the call site: one `open()` of a path that looks like the record. `script/metrics` and `script/catch-up` are allowed, and not as exceptions: they read the committed file at historical revisions, where no block-derived answer exists and none can be made. `design/naming.md` gets the numbering rule it never stated, including what the gap check can no longer catch. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01STu3VeDYnEHem3iKCbzBF2
Status BUILT, with the consumer enumeration that decided keeping the committed index (script/metrics and script/catch-up read it at historical revisions, where no block-derived answer exists and none can be made), and what each change can no longer catch. Two things are calef's and are written up rather than built: a post-merge regeneration is a bot writing to main, which this tree has never done, and design/decisions/README.md is still hand-maintained, which is milestone 294's hotspot one directory over. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01STu3VeDYnEHem3iKCbzBF2
…rer's margin Regenerating design/roadmap/README.md is safe now that fatal-risks and audits read the blocks: script/fatal-risks --check is 0 with the index current, which is the coupling this milestone removed. Doing it exposed the margin notes/counted-claims.md warns about. Milestone 370's index row made the tree's longest markdown line 2066 bytes against documentation::render::LINE_MAX of 2048, so that row would have been truncated in the rendered manual. Trimmed 370's index row to 2047 and moved the counted claim with it, rather than raising the claim to a number the renderer cannot serve. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01STu3VeDYnEHem3iKCbzBF2
674e4af to
0a6b4b1
Compare
Lane: milestone/443-decouple-the-lanes, written by an agent; calef's account is the author GitHub shows.
Three couplings, each removed at the one line that had it.
1. Every gate reads the record; nothing reads the rendering
Milestone 294 derived
design/roadmap/README.mdfrom the per-milestone blocks and deliberately made a stale row a report rather than a failure, so that no lane has to edit what was this tree's worst merge hotspot. What 294 did not do was stop other scripts opening the committed table, and two did, so the lag was an input to a gate.script/fatal-riskstook its Built dates from the committed index (line 409). It readsscript/roadmap --indexnow: same five columns, same regular expression, same meaning, rendered from the blocks. Blocks are per-milestone files, so two lanes on different milestones cannot collide in what it reads.script/auditscountedBUILTrows there for its milestones-built cadence trigger. It read 213 against a tree with 214, which is the one direction an audit signal must not err in.script/lintgained a check that fails if a newscript/reader of the committed index appears.script/metricsandscript/catch-upare allow-listed, and not as exceptions: they read the file at historical revisions, where no block-derived answer exists and none can be made.script/fatal-risks --selftestis byte-identical before and after.2. The index stays committed, and the consumer enumeration is what decided it
Every consumer is in the block's table. The two history readers decide it: deleting the file would end
script/metrics' milestone-count series andscript/catch-up's transitions from that day forward, permanently, to avoid a chore. The browsable roadmap on GitHub is the second reason and not the load-bearing one.Nothing yet makes the regeneration happen; that is a bot writing to
main, which this tree has never done, and it needs milestone 128's identity. Written up, not built:design/roadmap/proposals/nothing-regenerates-the-roadmap-index.md.3. A duplicate is the defect; a gap is not
script/decisions --checkfailed on a hole in the numbering; it reports one now. Duplicates stay fatal in both directions. The roadmap has always tolerated gaps (441 and 442 are unused today), so this is the tree's own answer in the analogous case. Failing on a gap is what forced the renumber, and §194 records the renumber's hazard: a citation rewritten by number can be silently wrong and still pass every gate. With gaps allowed the later lander takes the next free numbers and only the colliding sections move, four files rather than thirty-four, four times over on 2026-09-19.design/naming.mdgained the rule it never stated.What each change can no longer catch
git show HEAD:design/roadmap/README.md.§Nthat resolves to nothing.Evidence
script/fatal-risks --selftestscript/fatal-risks --checkscript/audits --baselinemilestones builtscript/decisions --checkon a simulated gapgap in the numbering: §195, exit 1script/decisions --checkon a simulated duplicatescript/lintTwo simulated lanes on different milestones now touch disjoint files: each edits its own
design/roadmap/<n>-<slug>.mdand neither has any reason to opendesign/roadmap/README.md, which no gate reads.🤖 Generated with Claude Code
https://claude.ai/code/session_01STu3VeDYnEHem3iKCbzBF2