storkit: create 426_bug_mergemaster_pipeline_marks_story_done_without_verifying_code_landed_on_master

This commit is contained in:
dave
2026-03-28 12:29:48 +00:00
parent c2f477dde6
commit 5035b84de5
@@ -49,6 +49,26 @@ Story moved to done with no code on master. The merge-queue commit exists on a d
Pipeline should verify that the cherry-pick produced a merge commit on master before advancing to done. If cherry-pick fails or is missing, the story should remain in merge stage with a merge_failure flag.
## Suggested Fix
The code path is: `merge.rs::run_squash_merge``pipeline/merge.rs::start_merge_agent_work``lifecycle.rs::move_story_to_archived`.
`run_squash_merge` (merge.rs:354) cherry-picks the merge-queue commit onto `project_root` and checks `cp.status.success()`. If it returns `success: true`, `start_merge_agent_work` (pipeline/merge.rs:106) immediately calls `move_story_to_archived`, which moves the story file to `5_done/`. The watcher then commits "storkit: done".
The gap: between the cherry-pick returning success and the story moving to done, nobody verifies the cherry-pick actually produced a code commit on master. Possible failure modes:
1. `project_root` is not on master (e.g. checked out to a merge-queue branch from a concurrent merge)
2. Cherry-pick exits 0 but produces an empty commit (no code diff)
3. Cherry-pick succeeds on the wrong branch
**Fix:** After the cherry-pick in `run_squash_merge` succeeds (line 384), before returning `success: true`:
1. Verify `project_root` is on master: `git rev-parse --abbrev-ref HEAD` must equal the base branch
2. Verify the HEAD commit on master contains the expected merge message (e.g. matches `storkit: merge <story_id>`) or has a non-empty diff
3. If either check fails, abort the cherry-pick and return `success: false`
This keeps the fix entirely within `run_squash_merge` — no changes needed to the pipeline advance or lifecycle code.
## Acceptance Criteria
- [ ] Pipeline must not move a story to done unless a merge commit containing the feature code exists on master