From a9dfd32347cd08df4334a68487fffef9ea53939f Mon Sep 17 00:00:00 2001 From: Bohdan Triapitsyn Date: Wed, 24 Jun 2026 10:56:54 +0300 Subject: [PATCH] fix: avoid stale project binding for new sessions Keeps implicit new sessions tied to the current directory Prevents unmatched directories from inheriting the active project Adds regression coverage for draft project selection --- packages/ui/src/sync/session-ui-store.test.js | 11 +++++++++++ packages/ui/src/sync/session-ui-store.ts | 7 +++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/packages/ui/src/sync/session-ui-store.test.js b/packages/ui/src/sync/session-ui-store.test.js index ff144d10..276385a0 100644 --- a/packages/ui/src/sync/session-ui-store.test.js +++ b/packages/ui/src/sync/session-ui-store.test.js @@ -255,6 +255,17 @@ describe('openNewSessionDraft project binding', () => { expect(draft.directoryOverride).toBe(projectB.path); }); + test('does not attach active project when current directory is unmatched', () => { + useDirectoryStore.getState().setDirectory('/external/worktree', { showOverlay: false }); + + useSessionUIStore.getState().openNewSessionDraft(); + const draft = useSessionUIStore.getState().newSessionDraft; + + expect(draft.open).toBe(true); + expect(draft.selectedProjectId).toBeNull(); + expect(draft.directoryOverride).toBe('/external/worktree'); + }); + test('respects explicit directoryOverride over active project', () => { useSessionUIStore.getState().openNewSessionDraft({ directoryOverride: '/projects/beta/src' }); const draft = useSessionUIStore.getState().newSessionDraft; diff --git a/packages/ui/src/sync/session-ui-store.ts b/packages/ui/src/sync/session-ui-store.ts index e2f3a248..3026ec7b 100644 --- a/packages/ui/src/sync/session-ui-store.ts +++ b/packages/ui/src/sync/session-ui-store.ts @@ -623,10 +623,9 @@ export const useSessionUIStore = create()((set, get) => ({ const currentDirProject = resolveDraftProjectForDirectory(projects, availableWorktreesByProject, currentDirectory) const selectedProject = (() => { - if (explicitProject || explicitDirectory !== null) { - return explicitProject ?? inferredProjectFromDir ?? fallbackProject - } - if (currentDirectory) return currentDirProject ?? fallbackProject + if (explicitProject) return explicitProject + if (explicitDirectory !== null) return inferredProjectFromDir + if (currentDirectory) return currentDirProject return persistedProjectByDir ?? persistedProjectById ?? fallbackProject })()