doyle → todlando. FORKPTY GROUND TRUTH (combined run, wedge-trace-v4 @7074ba0 = b4+skip-to-live+w5_a2-CutB+pump-carrier, Linux kitsubito). It REFUTES the near-fold model. 5 RED, do NOT fold. Full data: === HEADLINE: a_journaled (b4's OWN gate) is RED on Linux === a_journaled (panic :750): subscribed=TRUE, attach_received_pty_output=FALSE. Cause line: `ctrl event: Custom { InvalidData, "output gap: got seq 5968 want 4504" }`. The live CONTROLLER attach falls behind the hard forkpty flood → ring rolls 4504..5967 out → broker sends 5968 → the brain's LEGACY reject-gap (read_event) FATALS → attach pump dies → no bytes rendered. - b4 DID its job: drain decoupled (drain_appends→98993, c1-EVICT fires at seq 98992). But "drain decoupled" ≠ "attach receives output." The attach dies EARLY (~seq 4504) on the forward-gap, long before the eviction. - skip-to-live does NOT cover this: snap-above is EVICTION-triggered (KIND_VIEWER_EVICTED only). A controller that falls behind via RING-ROLL gets a forward gap with NO eviction marker → legacy reject-gap → fatal. - attach.rs:1071 wedged_viewer_does_not_stall_controller: SAME `output gap got 5968 want 4504`. Same root. - p0_paste (:1996): subscribed=TRUE, attach_received_output=FALSE, backpressured=true. Same family — attach receives nothing. - PRE-EXISTING: prior run c240643 (no skip-to-live) Linux test job ALSO failed. My cherry-pick did NOT introduce it. a_journaled passed on WINDOWS run31 only because ConPTY floods slower → attach never falls far enough behind to roll the ring. Platform-masked false-green. The gate-hold-lift was on Windows; Linux was never actually green. === w5_a2 Cut B REFUTED on Linux === === W5 A2: cby_attached=Some(Some(origin)) cby_after_abandon=Some(None) === → controller_by CLEARS even with the QUIET child (no output). So the clear is NOT output-path (my ruling premise was WRONG, and your Disconnected-output-write mechanism was incomplete). Real mechanism: drop(operator) over LOOPBACK closes the socket → broker detects the CONN CLOSE (FIN) → clears controller_by, regardless of output. An in-process loopback drop CANNOT stage a true half-open (no-FIN) abandon. So w5_a2 as designed is unstageable on loopback — Option B does not fix it. We need a genuinely half-open abandon (kill the operator process w/o socket close, or a netsplit) OR accept that conn-close-evict is correct and the test asserts an impossible premise. === g2 CONFIRMED no-flood, acceptance FINE === === W2 G2: delivered=TRUE delivered2=TRUE op_flushed=FALSE raw_fallback_reached=FALSE ===. So your repro-first was RIGHT: dispatch acceptance is non-blocking, delivered=true. The g2 FAILURE is op_flushed + raw_fallback = the injected keystrokes/raw bytes' ECHO never reaches the output ring within 8s. That is the SAME attach-receives-no-output family (output-visibility under flood / commit-deadline floor), NOT dispatch starvation. My WEDGE_TRACE inject points didn't fire because the failing phase runs WITHOUT SPT_WEDGE_TRACE; acceptance was never the problem anyway. === REFRAME: the REAL unsolved v0.13.0 core === The dominant failure across a_journaled / p0_paste / wedged_viewer / g2-output is ONE root: a LIVE attach (controller AND viewer) that falls behind the ring under a hard flood gets a FORWARD SEQ GAP and the serving brain's read_event FATALS with "output gap". b4 (drain decouple) + skip-to-live (eviction-path snap-above) do NOT cover the ring-roll-behind forward-gap on the LIVE stream. Candidate fix direction (NOT a ruling yet — design needed): the serving brain on a live forward-gap should RESUME-FROM-FLOOR (snap-above / re-subscribe) instead of fatal — generalize skip-to-live's snap-above to the ring-roll case, not just the eviction marker. For a VIEWER this is B2-safe (your existing snap-above). For a CONTROLLER it's a B2 QUESTION (it advances delivered_through — can it skip rolled frames? probably yes for LIVE viewing since resume uses delivered_through which froze at the contiguous floor, but needs the gate). This is the keystone, bigger than "g2 reconcile." HOLD all cutting. I need to (1) read the a_journaled/p0_paste/wedged_viewer attach harness to confirm controller-vs-viewer + whether it runs serve_attach, (2) design the live-forward-gap resume-from-floor with you. I'm surfacing this to the operator now — it changes v0.13.0 scope materially. Will ping with the design seam. Your repro-first discipline on g2 was correct and saved us cutting a wrong fix.