# Gate record — hertz docs lane, PR #266 (`docs/ir149-150-records`)

Gater: doyle. Date: 2026-09-24. Verdict: **CONDITIONAL PASS — one required attribution fix, then ff-only.**

## Subject verified BEFORE any green was read

| check | value |
|---|---|
| lane head | `31a82bf8eb9ad009de254963b8baa822162a252c` |
| run `36020751632` headSha | `31a82bf8…` — **equal to lane head** |
| `origin/main` | `1e981dcbfb2cd9498b3c5484b4980beb1548633e` |
| main is ancestor of lane | YES |
| merge-base | `1e981dcb…` — **== main**, so lane is a strict descendant |
| commits ahead / behind | 1 / **0** |
| declared scope vs measured | AGENTS.md +1/-1, INFRA-REGISTER +54/-10 — **matches hertz's declaration exactly** |
| PR | #266 OPEN, `headRefOid == 31a82bf8…` |

## CI: run `36020751632` — SUCCESS

- `traceability` success · `changes` success
- `docs-drift` **skipped** · `lint` **skipped** · `unit` **skipped**

Correct for a docs-only diff. Classifier's own verdict lines:

```
CLASSIFY_PROBE connected_at=not-probed shallow=n/a
CLASSIFY code=false reason=docs-only
CLASSIFY_DOCS_DRIFT docs-drift=false reason=no-drift-input
UNIT_REUSE run-unit=true reason=not-push-main
```

`UNIT_REUSE` read as the LAST match, per the known grep trap (the first match in a
changes log is the workflow echoing its `helper-failed` fallback).

## Measured, and routed back into the register

This lane is **IR-149's first PRODUCTION sample of the `no-drift-input` arm.** IR-149's
own text predicted exactly this shape — "a register or ADR edit that touches no drift
input skips it" — and that arm had **selftest coverage only** until this run. Routed to
hertz to record in the same fixup push, with the explicit note that it does **not**
discharge the CHANGELOG-only arm, which keeps its own trigger.

## Substance audit — accepted

1. **IR-21 acquittal corrected BY REPLACEMENT**, and the retraction names both what was
   false and that it was load-bearing *in the acquitting direction*. The prior text
   ("`target/` is gitignored so checkout never cleans it"; "every precondition for leakage
   present") is replaced, not annotated.
2. **IR-149's warm-target estimate REPLACED, not appended** — the "nobody has measured
   that second number yet" sentence is gone rather than left standing beside its answer.
3. **IR-150 leaves doyle's 0.98 % reap gap UNEXPLAINED** and hands it no mechanism after
   the tree was gone; escaped-link discrimination is held OPEN on a named field trigger
   rather than closed on two synthetic controls.
4. **IR-151** filed with two testable ripe-when conditions, not faith.

## The change I requested was WRONG — withdrawn, and why

**I issued one change request and it was refused correctly.** Recorded as the error it was,
not as a resolved discussion, because the reasoning is the reusable part.

I read IR-150's `(ruled by hertz on doyle's reap)` as a role inversion — hertz measures and
files, doyle rules — on the strength of the register's **convention**: six prior entries read
`ruled by doyle <code>` / `accepted by doyle`, none read `ruled by hertz`, the header says the
file "carries what the gater triages", and hertz had used the doyle form one entry over in
IR-149 in the same commit. I ordered it changed.

**The entry cited its primary source one line below and I never opened it.**
`.spt/preserved/331/doyle/ir150-acceptance/reap-record.md` is **my own file** and says:
"Acceptance vehicle: **IR-150** … **Ruling is hertz's, not mine.**", under the heading
`## RULING (hertz, 2026-09-24, msg IMDCBMYN)`.

**The attribution is right because the ACTOR whose measurement is under test cannot rule on
it.** IR-150's acceptance rode *my* field reap, so I stood out of the verdict deliberately and
hertz ruled. That is why IR-149 (`ACCEPTED by doyle`) and IR-150 (`ruled by hertz`) are both
correct **in the same commit**: the pattern is per-entry independence, not a house style. The
register records a ruler who is not always the gater.

Hertz refused to write a doyle verdict my own record says I never gave, and quoted the file.
He offered `ruled by hertz IMDCBMYN, ratified by doyle <code>`; **I declined the ratification** —
ratifying now would retroactively insert me into a verdict I deliberately stood out of and blur
the independence that makes the record worth anything. His line as pushed, carrying the code
plus the reason the ruling sits with him, stands as the complete record.

Contributing cause: a cleared context. The record existed; my memory of authoring it did not.
Durable rule saved to project memory as `attribution-audit-reads-the-cited-record`.

## Landed

Fixup head `07d04ba5` (2 commits on main, 0 behind). Subject re-verified before any green:
run `36021909742` headSha == `07d04ba5`, main `1e981dcb` both ancestor and merge-base. Run
SUCCESS — `changes` + `traceability` green, `docs-drift`/`lint`/`unit` skipped.

ff-only push `1e981dcb..07d04ba5`, no force. Post-op read from `git ls-remote` rather than the
push output: `refs/heads/main == 07d04ba5`. PR #266 **MERGED**, `mergeCommit.oid ==
headRefOid == 07d04ba5` — an independent witness of a true ff with no merge commit.
**Tested == merged == main.**

Fixup also folded the IR-149 skip-arm sample (see above). Hertz then measured a SECOND arm on
the landing push run `36022121680`: same verdict reached through a *different* probe path
(`connected_at=deepen50 shallow=true` vs the PR's `not-probed`/`n/a`), with `docs-drift`,
`lint` and `unit` skipped on the push too.

## Checked, sized, and deliberately NOT loaded on the lane

The traceability job's quality audit printed `[must]` rows against
`REQ-CI-CLASSIFY-PROBE-WITNESS` and `REQ-CI-THIN-DOCS-DRIFT`, via
`./traceable-reqs lint || true` — non-blocking by construction.

Sized before treating it as a finding: **1514 `[must]` rows across 834 distinct REQs**
(828 `length`, 683 `contains-and`, 3 `tbd-todo`). Hertz's two REQs are 2 of 834; this
long predates both his lanes. The `|| true` is **correct** — gating a registry-wide
pre-existing backlog would red every lane forever. Also note `traceable-reqs lint`'s
output is partly an *agent-audit prompt*, not a pure pass/fail gate, which is the other
reason it is not wired as a blocker.

**No IR filed, no change requested.** Recorded here so it is not rediscovered cold and
mistaken for a regression of the IR-148/IR-149 lanes. Candidate ripe-when, if it ever
ripens: a requirement-confusion incident traced to a compound or overlong REQ title.
