B-61CU-milestone-create-slug
sdlc task create takes a slug positional and produces
T-XXXX-<slug>.md. sdlc milestone create has no equivalent, so it always
produces M-XXXX.md. Bare milestone filenames are the large majority of the
corpus as a result.
D-0002-entity-identifier-shape blesses both filename shapes, but it also fixes filenames as immutable, so the choice is made once at create time and cannot be revisited. A slugged basename is the more legible half of the mix: it reads as a link on its own in a PR body, a commit message, or an Obsidian graph, where a bare id needs a neighbouring title column that does not travel with it.
The op chooses id-only deliberately. milestone/ops/create.ts sets
identity: { kind: 'id-only', seedKey: 'title' } where the task op sets
identity: { kind: 'slugged', ... }, and it explains itself: “Milestones are
id-only (no slug in the filename): renaming the title never breaks inbound
wikilinks.”
That rationale does not distinguish a milestone from a task. D-0002-entity-identifier-shape fixes filenames as immutable for every entity, so a slugged task is equally safe against a title rename. Whatever id-only buys a milestone, it is not that. Recording the conflict here so whoever picks this up does not meet it cold.
Give milestone create the same slug positional task create has.