126 — The field that had to say whose words it held
2026-09-10 · data lane · BACKLOG 1g-f-vi — boundary provenance becomes a declared field, and the quote field gets a contract
JOURNAL/124 closed BACKLOG 1g-f-iv with a negative result and one constructive consequence: a boundary reading's provenance — did the draw state the version, or did the record writer derive it from the contents the draw described — cannot be recovered by any build, because normalisation destroys the lexical form the distinction lives in. 76 of the corpus's 119 stated readings are invisible to a substring test on the quote. So provenance has to be declared at write time or not at all, and until the field existed the standing instruction was to publish no provenance claim at all.
This session built the field. Two questions the item said to settle first were settled by measuring, and both came back with something the item did not predict.
The zod pilot's record-writer note is not one record. It is seven.
1g-f-vi's question (b) asks whether the schema should require believed_latest_quote to be the draw's words, and gives one reason to doubt the field carries any contract at all: "One record (zod pilot, Haiku 4.5) holds a record-writer note rather than the subject's words."
Swept across all 161 records, classifying each quote by its form:
| form | count | example |
|---|---|---|
| the draw's words, opening as a quotation | 141 | "I don't actually have confident knowledge that Prisma 7 was GA as of my training…" |
the same, plus an appended BRACKET PROVENANCE block | 7 | see below |
| the draw's words, no quotation marks around them | 6 | The newest valibot release I have any concrete memory of is in the 1.1.x line… |
| the record writer's summary | 7 | claims v3 released Sept 2024 — also false; v3 shipped 2021 |
(The test is whether the stored string opens as a quotation, which is the only part of it a build can read soundly. An earlier cut of this sweep required the whole string to be one quoted span and called thirteen records mixed — three of them are clean quotations that happen to contain an inner quotation, and the naive test could not tell them from prose. The rule this session is about, arriving in the session's own instrument: check what the test actually measures.)
The record-writer summaries are the entire zod pilot cohort — v1 and v2 for Fable 5, Opus 5, Sonnet 5 and Haiku 4.5's single run — not one record. Four are live and three are superseded. They are third-person throughout ("claims", "declines to name a minor", "the last release whose contents it can describe"), and one of them is not a description of the subject's answer at all but a verdict on it: claims v3 released Sept 2024 — also false; v3 shipped 2021.
That matters more than a miscount, because of where the field goes. build-site.mjs renders believed_latest_quote on every run page under the heading In its own words. The site was therefore printing the record writer's third-person evaluation of a subject as that subject's own words, on four live pages. Nothing false was ever published — the sentences are accurate about the draws — but the attribution was wrong, and the label is exactly the thing 1g-f-vi's question (b) is about.
And the reasoning the item wanted to leave alone is inside the field it was asking about
The item says to add the provenance field "with the reasoning that already goes in the BRACKET PROVENANCE prose block staying where it is." Measured: that block exists on 7 of 161 records, all react-router, and on all seven it lives inside believed_latest_quote, appended after the quoted answer with a blank line between. There is no other field. So "where it is" is inside the very field whose contract was in question — which is how the same heading came to print 1,268 characters of the record writer's own analysis as the subject's words on fable-5-1-v1-a.
Both halves therefore had the same fix, and it is not a schema requirement. A requirement that the quote be the draw's words is unsatisfiable on the seven pilot records — no draw text is stored to recover the words from, and deleting the summaries would destroy the only record of what those draws said. What is satisfiable is a declaration of what the field holds, and a place for the prose that is not it.
What shipped
Four optional fields on model in schema/run.schema.json:
knowledge_stops_provenance—stated/derivedknowledge_gap_provenance— the same at the other end of the bracketbelieved_latest_quote_form—draw/record_summaryboundary_note— the record writer's reasoning, out of the quote and into its own field
All four are optional, and absent means unknown. 139 of the 146 stop readings in the corpus declare nothing, and a build that read that absence as derived would be 1g-f-iv's finding run backwards. data/index.json publishes the coverage — counts.boundary_provenance — so that no reader has to guess how much of the corpus declares: 6 stop ends stated, 1 derived, 139 undeclared; 5 gap ends stated, 2 derived, 140 undeclared; 7 quotes declared record_summary. (Those figures count every record including the three superseded ones, which is this file's convention for runs; JOURNAL/124's sweep counted 143 live readings for the same reason it excluded them.)
Three checks in build-index.mjs, none of them expressible in JSON Schema:
- a provenance at an end whose version is
null— a claim about how nothing was read; - one end declared and the other not — provenance is a property of the bracket, and half of one reads as though the other end had none;
- a provenance on a record whose quote form is
record_summary— the text a provenance would be read from is not the subject's.
Each was made to fail against the defect it names before it was trusted (JOURNAL/118's rule): four mutations of one record, four named failures, including the schema's own enum refusing "inferred". The record was restored byte-identical afterwards, which --check confirms.
The site now renders boundary_note under How the bracket was read, with the two declared provenances beside it, and renders a record_summary quote under Recorded as, labelled as the record writer's summary rather than the subject's words.
The verbatim half is not computable either, and that is a correction to JOURNAL/124
The design that went in first declared stated/derived and computed whether a stated reading was also verbatim, by testing whether the version string appears in the quote — on the reasoning that a build should declare only what it cannot recover and derive the rest. That was written, and then measured against the seven records that now declare, and it is wrong.
believed_latest_quote is an excerpt of the draw, not the draw. fable-5-1-v1-a's gap end is 7.11.0 and the arm named it exactly — in direct question (c). The excerpt stored on the record is its answer to question (a), which does not contain the string. A substring test returns not verbatim for a version the subject stated verbatim.
So the computation was removed rather than shipped, and the consequence is a correction to JOURNAL/124's own table: its 43 stated-verbatim is a floor, not a count. The rule that survives is the one that motivated the field in the first place, now with a second instance: declare what cannot be recovered — and check whether "recoverable" is true before relying on it.
The backfill, and the 139 that will not get one
Seven records were backfilled — the react-router runs carrying a BRACKET PROVENANCE block. Every one of those blocks says, in its own words, which direct question each end came from, so the declaration is transcription of prose already published in the record and not a re-read of a draw (JOURNAL/098's line). Two of the seven declare differently at their two ends, which is why the field is two fields: haiku-4-5-v2-b states its stop end (the top of a range the arm itself named, v6.4–v6.15 → 6.15.0) and derives its gap end, which its own block calls "an upper bound derived from a range, not a described release". haiku-4-5-v1-d is derived at both ends. The other five are stated at both.
The remaining 139 readings carry no such block, and this is where the item's question (a) — backfill or not — answers itself. A later session declaring their provenance would be reading it off the quote, which is the operation this field exists because nobody can perform. They stay undeclared, and the field is forward-only for them. BACKLOG carries that as the closing decision rather than as a queued session of work.
Counts
Nothing in the dataset moved: 161 runs / 167 findings (160 chargeable) over 8 libraries, which is correct for a session that ran no battery, wrote no fact and re-read no draw. Site 349 -> 350 pages, 629 files, 10,315 internal links. Five generated surfaces green; MCP 54/54, identifiers 35, benchmark runner 42, flip-test 46; citation sweep 459 api joins, 8 allowlisted, 8 matched, 0 stale. No money moved, so LEDGER.md is untouched and stays correct at its published figures. Nothing published beyond the site, nothing listed or sent. No gate needed from Sam.