You are helping the user turn planned roadmap work into a normal spec-driven
change.
This Skill's Commands
If you cannot remember the exact command used by this skill, look it up here
before running anything. Do not guess.
init: node {{SKILL_DIR}}/scripts/spec-driven.js init
propose: node {{SKILL_DIR}}/scripts/spec-driven.js propose <name>
verify: node {{SKILL_DIR}}/scripts/spec-driven.js verify <name>
Prerequisites
The .spec-driven/ directory must exist at the project root. Before
proceeding, verify:
ls .spec-driven/
If this fails, the project is not initialized. Run /spec-driven-init first.
If .spec-driven/roadmap/ is missing, repair the scaffold first:
node {{SKILL_DIR}}/scripts/spec-driven.js init
Steps
Identify the target planned change — determine which milestone item the
user wants to turn into a real change. If they already gave a change name,
use it. Otherwise ask which Planned Changes item to promote.
Read roadmap and spec context first — before scaffolding anything, read:
.spec-driven/config.yaml
.spec-driven/roadmap/INDEX.md
- the milestone file that contains the target item
.spec-driven/specs/INDEX.md
- the relevant main spec files the new change is likely to touch
- the selected planned change entry as a single-line roadmap input
Confirm it is already planned work — verify that the selected name is
present under a milestone ## Planned Changes section before scaffolding.
Extract the roadmap handoff context — treat the selected planned change
entry as more than a name lookup:
- use the canonical first line to identify the change name while treating
the declared status and summary as metadata on that same line
- use the surrounding milestone sections as context for scope, rationale,
sequencing, or constraints when the one-line summary is not sufficient
- treat milestone declared statuses as limited to
proposed, active,
blocked, or complete
- treat planned change declared statuses as limited to
planned or
complete
Scaffold the change — run:
node {{SKILL_DIR}}/scripts/spec-driven.js propose <name>
This creates .spec-driven/changes/<name>/ with seeded artifact templates.
Fill the standard proposal artifacts — populate:
proposal.md
design.md
tasks.md using this canonical structure:
# Tasks: <change-name>
## Implementation
- [ ] Describe the first atomic implementation task
- [ ] Describe the second atomic implementation task
## Testing
- [ ] Run `npm run lint` — lint or validation task
- [ ] Run `npm test` — unit test task
## Verification
- [ ] Verify implementation matches proposal scope
Each task uses - [ ] checkboxes and should be independently completable.
The ## Testing section MUST satisfy these verification keyword requirements:
- At least one task MUST contain a lint/validation keyword:
lint, validate,
validation, typecheck, type-check, or build
- At least one task MUST contain a unit test keyword:
unit test or unit tests
- Both tasks MUST name an explicit runnable command in backticks or use a known
runner (npm, pnpm, yarn, bun, node, bash, sh, pytest, jest, vitest, go, cargo,
make, uv, poetry)
- Paraphrasing these keywords (e.g. "run tests" instead of "run unit tests") will
cause
verify to fail
If the relevant command cannot be determined confidently from repository context,
add an open question instead of guessing.
questions.md
delta specs under changes/<name>/specs/
mirror the main spec path exactly, for example
.spec-driven/specs/skills/planning.md becomes
.spec-driven/changes/<name>/specs/skills/planning.md
use this canonical sample as the format target:
---
mapping:
implementation:
- path/to/implementation.ts
tests:
- test/path/to/test.ts
---
## ADDED Requirements
### Requirement: new-capability
The system MUST provide <observable behavior>.
#### Scenario: success
- GIVEN <precondition>
- WHEN <action>
- THEN <result>
## MODIFIED Requirements
### Requirement: existing-capability
Previously: The system MUST <old behavior>.
The system MUST <new behavior>.
## REMOVED Requirements
### Requirement: old-capability
Reason: This behavior is removed because <reason>.
omit sections that do not apply instead of leaving blank placeholders
if the change has no observable spec impact, leave changes/<name>/specs/
empty rather than creating a prose-only delta file
Do not invent mapping paths when the repository evidence is unclear
mapping frontmatter in delta spec files when implementation and test
paths are knowable from repository context
Use the roadmap milestone as planning input, but treat the selected planned
change as a single-line item and derive any extra context from the milestone
sections rather than multiline planned change detail.
Validate artifact format — run:
node {{SKILL_DIR}}/scripts/spec-driven.js verify <name>
If the command reports repairable format issues, fix them and rerun verify.
Offer the execution handoff — report the new change path, note which
milestone it came from, surface any open questions that must be resolved
before implementation, and ask the user whether they want to:
- enter
/spec-driven-apply <name> for the stepwise execution path
- enter
/spec-driven-auto for the end-to-end execution path
Do not auto-enter either execution path without the user's explicit choice.
Rules
- This skill creates planning artifacts only — do not implement product code
- Only turn
Planned Changes into change scaffolds
- Create the same five artifacts as
spec-driven-propose
- Keep implementation and test mappings in spec frontmatter, not in requirement
prose
- If testing commands are not knowable from repository context, add an open
question instead of guessing them
- Before finishing, rerun
verify until all repairable format issues are fixed
1---2name: roadmap-propose3description: Turn a roadmap milestone Planned Changes item into a normal spec-driven change scaffold.4---56You are helping the user turn planned roadmap work into a normal spec-driven7change.89## This Skill's Commands1011If you cannot remember the exact command used by this skill, look it up here12before running anything. Do not guess.1314```yaml15init: node {{SKILL_DIR}}/scripts/spec-driven.js init16propose: node {{SKILL_DIR}}/scripts/spec-driven.js propose <name>17verify: node {{SKILL_DIR}}/scripts/spec-driven.js verify <name>18```1920## Prerequisites2122The `.spec-driven/` directory must exist at the **project root**. Before23proceeding, verify:24```25ls .spec-driven/26```27If this fails, the project is not initialized. Run `/spec-driven-init` first.2829If `.spec-driven/roadmap/` is missing, repair the scaffold first:30```31node {{SKILL_DIR}}/scripts/spec-driven.js init32```3334## Steps35361. **Identify the target planned change** — determine which milestone item the37 user wants to turn into a real change. If they already gave a change name,38 use it. Otherwise ask which `Planned Changes` item to promote.39402. **Read roadmap and spec context first** — before scaffolding anything, read:41 - `.spec-driven/config.yaml`42 - `.spec-driven/roadmap/INDEX.md`43 - the milestone file that contains the target item44 - `.spec-driven/specs/INDEX.md`45 - the relevant main spec files the new change is likely to touch46 - the selected planned change entry as a single-line roadmap input47483. **Confirm it is already planned work** — verify that the selected name is49 present under a milestone `## Planned Changes` section before scaffolding.50514. **Extract the roadmap handoff context** — treat the selected planned change52 entry as more than a name lookup:53 - use the canonical first line to identify the change name while treating54 the declared status and summary as metadata on that same line55 - use the surrounding milestone sections as context for scope, rationale,56 sequencing, or constraints when the one-line summary is not sufficient57 - treat milestone declared statuses as limited to `proposed`, `active`,58 `blocked`, or `complete`59 - treat planned change declared statuses as limited to `planned` or60 `complete`61625. **Scaffold the change** — run:63 ```64 node {{SKILL_DIR}}/scripts/spec-driven.js propose <name>65 ```66 This creates `.spec-driven/changes/<name>/` with seeded artifact templates.67686. **Fill the standard proposal artifacts** — populate:69 - `proposal.md`70 - `design.md`71 - `tasks.md` using this canonical structure:7273 ```markdown74 # Tasks: <change-name>7576 ## Implementation77 - [ ] Describe the first atomic implementation task78 - [ ] Describe the second atomic implementation task7980 ## Testing8182 - [ ] Run `npm run lint` — lint or validation task83 - [ ] Run `npm test` — unit test task8485 ## Verification86 - [ ] Verify implementation matches proposal scope87 ```8889 Each task uses `- [ ]` checkboxes and should be independently completable.9091 The `## Testing` section MUST satisfy these verification keyword requirements:92 - At least one task MUST contain a lint/validation keyword: `lint`, `validate`,93 `validation`, `typecheck`, `type-check`, or `build`94 - At least one task MUST contain a unit test keyword: `unit test` or `unit tests`95 - Both tasks MUST name an explicit runnable command in backticks or use a known96 runner (npm, pnpm, yarn, bun, node, bash, sh, pytest, jest, vitest, go, cargo,97 make, uv, poetry)98 - Paraphrasing these keywords (e.g. "run tests" instead of "run unit tests") will99 cause `verify` to fail100101 If the relevant command cannot be determined confidently from repository context,102 add an open question instead of guessing.103 - `questions.md`104 - delta specs under `changes/<name>/specs/`105 - mirror the main spec path exactly, for example106 `.spec-driven/specs/skills/planning.md` becomes107 `.spec-driven/changes/<name>/specs/skills/planning.md`108 - use this canonical sample as the format target:109110 ```markdown111 ---112 mapping:113 implementation:114 - path/to/implementation.ts115 tests:116 - test/path/to/test.ts117 ---118119 ## ADDED Requirements120121 ### Requirement: new-capability122 The system MUST provide <observable behavior>.123124 #### Scenario: success125 - GIVEN <precondition>126 - WHEN <action>127 - THEN <result>128129 ## MODIFIED Requirements130131 ### Requirement: existing-capability132 Previously: The system MUST <old behavior>.133 The system MUST <new behavior>.134135 ## REMOVED Requirements136137 ### Requirement: old-capability138 Reason: This behavior is removed because <reason>.139 ```140 - omit sections that do not apply instead of leaving blank placeholders141 - if the change has no observable spec impact, leave `changes/<name>/specs/`142 empty rather than creating a prose-only delta file143 - Do not invent mapping paths when the repository evidence is unclear144 - mapping frontmatter in delta spec files when implementation and test145 paths are knowable from repository context146 Use the roadmap milestone as planning input, but treat the selected planned147 change as a single-line item and derive any extra context from the milestone148 sections rather than multiline planned change detail.1491507. **Validate artifact format** — run:151 ```152 node {{SKILL_DIR}}/scripts/spec-driven.js verify <name>153 ```154 If the command reports repairable format issues, fix them and rerun verify.1551568. **Offer the execution handoff** — report the new change path, note which157 milestone it came from, surface any open questions that must be resolved158 before implementation, and ask the user whether they want to:159 - enter `/spec-driven-apply <name>` for the stepwise execution path160 - enter `/spec-driven-auto` for the end-to-end execution path161 Do not auto-enter either execution path without the user's explicit choice.162163## Rules164165- This skill creates planning artifacts only — do not implement product code166- Only turn `Planned Changes` into change scaffolds167- Create the same five artifacts as `spec-driven-propose`168- Keep implementation and test mappings in spec frontmatter, not in requirement169 prose170- If testing commands are not knowable from repository context, add an open171 question instead of guessing them172- Before finishing, rerun `verify` until all repairable format issues are fixed