diff --git a/apps/server/src/git/Layers/GitManager.test.ts b/apps/server/src/git/Layers/GitManager.test.ts index f94f4ad39b6fc8432de5423d63c2f2dc9a89a0fe..6f0917a0e6ad8a3015f2b4c692f9274c948f0f10 100644 --- a/apps/server/src/git/Layers/GitManager.test.ts +++ b/apps/server/src/git/Layers/GitManager.test.ts @@ -563,6 +563,14 @@ it.layer(GitManagerTestLayer)("GitManager", (it) => { Effect.map((result) => result.stdout.trim()), ), ).toBe("feature/implement-stacked-git-actions"); + + const mainSha = yield* runGit(repoDir, ["rev-parse", "main"]).pipe( + Effect.map((r) => r.stdout.trim()), + ); + const mergeBase = yield* runGit(repoDir, ["merge-base", "main", "HEAD"]).pipe( + Effect.map((r) => r.stdout.trim()), + ); + expect(mergeBase).toBe(mainSha); }), ); @@ -598,6 +606,14 @@ it.layer(GitManagerTestLayer)("GitManager", (it) => { expect(result.commit.status).toBe("created"); expect(result.commit.subject).toBe("feat: custom summary line"); expect(generatedCount).toBe(0); + + const mainSha = yield* runGit(repoDir, ["rev-parse", "main"]).pipe( + Effect.map((r) => r.stdout.trim()), + ); + const mergeBase = yield* runGit(repoDir, ["merge-base", "main", result.branch.name!]).pipe( + Effect.map((r) => r.stdout.trim()), + ); + expect(mergeBase).toBe(mainSha); }), ); diff --git a/apps/web/src/components/GitActionsControl.tsx b/apps/web/src/components/GitActionsControl.tsx index 5ecae7ecfe09afe1bd13a8a2aa1ddfd6e1122002..04c03a149f4ba4e31af72232cb28193873d4652d 100644 --- a/apps/web/src/components/GitActionsControl.tsx +++ b/apps/web/src/components/GitActionsControl.tsx @@ -254,7 +254,8 @@ export default function GitActionsControl({ gitCwd, activeThreadId }: GitActions !skipDefaultBranchPrompt && !featureBranch && requiresDefaultBranchConfirmation(action, actionIsDefaultBranch) && - actionBranch + actionBranch && + !!actionStatus?.hasWorkingTreeChanges ) { if (action !== "commit_push" && action !== "commit_push_pr") { return; diff --git a/packages/shared/src/git.ts b/packages/shared/src/git.ts index ff4c8469d347c6dd58a81db542117d84ba5978d5..113112cd5d5ee95de84c51f2ae904379875a0f34 100644 --- a/packages/shared/src/git.ts +++ b/packages/shared/src/git.ts @@ -43,14 +43,9 @@ export function resolveAutoFeatureBranchName( preferredBranch?: string, ): string { const preferred = preferredBranch?.trim(); - const normalized = sanitizeBranchFragment( + const resolvedBase = sanitizeFeatureBranchName( preferred && preferred.length > 0 ? preferred : AUTO_FEATURE_BRANCH_FALLBACK, ); - const resolvedBase = normalized.includes("/") - ? normalized.startsWith("feature/") - ? normalized - : `feature/${normalized}` - : `feature/${normalized}`; const existingNames = new Set(existingBranchNames); if (!existingNames.has(resolvedBase)) {