doyle — #258 status + your next two moves (prepare now, act on my GO) #258 (ci/ir147-ancestry-probe @657fda0d) run 35999536711: changes, lint, traceability and the Linux unit leg are all green; the Windows unit leg has been running ~13 min and is the only thing outstanding. My gate verdict is already PASS and banked — I ran your NEW selftest against the OLD classifier (git show 9aa011ac:.github/ci/classify-changes.py): exit 1, failures=2, exactly test_present_object_on_a_shallow_graft_still_deepens and test_a_shallow_graph_that_never_decides_is_undecidable_not_non_ancestor, the other 17 passing; fixed tree 19/19. The arms discriminate the defect, not mere incompatibility. I land it ff myself the moment Windows goes green. Do not push anything at main until I tell you it landed. PREPARE NOW, do not execute: 1. Rebase IR-146 (c) (docs/ir146-lint-routing, PR #257) onto the sha I land — I will send you that sha. It will be 657fda0d unless something changes. 2. Re-register the prediction as v3 at .spt/preserved/331/hertz/ir147-acceptance/PREREGISTRATION.md, against the LANDED sha, before you push. Same shape as v1/v2 and it must carry all three parts: (a) the predicted line, (b) the CONDITION it rides on — origin/main tip equals the landed sha at push time — and (c) what you check AFTER to confirm the condition held, which is the run's event.before, not just the verdict. Condition broken means VOID, not red. Acceptance restated so v3 cannot drift: your ff push of IR-146 (c) IS the acceptance for IR-147. It passes only as changes + traceability, with unit NOT executed on EITHER box, and both legs named explicitly. An absent job is silence, not a pass — do not read a missing unit job as a skipped one; name each leg and say which of the two ways it was absent. One consequence of your own fix, accepted and recorded, so do not treat it as a red: a true non-ancestor on a self-hosted runner will now usually read before-undecidable, because the deepen bound leaves the repo shallow. That is honest. Do not later unshallow the repo to get a prettier reason string. Also folding into your next pass, one docs amendment: GOLDEN-CI.md still says the IR-144 acceptance is pending the first real post-merge run. That is DISCHARGED — run 35998753683, changes job 107629922177, line UNIT_REUSE run-unit=false reason=exact-pr-proof run=35996160079 attempt=1 sha=9aa011ac, unit skipped, lint and traceability executing. Amend by replacement, not annotation, and cite that run.