The work.

The work below is Legible's current work, built on Habitat. The reader is at habitat.ooo, the cases at tools.habitat.ooo.

Reading

A place to read

The Habitat Reader. Hold a passage and the field surfaces what it reads with, from the same body of work. The Adams and Jefferson correspondence is live: 164 letters, 1812 to 1826. Your reading stays in your tab.

Correspondence · 1812 to 1826
Published

Five worked cases

Each case takes a public source a reader already knows, names one operation someone performed on it, and asks whether that operation moved the thing being measured. The number is published. It recomputes on your own machine, offline, with a standalone verifier small enough to read in a sitting, and the verdict path returns the same digest on every build it has been measured on.

The frontier

Three receipts further out

Same standard, newer ground. The source site marks these apart and so does this page.

Every case is published with its paired control, the deliberate operation that makes the instrument ring, because a green shown alone is not evidence. The published numbers rest on the extraction that predates our lens contract, so they carry no lens identifier. The verdicts are unaffected and were re-audited as construction-independent. Readings published from here on carry their lens identifier and its hash.

Correction record

What we caught

An instrument nobody has caught being wrong is an instrument nobody has checked. These are faults we found in our own work. Each entry says what was wrong, when it was found, and what it moved in the published numbers. The record starts the day we began keeping it in public.

2026-09-09 · Recompute kits
A verifier printed a character a Windows console cannot encode.

Since 2026-07-03 the portability workflow had been red for 7 consecutive runs, every one of them this same crash, and it came after every card had already printed PASS. 4 shipped kits carried it and all four were re-cut. The cards, the expected digests and the verdicts are unchanged. The check is now a test and a gate on the kit builder.

2026-09-09 · Build gates
A gate could not read the value it was written to check.

The kit fingerprint printed on a case page is gated against the tarball that ships. The pattern could not match a value wrapped across two lines, so on the 2 pages it existed for it passed by finding nothing. It now reads the wrap, and it fails loudly when the label is present and the value is not.

2026-09-09 · This page
This page said the numbers recompute with no code of ours in the path.

They do not. Every case ships a verifier we wrote, between 228 and 433 lines, numpy and the standard library, no network. The sentence was struck and replaced by what can be counted.

2026-09-09 · How Legible Works
A published figure came from a docstring instead of a log.

The number of builds the verdict path had been measured on was published as 7. It traces to a single round on one case in July. The current matrix is 4 legs, and that is the figure on the page.

2026-09-15 · Library ingest
A second extraction ran without the document's own id.

The two library ingest scripts re-extracted each paragraph a second time, to choose the displayed pair, without passing the paragraph's id. The extractor minted and discarded a placeholder id per call. No stored value, identifier or published number was affected; the served climate store was produced this way before the warning existed. Fixed in habitat_beta 6319853.

2026-10-13 · Agent provenance
A retracted phrase was still live on the agent-trace case.

The self-authorship wording had been retracted, but it still appeared on the agent-provenance, keep-out, take-out and ledger pages, in 3 served receipts, and in the served agent-trace kit README. It now reads as detection against a declared boundary. The kit was re-cut, aae29b68 to 7928a460, and the three receipt fingerprints moved with their text. The cards, the expected digests and the verdicts are unchanged. Fixed in habitat_ooo 7586e39.

When a number changes it changes on every surface that prints it, and the value it replaced stays in the case registry with the date and the reason.