Enforce the plan template's mandatory Shared seams field with a gate

Problem

The per-step - **Shared seams:** field is mandatory in docs/plans/TEMPLATE.md (none is a stated value, never an omitted field) as of chore(skills): teach the planner conflict-aware... (!1898 - merged) • Hayley Swimelar • 19.4. No gate checks it:

  • docs:lint (markdownlint, Vale, lychee) checks prose and links, not template structure.
  • implement-step/SKILL.md enumerates the per-step fields twice (the plan template bullet under Context to load, and precondition 2, "The plan follows the template") and neither enumeration names Shared seams:.
  • validate-step/SKILL.md's template-shape check reads "per-step Files / Acceptance / Tests entries" and does not name it either.

A plan that omits the field therefore passes every gate. Until one of the options below lands, the mandate binds through the plan-MR review pass alone.

Options

  1. Add Shared seams: to the per-step field enumerations in implement-step/SKILL.md and validate-step/SKILL.md, so a plan missing the field fails the template-shape precondition at step time. The monolith step skills need the same sweep, and their enumerations were not audited here.
  2. Add a structural check to the docs lint surface: a script asserting every ### Step N: block under ## Implementation Steps in docs/plans/*.md carries the field, wired where docs:lint runs.

The two compose, and option 2 is the only one that fails before a plan MR merges. Plans merged before the field existed do not carry it, so the check needs a future-only ratchet, for example allowlisting the plan files that exist when it lands, the same shape the comment-caps gate uses.

Sequencing

Option 1's implement-step/SKILL.md edit collides with chore(skills): add open-time conflict hygiene t... (!1899 - merged) • Hayley Swimelar • 19.4 while that MR is open: it owns the file. Land the enumeration edits with or after that MR.

Raised by @mkhalifa3 on the template hunk (discussion).

Edited by Hayley Swimelar