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)