Milestone
Use when the user wants to create or define a milestone — an ordered checkpoint inside one project ("add a milestone", "define a milestone", "create a beta checkpoint on X"). Runs a sharpening dialogue against the milestone template, then creates (or retrofits) the milestone in the configured PM after a confirm gate.From its SKILL.md
npx -y skills add johngaynor/adlc --skill milestoneAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
5.3 KB, as published. Nobody here has run it
Milestone
Sharpen a phase of one project into a created milestone — an ordered checkpoint
per the hierarchy defined in
reference/pm-seam.md § Hierarchy, carrying a
name, an optional target date, and a phase-level description; nothing more.
This is a standalone utility skill, not a lifecycle stage: it runs the
defining dialogue against template.md, then creates or
retrofits the milestone via saveMilestone per reference/pm-seam.md. It
creates no issues — filing issues into milestones is the lifecycle's and the
breakdown stage's job.
Arguments
$ARGUMENTS(optional, freeform) — any of the milestone's fields the user already knows: the target project (URL, ID, or name), the milestone name, a target date, and a description. Everything is optional at invocation; the dialogue prompts only for what's missing.
Workflow
- Resolve the project. An explicit project in
$ARGUMENTSwins. Otherwise default to.adlc/config.json'spm.project(whenpm.provideris"linear"— the same detection the lifecycle stages use) and confirm that default with the user as part of step 4's draft. With no explicit project and no configured provider, fall back to the draft-only path in step 5 — the milestone becomes a local mirror file instead. - Pre-flight the checkpoint order. With Linear configured, call
listMilestones(projectRef)perreference/pm-seam.mdand show the project's existing milestones in order, so the user sees where the new checkpoint lands (always at the end — the seam exposes no reordering). The listing also fixes the new checkpoint's number: names follow the seam's § Hierarchy Naming rule (M<n>: <Name>), so the next checkpoint takes the nextn; a checkpoint the user places mid-sequence in an already-numbered project is that rule's per-case question — next number, or renumber the siblings — never an automatic renumber. A same-name hit becomes a question, never a silent write: retrofit that milestone (itsmilestoneRefflows to step 5) or rename the new one. - Sharpen the template's parts, one question at a time, until each clears
its bar in
template.md:- Name — the
M<n>:prefix from step 2's pre-flight, per the seam's § Hierarchy Naming, then 1–4 words, outcome-flavored: a state the project reaches ("M2: Beta", "M3: Coach can view"), never a task. - Description — 1–3 sentences of exit criteria: what "done" means for this phase. Spec-level detail is declined, not stored — it belongs on the milestone's issues per the seam's § Hierarchy.
- Target date — optional; a single ISO date, skipped freely.
- Name — the
- Draft against the template. Render the ingredients into the format
defined in
template.md— including the resolved project and where the checkpoint lands in the existing order — and present the draft for the user's approval. Iterate until approved. A worked example lives atexample.md. - Create or retrofit the milestone.
- Linear configured: call
saveMilestone(projectRef, milestoneRef?, name, targetDate?, description?)perreference/pm-seam.md— nomilestoneRefcreates; themilestoneReffrom a step 2 retrofit choice updates that milestone in place. - No PM configured: write the draft to
.ai/product/milestones/<kebab-slug>.md(slug derived from the Name), creating directories as needed, and report the path. This is the only file write this skill makes.
- Linear configured: call
- Report. Give the user the milestone's URL, constructed per the seam's
Provider Mapping (
<project-url>/milestone/<milestoneRef>), and note that it sits at 0% until issues are filed into it.
Boundaries
- Never create or update the milestone before the user approves the draft — the approval gate in step 4 happens first, always.
- Never retrofit a milestone the user hasn't explicitly chosen to retrofit — a same-name hit is a question (step 2), and on create no update identifier is ever passed, per the seam's Provider Mapping footgun note.
- Never accept spec-level detail into the description — the milestone carries a phase-level description only; detail belongs on its issues.
- Never create issues or assign issues to the milestone here — that is the lifecycle's and the breakdown stage's job.
- This is not a lifecycle stage: no task card, no status changes, no
/adlc:nexthand-off. One milestone per run — deriving a project's full phase skeleton is the breakdown stage; repeat invocations are fine.
Done when
The approved milestone exists in the target project with its templated name,
optional target date, and phase-level description (or, with no PM, as
.ai/product/milestones/<kebab-slug>.md), and the user has its URL or path.
Nothing else changed — no issues touched, no other milestones altered.