Changes touching this path

  • the docs become fifty-six routed entries derived from one registry that the nav, the reading order, the search and the prerenderer all read, so those four can no longer drift apart the way ten hand-listed surfaces already had to be watched; the thirty-eight pages nobody has written yet are real bookmarkable URLs that say what they will cover and carry noindex until they earn a place in an index, rather than dead rows in a sidebar; and the byte gate learns to walk nested surfaces, which is the only reason the fifty-two new pages weigh anything at all instead of shipping past a gate that read one directory level (#1378) 424be083 · dbf3dbe6…
  • the docs demo runs between two markers that cannot silently widen, and the six surfaces still sending readers to a dead /docs anchor name the route that exists, with a test that fails the next time either class rots (#1394) 3493a354 · dbf3dbe6…diff
  • a docs page fetches its own prose and no other page prose, where content/docs/index.tsx imported every content module statically and the one splat route chunk carried all of it: 9,211 B gzip preloaded on every published docs surface, planned pages included, and a paragraph added to one page moved all of them, so the byte budget reported about fifty regressions for a one-page edit and taught its reader to record the raise rather than investigate it. each module now sits behind its own dynamic import that import.meta.glob finds by directory, keyed by the slug first segment, and each exports CONTENT so the index derives the set instead of listing it. measured on one tree before and after: the route shell falls from 9,211 B to 1,244 B gzip, docs/concepts/cas from 210,980 B to 202,288 B and docs/cli from 214,827 B to 206,137 B, the code-block chunk leaving the eager set with the prose; 52 ceilings are re-recorded down, and the whole-file rewrite carries four raises that measured over before this change as well as after, each with its reason. the prerendered document is unchanged, so what defers is the module hydration wants: headless chrome against the built server renders a written and a planned page whole, and every code fence on the quickstart page reaches its client-only highlighted form, which needs the deferred chunk and a real hydration. site/test/docs-content.test.ts holds the property against the built bytes, refusing a page with no prose to look for and prose no search of the assets can find, and budget.mjs names the shape of a wide refusal under the rows. red under mutation: one content module re-coupled statically (1 failed, 4 passed), a module export renamed (2 failed, 3 passed), a body filed under a slug the registry does not call written (2 failed, 3 passed), entity decoding dropped from the marker extractor so the vacuity guard fires (1 failed, 4 passed), the same-growth check dropped from the hint (1 failed, 22 passed), its unrecorded-row guard dropped (1 failed, 22 passed), and the count dropped from its text (1 failed, 22 passed). no migration, no wire or format byte moves and no forge or relay byte moves; the built site changes, so this owes a site deploy. the site gate is green end to end (659 passed over 53 files, 62 surfaces all under ceiling with nothing recorded) and the workspace suite is green (3952 passed over 122 binaries, 7 ignored) (#1878) 678876e6 · dbf3dbe6…diff
  • the docs byte test refuses an empty set before it concludes anything from one, and the sentences #1877 and #1878 left behind stop counting what code can add to: with eagerHrefs matching nothing the eager-asset half of site/test/docs-content.test.ts was true of nothing and green, measured at 5 passed and 0 failed with that mutation in place against 1 failed and 4 passed once the refusal was written, and the same hole over the pages the registry calls written and over the bodies the modules publish is refused too, each proved by running its mutation without the guard (1 passed) and with it (1 failed). sharedChunkHint stops listing its silences, which were more than the list said, and states the property its guards define, with the row floor named SHAPE_ROWS so the doc cites code rather than a digit, and the CONTEXT.md line loses its whenever. tsconfig.test.json and ADR 0071 stop naming the tests that import tools/budget.mjs, a list #1877 wrote and #1878 falsified in the same session, and the ADR carries both survey numbers, 17 raw of which nine were the first draft of that config own fault and eight genuine over five files. the docs splat route stops describing a fallback it did not have: writtenDoc takes the node a missing body renders, so a written page whose module holds nothing under its slug shows the honest planned template rather than a bare title, verified by renaming one body key and reading the prerendered page, which carried the template on the same tree the gate refused (3 failed, 2 passed). the four content modules point at DocContentModule instead of pasting the rule it defines, the byte test failure message stops saying every docs surface where the set is a union over written pages, and the four raises in budget.json carry their own measurement, +239 B on /docs, +613 B on /install, +681 B on /known-issues and +1,444 B on /privacy, each against the figure its previous ceiling was derived from. the second reason claimed for including src is declined at the code with what refutes it: with src out of the include tsc -b reports exactly one error and it is the routeTree augmentation, import.meta.glob being typed by a type library reference that travels with a dependency rather than with an include. no migration, no wire or format byte moves and no forge or relay byte moves; the built site moves a few bytes per docs surface, all under ceiling with nothing recorded, and no page a reader sees changes. the site gate is green end to end (659 passed and 61 skipped over 60 files, 62 surfaces) and the workspace suite is green (3970 passed over 122 binaries, 7 ignored) (#2088) 45b6f3ec · dbf3dbe6…diff
  • every compiled-in and current-tense loot host moves to loot.build (map #2412, ADR 0099): loot --help names security@loot.build and https://loot.build/trust, ALPHA_PROMISE_URL is https://loot.build/install and the telemetry DEFAULT_ENDPOINT https://loot.build/api/telemetry, so the next release carries them; the site install one-liners, R2_BASE and HOP_BASE (https://dl.loot.build, https://loot.build/dl), the metrics SITE_SCOPE and own-host referrer, the disclosure links on trust, terms, privacy and known-issues, and the install, quickstart and guides pages follow, with the privacy and terms markers moved to 25 September 2026 and re-pinned since readers see the new address; README, CONTEXT.md (the forge door now forge.loot.build), the release checklist, site CI and test fixtures follow, and the two specs carry a note instead of a partial rewrite. the destination census gains build in WEB_TLDS, without which security@loot.build would be invisible to its bare-host clause, and exempts the two shipped lines that tld makes read as hosts (state.build, r.build()) by their exact text; ADR 0074 section 9 says twelve-entry to match. 37 lines still name millerbyte.com outside ADR bodies, evidence, research and scratch, each kept on purpose: dated history, millerbyte.com the site and its @millerbyte/ui tokens, the two noted specs, and relay-era tooling with no successor host, filed as #2438. census red with build dropped from WEB_TLDS, restored; site gate 819 passed and within budget; workspace suite 4559 passed over 142 binaries, 13 ignored (#2418) c5663115 · 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.