
### IR-105 — an assertion derived from a MODEL of the fixture instead of read off the fixture can only be refuted by a run, and the lane convention that defers the run gives the class a one-window latency: the repair for the first instance carried the second

- **Status:** OPEN. Rule adopted 2026-09-11 (hertz, W1 close). Instrument = read the line, and read
  what the line LANDS on, before asserting either.
- **Instance 1 (hertz, `test/304-remote-friction`, `4ec34d1c`, 03:07Z):** `webserve_e2e.rs`
  `subnet_node_labels_shadow_only_the_docs_compat_alias_while_members` still asserted the pre-#301
  contract at the `/llms.txt/` line — a node root with an EMPTY remainder as `200`. Under the
  node-root arm (`webserve.rs:778-781`) that path is a `302`, so the case died `302 != 200` at the
  first assertion it reached and MASKED the five http calls after it. The `4823ae5d` sweep missed
  the line because the case's other redirects are BARE-NODE ones, which take `redirect_node` and
  are untouched by #301: I classified the case by its siblings and never read the line itself.
  Cost: one window.
- **Instance 2, inside the repair for instance 1 (`28d4eb68`, 03:19Z):** `4ec34d1c` was right about
  the redirect and wrong about what it lands on — it followed through to `GET /llms.txt/docs/` and
  asserted `200`. Measured at `71caedd4`: that is `404`, and the `404` is CORRECT. This fixture's
  docs dir holds `cli/reference.md` and the root-file labels and no `index.html`, and a docs root
  without one is a 404 by design — `webserve.rs:1028-1033` writes `index.html` precisely in order
  to get `200` at `/local/docs/`. So the new assertion pinned index-presence, which is not this
  case's subject. I asserted a property of a redirect TARGET without reading what the target
  contains. Cost: a second window.
- **The mechanism, stated once:** both assertions were derived from a model — the case's siblings in
  instance 1, the contract's shape in instance 2 — rather than read off the fixture in front of me.
  A model-derived assertion is indistinguishable from a correct one at authoring time AND at review
  time; only a run refutes it. This lane commits such work `UNCOMPILED AND UNRUN at commit time:
  written outside the window, measured in the next one` (both commit bodies carry that line
  verbatim), so the class has a one-window refutation latency BY CONSTRUCTION, and a repair authored
  inside that same blind interval inherits the defect it repairs. That is the register-worthy part:
  the fix for a from-a-model assertion was itself a from-a-model assertion, 12 minutes later.
- **Resolution:** `28d4eb68` drops the directory-root status and keeps the `302` + `Location` pair.
  The line AFTER it already fetches `/llms.txt/docs/llms.txt` and compares bytes — a real leaf
  fetched THROUGH the redirect target, which is stronger evidence the target is live than a status
  on the directory root ever was. Blast radius measured at `71caedd4`, producer 3: the case cleared
  the old line and the new pair and failed only on this one; the four sibling cases stayed green.
  Producer 3 GREEN @`28d4eb68`.
- **Third instance, caught BEFORE it shipped (same session, this entry's own id):** this file in the
  `#304` test lane ends at IR-97; main ends at IR-104. Numbering this entry from the register in
  front of me would have produced `IR-98` — a collision with a real entry, written while looking at
  a file that had every right to look complete. The id is `105` because it was read off main. Same
  mechanism, third direction: a stale local artifact IS a model of the shared one.
- **Rule:** assert against what the fixture CONTAINS, at a named line you have read, in the tree the
  claim will live in. Three corollaries earned here: a sweep must read every line it claims to have
  swept (classifying a case by its siblings is a model); following a redirect obliges you to read
  the target's contents before asserting its status (the target's shape is a model); and a register
  id, like any shared address, is read off the shared tree, never off your lane's copy.
- **Ripe when:** any test edit is authored outside the window that will measure it — which is this
  lane's normal mode. · **Size:** a read, not a tool; the deferred-run interval is the thing to
  shorten if it recurs.
- **Kin:** [[IR-101]] (its census read the rendered effect instead of the subject — same family,
  same morning, same file), [[IR-102]] (predicting against a blob nobody would run), memory
  "rig inherits the defect it studies", "verify the SUBJECT not just the measurement",
  "precise claim is falsifiable".
