fix: allow quick worktree parent plan base (#1347)

This commit is contained in:
Tom Boucher
2026-06-16 14:00:06 -04:00
committed by GitHub
parent 80014109c1
commit 6e242bd76a
9 changed files with 172 additions and 13 deletions

View File

@@ -416,6 +416,7 @@ interface CleanupManifestEntry {
worktree_path: string;
branch: string;
expected_base: string;
allowed_bases?: string[];
}
function normalizeCleanupManifestEntry(entry: unknown): CleanupManifestEntry | null {
@@ -428,11 +429,16 @@ function normalizeCleanupManifestEntry(entry: unknown): CleanupManifestEntry | n
const expectedBase = typeof e.expected_base === 'string' ? e.expected_base : '';
if (!worktreePath || !branch || !expectedBase) return null;
if (!/^worktree-agent-[A-Za-z0-9._/-]+$/.test(branch)) return null;
const rawAllowedBases = Array.isArray(e.allowed_bases) ? e.allowed_bases : [];
const allowedBases = Array.from(new Set(
[expectedBase, ...rawAllowedBases.filter((base): base is string => typeof base === 'string' && base.length > 0)]
));
return {
agent_id: typeof e.agent_id === 'string' ? e.agent_id : null,
worktree_path: worktreePath,
branch,
expected_base: expectedBase,
allowed_bases: allowedBases,
};
}
@@ -693,7 +699,10 @@ function executeWorktreeWaveCleanupPlan(plan: WaveCleanupPlan | null, deps: Work
}
const mergeBase = execGit(['merge-base', 'HEAD', entry.branch], { cwd: plan.repoRoot });
if (!gitResultOk(mergeBase) || mergeBase.stdout.trim() !== entry.expected_base) {
const allowedBases = Array.isArray(entry.allowed_bases) && entry.allowed_bases.length > 0
? entry.allowed_bases
: [entry.expected_base];
if (!gitResultOk(mergeBase) || !allowedBases.includes(mergeBase.stdout.trim())) {
result.status = 'blocked';
result.reason = 'base_mismatch';
result.stderr = mergeBase?.stderr || '';