story-kit: done 238_story_mergemaster_handles_merge_conflicts_by_resolving_them_automatically

This commit is contained in:
Dave
2026-02-28 10:22:49 +00:00
parent c166fe24f5
commit d40efca8c0

View File

@@ -0,0 +1,41 @@
---
name: "Mergemaster handles merge conflicts by resolving them automatically"
---
# Story 238: Mergemaster handles merge conflicts by resolving them automatically
## User Story
As a mergemaster agent, I want to detect and resolve merge conflicts when squash-merging feature branches, so that stories don't get stuck in the merge queue requiring manual intervention.
## Acceptance Criteria
- [ ] When merge_agent_work encounters a merge conflict, the mergemaster reads both sides of the conflict and produces a resolved file that preserves changes from both branches
- [ ] After resolving conflicts, the mergemaster runs quality gates (cargo check, cargo test, pnpm build, pnpm test) to verify the resolution is correct
- [ ] If quality gates fail after conflict resolution, the merge is reported as failed with details about what went wrong
- [ ] The mergemaster handles the common case of multiple feature branches adding to the same file (e.g. both adding tests or UI sections to the same component)
## Context
Three stories got stuck in the merge queue (2026-02-28) because the mergemaster couldn't handle conflicts:
- Stories 235, 236, 237 all modified the same files (`WorkItemDetailPanel.tsx` and its test file)
- 237 merged cleanly. 235 failed silently (empty output from `merge_agent_work`). 236 had conflicts in both component and test files.
**Conflict patterns observed:**
1. **add/add in test file**: Multiple branches created the same test file from scratch with different mock setups. Resolution: combine mock setups and keep all test suites.
2. **content conflict in component**: Both branches added different state, imports, hooks, and UI sections. Resolution: keep all additions from both sides.
3. **Placeholder list divergence**: Both branches removed different items from a shared placeholder list. Resolution: remove both since both features are now real.
**Manual resolution process:**
1. `git merge --squash --no-commit feature/story-{id}`
2. Read conflicted files, understand both sides
3. Write resolved files combining both feature additions
4. Run `tsc --noEmit` and `pnpm test` to verify
5. Stage, commit, move story to done
Most conflicts in this codebase are additive — two branches adding different features to the same files, not contradictory changes.
## Out of Scope
- TBD