Files
fusion/.changeset/smart-merge-strategy-rename.md
gsxdsm ad45c0b1b4 feat(core,engine): split smart merge strategy into prefer-main / prefer-branch
The single "smart" strategy is now two flavors with the new default flipped
to prefer-main. Both share a pre-cascade `git fetch origin <currentBranch>`
+ best-effort fast-forward so a freshly-pushed sibling commit doesn't get
clobbered when the fallback resolves a conflict against a stale base.

- "smart-prefer-main" (new default): -X ours fallback. Protects just-merged
  sibling work from being regressed by a concurrent task branch.
- "smart-prefer-branch": -X theirs fallback. Equivalent to legacy "smart".

Legacy "smart" / "prefer-main" enum values are accepted and normalized via
`normalizeMergeConflictStrategy()` so existing settings.json files migrate
seamlessly. The fast-forward step gracefully degrades on fetch failure or
divergent local main (logs and continues).

Updates settings UI dropdown, test helpers, and adds 5 fetch+ff regression
tests + 7 normalize-helper tests. Lint cleanup of two empty catch blocks
in scripts/release.mjs.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 15:44:38 -07:00

902 B

@runfusion/fusion
@runfusion/fusion
minor

Refactor merge conflict strategies into two smart-* flavors and change the default to "prefer main".

Both smart strategies now run a best-effort git fetch + fast-forward of local main from origin before the merge cascade — a freshly-pushed sibling commit no longer gets clobbered when the fallback resolves a conflict against a stale base. They differ only in the per-file final fallback:

  • smart-prefer-main (new default): -X ours — main wins. Best when concurrent agents could regress just-merged sibling work.
  • smart-prefer-branch: -X theirs — task branch wins. Equivalent to the previous "smart" behavior.

Legacy enum values are accepted for backwards compatibility and normalized at load time: "smart""smart-prefer-branch", "prefer-main""smart-prefer-main". Settings on disk continue to work without changes.