Changes touching this path
- the docs CLI page stops being a hand-curated list and becomes a SET RELATION against the verb set the CLI declares: the described table stays a curated SUBSET and is stated as one, a name-only index carries the rest, and the check asserts the two are DISJOINT and their UNION EQUALS the declared 81 - so a landing verb with no entry is red, and an invented command is red the OTHER WAY. the oracle is the USAGE string read exactly as the CLI own guards read it, and it qualifies as the set the CLI DECLARES rather than a second list beside it because #66 already pins USAGE set-equal to the dispatch table in BOTH directions - so USAGE simply IS that table rendered as text, and text is what a vitest check can read without putting a Rust build in the site gate path. the page was stale in BOTH directions and the second one is worse: eight verbs were missing, including heads and cat which this ticket named and diff, restore, split, move, notes and range-diff which it could not have known about - but the page was also PUBLISHING THREE COMMANDS THAT DO NOT EXIST, loot dock, loot dock merge and loot docks, retired by #253 and by ADR 0063 and still on the LIVE page telling readers to run them. a full 81-paragraph table was rejected rather than forgotten: it is worse documentation and every docs surface pays the bytes. the check is proved live in BOTH directions with counts read - deleting a name reddens the missing-verb and union assertions, restoring the real retired rows reddens the does-not-ship assertion, a fictional flag reddens the flag check, and mutating the extractor reddens the CONTROL FIRST, which is what stops a broken extractor from reading as agreement. the byte budget REFUSED and the raise is recorded with a measurement rather than an apportionment: fifty-one docs surfaces moved by within six bytes of each other, which says ONE SHARED CHUNK and not fifty growths, because the docs index statically imports every content module so the splat route fetches all docs prose whatever page you asked for - confirmed by what did NOT move, since the non-docs surfaces came in at noise. the recovery path is named and explicitly NOT MEASURED, so the reason records a diagnosis as a diagnosis (#1561)
3e499faf · dbf3dbe6…
Renames are not followed. loot's tree maps a path to an address, so a rename is a delete and an add. This list is the history of the name, not of the bytes.