diff --git a/src/renderer/src/App.tsx b/src/renderer/src/App.tsx
index 9aaf950d6..fcbafa82b 100644
--- a/src/renderer/src/App.tsx
+++ b/src/renderer/src/App.tsx
@@ -338,7 +338,6 @@ function App(): React.JSX.Element {
const sidebarWidth = useAppStore((s) => s.sidebarWidth)
const sidebarOpen = useAppStore((s) => s.sidebarOpen)
const groupBy = useAppStore((s) => s.groupBy)
- const showWorkspaceLineage = useAppStore((s) => s.showWorkspaceLineage)
const sortBy = useAppStore((s) => s.sortBy)
const showActiveOnly = useAppStore((s) => s.showActiveOnly)
const hideDefaultBranchWorkspace = useAppStore((s) => s.hideDefaultBranchWorkspace)
@@ -810,7 +809,6 @@ function App(): React.JSX.Element {
sidebarWidth,
rightSidebarWidth,
groupBy,
- showWorkspaceLineage,
sortBy,
showActiveOnly,
hideDefaultBranchWorkspace,
@@ -830,7 +828,6 @@ function App(): React.JSX.Element {
sidebarWidth,
rightSidebarWidth,
groupBy,
- showWorkspaceLineage,
sortBy,
showActiveOnly,
hideDefaultBranchWorkspace,
diff --git a/src/renderer/src/components/sidebar/SidebarHeader.tsx b/src/renderer/src/components/sidebar/SidebarHeader.tsx
index f6881be76..bacade26a 100644
--- a/src/renderer/src/components/sidebar/SidebarHeader.tsx
+++ b/src/renderer/src/components/sidebar/SidebarHeader.tsx
@@ -66,8 +66,6 @@ const SidebarHeader = React.memo(function SidebarHeader() {
const setSortBy = useAppStore((s) => s.setSortBy)
const groupBy = useAppStore((s) => s.groupBy)
const setGroupBy = useAppStore((s) => s.setGroupBy)
- const showWorkspaceLineage = useAppStore((s) => s.showWorkspaceLineage)
- const setShowWorkspaceLineage = useAppStore((s) => s.setShowWorkspaceLineage)
const handleWorkspaceBoardOpenChange = useCallback((open: boolean) => {
setWorkspaceBoardOpen(open)
@@ -195,15 +193,6 @@ const SidebarHeader = React.memo(function SidebarHeader() {
-
- setShowWorkspaceLineage(Boolean(checked))}
- onSelect={(e) => e.preventDefault()}
- >
- Nest child workspaces
-
-
Sort by
)}
- {lineageChildren && {lineageChildren}
}
+ {lineageChildren && {lineageChildren}
}
)
diff --git a/src/renderer/src/components/sidebar/WorktreeList.tsx b/src/renderer/src/components/sidebar/WorktreeList.tsx
index e27772faf..7ec7084b4 100644
--- a/src/renderer/src/components/sidebar/WorktreeList.tsx
+++ b/src/renderer/src/components/sidebar/WorktreeList.tsx
@@ -121,13 +121,12 @@ function getWorktreeOptionId(worktreeId: string): string {
return `worktree-list-option-${encodeURIComponent(worktreeId)}`
}
-const LINEAGE_INDENT = 24
+const LINEAGE_INDENT = 18
type VirtualizedWorktreeViewportProps = {
rows: Row[]
activeWorktreeId: string | null
groupBy: WorktreeGroupBy
- showWorkspaceLineage: boolean
showInlineAgentCards: boolean
repoGroupOrdering: RepoGroupOrdering
toggleGroup: (key: string) => void
@@ -185,11 +184,7 @@ function renderRowContainsWorktree(row: RenderRow, worktreeId: string | null): b
return row.type === 'item' && row.worktree.id === worktreeId
}
-function buildRenderableRows(rows: Row[], showWorkspaceLineage: boolean): RenderRow[] {
- if (!showWorkspaceLineage) {
- return rows
- }
-
+function buildRenderableRows(rows: Row[]): RenderRow[] {
const renderRows: RenderRow[] = []
for (let index = 0; index < rows.length; index++) {
const row = rows[index]
@@ -258,7 +253,6 @@ const VirtualizedWorktreeViewport = React.memo(function VirtualizedWorktreeViewp
rows,
activeWorktreeId,
groupBy,
- showWorkspaceLineage,
showInlineAgentCards,
repoGroupOrdering,
toggleGroup,
@@ -300,10 +294,7 @@ const VirtualizedWorktreeViewport = React.memo(function VirtualizedWorktreeViewp
onCommit: reorderRepos,
getScrollContainer: () => scrollRef.current
})
- const renderRows = useMemo(
- () => buildRenderableRows(rows, showWorkspaceLineage),
- [rows, showWorkspaceLineage]
- )
+ const renderRows = useMemo(() => buildRenderableRows(rows), [rows])
const activeWorktreeRowIndex = useMemo(
() => renderRows.findIndex((row) => renderRowContainsWorktree(row, activeWorktreeId)),
[renderRows, activeWorktreeId]
@@ -386,7 +377,7 @@ const VirtualizedWorktreeViewport = React.memo(function VirtualizedWorktreeViewp
{
const targetWorktree = worktrees.find((w) => w.id === pendingRevealWorktreeId)
- if (targetWorktree && showWorkspaceLineage && !targetWorktree.isPinned) {
+ if (targetWorktree && !targetWorktree.isPinned) {
const seen = new Set()
let current: Worktree | undefined = targetWorktree
while (current && !seen.has(current.id)) {
@@ -454,7 +445,6 @@ const VirtualizedWorktreeViewport = React.memo(function VirtualizedWorktreeViewp
prCache,
worktreeLineageById,
worktreeMap,
- showWorkspaceLineage,
renderRows,
virtualizer,
clearPendingRevealWorktreeId,
@@ -545,7 +535,7 @@ const VirtualizedWorktreeViewport = React.memo(function VirtualizedWorktreeViewp
repoGroupOrdering,
worktreeLineageById,
worktreeMap,
- showWorkspaceLineage
+ true
).filter((r): r is Extract => r.type === 'item')
if (worktreeRows.length === 0) {
return
@@ -590,8 +580,7 @@ const VirtualizedWorktreeViewport = React.memo(function VirtualizedWorktreeViewp
repoOrder,
workspaceStatuses,
worktreeLineageById,
- worktreeMap,
- showWorkspaceLineage
+ worktreeMap
]
)
@@ -1213,7 +1202,6 @@ const WorktreeList = React.memo(function WorktreeList({
const worktreesByRepo = useAppStore((s) => s.worktreesByRepo)
const activeWorktreeId = useAppStore((s) => s.activeWorktreeId)
const groupBy = useAppStore((s) => s.groupBy)
- const showWorkspaceLineage = useAppStore((s) => s.showWorkspaceLineage)
const workspaceStatuses = useAppStore((s) => s.workspaceStatuses)
const sortBy = useAppStore((s) => s.sortBy)
const showActiveOnly = useAppStore((s) => s.showActiveOnly)
@@ -1539,7 +1527,7 @@ const WorktreeList = React.memo(function WorktreeList({
repoGroupOrdering,
worktreeLineageById,
worktreeMap,
- showWorkspaceLineage
+ true
),
[
groupBy,
@@ -1551,8 +1539,7 @@ const WorktreeList = React.memo(function WorktreeList({
workspaceStatuses,
repoGroupOrdering,
worktreeLineageById,
- worktreeMap,
- showWorkspaceLineage
+ worktreeMap
]
)
// Why: header/mode changes can shift entire groups, so remount the
@@ -1564,8 +1551,8 @@ const WorktreeList = React.memo(function WorktreeList({
.filter((r): r is GroupHeaderRow => r.type === 'header')
.map((r) => r.key)
.join(',')
- return `${groupBy}:${showWorkspaceLineage ? 'lineage' : 'flat'}:${headers}`
- }, [groupBy, rows, showWorkspaceLineage])
+ return `${groupBy}:lineage:${headers}`
+ }, [groupBy, rows])
// Why: derive the rendered item order from the post-buildRows() row list,
// not the flat `worktrees` array, because grouping (groupBy: 'repo' or
@@ -1795,7 +1782,6 @@ const WorktreeList = React.memo(function WorktreeList({
rows={rows}
activeWorktreeId={selectedSidebarWorktreeId}
groupBy={groupBy}
- showWorkspaceLineage={showWorkspaceLineage}
showInlineAgentCards={cardProps.includes('inline-agents')}
repoGroupOrdering={repoGroupOrdering}
toggleGroup={toggleGroup}
diff --git a/src/renderer/src/lib/startup-ui-hydration.ts b/src/renderer/src/lib/startup-ui-hydration.ts
index 247c956d6..716328785 100644
--- a/src/renderer/src/lib/startup-ui-hydration.ts
+++ b/src/renderer/src/lib/startup-ui-hydration.ts
@@ -35,7 +35,6 @@ export function getStartupErrorFallbackUI(uiHydrated: boolean): PersistedUIState
sidebarWidth: 280,
rightSidebarWidth: 350,
groupBy: 'repo',
- showWorkspaceLineage: false,
sortBy: 'name',
showActiveOnly: false,
hideDefaultBranchWorkspace: false,
diff --git a/src/renderer/src/store/slices/ui.ts b/src/renderer/src/store/slices/ui.ts
index c3c40230a..f8e8fa8c2 100644
--- a/src/renderer/src/store/slices/ui.ts
+++ b/src/renderer/src/store/slices/ui.ts
@@ -354,8 +354,6 @@ export type UISlice = {
clearOrcaHookTrustForRepo: (repoId: string) => void
groupBy: 'none' | 'workspace-status' | 'repo' | 'pr-status'
setGroupBy: (g: UISlice['groupBy']) => void
- showWorkspaceLineage: boolean
- setShowWorkspaceLineage: (v: boolean) => void
sortBy: 'name' | 'smart' | 'recent' | 'repo'
setSortBy: (s: UISlice['sortBy']) => void
showActiveOnly: boolean
@@ -723,9 +721,6 @@ export const createUISlice: StateCreator = (set, get)
set({ groupBy: g, collapsedGroups: new Set() })
},
- showWorkspaceLineage: false,
- setShowWorkspaceLineage: (v) => set({ showWorkspaceLineage: v }),
-
sortBy: 'recent',
setSortBy: (s) => set({ sortBy: s }),
@@ -918,7 +913,6 @@ export const createUISlice: StateCreator = (set, get)
MAX_RIGHT_SIDEBAR_WIDTH
),
groupBy: (ui.groupBy as UISlice['groupBy'] | 'parent') === 'parent' ? 'repo' : ui.groupBy,
- showWorkspaceLineage: ui.showWorkspaceLineage ?? false,
sortBy,
// Why: "Active only" is part of the user's sidebar working set, not a
// transient render detail. Restoring it on launch keeps the filtered
diff --git a/src/shared/constants.ts b/src/shared/constants.ts
index 7ce34db45..4935dbebc 100644
--- a/src/shared/constants.ts
+++ b/src/shared/constants.ts
@@ -341,7 +341,6 @@ export function getDefaultUIState(): PersistedUIState {
sidebarWidth: 280,
rightSidebarWidth: 350,
groupBy: 'repo',
- showWorkspaceLineage: false,
sortBy: 'recent',
showActiveOnly: false,
hideDefaultBranchWorkspace: false,
diff --git a/src/shared/types.ts b/src/shared/types.ts
index 1a53e9f58..a0a9fa6c4 100644
--- a/src/shared/types.ts
+++ b/src/shared/types.ts
@@ -1715,7 +1715,6 @@ export type PersistedUIState = {
sidebarWidth: number
rightSidebarWidth: number
groupBy: 'none' | 'workspace-status' | 'repo' | 'pr-status'
- showWorkspaceLineage?: boolean
sortBy: 'name' | 'smart' | 'recent' | 'repo'
showActiveOnly: boolean
/** Hide the repo's original checked-out branch from workspace navigation