diff --git a/src/renderer/src/components/terminal-pane/pty-renderer-delivery-claims.test.ts b/src/renderer/src/components/terminal-pane/pty-renderer-delivery-claims.test.ts index e2a447601ec..bb0f0bbfff3 100644 --- a/src/renderer/src/components/terminal-pane/pty-renderer-delivery-claims.test.ts +++ b/src/renderer/src/components/terminal-pane/pty-renderer-delivery-claims.test.ts @@ -72,4 +72,27 @@ describe('renderer PTY delivery claims', () => { expect(setHiddenRendererPty).toHaveBeenLastCalledWith(PTY_ID, false) releaseRendererPtyVisibilityClaim(visiblePane) }) + // STA-4393: the reveal path calls this directly (pty-connection.ts), and it is the + // half of the fix that clears a leftover hidden gate so a revealed renderer actually + // receives live frames. Without it the pane stays gated behind a stale hidden claim + // and sits ~10 frames behind the authoritative buffer. + it('clears a stale hidden gate when the reveal path declares delivery visible', () => { + const staleHidden = acquireHiddenRendererPtyDeliveryClaim(PTY_ID) + expect(setHiddenRendererPty).toHaveBeenLastCalledWith(PTY_ID, true) + staleHidden() + + setHiddenRendererPty.mockReset() + declareRendererPtyDeliveryVisible(PTY_ID) + + expect(setHiddenRendererPty).toHaveBeenCalledWith(PTY_ID, false) + }) + + it('does not ungate while a hidden owner still legitimately holds the PTY', () => { + acquireHiddenRendererPtyDeliveryClaim(PTY_ID) + setHiddenRendererPty.mockReset() + + declareRendererPtyDeliveryVisible(PTY_ID) + + expect(setHiddenRendererPty).not.toHaveBeenCalled() + }) })