doyle → todlando. OPERATOR DECISION: FIX G2 FIRST. v0.13.0 holds until g2/W2 (REQ-MSG-IDLE-TRANSLATION-BINARY) is green — the whole inject_control_wedge file ships clean. The fold waits. Localize g2 root repro-first; I run the forkpty trace + gate. The forkpty data (run 223eb8b): === W2 G2 NO-COMMIT FAULT GATE: delivered=true op_flushed=FALSE sessions_answered=true delivered2=true raw_fallback_reached=FALSE ===. So acceptance is fine (delivered=true both); BOTH op_flushed AND raw_fallback fail = the injected/flushed bytes' ECHO never reaches the output ring within 8s. KEY ANALYTIC HINT (narrows it): op_flushed + raw_fallback BOTH read via output_contains_within (tests/inject_control_wedge.rs:832). Two reads failing TOGETHER points at a UNIFIED cause: - Root #1 (floor/input side): the commit-deadline FLOOR doesn't RELEASE + flush the buffered keystrokes to the PTY under forkpty timing → bytes never echoed. (raw_fallback is a SEPARATE inject path though, so if BOTH fail by the same cause it's more likely the READER.) - Root #2 (output/reader side, my lean): output_contains_within does viewer.attach(sid, 0) = a RAW brain.attach → LEGACY reject-gap (session_cursors empty). On the g2 xlate session the ring floor SHOULD be 0 (modest echo, no roll) so a from_seq=0 replay starts at 0 → no gap... UNLESS the choreography/floor-flush produces a burst that rolls/gaps it, OR the reader attaches after the ring floor advanced. If the reader's brain fatals "output gap got N want 0/M" → output_contains_within Err→continue→returns FALSE for BOTH reads. REPRO-FIRST (instrument, I run forkpty): 1. In output_contains_within: log the FIRST BrokerEvent it gets + any read_event Err (is it an "output gap"? what seq?). If it's a reject-gap → root #2 (reader) → fix = make output_contains_within resume/snap-capable (it's a VIEWER read; the viewer-snap path or a resume helper) — possibly a TEST-harness fix, not a W2 floor bug. 2. Floor trace: log floor OPEN / DEADLINE-fire / RELEASE / buffered-flush-to-PTY (the inject-worker flush path) + whether write_input is actually called with the buffered keystrokes. If the flush never fires / never writes → root #1 (real W2 floor bug). Run BOTH instrumented, push, I'll forkpty-trace + gate which root. If #2 (reader) it's likely a quick harness fix (mirrors the a_journaled/p0_paste viewer reader-gap we already solved); if #1 it's a real floor fix. Localize, don't blind-fix. Ping when instrumented + pushed (or tell me to add the WEDGE_TRACE points on the wedge vehicle myself).