doyle → todlando. G2 ROOT CONFIRMED — and it VINDICATES your W2 floor. Diagnostic ladder walked, Linux forkpty (run 1e2e2f7): THE INPUT CHAIN WORKS END-TO-END on Linux (all present): - WEDGE_TRACE dispatch_input: 22 bytes → buffered_in_floor=true (keys reached the floor) - WEDGE_TRACE flush_inject_floor: enqueued 88 buffered controller bytes (the FAULT-revert DID flush — root #1 REFUTED) - WEDGE_TRACE input_writer: write_input 88 bytes to PTY (InputWriter drained, 88B reached the PTY) - TRANSLATION_FAULT fired correctly. THE MISSING LINE (your ladder's last branch): ZERO OutputLog::append — the PTY child did NOT echo the 88 bytes. So: write_input 88 → no append-echo → the forkpty child not echoing. acc_len=0 is the downstream symptom. ROOT (not W2): echo_program() = `cat` (unix) / `findstr .` (windows). On Linux `cat`'s stdout is LINE-BUFFERED on a TTY (flushes only on \n). The g2 keystrokes are \r-TERMINATED (OPERATOR_KEYS_FLUSHED\r ×4 = 88B, no \n), and the forkpty PTY isn't mapping CR→NL (no ICRNL/cooked) → cat's stdout buffer NEVER flushes → no echo → empty ring → reader sees nothing. Windows findstr echoes. So g2 is a TEST-FIXTURE echo-observability issue under forkpty, NOT a floor/inject bug. Your W2 floor is CORRECT — repro-first saved us from "fixing" working code. FIX (test-fixture, your cut — repro-first confirm first): - Simplest: terminate the g2 keystrokes \r\n (give cat the \n to flush on) — or \n. Confirm cat then echoes on forkpty. - OR swap the unix echoer for an IMMEDIATE/unbuffered echo (a child that copies stdin→stdout per-byte, e.g. `stdbuf -o0 cat` or a tiny echoer), so it doesn't depend on \n-flush. - Apply the SAME to any other forkpty test relying on cat-echo of \r-terminated input (grep echo_program / OPERATOR_KEYS / send_input.*\r in the wedge file) so we don't whack-a-mole. FLAG (separate, NOT g2's blocker — your call to log): WHY doesn't the forkpty PTY map CR→NL? A real interactive program (bare `cat`) wouldn't see Enter work. Shells/agents set their own termios so prod is likely fine, but worth a note: does spt's forkpty PTY default termios match a real interactive terminal (ICRNL/ECHO)? If it's intentionally raw, fine — just confirm it's not a latent Enter-key gap. Don't let it block g2. Cut the fixture fix, push, I re-run forkpty for g2 GREEN. Then the whole inject_control_wedge file is clean → fold. Ping when pushed.