From 3bdf3cbb5c239ceaaa032265babc59b6e1ab1a01 Mon Sep 17 00:00:00 2001 From: Shirone Date: Fri, 16 Jan 2026 23:13:58 +0100 Subject: [PATCH] fix: improve branch name generation logic in BoardView and useBoardActions - Updated the logic for auto-generating branch names to consistently use the primary branch (main/master) and avoid nested feature paths. - Removed references to currentWorktreeBranch in favor of getPrimaryWorktreeBranch for better clarity and maintainability. - Enhanced comments to clarify the purpose of branch name generation. --- apps/ui/src/components/views/board-view.tsx | 7 +++---- .../views/board-view/hooks/use-board-actions.ts | 15 ++++++++++----- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/apps/ui/src/components/views/board-view.tsx b/apps/ui/src/components/views/board-view.tsx index 046ab4bd..7928c21c 100644 --- a/apps/ui/src/components/views/board-view.tsx +++ b/apps/ui/src/components/views/board-view.tsx @@ -521,9 +521,9 @@ export function BoardView() { // Empty string clears the branch assignment, moving features to main/current branch finalBranchName = ''; } else if (workMode === 'auto') { - // Auto-generate a branch name based on current branch and timestamp - const baseBranch = - currentWorktreeBranch || getPrimaryWorktreeBranch(currentProject.path) || 'main'; + // Auto-generate a branch name based on primary branch (main/master) and timestamp + // Always use primary branch to avoid nested feature/feature/... paths + const baseBranch = getPrimaryWorktreeBranch(currentProject.path) || 'main'; const timestamp = Date.now(); const randomSuffix = Math.random().toString(36).substring(2, 6); finalBranchName = `feature/${baseBranch}-${timestamp}-${randomSuffix}`; @@ -603,7 +603,6 @@ export function BoardView() { selectedFeatureIds, updateFeature, exitSelectionMode, - currentWorktreeBranch, getPrimaryWorktreeBranch, addAndSelectWorktree, setWorktreeRefreshKey, diff --git a/apps/ui/src/components/views/board-view/hooks/use-board-actions.ts b/apps/ui/src/components/views/board-view/hooks/use-board-actions.ts index ac39af5e..c9aba757 100644 --- a/apps/ui/src/components/views/board-view/hooks/use-board-actions.ts +++ b/apps/ui/src/components/views/board-view/hooks/use-board-actions.ts @@ -127,8 +127,10 @@ export function useBoardActions({ // No worktree isolation - work directly on current branch finalBranchName = undefined; } else if (workMode === 'auto') { - // Auto-generate a branch name based on current branch and timestamp - const baseBranch = currentWorktreeBranch || 'main'; + // Auto-generate a branch name based on primary branch (main/master) and timestamp + // Always use primary branch to avoid nested feature/feature/... paths + const baseBranch = + (currentProject?.path ? getPrimaryWorktreeBranch(currentProject.path) : null) || 'main'; const timestamp = Date.now(); const randomSuffix = Math.random().toString(36).substring(2, 6); finalBranchName = `feature/${baseBranch}-${timestamp}-${randomSuffix}`; @@ -245,7 +247,7 @@ export function useBoardActions({ currentProject, onWorktreeCreated, onWorktreeAutoSelect, - currentWorktreeBranch, + getPrimaryWorktreeBranch, features, ] ); @@ -282,7 +284,10 @@ export function useBoardActions({ if (workMode === 'current') { finalBranchName = undefined; } else if (workMode === 'auto') { - const baseBranch = currentWorktreeBranch || 'main'; + // Auto-generate a branch name based on primary branch (main/master) and timestamp + // Always use primary branch to avoid nested feature/feature/... paths + const baseBranch = + (currentProject?.path ? getPrimaryWorktreeBranch(currentProject.path) : null) || 'main'; const timestamp = Date.now(); const randomSuffix = Math.random().toString(36).substring(2, 6); finalBranchName = `feature/${baseBranch}-${timestamp}-${randomSuffix}`; @@ -390,7 +395,7 @@ export function useBoardActions({ setEditingFeature, currentProject, onWorktreeCreated, - currentWorktreeBranch, + getPrimaryWorktreeBranch, features, ] );