T-1YQM-start-task-resolves-frontmatter-conflict
Status: closed/done · Impact: medium · Complexity: small
/sdlc:task-work Step 5b runs start_task.py, which commits the
status flip on main (status: in-progress + a refreshed
last_reviewed:) and then rebases the task branch onto main. The task
branch already carries the verify-stamp commit from Step 5a, which
refreshed readiness_verified_at:. When both commits touch adjacent
frontmatter lines, the rebase surfaces a textual merge conflict (exit
3) even though the changes are semantically independent (one sets
status/last_reviewed, the other sets readiness_verified_at). The
spec halts on exit 3 and asks the operator to hand-resolve. The
resolution is always the same trivial union of both sides’ key edits,
so this is a good candidate for deterministic auto-resolution.
From the originating task’s post-mortem: “start_task.py’s rebase hit a frontmatter merge conflict (exit 3) on the task file: the start-commit (status flip +
last_reviewed) and the verify-stamp commit (readiness_verified_at) edited adjacent frontmatter lines. The conflict was trivial and mechanical (keep both fields), but the spec says exit 3 should halt and surface. A deterministic frontmatter-only conflict resolver in start_task.py (union the non-conflicting key edits) would let this self-heal instead of needing a manual three-way merge.”
TBD — receiver to fill before promoting from planning/draft.
| Location | Role today |
|---|---|
plugin/skills/task-work/start_task.py | Flips task status on main, commits, then git rebase main on the task branch. Surfaces a hard exit 3 on any rebase conflict, including frontmatter-only ones that are mechanically resolvable. |
Proposed
Section titled “Proposed”TBD — receiver to fill before promoting from planning/draft.
Approach
Section titled “Approach”TBD — receiver to fill before promoting from planning/draft.
Files to touch
Section titled “Files to touch”TBD — receiver to fill before promoting from planning/draft.
| Location | Kind | Change |
|---|---|---|
plugin/skills/task-work/start_task.py | modify | Add a frontmatter-only conflict-resolution path before bailing with exit 3. |
Acceptance criteria
Section titled “Acceptance criteria”TBD — receiver to fill before promoting from planning/draft.
- AC-1: A task branch whose verify-stamp commit refreshed
readiness_verified_at:rebases cleanly onto a main start-commit that setstatus: in-progressandlast_reviewed:, with no manual conflict resolution, and the resulting frontmatter carries all three fields’ latest values.
Out of scope
Section titled “Out of scope”TBD — receiver to fill before promoting from planning/draft.
- none
Dependencies
Section titled “Dependencies”- none
Discovery context
Section titled “Discovery context”Spawned by /sdlc:cross-repo-task-pr on 2026-05-25 UTC from
2026-05-19-engine-review-unify-effect-apply-paths in
git@github.com:sksizer/pumice.git.
Dedup search (spawn-from-post-mortem)
Section titled “Dedup search (spawn-from-post-mortem)”Bullet: start_task.py rebase hit a frontmatter merge conflict (exit 3) because the start-commit and the verify-stamp commit edited adjacent frontmatter lines; a deterministic frontmatter-only conflict resolver in start_task.py would let this self-heal instead of needing a manual three-way merge Keywords searched: frontmatter-only, deterministic, start-commit, verify-stamp, frontmatter, start_task, self-heal, three-way Excluded: 2026-05-19-engine-review-unify-effect-apply-paths Top candidates (score / status / headline):
- 9 / closed/done / 2026-05-19-engine-review-running-tick-decision — Engine review P2: delete unused Running::tick and EngineEvent::IntervalTicked
- 3 / closed/done / 2026-05-12-time-zone-boundary-helpers — Formalise UTC/local time boundaries with shared helpers
- 2 / closed/done / 0001-timer-profiles-data-model — Timer Profiles — Data Model Change
- 1 / closed/done / 0007c-this-month-preset-bug — Bug: “This Month” preset highlights “Last 30 days”
- 1 / closed/done / 0034-backup-include-engine-state — Make backup/restore symmetric across all tables Decision: SPAWNED