chore(skills): teach the planner conflict-aware decomposition

Why

The S17 Phase 6 workstream decomposed one management API into 42 steps, tracked at S17 Phase 6: virtual and remote repository CRUD (#314) • Hayley Swimelar. Measuring where its merge conflicts actually came from put them almost entirely between siblings: 33 of the 45 open sibling pairs among the 10 open step branches conflicted with each other, while just one of those branches conflicted with main. One wiring seam and its test carried 58 of the 183 conflict hunks, five files were touched by all ten, and 59 hunks were comment-only.

Every one of those is a property of the decomposition, fixed before any branch exists. The planner skill said nothing about it, so each workstream rediscovers the cost mid-flight, when the plan is no longer editable.

What

docs/plans/TEMPLATE.md gains a per-step Shared seams: field, in its own docs(plans) commit. That binds every future plan rather than this skill alone: the field is mandatory and none is a stated value, so an empty conflict surface reads differently from an unexamined one.

Canonical shared text dissolved only about a fifth of the measured conflicts, so the new section says ownership is not a substitute for a declared merge order.

Test plan

Ran docs:lint's three commands against both touched files: markdownlint-cli2 0.22.1, vale --minAlertLevel error, and lychee --offline --include-fragments. All clean, and the same three passed again as pre-commit hooks. The repo's markdownlint globs exclude .claude/skills/**, so Vale and lychee are what cover the skill file.

No e2e scenario impact: skill and template prose only, no service behavior.

Skill benchmark

Via /skill-creator's benchmark method: 3 runs per cell on Claude Opus against a fixed authoring fixture (four sibling steps of a retention-policies management API: three endpoint steps sharing a wiring file and a query-name catalog, plus a docs-only step). Each cell prompts with its side's template step shape and planner guidance, this branch at 6db23ef7 vs main at 9addc98a. Four assertions graded per run:

Assertion This branch main
Every step carries Shared seams:, and the docs-only step states none 3/3 0/3
Both shared files named as seams in every endpoint step 1/3 0/3
Seam settlement is ownership, not a prescribed merge order 3/3 0/3
Endpoint steps stay parallel (Depends on: stays ) 3/3 3/3

Findings:

  • Rows 1 and 2 measure the new field, so main's ceiling there is 0/3 by construction. Its runs still see the contention, call sibling conflicts on the shared files "expected", and leave the resolution to whoever rebases second. That is the rediscovery cost the Why section describes.
  • The row-2 misses are strict grading, not absent seams: two branch runs declare steps 2 and 3's seams by reference ("Same three seams and same instruments as Step 1, which owns the canonical text") instead of repeating the paths, and the grader wants the paths in every step. Read as written, every endpoint step declares both files.
  • Row 4 is the regression check, and both cells hold 3/3: the added guidance does not push planners into serializing a wave the operator wants parallel.
  • Grader finding: a first grader cut counted order-free idioms ("whichever branch lands first creates the anchor", "conflict in either merge order") as merge-order settlements. The scoring grader masks conditional and any-order idioms first, and still fails prescriptive ordering such as "must land first".
Edited by Hayley Swimelar

Merge request reports

Loading
Loading