From 6154d054388e092d5fe1c7db46ab4982dfb098f0 Mon Sep 17 00:00:00 2001 From: Ivan Kosilov Date: Wed, 28 Oct 2026 15:54:34 +0500 Subject: [PATCH 1/2] fix(web): boring sidebar's New thread opens the project picker again Since #26387 the boring sidebar hides projects without active threads, so the header pen and chat.new were the only quick way to start a thread in one, yet both still skipped the picker in boring mode. Co-Authored-By: Claude Opus 5.5 --- apps/web/src/components/Sidebar.tsx | 7 ++----- apps/web/src/shortcuts/chatRouteCommands.ts | 5 +---- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/apps/web/src/components/Sidebar.tsx b/apps/web/src/components/Sidebar.tsx index 0868554b50ffd..070430f68108c 100644 --- a/apps/web/src/components/Sidebar.tsx +++ b/apps/web/src/components/Sidebar.tsx @@ -2841,10 +2841,7 @@ export default function Sidebar({ routeReveal }: { routeReveal: SidebarRouteReve const showJumpHints = useThreadJumpHintsVisible(shouldShowJumpHintsNow); const handleNewThreadClick = (event?: ReactMouseEvent) => { - if ( - boringSidebarEnabled || - shouldCreateNewThreadInCurrentProject(event?.shiftKey ?? false, projectGroups.length) - ) { + if (shouldCreateNewThreadInCurrentProject(event?.shiftKey ?? false, projectGroups.length)) { if (isMobile) setOpenMobile(false); void startNewThreadFromContext({ activeDraftThread: newThreadContext.activeDraftThread, @@ -3044,7 +3041,7 @@ export default function Sidebar({ routeReveal }: { routeReveal: SidebarRouteReve newThreadDisabled={projects.length === 0} newThreadShortcutLabel={newThreadShortcutLabel} newThreadInProjectShortcutLabel={newThreadInProjectShortcutLabel} - showNewThreadInProjectHint={!boringSidebarEnabled && projectGroups.length > 1} + showNewThreadInProjectHint={projectGroups.length > 1} searchInputRef={threadSearchInputRef} searchQuery={threadSearchQuery} onSearchQueryChange={(value) => { diff --git a/apps/web/src/shortcuts/chatRouteCommands.ts b/apps/web/src/shortcuts/chatRouteCommands.ts index f0f80dfed8830..6de81cdacde02 100644 --- a/apps/web/src/shortcuts/chatRouteCommands.ts +++ b/apps/web/src/shortcuts/chatRouteCommands.ts @@ -117,10 +117,7 @@ export function installChatRouteCommands(router: AnyRouter): () => void { void scratch.startScratchThread(environmentId); }, "chat.new": (event) => { - // The boring sidebar's folders already show the context, so it starts in - // the current project like the legacy sidebar did. - const { boringSidebarEnabled, legacySidebarEnabled } = getClientSettings(); - if (!boringSidebarEnabled && !legacySidebarEnabled && readProjectGroupCount() > 1) { + if (readProjectGroupCount() > 1) { claim(event); openCommandPalette({ open: "new-thread-in" }); return; From 373ae35de9605ccb2b50c5d6f5319cb4db69f1c4 Mon Sep 17 00:00:00 2001 From: Ivan Kosilov Date: Wed, 28 Oct 2026 16:10:03 +0500 Subject: [PATCH 2/2] fix(web): chat.new counts project groups as the sidebar does The sidebar folds every scratch project into one group, so with no real project and scratch projects on two environments the header pen started a thread while chat.new opened the picker. Co-Authored-By: Claude Opus 5.5 --- apps/web/src/shortcuts/chatRouteCommands.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/web/src/shortcuts/chatRouteCommands.ts b/apps/web/src/shortcuts/chatRouteCommands.ts index 6de81cdacde02..073ed70751cc4 100644 --- a/apps/web/src/shortcuts/chatRouteCommands.ts +++ b/apps/web/src/shortcuts/chatRouteCommands.ts @@ -79,6 +79,7 @@ export function installChatRouteCommands(router: AnyRouter): () => void { const readProjectGroupCount = () => buildSidebarProjectSnapshots({ projects: readProjects(), + groupScratchProjects: true, settings: selectProjectGroupingSettings(getClientSettings()), primaryEnvironmentId: appAtomRegistry.get(primaryEnvironmentIdAtom), resolveEnvironmentLabel: () => null,