deployah -> doyle: ATTEMPT 2 DISPATCHED at your ruling. Nine gates green, both script arms proven, watch re-armed. RULING RECEIVED AND EXECUTED AS WRITTEN. Preserved verbatim as msg-doyle-29-triage-ruling.txt beside the drive; your C4 amendment recorded in CASCADE with your message named as its source (both at the authoritative-seven list up top and in the new attempt-2 section at the foot). DISPATCH: gh run rerun 34310511612 --repo BigscreenVR/spt-bs-core --failed, exit 0, 05:44:2xZ. VERIFIED IN THE SAME SCRIPT, not by a later read: attempt=2, status=in_progress, headSha f6110c2a12df0dd50b87dfb60a2ec4120b5cf98d UNCHANGED. NEW SCRIPT, AND WHY: I did NOT reuse gate-r3-dispatch.ps1. Its permit arm PUSHES a sha to golden/**, which is how r3 was dispatched; this is the opposite verb. Reusing it would have been exactly the defect I caught before r3 (an inherited gate script carrying the previous respin's dispatch method). gate-r3-rerun.ps1 is preserved beside the others. BOTH ARMS PROVEN BEFORE SPENDING THE DISPATCH: -DryRun at 05:43:34Z ran every gate and reached the permit branch, printing the exact rerun command without firing it; the real fire followed at 05:44:11Z. A gate proven only in the refuse direction is indistinguishable from one that refuses unconditionally. GATE 0, and the inversion I am declaring rather than hiding: gate-r3-dispatch's own comment warns that "is run terminal" is a gate a DEAD run passes harder than a live one. That was true there, where the run was a bystander. Here the run IS the target and terminal is a real precondition — so I assert headSha equality SEPARATELY. Terminal alone is not the assertion. NINE GATES, all True, printed before the command fired: gate0 target_run completed/failure attempt=1 headSha=f6110c2a...cf98d workflow=golden gate1 golden_idle non-completed golden (target excluded, the only exclusion) = 0 gate2 runner_quiet hfenduleam busy=False online; kitsubito online busy=False gate3 queue_empty non-completed repo-wide (target excluded) = 0 gate4 free_space 140614541312 B = 130.96 GiB (floor 110) gate5 no_user_cargo user-rooted 0 of 0 total, parent-chain-root attribution gate6 kitsubito_quiet builders 0, load 0.00 gate7 acl_open verify-acl-grant.ps1 exit 0 gate8 no_survivors svcmock.exe=0, spt.exe total=14 runner-rooted=0 [NEW] gate8 is your 05:35Z census RE-MEASURED, not inherited. Same instrument (CIM, not tasklist), my own reading at dispatch: survivor 25596 is gone, and no runner-rooted spt.exe either. The 14 spt.exe are my own perch and peers, all user-rooted. RECORD LINES, quoted not inferred: defender exclusions read back "N/A: Must be an administrator to view exclusions" — a refusal shaped like a value, never read as absence; defender real-time protection True; qbittorrent RUNNING pid=47056. ONE THING I FLAG, NOT A BLOCKER: free space across this milestone's three dispatches reads 275.74 -> 197.23 -> 130.96 GiB. Still 21 GiB above your floor, and with r2's measured 67.4 GiB in-job footprint the projected trough is ~63.6 GiB against a 32 GiB in-job floor, so this run is comfortable. The TREND is what I am putting in front of you, in case a fourth attempt or the post-publish lanes want a reap scheduled rather than discovered. WATCH RE-ARMED — the r2 lesson applied, not remembered: watch-a2.ps1, detached pwsh pid 49016, exits ONLY on completed AND run_attempt >= 2. A watcher that exits on "completed" alone is satisfied by the dead attempt-1 record and goes blind to the attempt it was armed for. First poll 05:45:18Z: in_progress, attempt=2, jobs 5/6, notgreen 0. Count reads 6, expect 9 — twohost-a/b and notify are needs:test dependents. I WILL READ THE VERDICT AS YOU SPECIFIED: run_attempt in the same command, carried jobs deduped on (run, box, started_at). C1 and C2 read FRESH at attempt 2, skip != pass; C4 by your amended invariant (one Phase A and one Phase B per leg, 4 total; >1 of either phase on ONE leg is the doubled-run signature) — which makes the attempt-1 reading of 4 correct and the "==2" spelling the defect, as recorded. INSTRUMENT NOTE: accept-r3.sh stays preserved AS RUN with its jq defect. When I read attempt 2 I will re-read with gh's built-in -q and the raw jobs endpoint, and I will assert the extractor's dependency and exit code so a VOID reading cannot print FAIL again. MANIFEST: NOT re-written yet, deliberately — the two logs are still growing. I write it ONCE at terminal, repo-root-relative, cwd recorded, then verify from the repo root. ADAPTER_WEB_PENDING: understood as a register/seeded-lane QUESTION, not a gate item. It will not appear as a blocker in my attempt-2 readout. STATE UNCHANGED OTHERWISE: origin/main e4444413, no v0.68.0 tag, counter 104 unconsumed, nothing merged or tagged or published. No third attempt at this sha on my initiative. hertz + todlando stay off cargo; you release them.