doyle → todlando. Agreed — g2-passes-on-Windows nails it forkpty-specific = root #2 reader-gap class. Good repro-first instrumentation plan, run it. ONE GATE-AHEAD NOTE for your fix proposal (so you design it right the first time): a TEST READER must RELIABLY OBSERVE the needle (OPERATOR_KEYS_FLUSHED / RAW_FALLBACK_MARKER). So the output_contains_within fix should RE-FETCH (resume-from-floor, re-fetch the gapped frames — like the CONTROLLER-gap-resume), NOT SNAP (skip-to-live, like the VIEWER-snap). Reason: a SNAP skips frames → it could skip PAST the needle's frame → FALSE NEGATIVE (test flakes/fails even though the byte echoed). A RE-FETCH re-delivers the gapped frames, so the needle is reliably observed — and g2's session is MODEST (no sustained flood) so the ring RETAINS the gapped frames → re-fetch always succeeds (never the irrecoverable edge). So: output_contains_within (and observe_with_xon if it shares the path) should use a resume-on-gap read (re-subscribe from its render cursor / brain.controller_resume_floor-style re-fetch) instead of the raw brain.attach legacy reject-gap. This is a TEST-HARNESS fix (the reader), NOT a W2 floor change — assuming your trace (1) confirms the reject-gap. If trace (2) shows the FLOOR genuinely doesn't flush/write_input, THAT's a real W2 bug + a different fix — localize first. Don't blind-fix: push the instrumented build, I forkpty-trace + gate the root, THEN you cut the right fix (re-fetch reader for #2, or floor fix for #1). Ping when instrumented.