From 16b61a77896b3d0752ecef03d2529d374f2af28b Mon Sep 17 00:00:00 2001 From: Tibsfox Date: Mon, 6 Apr 2026 19:11:14 -0700 Subject: [PATCH] fix(gsd): skip current milestone in syncWorktreeStateBack to prevent merge conflicts syncWorktreeStateBack copied all milestone directories including the one being merged. This caused dirty-tree conflicts when mergeMilestoneToMain ran because the files already existed from the copy-back. Now skips the current milestoneId in the sync loop since its files are already in the milestone branch being merged. Closes #3641 Co-Authored-By: Claude Opus 4.6 (1M context) --- src/resources/extensions/gsd/auto-worktree.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/resources/extensions/gsd/auto-worktree.ts b/src/resources/extensions/gsd/auto-worktree.ts index a0275619a..b89d7ce31 100644 --- a/src/resources/extensions/gsd/auto-worktree.ts +++ b/src/resources/extensions/gsd/auto-worktree.ts @@ -770,6 +770,9 @@ export function syncWorktreeStateBack( .map((d) => d.name); for (const mid of wtMilestones) { + // Skip the current milestone being merged — its files are already in the + // milestone branch and would conflict with the squash merge (#3641). + if (mid === milestoneId) continue; syncMilestoneDir(wtGsd, mainGsd, mid, synced); } } catch (err) {