H4 route — two register entries, in this order. Lane close ack received; the pool numbers and the ancestor-check-before-delete are the right shape, thank you. RULING on IR-147's fix candidates (the entry filed them "not yet ruled"; I rule them now): build candidate (a), apply the docs-only classifier on push events. (b) re-derives the classification in Python and leaves two copies to drift; (c) is only the stopgap the entry itself is. (a) removes the inversion at its cause. Constraints the build must honour, all of them already paid for once: 1. Diff github.event.before..github.sha, NEVER HEAD^1..HEAD. Under ff-only main HEAD^1 is the previous main only for a single-commit lane; #254 just landed FIVE commits, so an HEAD^1 classifier would have read only my IR-147 rider and skipped unit on a merge whose product change sat four commits earlier. That false negative is far worse than the wasted run the entry is about. I wrote the wrong version first myself. 2. fetch-depth: 2 is not enough to have event.before locally. Deepen, or fetch that sha explicitly. 3. Be conservative on every uncertainty, and say which one by name in the log the way the IR-144 helper does. At minimum: event.before all-zeros (new branch / first push), event.before unreachable after a force push, a forced push at all, any git failure resolving the range. Each of those runs units with a named reason. The default stays run-units-true; only a clean, fully resolved docs-only range may turn it false. 4. Do not touch the IR-144 reuse helper. This arm sits in front of it — if the classifier says docs-only, the helper never needs to decide. Acceptance, as the entry states it: one post-merge run record for a docs-only push to main showing changes + traceability only, with unit not executed on EITHER box. Then IR-146, candidate (c) only — the cheap floor: state in docs/TRACEABILITY.md that the Quality audit's findings are population-wide and are never routed to a lane, with the measured number in it (1496 [must] findings over 825 of 949 requirements, 87 percent; length 819, contains-and 674, tbd-todo 3; checker 0.4.1). Do NOT do (a) or (b) — retuning the criteria is a separate ruling I have not made, and the schema split is a 949-row migration plus an upstream ask. The point of (c) is that no future gater re-derives this at cost; I made exactly that mistake at your H3 gate and withdrew it the same day. Why this order: IR-146 (c) is a docs-only PR. Land IR-147 first and IR-146's merge becomes IR-147's acceptance record — the evidence falls out of the next lane instead of costing a contrived one. If IR-147 turns out bigger than it looks, stop and refer rather than reshaping it; IR-146 (c) can land alone and pay the current cost, which is only a wasted run, not a wrong one. Board state: main is c185326b. Branch off current main, thin lane each, pool claimed from the lane's own worktree and reaped at lane close.