From 38c5b6b9704733c71c883e2ffd2ea6d72c8d1a13 Mon Sep 17 00:00:00 2001 From: Neil <4138956+nwparker@users.noreply.github.com> Date: Thu, 26 Mar 2026 12:51:05 -0700 Subject: [PATCH] fix: stabilize active worktree order in 'recent' sort (#116) Co-authored-by: Claude Opus 4.6 --- .../src/components/sidebar/WorktreeList.tsx | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/renderer/src/components/sidebar/WorktreeList.tsx b/src/renderer/src/components/sidebar/WorktreeList.tsx index f5a093a1c3f..8e84792da21 100644 --- a/src/renderer/src/components/sidebar/WorktreeList.tsx +++ b/src/renderer/src/components/sidebar/WorktreeList.tsx @@ -85,8 +85,23 @@ const WorktreeList = React.memo(function WorktreeList() { switch (sortBy) { case 'name': return a.displayName.localeCompare(b.displayName) - case 'recent': + case 'recent': { + const aTabs = tabsByWorktree?.[a.id] ?? [] + const bTabs = tabsByWorktree?.[b.id] ?? [] + const aActive = aTabs.some((t) => t.ptyId) + const bActive = bTabs.some((t) => t.ptyId) + // Active worktrees pin to top in stable (name) order + if (aActive && bActive) { + return a.displayName.localeCompare(b.displayName) + } + if (aActive) { + return -1 + } + if (bActive) { + return 1 + } return b.sortOrder - a.sortOrder + } case 'repo': { const ra = repoMap.get(a.repoId)?.displayName ?? '' const rb = repoMap.get(b.repoId)?.displayName ?? ''