From bb0d32a8a18cc0e8884c3cf33de9eddc79f1a70e Mon Sep 17 00:00:00 2001 From: Merge Sim Date: Sat, 5 Sep 2026 19:30:16 -0700 Subject: [PATCH] chore: remove a scratch repro file committed by mistake It was swept into the previous commit by a broad `git add` while a diagnostic ran in this worktree. It asserts the current renderer-sync defect as expected behaviour, so it would fail the moment that defect is fixed. --- .../src/runtime/__scratch-absorption.test.ts | 186 ------------------ 1 file changed, 186 deletions(-) delete mode 100644 src/renderer/src/runtime/__scratch-absorption.test.ts diff --git a/src/renderer/src/runtime/__scratch-absorption.test.ts b/src/renderer/src/runtime/__scratch-absorption.test.ts deleted file mode 100644 index b71ff5aa447..00000000000 --- a/src/renderer/src/runtime/__scratch-absorption.test.ts +++ /dev/null @@ -1,186 +0,0 @@ -// @vitest-environment happy-dom -// -// Scratch repro: a host-published structured chat tab is dropped by the LIVE renderer -// when the host's stored snapshotVersion for the worktree regresses under an unchanged -// publication lineage (the `renderer:` epoch), which is exactly what happens after -// the host prunes and recreates its per-worktree entry. - -import { afterEach, beforeEach, describe, expect, it } from 'vitest' -import type { RuntimeMobileSessionTabsResult } from '../../../shared/runtime-types' -import { - applyLocalStructuredSessionTabSnapshots, - resetLocalStructuredSessionVersionForTests -} from './local-structured-session-tabs-sync' -import { - resetWebSessionTabsSnapshotFreshnessForTests, - type WebSessionTabsSyncState -} from './web-session-tabs-sync' -import { resetWebSessionFocusIntentForTests } from './web-session-focus-intent' - -const W = 'repo-1::/tmp/wt1' -// Stable for the whole renderer lifetime: src/renderer/src/runtime/sync-runtime-graph/graph-state.ts:36 -const RENDERER_EPOCH = 'renderer:11111111-2222-3333-4444-555555555555' - -beforeEach(() => { - resetLocalStructuredSessionVersionForTests() - resetWebSessionTabsSnapshotFreshnessForTests() - resetWebSessionFocusIntentForTests() -}) -afterEach(() => { - resetLocalStructuredSessionVersionForTests() - resetWebSessionFocusIntentForTests() -}) - -function emptyState(): WebSessionTabsSyncState { - return { - activeBrowserTabId: null, - activeBrowserTabIdByWorktree: {}, - activeFileId: null, - activeFileIdByWorktree: {}, - activeGroupIdByWorktree: {}, - activeTabId: null, - activeTabIdByWorktree: {}, - activeTabType: 'terminal', - activeTabTypeByWorktree: {}, - activeWorktreeId: W, - agentStatusByPaneKey: {}, - agentStatusEpoch: 0, - browserCertificateFailuresByPageId: {}, - browserPagesByWorkspace: {}, - browserTabsByWorktree: {}, - groupsByWorktree: {}, - layoutByWorktree: {}, - openFiles: [], - ptyIdsByTabId: {}, - remoteBrowserPageHandlesByPageId: {}, - tabBarOrderByWorktree: {}, - tabsByWorktree: {}, - terminalLayoutsByTabId: {}, - unifiedTabsByWorktree: {}, - unreadTerminalTabs: {}, - sortEpoch: 0 - } -} - -/** What `publishStructuredAgentSessionTab` emits for a chat tab on this worktree. */ -function chatSnapshot( - publicationEpoch: string, - snapshotVersion: number -): RuntimeMobileSessionTabsResult { - return { - worktree: W, - publicationEpoch, - snapshotVersion, - // Observed in QA: the host had no `tabGroups`, so the publish defaulted to this group id. - activeGroupId: `headless-terminals:${W}`, - activeTabId: 'agent-session:codex-1', - activeTabType: 'agent-session', - tabGroups: [ - { - id: `headless-terminals:${W}`, - activeTabId: 'agent-session:codex-1', - tabOrder: ['agent-session:codex-1'] - } - ], - tabs: [ - { - type: 'agent-session', - id: 'agent-session:codex-1', - title: 'Codex Chat', - sessionId: 'codex-1', - agent: 'codex', - isActive: true - } - ] - } -} - -function emptySnapshot( - publicationEpoch: string, - snapshotVersion: number -): RuntimeMobileSessionTabsResult { - return { - worktree: W, - publicationEpoch, - snapshotVersion, - activeGroupId: null, - activeTabId: null, - activeTabType: null, - tabGroups: [], - tabs: [] - } -} - -function apply( - state: WebSessionTabsSyncState, - snapshot: RuntimeMobileSessionTabsResult -): WebSessionTabsSyncState { - return applyLocalStructuredSessionTabSnapshots(state, [snapshot]) -} - -function chatTabIds(state: WebSessionTabsSyncState): string[] { - return (state.unifiedTabsByWorktree[W] ?? []) - .filter((tab) => tab.contentType === 'agent-session') - .map((tab) => tab.entityId) -} - -describe('structured chat absorption after a host stored-version regression', () => { - it('DROPS the republished chat tab when the host version regressed under the same epoch', () => { - let state = emptyState() - - // 1. Chat is live. The host's per-worktree counter has been bumped many times by - // main-local touches (agent-status heartbeats, publishes) on top of the renderer's. - state = apply(state, chatSnapshot(RENDERER_EPOCH, 120)) - expect(chatTabIds(state)).toEqual(['codex-1']) - - // 2. User closes the chat tab; the worktree goes empty. - state = apply(state, emptySnapshot(RENDERER_EPOCH, 121)) - expect(chatTabIds(state)).toEqual([]) - - // 3. The host pruned its entry for the empty worktree and recreated it from the - // renderer's own global publication counter (orca-runtime-sync-mobile-session-tabs.ts:163-165 - // stores `nextSnapshot.snapshotVersion` verbatim when `existing` is undefined). - // `agentSession.reveal` then republishes on top of that, still under `renderer:`. - state = apply(state, chatSnapshot(RENDERER_EPOCH, 9)) - - // THE BUG: the tab never reaches the store, so activateStructuredAgentSessionById fails. - expect(chatTabIds(state)).toEqual([]) - }) - - it('CONTROL: the identical republish lands when its version clears the stale cursor', () => { - let state = emptyState() - state = apply(state, chatSnapshot(RENDERER_EPOCH, 120)) - state = apply(state, emptySnapshot(RENDERER_EPOCH, 121)) - - state = apply(state, chatSnapshot(RENDERER_EPOCH, 122)) - - // Same frame, same state, same host filter, same epoch history -> only the version differs. - expect(chatTabIds(state)).toEqual(['codex-1']) - }) - - it('CONTROL: a renderer reload (cleared module cursors) absorbs the low-version republish', () => { - let state = emptyState() - state = apply(state, chatSnapshot(RENDERER_EPOCH, 120)) - state = apply(state, emptySnapshot(RENDERER_EPOCH, 121)) - - resetLocalStructuredSessionVersionForTests() // what a renderer reload does - - state = apply(state, chatSnapshot(RENDERER_EPOCH, 9)) - expect(chatTabIds(state)).toEqual(['codex-1']) - }) - - it('the host removal frame is the only thing that clears the cursor, and it is not modelled', () => { - let state = emptyState() - state = apply(state, chatSnapshot(RENDERER_EPOCH, 120)) - state = apply(state, emptySnapshot(RENDERER_EPOCH, 121)) - - // orca-runtime-stored-mobile-snapshot-has-stale-preserved-tab.ts:132-142 - state = apply(state, { - ...emptySnapshot(`removed:${(1).toString(36)}`, 0), - removed: true - } as RuntimeMobileSessionTabsResult) - - state = apply(state, chatSnapshot(RENDERER_EPOCH, 9)) - expect(chatTabIds(state)).toEqual(['codex-1']) - }) -})