EXECUTION BUNDLE STAGED AND PREFLIGHTED. r3 CLEARS THE GATE LIVE and the driver parses its row - both with controls. No build, no field launch, nothing elevated. BUNDLE MANIFEST, every file hashed after staging dir: C:\Users\decid\AppData\Local\Temp\claude\C--Users-decid-Documents-projects-spt-core\920f96d8-9033-4e9b-a259-c8b586fe390e\scratchpad\bundle-r3 fp-driver-v9.sh a9510e1ec86a71266b7f421b90a6a02c5c0f7586f96803c6843133b5b2b0bb12 unchanged fp-bin/census.ps1 7a50b14e2ea0bf93a310ca14c0ba4f06faf82f6905a9bc764c692b0f913d413b unchanged fp-bin/cpubracket.ps1 fc10031d25eb551daa88ba84b1cb13da4b90baa45ddc5dde3986fbd1abe90e73 unchanged fp-bin/portfields.ps1 283386e7e1cac9df5e8e3c7e8283faea224ad3d12f4da30185a9b342b9a1da85 unchanged fp-bin/d1_render.py 3b9844932696286b83342b831a90407e4505cf1a16665bc936c71f2d99cca596 unchanged fp-bin/runner-census.ps1 63d0508b93a8d15fa2bc9940708c7a13ac4abda1f8ca9c9a5d32a63b1dcf3e8a REPLACEMENT (r3) THE REPLACEMENT, recorded explicitly: runner-census.ps1 carries 63d0508b...3e8a (r3), REPLACING 0d8b67ed...84f9 which was the original helper. Same filename, different bytes, and the driver reaches it by name at $BIN/runner-census.ps1. ORIGINAL BUNDLE PRESERVED AND RE-VERIFIED after staging: the 291081e5 scratchpad still holds runner-census.ps1 at 0d8b67ed and fp-driver-v9.sh at a9510e1e. Nothing was moved, renamed or edited there. HOW I IDENTIFIED r3, since you gave a hash and not a path: I hash-hunted for 63d0508b across 78 candidate .ps1 files under .spt/preserved and the scratchpad trees and took the one that MATCHED, rather than trusting a filename that looked right. It resolved to .spt/preserved/hertz-fp-driver-review/v9-exercises/census-fix/runner-census-r3.ps1. hertz independently confirmed that same path and hash (re-measured at 10:17Z, length 10442, CRLF) and confirmed it has not moved since you accepted it. Hash verified BEFORE the copy and again AFTER: identical, so the copy preserved the CRLF bytes hertz warned about. r3 LIVE ON THIS BOX, through the bundle's expected name, exit 0 RUNNER_CENSUS tag=preflight-r3 mode=live utc=2026-09-12T10:18:28Z procs=582 self_seen=True candidates=6 cargo_build=0 runner_descended=0 analyzer=6 shim_unresolved=0 runner_procs=0 listener_procs=1 RUNNER_WORKER=ABSENT valid=YES shim_unresolved is 0 and analyzer is 6. The two processes that refused before now classify: pid=39260 name=rustup.exe resolved=rust-analyzer.exe reason=argv0+exepath-agree pid=43280 name=rustup.exe resolved=rust-analyzer.exe reason=argv0+exepath-agree This was the arm hertz could not run - you directed fixture-only validation for the correction, so r3 against a LIVE process table had never executed until now. The bare-argv0 case they predicted would resolve cleanly does resolve cleanly, on the real table, on the exact processes that caused the refusal. THE DRIVER PARSES r3's LIVE SUMMARY - confirmed with two negative controls, because a parser that passes proves nothing on its own. I extracted box_gate from the BUNDLE's driver (lines 582-593) and ran it against the live output: ARM 1, r3's live row: BOX_GATE ok at 'preflight-r3': cargo_build=0 runner_descended=0 shim_unresolved=0; analyzer=6 RECORDED AND NOT GATED. exit 0. ARM 2, same parser, shim_unresolved mutated to 1: DIE naming shim_unresolved=1 and pointing at the CANDIDATE rows. exit 1. ARM 3, same parser, the field deleted from the row: DIE "could not read shim_unresolved from the runner census". exit 1. So the pass in arm 1 is a measurement and not a parser that cannot fail. Worth noting because it could have bitten: r3 adds a NEW field, mode=live, to the row. The driver's sed patterns are field-anchored and are unaffected - arm 1 proves that rather than my reading of the regex. CAPACITY, via the driver's OWN probe command rather than a substitute: FREE_GIB=122.08 against floor 96 and hard stop 32 (v9 :181-182). Passes both. Headroom above the FLOOR is 26.08 GiB and the cold-release footprint still has to fit inside that, not inside 122. JOB-LEVEL CI AVAILABILITY, resampled 2026-09-12T10:19:02Z: runner hfenduleam status=online busy=false, runner kitsubito status=online busy=false, queued=0, in_progress=0. EFFECTIVE TARGET AND ARTIFACT PATHS: CARGO_TARGET_DIR, CARGO_BUILD_TARGET_DIR, RUSTC_WRAPPER and SCCACHE_DIR all unset in this shell and in the persisted User and Machine scopes; no cargo config in the lane worktree; the user-level [build] section carries only jobs; the bundle dir and the lane target are real directories, not links. The limit stands: an override exported inside the building process would be invisible here and leaves no directory entry, so the authoritative check is in that process at build time. MY ERROR, CORRECTED, BOTH HALVES. I said the build would run at 4 jobs and implied a four-fold duration factor. Wrong twice: v9 exports CARGO_BUILD_JOBS=2 at :678, which overrides the user-configured jobs=4 - I read the user config and never read the driver's own export, which is the authoritative one here - and a job count does not imply a proportional duration in any case. Duration remains UNKNOWN and I am not offering a number. TWO ITEMS FROM PEERS, reported rather than acted on. liam closed the real hole in the duplicate-nonce rule themselves, and it is a hole I had not named: if their context clears between my request and my re-send they would not REMEMBER having run it and would rerun with full confidence. So the duplicate check cannot live in their head - they put it on disk at C:\Users\decid\.claude\liam-handoff-receipts.jsonl, deliberately outside a session scratchpad since those are what a capacity sweep reaps, and it resolves your three states: receipt exists means re-delivery and return the receipt; no receipt and no pre-execution ledger line means never ran and execute; ledger line but no receipt means crashed between execution and receipt, report UNCERTAIN COMPLETION and do not rerun. You said no further procedure expansion, so I have NOT written it into the procedure - say the word and it goes in, since it is the mechanism that makes your third outcome reachable at all. perri filed an addendum with a limitation they say they should have led with: NOT EVERY ACCEPTANCE IS A USER. spt's own idle delivery TYPES INTO the harness input box, so a peer message, notify or wake arrives through the same UserPromptSubmit surface wearing a prompt's clothes. A naive capture would stamp core's own injected text with whoever holds the controller seat and report it as a user submission - a provenance forgery generated by the transport itself. claude-spt already discriminates it through an existing user-input gate and would report machine-injected submissions with NO token per 3.4, but the residual they named is a COUPLING, not a bug: that gate is adapter-side and pattern-based over the delivery shapes they know today, so if core ever adds an injection shape without telling the adapter, provenance silently starts lying. That is theirs, relayed, and I have not touched the contract - it is still untouched at 24069979 and unpushed, and #300 still awaits Reavo via lia. Build and field admission remain held. Nothing ran but read-only probes and the extracted box_gate parse test.