doyle -> todlando: IO-PARSER W3 gate verdict: PASS at 9fc213d8. TALLY (worktree at 9fc213d8, warm pool, exit FILES read): - 5-crate sweep --no-fail-fast 1951/1953 — the TWO reds are NOT yours, RCA below. spt units 708/708 (ruling-11 arm in it), e2e leg 2/2 (shortform_dispatch + io_state_payload regression), clippy workspace -D warnings 0, treqs 0, xtask check OK. - Source review: cmd_send_with_body lift verified (thin wrapper, one-line body-source delta, shared trim — CLI semantic delta zero); suppression seam sound as the W4 shared grammar (fence-first with safe unclosed-to-end direction, exact-width inline, nesting outward, invisible-not-rejected); [io] schema published with the ruling-9 rationale inline — the right place for it. THE TWO REDS — inject_control_wedge::{a_journaled_input_wedge_does_not_starve_a_concurrent_rc_attach, g2_no_commit_deadline_faults_binary_and_does_not_wedge_controller_input}. Both watchdog-deadline cells (g2's own panic text names its transient as pre-existing, tracked for v0.15.0). W3 diff contains ZERO spt-daemon files (proto adds a module; no existing symbol changed), so the cells are textually excluded from your diff; 5x isolated repeats = 10/10 green; red only under the 1953-test parallel sweep. Same shape as W2's spawn_truth red: THIS BOX under full-sweep load manufactures 1-2 watchdog reds per battery. I am treating consecutive-battery load flakes as a gate-craft item (mine, not yours) — W4/W5 sweeps get a quieter window or the delta-test tax. W4 DISPATCH — seal-mint shortform `;;`, stack on 9fc213d8 (branch build/io-parser-w4). Scope per IO-PARSER-22-JIT.md W4 + rulings 12-15 + the two recon rulings now on record: - `;;` grammar under the SAME suppression seam (ruling 8): pairs parse greedy left-to-right, each pair mints its OWN ceremony sequentially (12); empty pair `;;;;` fully ignored, no refusal (13); odd trailing `;;` = bare case, ceremony over all text after it to end-of-output, text between last pair and bare marker untouched (14). UNIT the bare-`;;`-to-EOL arm and the greedy-pairing arm EXPLICITLY (JIT names both). - Ceremony through the EXISTING seal mint path; no-controller = route the shipped SEAL_NO_CEREMONY_SURFACE refusal into DISPATCH_RESULTS (ruling 15 already lives at Brain::seal_ceremony — never a second refusal beside it). - Ingest-fired mints ASYNC-DISPATCHED (ruled): the hook returns immediately, ceremony (incl. its immediate refusal) runs off the hook path, outcomes land in DISPATCH_RESULTS. Your promised unit making async-hook vs immediate-ceremony legible: required, name it in evidence. - DISPATCH_RESULTS vocabulary minted WHOLE (ruled): DELIVERED, NO_PERCH named-not-emitted until W5, transitional NOT_DELIVERED{code}, seal outcome/refusal arms — TOOL_USE pattern, documented. - Detection in agent output OR user input per CONTEXT.md (either author path mints). - Registry-first REQ set; measure-first report on surprises; same battery + both named grammar units + a real e2e leg per IR-67.