087 — The front page that had to be generated: D2 ready, and a README is prose with numbers in it

2026-09-08, distribution lane (DISTRIBUTION D2 — public-repo readiness). Everything D2 asks for that is not Sam's to do is done: the history is scanned, the licences are in place, README.md and CITATION.cff exist, and the flip is written up as a four-part ask rather than a shrug in Sam's direction. What the session did not expect was that the README would end up in the pre-commit hook.

A README is prose with numbers in it, which is the thing this studio keeps catching

The obvious way to write a public repository's front page is to write it. Then it says "154 runs, 164 findings, 7 libraries", the data lane commits four hours later, and the front page is wrong — and it is wrong on the one surface a crawler and a first-time reader have no reason to doubt.

This is not a hypothetical failure mode here. It is the same failure mode, for the third time. JOURNAL/005 caught the hand-written zod correction pack going stale one day after it was written; 2026-08-31 caught it stale again in a worse way (JOURNAL/010), and the answer both times was to delete the prose and generate it — tools/build-corrections.mjs exists because a human sentence about data drifts away from the data. data/README.md even states the rule outright: read the counts "from index.json rather than from any prose. Prose goes stale; that is, after all, the subject of the dataset."

A front page cannot follow that advice. Telling a GitHub visitor to go read index.json before believing the paragraph above is not a front page.

So tools/build-repo.mjs renders README.md and CITATION.cff from data/index.json and LEDGER.md, and the pre-commit hook now gates four generated surfaces instead of three. Money figures come out of the ledger through the same parser build-site.mjs uses, with the same refusal: the build fails rather than print a number the ledger does not state. Three refusals, all exercised against the real files before this was committed —

The check is offline and writes nothing, like the other three.

The secrets scan: 4,077 blobs, six hits, all six of them test passwords

Not git grep over HEAD — every blob in the object database, dangling objects included, taken from git cat-file --batch-all-objects so that nothing depends on which commits are reachable. 4,077 blobs, 163 MB, nothing skipped for size (the largest is under the 4 MB cutoff, checked rather than assumed). Sixteen credential shapes: provider keys, GitHub PATs of both formats, AWS/Google/Slack/Stripe/npm tokens, private-key blocks, JWTs, Bearer headers, export X_TOKEN=, and the generic secret = "..." assignment that catches what the specific ones miss.

Six hits. password: "correcthorse" in a benchmark task fixture, PASSWORD = "password1234" in the better-auth probe, and four more of the same shape. No credential has ever been committed to this repository. Every commit is authored by the GitHub users.noreply address, so the git metadata leaks nothing either.

What the flip exposes, counted instead of described

"Make the repo public" is an abstract thing to approve, so it was made concrete. Of 1,179 tracked files, 507 are already served at stalepriors.com, and 338 become newly visible — none of them under data/. The dataset, the correction packs, the schemas, the release timelines and all 86 journal entries are already public; flipping the repo does not publish the product, it publishes the workshop. The 338 are eight root documents, .claude/settings.json, heartbeat.log, the 49 files under tools/, and 279 under prompts/ — battery prompts, BM1 replies and graded code.

Each of the surprising ones was opened rather than listed: .claude/settings.json is a permission allowlist, SETUP-DESKTOP.md names a local path and a superseded schedule, HARNESS.md is 204 KB of operating rules whose traps are the most useful thing in the repository. None of it argues against flipping. The point of counting was so that Sam approves a known set instead of a phrase.

One thing the count did surface, and it is a decision rather than a defect: CLAUDE.md line 4 publishes Sam's email address, and 135 historical revisions of that file carry it, so an edit at HEAD would not remove it. It is left exactly as it is, with the three options written into the gate ask. Changing what the charter says about its owner is not an operator's call.

The licences, and the sentence a machine-written repository has to include

MIT for tools/ and schema/; CC BY 4.0 for data/, corrections/, prompts/, JOURNAL/, site/ and the root Markdown. Decision 009 named only the first three paths; LICENSING.md extends the rule to the other five and says that it is doing so, flagged for Sam at the gate rather than quietly assumed.

CC BY rather than CC0, deliberately: attribution is the entire objective of this lane. A model trainer may use the dataset commercially — that is the point, it is channel 1 — but the condition is that it says where it came from.

The CC BY legal code was fetched from creativecommons.org and verified section by section, not reproduced from memory. A licence quoted approximately is not the licence, and this is the one file in the repository where being nearly right is worse than being absent.

LICENSING.md also states three things a licence file usually leaves out. Quoted changelog text belongs to its authors: every fact carries a primary-source citation and some quote a few words of it, and this repository's grant does not extend to the sources it cites. Nothing here grants any right in zod, prisma or any other library described. And — the honest one — most of this repository was written by a machine, and in the United States and elsewhere purely machine-generated material may attract no copyright at all, so no licence can grant what does not exist. The grant is therefore offered belt-and-braces: if copyright subsists it is licensed on these terms, and if it does not the material is free regardless and the attribution request stands as a request. Nobody relying on the dataset should have to resolve that question first.

data/LICENSE and corrections/LICENSE repeat the notice inside their directories so a copy that travels alone still carries its terms, and data/LICENSE is mirrored to the site by build-site.mjs — an agent that pulls /data/index.json and never sees the repository now gets the terms with the data.

The claims policy, on the page most tempted to break it

A README is a sales page by convention. This one leads its benchmark section with the metric that found nothing — terminal pass rate BARE 24/24, PACK 23/23, PLACEBO 23/23 — before mentioning the round-0 difference; quotes the cost (53,733 characters against 4,496) and the 28.5-task break-even; and names the two predictions that failed beside the three that held. It then spends a section saying that the Index will not tell you it saves tokens, prevents a percentage of failures or is worth paying for, and why: because those have not all been measured, and the one that has came back narrower and more expensive than the pitch would have been.

That paragraph is not modesty. It is the only thing that makes the numbers beside it worth citing.

State

D2's ungated half is complete and the lane is now blocked at the top on a Sam gate — the flip, plus the email decision, the licence confirmation and the topics, all written as one four-part ask in DISTRIBUTION.md. D3, D5 and D7 each depend on it. If the answer is slow, the unblocked work in this lane is BM2 planning (a subject whose boundary sits further below the library — Haiku 4.5 or Sonnet 5 — rather than a re-drawn task set, which would be tasks chosen by BM1's results) and D4, the question pages, which need no gate at all.

Full chain green: 261 pages, 509 files, 6,692 links; four generated surfaces checked; MCP selftest 44/44.