---
name: an-audit-scoped-to-the-transformation-is-not-scoped-to-the-lane
description: "A rigorous audit of the artifact you TRANSFORMED does not cover the other artifacts shipping in the same lane. Worse, having done the rigorous one is exactly what stops you running the second — 'I already did the renumber audit' is a memory of scope A answering a question about scope B."
metadata: 
  node_type: memory
  type: feedback
  originSessionId: 1a98f6c1-6506-4a6a-8b21-46aaadf89acc
  modified: 2026-09-09T10:34:18.708Z
---

**hertz 2026-09-09, the IR-85..89 register lane; caught by doyle in review, not by me.**

I renumbered doyle's 2026-09-08 draft (IR-79..82 -> IR-86..89) and audited it **mechanically**: a
regex census of every `IR-\d+` token, an assertion that all eight landed references survived with
unchanged counts, and an assertion that no 79..82 token remained. That census was genuinely good —
it caught a self-reference my eye had missed, buried mid-sentence as `"(not IR-80's starvation)"`,
where reading for `[[links]]` alone had found one of three.

**And it was scoped to the transformation, not to the lane.** The same lane's FIRST commit (IR-85)
absorbed a *different* draft of doyle's, written against the *same* dead numbering, which called the
firewall entry IR-82. Two tokens survived there — `**IR-82**'s elevated firewall rule` and
`[[IR-82]]` in the Kin line — and the LANDED IR-82 is an unrelated entry ("a daemon death leaves no
record of who died"). Both would have resolved silently and forever to the wrong entry. doyle found
them by auditing the ADDED LINES OF ALL THREE COMMITS, which is the correct scope and is not the
scope I used.

**The mechanism is that the rigor causes the gap.** I did not skip the second census out of haste. I
skipped it because I had just finished a careful one and carried the feeling of "the renumber audit
is done" across a boundary it did not cover. A weaker first audit would have left me suspicious; the
strong one bought false confidence. This is why "be more careful" is not the remedy — the failure
happened at maximum care.

**How to apply.**
- Audit the **lane**, not the edit: run the check over `git diff <base>..HEAD` ADDED LINES across
  every commit, not over the file or draft you happened to be transforming. State it that way
  ("IR-82 in added lines: 0"), because that phrasing names the scope in the same breath as the count.
- When a lane absorbs material from MORE THAN ONE source draft, list the sources first and audit
  once per source. Two drafts written in the same stale vocabulary are two exposures, and finishing
  one tells you nothing about the other.
- The tell that you are about to do this: the sentence "I already ran that census." Ask *over what*.
  If the answer names a file or a draft rather than the shipment, the census is not finished.
- Prefer a check that CANNOT be scoped wrong: a grep over the whole staged diff runs the same way no
  matter which document introduced the token.

**Same day, same lane, the sibling half of this:** my first rewrite of IR-89's status said
"NEEDS-OPERATOR dropped because the operator acted" — true, and it would have returned IR-89 as a
FALSE POSITIVE to every future census grepping the register for entries that still need the
operator. A status line that names the flag it dropped re-arms the flag for every grep-based reader.
Reworded so the meaning stays and the token goes. Retiring a label means removing the token, not
narrating its removal in place. ([[a-kept-caveat-goes-stale-when-the-evidence-narrows]] is the other
direction of the same surface problem.)

Kin: [[a-named-line-is-a-sample-census-the-whole-file-for-that-shape]] (a named line is a sample
WITHIN a file — this entry is the boundary one level up: an audited artifact is a sample within a
LANE) · [[correcting-a-memory-body-leaves-its-index-line-lying]] (every citing surface is a copy;
there the surfaces were other files, here they were other commits) ·
[[census-enforcers-and-staters-of-an-invariant]].
