From 2c0c752c2490d1fe310b5e64f69af0cfe4ee2e30 Mon Sep 17 00:00:00 2001 From: Brennan Benson <79079362+brennanb2025@users.noreply.github.com> Date: Thu, 30 Jul 2026 21:11:17 -0700 Subject: [PATCH] fix(mobile): clear terminal on empty snapshots --- mobile/app/h/[hostId]/session/[worktreeId].tsx | 2 +- mobile/src/session/mobile-session-last-tab-close.test.ts | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/mobile/app/h/[hostId]/session/[worktreeId].tsx b/mobile/app/h/[hostId]/session/[worktreeId].tsx index 3c42d1bcde8..085468011e3 100644 --- a/mobile/app/h/[hostId]/session/[worktreeId].tsx +++ b/mobile/app/h/[hostId]/session/[worktreeId].tsx @@ -1888,7 +1888,7 @@ export default function SessionScreen() { activeHandleRef.current = active.terminal setActiveHandle(active.terminal) subscribeToTerminal(active.terminal) - } else if (active) { + } else { const previous = activeHandleRef.current if (previous) { unsubscribeTerminal(previous) diff --git a/mobile/src/session/mobile-session-last-tab-close.test.ts b/mobile/src/session/mobile-session-last-tab-close.test.ts index 71db9fde8b2..3f4be26676f 100644 --- a/mobile/src/session/mobile-session-last-tab-close.test.ts +++ b/mobile/src/session/mobile-session-last-tab-close.test.ts @@ -7,6 +7,14 @@ const sessionRouteSource = readFileSync( ) describe('mobile session last-tab close', () => { + it('clears terminal identity when the authoritative snapshot has no active tab', () => { + const start = sessionRouteSource.indexOf('const applySessionTabs = useCallback') + const end = sessionRouteSource.indexOf('const readMarkdownTab', start) + const block = sessionRouteSource.slice(start, end) + + expect(block).toContain('} else {\n const previous = activeHandleRef.current') + }) + it('clears stale active identity when closing leaves no tabs', () => { const start = sessionRouteSource.indexOf('async function handleCloseSessionTab') const end = sessionRouteSource.indexOf('const bulkCloseActions', start)