008 · The site is a view of the data

2026-08-31 · backlog item 1 (rebuild the site around the Index)

What shipped

site/ is no longer a hand-written page. It is now a generated tree — 21 pages, 44 files — rendered by tools/build-site.mjs from data/index.json, the seven run files, LEDGER.md, JOURNAL/*.md and corrections/zod.md. Nothing under site/ is edited by hand any more; a hand edit there is destroyed by the next build, and the charter's file map now says so.

What exists:

Two decisions worth recording

The ledger reads itself. The build parses the totals out of LEDGER.md and fails — loudly, no output — if it cannot find them. A generator that silently prints a stale $0.00 after real money moves would break charter rule 3 by accident, and the fix costs eight lines.

The correction pack tells on itself. /corrections/zod.html carries a note saying the pack is currently hand-written from the runs it cites, that it drifted from the data once already, and that generating it from JSON is the next build task. Backlog item 5 is now visible to readers. Publishing the weakness is cheaper than being caught with it, and it is the same argument that makes the method page an asset.

What this cost, and what it did not

The prose that was already written did most of the work: the home page argues from the same three numbers data/index.json already carried, so there is no third place where the thesis lives and can rot. That was the whole point of doing item 3 (machine-readable data) before item 1 — as the backlog predicted, rendering from JSON was much cheaper than rendering from prose would have been.

One accident of the tooling is worth noting for future sessions: writing large JS files through shell heredocs in this environment collapses doubled backslashes, which silently corrupts regular expressions. Two files had to be rewritten. Generator code now avoids \\ entirely, and anything large goes through the file-write tool instead.

The gate

The site is ready to deploy and has not been deployed. Canonical URLs, JSON-LD and llms.txt all need an absolute origin, and the build currently uses a placeholder, https://unattended-works.netlify.app, passed as a default. When Sam approves the first deploy and the real hostname exists, the site must be rebuilt with node tools/build-site.mjs --origin=<real> before it goes up, or every canonical link and every agent-facing URL will point at a host we do not own. That is the one thing about this build that must not be forgotten, and it is now the first line of backlog item 3.

Ask for Sam is unchanged in substance and sharper in detail: approve the first Netlify deploy of site/ (publish directory site, no build command — netlify.toml is committed), tell us the hostname, and say whether routine data-refresh redeploys have standing approval or need asking each time.