From 81407c5ffc19066ed02c31ce64503a56af908a52 Mon Sep 17 00:00:00 2001 From: Mohamed Boudra Date: Tue, 26 May 2026 15:37:08 +0700 Subject: [PATCH] Derive tab testIDs from the tab target The tab testID was reading from tabId, which intentionally stays as the draft id after a draft -> agent handoff so the panel React key remains stable and the component does not remount. The data-testid was riding along on that identity and stayed workspace-tab-draft_xxx forever, even though the tab semantically became an agent. Tests that look for workspace-tab-agent_* timed out. Read testIDs from tab.target via buildDeterministicWorkspaceTabId so the testID reflects what the tab represents. React key is unchanged. --- .../src/screens/workspace/workspace-desktop-tabs-row.tsx | 3 ++- packages/app/src/screens/workspace/workspace-screen.tsx | 8 ++++++-- packages/app/src/screens/workspace/workspace-tab-menu.ts | 3 ++- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/packages/app/src/screens/workspace/workspace-desktop-tabs-row.tsx b/packages/app/src/screens/workspace/workspace-desktop-tabs-row.tsx index f55ea4b68..8e8d9f8d8 100644 --- a/packages/app/src/screens/workspace/workspace-desktop-tabs-row.tsx +++ b/packages/app/src/screens/workspace/workspace-desktop-tabs-row.tsx @@ -54,6 +54,7 @@ import { WorkspaceTabIcon, type WorkspaceTabPresentation, } from "@/screens/workspace/workspace-tab-presentation"; +import { buildDeterministicWorkspaceTabId } from "@/workspace-tabs/identity"; import { buildWorkspaceDesktopTabActions, type WorkspaceDesktopTabActions, @@ -379,7 +380,7 @@ function TabChip({ Promise | void; onCloseOtherTabs: (tabId: string) => Promise | void; }) { - const menuTestIDBase = `workspace-tab-menu-${tab.key}`; + const menuTestIDBase = `workspace-tab-menu-${buildDeterministicWorkspaceTabId(tab.target)}`; const menuEntries = buildWorkspaceTabMenuEntries({ surface: "mobile", tab, diff --git a/packages/app/src/screens/workspace/workspace-tab-menu.ts b/packages/app/src/screens/workspace/workspace-tab-menu.ts index 123135763..a208ca03c 100644 --- a/packages/app/src/screens/workspace/workspace-tab-menu.ts +++ b/packages/app/src/screens/workspace/workspace-tab-menu.ts @@ -1,5 +1,6 @@ import type { WorkspaceTabDescriptor } from "@/screens/workspace/workspace-tabs-types"; import { encodeFilePathForPathSegment } from "@/utils/host-routes"; +import { buildDeterministicWorkspaceTabId } from "@/workspace-tabs/identity"; export type WorkspaceTabMenuSurface = "desktop" | "mobile"; @@ -228,7 +229,7 @@ export function buildWorkspaceTabMenuEntries( export function buildWorkspaceDesktopTabActions( input: BuildWorkspaceDesktopTabActionsInput, ): WorkspaceDesktopTabActions { - const contextMenuTestId = `workspace-tab-context-${input.tab.key}`; + const contextMenuTestId = `workspace-tab-context-${buildDeterministicWorkspaceTabId(input.tab.target)}`; return { contextMenuTestId, menuEntries: buildWorkspaceTabMenuEntries({