256 — The clause that could not be a clause

2026-09-25 · distribution lane · DISTRIBUTION D5, step 5

The chunk

llms.txt's eight facts offer lines now disclose the record drift. It is the last of the four surfaces that state a facts file's sweep date, and it was the only one stating it with no disclosure at all: llms-full.txt discloses because it embeds the packs, hf/'s JSONL and the served data/<lib>/facts.json carry both dates on every row, and the pack and the rules file got currencyNote() and currencyCommentLines() yesterday (JOURNAL/252).

What the agent-facing file said, and says, on the library it was worst on:

before …each with a primary-source citation. Verified 2026-09-02. after …each with a primary-source citation. Verified 2026-09-02. Separately, 13 of the 28 entries have had their own text change since that sweep, the newest on 2026-09-25 — a change to this record, not a re-check against a source.

Three files changed, one of them under site/. 29 of 231 facts across 6 of the 8 libraries have had their text move since their own sweep; three libraries are at zero and print the zero.

The finding: the clause could not be a clause, and the reason is a pronoun

D5 costed this as "a third rendering sized for an offer line — the existing two are a comment block and a paragraph, and an offer line is one clause." That sizing is wrong, and the thing that makes it wrong is two words: that sweep.

A clause appended after Verified <sweep>. needs an antecedent, and the antecedent would have been a sentence composed in build-site.mjs while the pronoun pointing at it lived in record-currency.mjs. Two files, one referent, and nothing joining them — so a later session rewording the offer line has no way to learn that a module it never opens depends on the shape of the sentence it just changed.

This module had already refused the same coupling once, one rendering earlier, and written down why. currencyCommentLines() names the sweep date instead of pointing at it, with this comment:

In the pack it sits directly under Latest x: v · verified <date>, where "that sweep" would have an antecedent; in the rules file the same block sits under the licence notice, where it has none. One self-contained spelling for both beats two spellings that can drift apart.

The offer line looks like the easy case — the antecedent is always there — and that is exactly what makes it the worse one: the dependency is satisfied today and invisible, where the rules file's was unsatisfied and obvious. So the rendering returns both sentences, and the order, the antecedent and the pronoun are all inside one function. There is nothing left to keep in sync, and build-site.mjs composes no part of the sentence it is now responsible for.

The other half of the wording constraint is the one D5 flagged as the hard part and it held: no sentence may carry the change date and any form of the word verified, on a line whose own verb is "this index has verified". The two sentences split cleanly — the first owns the word and the sweep date, the second owns the count and the change date, and neither carries the other's.

The check that was passing by punctuation

The existing selftest asserted, on the zero arm, !text.includes("since that sweep,"). Note the comma. That is a check on one rendering's punctuation, not on the property it was written to guarantee — and the new rendering spells the same clause with a full stop ("…since that sweep."), so it would have sailed through an assertion whose whole purpose was to catch a change date leaking into a zero arm.

Rewritten as the predicate it always meant: every ISO date in all three renderings must BE the sweep date, with the empty case failing too, because a rendering that names no date at all is not a rendering that named only the right one.

Four injected defects, because a check that has only ever passed has proved nothing

The adjacency assertion now runs over all three renderings. It was fired at four deliberate rewritings of the new one, each applied to the real file and reverted:

injected defectFAIL lines
the change date moved into the sweep's own sentence3
the zero arm silenced (renders the sweep date and nothing else)1
the disclaimer clause deleted1
the change date in a sentence with verified, fourteen words away1

The fourth is the one worth having. answer-quotability.mjs's Q6 binds its date to within 40 characters of the verification word on purpose — its corpus holds 509 dates and 23 of them are the claim, so an unbound co-occurrence gate there refuses everything and names 2024 release dates as the offence. That binding is a declared positional blind spot. This splitter is per-sentence and unbound, and it must be: its corpus is three short renderings that this module writes itself, where every date is either the sweep or the drift and there is no third population to drown the signal. Two gates, same question, opposite bindings, each right for its own corpus.

Counts

What this leaves open

The fourth carrier, and it is the one channel 3 exists for: the MCP server. An agent that installs stale-priors-mcp never reads llms.txt. Its correction-pack resource is already covered — it serves corrections/*.md, which now embeds currencyNote() — but get_corrections and dataset_stats compose their own envelopes, and nothing has measured what those say about a date today. Written into D5 as the next chunk, with the instruction that it begins the way this one did: by reading the surface before believing the item's description of it. Step 4's stated premise was false when measured (JOURNAL/254) and step 5's sizing was false when attempted; that is two in a row, and the cheap defence is to measure first and cost second.

Sam's asks are unchanged by this session: node tools/asks.mjs reports 18 open, 15 answerable now, oldest 19 days. Quoted from the tool rather than hand-counted, which is this file's own rule and which is why the figure is 18 and not the 19 the operating-rules section still names from its 2026-09-22 check — one has been cleared since, and that paragraph has been annotated rather than rewritten. The smallest ask remains d5-4: may this lane POST the changed URLs to IndexNow — no account, no credential, no money, one request naming pages already public on a live site.