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…
  • what makes a line of loot --help a verb declaration is now one rule, in crates/loot-cli/src/usage.rs: the column a verb row is printed in, plus the two spaces before its description, instead of the word loot at the head of a trimmed line. the ticket named three readers of that string and the tree holds more - besides the arity census, the flags-only census and the site page pin it names, the help router, the migrate vis-spec reader, the #67 flag census, the delta-shape rung check and the revset census over the printed output all read it, most with a spelling of their own - and they key on the one function now, the site test included. the typescript cannot call a rust function in the site gate, so it reads DECLARATION and DESCRIPTION_GAP out of that module rather than respelling them, and README is the weld for the code that applies them: its verb block is pinned to the declared set from the rust side and cross-read from the site side, so a reader that drifts from the rule disagrees with README and goes red rather than measuring another population in silence. the second half is a refusal where the line is written: a USAGE line that opens with the word loot either declares a verb or is named in the failure, because such a line prints as a command to the reader of the help even when nothing mints a phantom from it. measured rather than inspected, both directions. with a wrapped description planted in USAGE and the old reading restored, five rust guards and three site assertions went red naming an invented verb changes, one of them telling the reader to give it a row on the docs page (118 passed and 5 failed in the bin, 3 failed and 4 passed on the site); with the rule in place the same line reddens the refusal alone, which prints it (122 passed and 1 failed, site 7 passed), and so does the same wrap landing in the declaration column itself. the other direction still bites: one real verb line deleted reddens seven rust guards and three site assertions (116 passed and 7 failed, site 3 failed and 4 passed). what is not claimed is a wrap that lands in that column and carries a description gap too - that is a verb row by every reading, the reader of the help included. loot view was the row whose shape ran long enough to leave a single space before its description, which made usage_signature answer with the whole line and read description words as positionals, so it gets its gap and that exception leaves the comment; ADR 0066 loses the half of its placement reason this closes. no migration, no wire or format byte moves and no forge or relay byte moves, so this owes no deploy; the workspace suite is green (3975 passed over 122 binaries, 7 ignored) and the site gate is green end to end (662 passed and 61 skipped over 60 files, 62 surfaces) with no ceiling moved (#1883) 2f9db8e6 · dbf3dbe6…diff

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.