Merge pull request #3556 from Tibsfox/fix/worktree-main-branch-pref

fix(gsd): use main_branch preference in worktree creation
This commit is contained in:
Jeremy McSpadden 2026-04-07 07:17:17 -05:00 committed by GitHub
commit 3e7dcdb3a5
2 changed files with 30 additions and 2 deletions

View file

@ -1057,12 +1057,20 @@ export function createAutoWorktree(
reuseExistingBranch: true,
});
} else {
// Fresh start — create branch from integration branch
// Fresh start — create branch from integration branch.
// Use the same 3-tier fallback as mergeMilestoneToMain (#3461):
// 1. META.json integration branch (explicit per-milestone override)
// 2. git.main_branch preference (user's configured working branch)
// 3. nativeDetectMainBranch (origin/HEAD auto-detection)
// Without tier 2, projects with main_branch=dev but origin/HEAD→master
// would fork worktrees from the wrong (stale) branch.
const integrationBranch =
readIntegrationBranch(basePath, milestoneId) ?? undefined;
const gitPrefs = loadEffectiveGSDPreferences()?.preferences?.git;
const startPoint = integrationBranch ?? gitPrefs?.main_branch ?? undefined;
info = createWorktree(basePath, milestoneId, {
branch,
startPoint: integrationBranch,
startPoint,
});
}

View file

@ -0,0 +1,20 @@
/**
* Regression test for #3461: createAutoWorktree must use git.main_branch
* preference when META.json integration branch is absent.
*/
import { test } from "node:test";
import assert from "node:assert/strict";
import { readFileSync } from "node:fs";
import { join } from "node:path";
test("auto-worktree.ts includes main_branch preference in startPoint fallback (#3461)", () => {
const src = readFileSync(
join(import.meta.dirname, "..", "auto-worktree.ts"),
"utf-8",
);
// The fix adds gitPrefs?.main_branch to the startPoint fallback chain
assert.ok(
src.includes("gitPrefs?.main_branch") || src.includes("prefs.main_branch"),
"createAutoWorktree must check git.main_branch preference before falling back to nativeDetectMainBranch",
);
});