maestro-flow 0.3.9 → 0.3.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (281) hide show
  1. package/.claude/agents/workflow-collab-planner.md +1 -1
  2. package/.claude/agents/workflow-executor.md +1 -1
  3. package/.claude/agents/workflow-plan-checker.md +1 -1
  4. package/.claude/agents/workflow-planner.md +1 -1
  5. package/.claude/commands/learn-decompose.md +176 -176
  6. package/.claude/commands/learn-follow.md +167 -167
  7. package/.claude/commands/learn-retro.md +1 -1
  8. package/.claude/commands/maestro-analyze.md +46 -3
  9. package/.claude/commands/maestro-coordinate.md +1 -3
  10. package/.claude/commands/maestro-execute.md +14 -0
  11. package/.claude/commands/maestro-plan.md +16 -0
  12. package/.claude/commands/manage-harvest.md +131 -131
  13. package/.claude/commands/manage-issue-discover.md +2 -2
  14. package/.claude/commands/manage-issue.md +5 -5
  15. package/.claude/commands/spec-add.md +67 -56
  16. package/.claude/commands/spec-load.md +66 -64
  17. package/.claude/commands/spec-setup.md +5 -9
  18. package/.codex/skills/learn-decompose/SKILL.md +119 -0
  19. package/.codex/skills/learn-follow/SKILL.md +83 -0
  20. package/.codex/skills/learn-investigate/SKILL.md +83 -0
  21. package/.codex/skills/learn-retro/SKILL.md +83 -0
  22. package/.codex/skills/learn-second-opinion/SKILL.md +86 -0
  23. package/.codex/skills/maestro/SKILL.md +335 -0
  24. package/.codex/skills/maestro-analyze/SKILL.md +84 -75
  25. package/.codex/skills/maestro-brainstorm/SKILL.md +452 -463
  26. package/.codex/skills/maestro-chain/SKILL.md +233 -0
  27. package/.codex/skills/maestro-coordinate/SKILL.md +167 -278
  28. package/.codex/skills/maestro-execute/SKILL.md +435 -438
  29. package/.codex/skills/maestro-fork/SKILL.md +68 -0
  30. package/.codex/skills/maestro-init/SKILL.md +171 -167
  31. package/.codex/skills/maestro-learn/SKILL.md +80 -0
  32. package/.codex/skills/maestro-link-coordinate/SKILL.md +224 -220
  33. package/.codex/skills/maestro-merge/SKILL.md +62 -0
  34. package/.codex/skills/maestro-milestone-audit/SKILL.md +108 -103
  35. package/.codex/skills/maestro-milestone-complete/SKILL.md +155 -149
  36. package/.codex/skills/maestro-milestone-release/SKILL.md +70 -0
  37. package/.codex/skills/maestro-overlay/SKILL.md +188 -185
  38. package/.codex/skills/maestro-plan/SKILL.md +66 -69
  39. package/.codex/skills/maestro-quick/SKILL.md +26 -23
  40. package/.codex/skills/maestro-roadmap/SKILL.md +65 -73
  41. package/.codex/skills/maestro-spec-generate/SKILL.md +66 -74
  42. package/.codex/skills/maestro-ui-design/SKILL.md +34 -31
  43. package/.codex/skills/maestro-verify/SKILL.md +556 -566
  44. package/.codex/skills/manage-codebase-rebuild/SKILL.md +397 -405
  45. package/.codex/skills/manage-codebase-refresh/SKILL.md +93 -82
  46. package/.codex/skills/manage-harvest/SKILL.md +82 -0
  47. package/.codex/skills/manage-issue/SKILL.md +80 -65
  48. package/.codex/skills/manage-issue-discover/SKILL.md +491 -503
  49. package/.codex/skills/manage-learn/SKILL.md +190 -186
  50. package/.codex/skills/manage-memory/SKILL.md +95 -72
  51. package/.codex/skills/manage-memory-capture/SKILL.md +99 -86
  52. package/.codex/skills/manage-status/SKILL.md +102 -89
  53. package/.codex/skills/quality-business-test/SKILL.md +228 -223
  54. package/.codex/skills/quality-debug/SKILL.md +54 -66
  55. package/.codex/skills/quality-integration-test/SKILL.md +532 -544
  56. package/.codex/skills/quality-refactor/SKILL.md +197 -191
  57. package/.codex/skills/quality-retrospective/SKILL.md +512 -505
  58. package/.codex/skills/quality-review/SKILL.md +93 -105
  59. package/.codex/skills/quality-sync/SKILL.md +101 -89
  60. package/.codex/skills/quality-test/SKILL.md +202 -198
  61. package/.codex/skills/quality-test-gen/SKILL.md +93 -104
  62. package/.codex/skills/spec-add/SKILL.md +58 -39
  63. package/.codex/skills/spec-load/SKILL.md +45 -40
  64. package/.codex/skills/spec-map/SKILL.md +180 -182
  65. package/.codex/skills/spec-setup/SKILL.md +94 -76
  66. package/.codex/skills/team-coordinate/SKILL.md +346 -357
  67. package/.codex/skills/team-executor/SKILL.md +70 -112
  68. package/.codex/skills/team-lifecycle-v4/SKILL.md +311 -299
  69. package/.codex/skills/team-quality-assurance/SKILL.md +234 -227
  70. package/.codex/skills/team-review/SKILL.md +232 -225
  71. package/.codex/skills/team-tech-debt/SKILL.md +78 -100
  72. package/.codex/skills/team-testing/SKILL.md +242 -235
  73. package/.codex/skills/wiki-connect/SKILL.md +75 -0
  74. package/.codex/skills/wiki-digest/SKILL.md +87 -0
  75. package/README.md +14 -11
  76. package/README.zh-CN.md +14 -11
  77. package/chains/issue-lifecycle.json +13 -13
  78. package/chains/singles/issue-analyze.json +3 -3
  79. package/chains/singles/issue-execute.json +3 -3
  80. package/chains/singles/issue-plan.json +3 -3
  81. package/dashboard/dist-server/dashboard/src/server/commander/commander-agent.js +2 -2
  82. package/dashboard/dist-server/dashboard/src/server/commander/commander-agent.js.map +1 -1
  83. package/dashboard/dist-server/dashboard/src/server/coordinator/chain-map.js +3 -3
  84. package/dashboard/dist-server/dashboard/src/server/coordinator/chain-map.js.map +1 -1
  85. package/dashboard/dist-server/dashboard/src/server/routes/issues.js +34 -0
  86. package/dashboard/dist-server/dashboard/src/server/routes/issues.js.map +1 -1
  87. package/dashboard/dist-server/dashboard/src/server/routes/specs.d.ts +1 -1
  88. package/dashboard/dist-server/dashboard/src/server/routes/specs.js +75 -30
  89. package/dashboard/dist-server/dashboard/src/server/routes/specs.js.map +1 -1
  90. package/dashboard/dist-server/dashboard/src/server/state/event-bus.d.ts +5 -0
  91. package/dashboard/dist-server/dashboard/src/server/state/event-bus.js +5 -0
  92. package/dashboard/dist-server/dashboard/src/server/state/event-bus.js.map +1 -1
  93. package/dashboard/dist-server/dashboard/src/server/ws/handlers/execution-handler.js +2 -3
  94. package/dashboard/dist-server/dashboard/src/server/ws/handlers/execution-handler.js.map +1 -1
  95. package/dashboard/dist-server/dashboard/src/shared/constants.js +5 -0
  96. package/dashboard/dist-server/dashboard/src/shared/constants.js.map +1 -1
  97. package/dashboard/dist-server/dashboard/src/shared/issue-types.d.ts +5 -0
  98. package/dashboard/dist-server/dashboard/src/shared/issue-types.js.map +1 -1
  99. package/dashboard/dist-server/dashboard/src/shared/normalize-task.d.ts +2 -0
  100. package/dashboard/dist-server/dashboard/src/shared/normalize-task.js +75 -0
  101. package/dashboard/dist-server/dashboard/src/shared/normalize-task.js.map +1 -0
  102. package/dashboard/dist-server/dashboard/src/shared/team-types.d.ts +21 -0
  103. package/dashboard/dist-server/dashboard/src/shared/team-types.js.map +1 -1
  104. package/dashboard/dist-server/dashboard/src/shared/types.d.ts +3 -2
  105. package/dashboard/dist-server/dashboard/src/shared/ws-protocol.d.ts +1 -1
  106. package/dashboard/dist-server/dashboard/src/shared/ws-protocol.js.map +1 -1
  107. package/dashboard/dist-server/src/hooks/constants.d.ts +92 -12
  108. package/dashboard/dist-server/src/hooks/constants.js +151 -16
  109. package/dashboard/dist-server/src/hooks/constants.js.map +1 -1
  110. package/dashboard/dist-server/src/types/index.d.ts +5 -0
  111. package/dist/src/commands/collab.d.ts +1 -34
  112. package/dist/src/commands/collab.d.ts.map +1 -1
  113. package/dist/src/commands/collab.js +8 -76
  114. package/dist/src/commands/collab.js.map +1 -1
  115. package/dist/src/commands/hooks.d.ts +5 -1
  116. package/dist/src/commands/hooks.d.ts.map +1 -1
  117. package/dist/src/commands/hooks.js +115 -10
  118. package/dist/src/commands/hooks.js.map +1 -1
  119. package/dist/src/commands/install-ui/InstallConfirm.d.ts +3 -1
  120. package/dist/src/commands/install-ui/InstallConfirm.d.ts.map +1 -1
  121. package/dist/src/commands/install-ui/InstallConfirm.js +3 -1
  122. package/dist/src/commands/install-ui/InstallConfirm.js.map +1 -1
  123. package/dist/src/commands/install-ui/InstallExecution.d.ts.map +1 -1
  124. package/dist/src/commands/install-ui/InstallExecution.js +5 -1
  125. package/dist/src/commands/install-ui/InstallExecution.js.map +1 -1
  126. package/dist/src/commands/install-ui/InstallFlow.d.ts.map +1 -1
  127. package/dist/src/commands/install-ui/InstallFlow.js +7 -3
  128. package/dist/src/commands/install-ui/InstallFlow.js.map +1 -1
  129. package/dist/src/commands/install-ui/StatuslineConfig.d.ts +6 -1
  130. package/dist/src/commands/install-ui/StatuslineConfig.d.ts.map +1 -1
  131. package/dist/src/commands/install-ui/StatuslineConfig.js +27 -5
  132. package/dist/src/commands/install-ui/StatuslineConfig.js.map +1 -1
  133. package/dist/src/commands/spec.d.ts.map +1 -1
  134. package/dist/src/commands/spec.js +7 -2
  135. package/dist/src/commands/spec.js.map +1 -1
  136. package/dist/src/hooks/__tests__/statusline-visual-test.d.ts +7 -0
  137. package/dist/src/hooks/__tests__/statusline-visual-test.d.ts.map +1 -0
  138. package/dist/src/hooks/__tests__/statusline-visual-test.js +236 -0
  139. package/dist/src/hooks/__tests__/statusline-visual-test.js.map +1 -0
  140. package/dist/src/hooks/constants.d.ts +92 -12
  141. package/dist/src/hooks/constants.d.ts.map +1 -1
  142. package/dist/src/hooks/constants.js +151 -16
  143. package/dist/src/hooks/constants.js.map +1 -1
  144. package/dist/src/hooks/guards/index.d.ts +2 -0
  145. package/dist/src/hooks/guards/index.d.ts.map +1 -1
  146. package/dist/src/hooks/guards/index.js +2 -0
  147. package/dist/src/hooks/guards/index.js.map +1 -1
  148. package/dist/src/hooks/guards/preflight-guard.d.ts +29 -0
  149. package/dist/src/hooks/guards/preflight-guard.d.ts.map +1 -0
  150. package/dist/src/hooks/guards/preflight-guard.js +95 -0
  151. package/dist/src/hooks/guards/preflight-guard.js.map +1 -0
  152. package/dist/src/hooks/guards/spec-validator.d.ts +25 -0
  153. package/dist/src/hooks/guards/spec-validator.d.ts.map +1 -0
  154. package/dist/src/hooks/guards/spec-validator.js +66 -0
  155. package/dist/src/hooks/guards/spec-validator.js.map +1 -0
  156. package/dist/src/hooks/index.d.ts +1 -0
  157. package/dist/src/hooks/index.d.ts.map +1 -1
  158. package/dist/src/hooks/index.js +1 -0
  159. package/dist/src/hooks/index.js.map +1 -1
  160. package/dist/src/hooks/keyword-spec-injector.d.ts +21 -0
  161. package/dist/src/hooks/keyword-spec-injector.d.ts.map +1 -0
  162. package/dist/src/hooks/keyword-spec-injector.js +96 -0
  163. package/dist/src/hooks/keyword-spec-injector.js.map +1 -0
  164. package/dist/src/hooks/plugins/spec-injection-plugin.d.ts +2 -1
  165. package/dist/src/hooks/plugins/spec-injection-plugin.d.ts.map +1 -1
  166. package/dist/src/hooks/plugins/spec-injection-plugin.js +21 -12
  167. package/dist/src/hooks/plugins/spec-injection-plugin.js.map +1 -1
  168. package/dist/src/hooks/preflight-core.d.ts +37 -0
  169. package/dist/src/hooks/preflight-core.d.ts.map +1 -0
  170. package/dist/src/hooks/preflight-core.js +86 -0
  171. package/dist/src/hooks/preflight-core.js.map +1 -0
  172. package/dist/src/hooks/spec-bridge.d.ts +40 -0
  173. package/dist/src/hooks/spec-bridge.d.ts.map +1 -0
  174. package/dist/src/hooks/spec-bridge.js +97 -0
  175. package/dist/src/hooks/spec-bridge.js.map +1 -0
  176. package/dist/src/hooks/spec-injector.d.ts.map +1 -1
  177. package/dist/src/hooks/spec-injector.js +18 -12
  178. package/dist/src/hooks/spec-injector.js.map +1 -1
  179. package/dist/src/hooks/statusline.d.ts +8 -17
  180. package/dist/src/hooks/statusline.d.ts.map +1 -1
  181. package/dist/src/hooks/statusline.js +269 -112
  182. package/dist/src/hooks/statusline.js.map +1 -1
  183. package/dist/src/i18n/locales/en.d.ts.map +1 -1
  184. package/dist/src/i18n/locales/en.js +5 -0
  185. package/dist/src/i18n/locales/en.js.map +1 -1
  186. package/dist/src/i18n/locales/zh.d.ts.map +1 -1
  187. package/dist/src/i18n/locales/zh.js +5 -0
  188. package/dist/src/i18n/locales/zh.js.map +1 -1
  189. package/dist/src/i18n/types.d.ts +5 -0
  190. package/dist/src/i18n/types.d.ts.map +1 -1
  191. package/dist/src/team/phase-orchestrator.d.ts +52 -0
  192. package/dist/src/team/phase-orchestrator.d.ts.map +1 -0
  193. package/dist/src/team/phase-orchestrator.js +165 -0
  194. package/dist/src/team/phase-orchestrator.js.map +1 -0
  195. package/dist/src/team/phase-types.d.ts +51 -0
  196. package/dist/src/team/phase-types.d.ts.map +1 -0
  197. package/dist/src/team/phase-types.js +41 -0
  198. package/dist/src/team/phase-types.js.map +1 -0
  199. package/dist/src/tools/collab-adapter.d.ts +17 -0
  200. package/dist/src/tools/collab-adapter.d.ts.map +1 -1
  201. package/dist/src/tools/collab-adapter.js +138 -0
  202. package/dist/src/tools/collab-adapter.js.map +1 -1
  203. package/dist/src/tools/index.d.ts.map +1 -1
  204. package/dist/src/tools/index.js +6 -0
  205. package/dist/src/tools/index.js.map +1 -1
  206. package/dist/src/tools/merge-validator.d.ts +24 -0
  207. package/dist/src/tools/merge-validator.d.ts.map +1 -0
  208. package/dist/src/tools/merge-validator.js +220 -0
  209. package/dist/src/tools/merge-validator.js.map +1 -0
  210. package/dist/src/tools/spec-entry-parser.d.ts +56 -0
  211. package/dist/src/tools/spec-entry-parser.d.ts.map +1 -0
  212. package/dist/src/tools/spec-entry-parser.js +196 -0
  213. package/dist/src/tools/spec-entry-parser.js.map +1 -0
  214. package/dist/src/tools/spec-init.d.ts.map +1 -1
  215. package/dist/src/tools/spec-init.js +66 -92
  216. package/dist/src/tools/spec-init.js.map +1 -1
  217. package/dist/src/tools/spec-keyword-index.d.ts +30 -0
  218. package/dist/src/tools/spec-keyword-index.d.ts.map +1 -0
  219. package/dist/src/tools/spec-keyword-index.js +101 -0
  220. package/dist/src/tools/spec-keyword-index.js.map +1 -0
  221. package/dist/src/tools/spec-loader.d.ts +3 -3
  222. package/dist/src/tools/spec-loader.d.ts.map +1 -1
  223. package/dist/src/tools/spec-loader.js +49 -23
  224. package/dist/src/tools/spec-loader.js.map +1 -1
  225. package/dist/src/tools/team-agents.d.ts +27 -0
  226. package/dist/src/tools/team-agents.d.ts.map +1 -0
  227. package/dist/src/tools/team-agents.js +362 -0
  228. package/dist/src/tools/team-agents.js.map +1 -0
  229. package/dist/src/tools/team-mailbox.d.ts +40 -0
  230. package/dist/src/tools/team-mailbox.d.ts.map +1 -0
  231. package/dist/src/tools/team-mailbox.js +384 -0
  232. package/dist/src/tools/team-mailbox.js.map +1 -0
  233. package/dist/src/tools/team-msg.d.ts +17 -8
  234. package/dist/src/tools/team-msg.d.ts.map +1 -1
  235. package/dist/src/tools/team-msg.js +110 -13
  236. package/dist/src/tools/team-msg.js.map +1 -1
  237. package/dist/src/tools/team-tasks-mcp.d.ts +27 -0
  238. package/dist/src/tools/team-tasks-mcp.d.ts.map +1 -0
  239. package/dist/src/tools/team-tasks-mcp.js +408 -0
  240. package/dist/src/tools/team-tasks-mcp.js.map +1 -0
  241. package/dist/src/types/index.d.ts +5 -0
  242. package/dist/src/types/index.d.ts.map +1 -1
  243. package/package.json +2 -1
  244. package/templates/cli/prompts/workflow-skill-conflict-patterns.txt +3 -3
  245. package/templates/cli/prompts/workflow-skill-lessons-learned.txt +3 -3
  246. package/templates/search-tools.md +1 -1
  247. package/workflows/analyze.md +816 -816
  248. package/workflows/brainstorm.md +471 -471
  249. package/workflows/cli-tools-usage.md +44 -27
  250. package/workflows/codebase-rebuild.md +332 -332
  251. package/workflows/codebase-refresh.md +240 -240
  252. package/workflows/delegate-usage.md +3 -3
  253. package/workflows/execute.md +1 -1
  254. package/workflows/harvest.md +420 -420
  255. package/workflows/integration-test.md +343 -343
  256. package/workflows/issue-analyze.md +6 -2
  257. package/workflows/issue-discover.md +414 -414
  258. package/workflows/issue-execute.md +6 -3
  259. package/workflows/issue-plan.md +5 -2
  260. package/workflows/maestro-coordinate.codex.md +281 -470
  261. package/workflows/maestro-coordinate.md +14 -14
  262. package/workflows/maestro-link-coordinate.md +2 -2
  263. package/workflows/maestro.codex.md +710 -0
  264. package/workflows/maestro.md +10 -11
  265. package/workflows/map.md +111 -111
  266. package/workflows/milestone-complete.md +176 -176
  267. package/workflows/plan.md +1 -1
  268. package/workflows/quick.md +497 -497
  269. package/workflows/refactor.md +300 -300
  270. package/workflows/retrospective.md +1 -1
  271. package/workflows/roadmap.md +335 -335
  272. package/workflows/spec-generate.md +640 -640
  273. package/workflows/specs-add.md +46 -81
  274. package/workflows/specs-load.md +15 -17
  275. package/workflows/specs-setup.md +40 -161
  276. package/.claude/commands/manage-issue-analyze.md +0 -62
  277. package/.claude/commands/manage-issue-execute.md +0 -73
  278. package/.claude/commands/manage-issue-plan.md +0 -62
  279. package/.codex/skills/manage-issue-analyze/SKILL.md +0 -207
  280. package/.codex/skills/manage-issue-execute/SKILL.md +0 -200
  281. package/.codex/skills/manage-issue-plan/SKILL.md +0 -186
@@ -1,335 +1,335 @@
1
- # Workflow: roadmap
2
-
3
- Interactive roadmap creation with iterative refinement. Lightweight path from requirements to roadmap without full specification documents.
4
-
5
- ---
6
-
7
- ## Worktree Guard
8
-
9
- ```
10
- # Block in worktree
11
- IF file_exists(".workflow/worktree-scope.json"):
12
- ERROR "Cannot run maestro-roadmap inside a worktree. Run from the main worktree."
13
- EXIT
14
- ```
15
-
16
- ## Step 1: Session Initialization
17
-
18
- ```javascript
19
- const getUtc8ISOString = () => new Date(Date.now() + 8 * 60 * 60 * 1000).toISOString()
20
-
21
- // Parse flags
22
- const autoYes = $ARGUMENTS.includes('--yes') || $ARGUMENTS.includes('-y')
23
- const continueMode = $ARGUMENTS.includes('--continue') || $ARGUMENTS.includes('-c')
24
- const modeMatch = $ARGUMENTS.match(/(?:--mode|-m)\s+(progressive|direct|auto)/)
25
- const requestedMode = modeMatch ? modeMatch[1] : 'auto'
26
- const brainstormMatch = $ARGUMENTS.match(/--from-brainstorm\s+(\S+)/)
27
-
28
- // Clean requirement text
29
- const requirement = $ARGUMENTS
30
- .replace(/--yes|-y|--continue|-c|--mode\s+\w+|-m\s+\w+|--from-brainstorm\s+\S+/g, '')
31
- .trim()
32
-
33
- const slug = requirement.toLowerCase()
34
- .replace(/[^a-z0-9\u4e00-\u9fa5]+/g, '-')
35
- .substring(0, 40)
36
- const dateStr = getUtc8ISOString().substring(0, 10)
37
- ```
38
-
39
- **Session directory**: `.workflow/.roadmap/RMAP-{slug}-{date}/`
40
-
41
- **Continue mode**: If `-c` and session exists, resume from last state.
42
-
43
- **Brainstorm import**: If `--from-brainstorm`, read `guidance-specification.md` for enriched context (problem statement, features, non-goals, terminology).
44
-
45
- ---
46
-
47
- ## Step 1.5: Load Project Context
48
-
49
- ### 1.5.1: Load Specs
50
- ```
51
- specs_content = maestro spec load --category planning
52
- ```
53
- Ensure phases in Step 2 respect architectural constraints.
54
-
55
- ### 1.5.2: Load Project History (if `.workflow/` exists)
56
-
57
- Read project artifacts to understand what has already been built and what carries forward:
58
-
59
- ```
60
- IF .workflow/project.md exists:
61
- Read project.md:
62
- - "### Validated" section → already_shipped (completed features, DO NOT re-plan)
63
- - "### Active" section → current_scope (features to plan for)
64
- - "## Context" section → project_history (milestone summaries, prior work)
65
- - "## Key Decisions" section → locked_decisions (constraints on new phases)
66
-
67
- IF .workflow/state.json exists:
68
- Read state.json.accumulated_context:
69
- - deferred[] → candidate_requirements (explicitly pushed to this milestone)
70
- - key_decisions[] → architectural_constraints
71
- - blockers[] → known_risks
72
-
73
- IF .workflow/codebase/ exists (from codebase-rebuild or codebase-refresh):
74
- Read available codebase docs for feature inventory
75
- ```
76
-
77
- **Context assembly** — pass to Step 2 as `project_context`:
78
- ```json
79
- {
80
- "already_shipped": ["REQ-001: User auth", "REQ-002: API layer"],
81
- "current_scope": ["REQ-003: Payments", "REQ-004: i18n"],
82
- "deferred_from_previous": ["Internationalization deferred from v1.0"],
83
- "locked_decisions": ["JWT stateless auth", "PostgreSQL"],
84
- "learnings": ["JWT has perf issues at scale — consider caching"],
85
- "project_history": "Milestone v1.0 completed 2026-03-15: auth + API layer shipped"
86
- }
87
- ```
88
-
89
- **Rules**:
90
- - NEVER re-plan features listed in `already_shipped` — they are done
91
- - `deferred_from_previous` items are HIGH PRIORITY candidates for new phases
92
- - `locked_decisions` constrain technology choices in decomposition
93
- - `learnings` inform risk assessment and phase sizing
94
-
95
- ---
96
-
97
- ## Step 2: Requirement Understanding & Strategy
98
-
99
- **Objective**: Parse requirement, assess uncertainty, select decomposition strategy.
100
-
101
- 1. **Parse Requirement**
102
- - Extract: goal, constraints, stakeholders, keywords
103
- - If `--from-brainstorm`: enrich from guidance-specification.md
104
- - If `project_context` loaded (Step 1.5.2): merge into requirement analysis
105
- - Cross-reference requirement against `already_shipped` — flag overlaps as "already done"
106
- - Promote `deferred_from_previous` items into active requirement scope
107
- - Apply `locked_decisions` as constraints
108
-
109
- 2. **Codebase Exploration (conditional)**
110
- - Detect if project has source files
111
- - If yes: spawn `cli-explore-agent` for context discovery
112
- - If `project_context.already_shipped` exists: include as "feature audit" directive —
113
- agent should verify which shipped features are present in code and identify integration points for new work
114
- - Output: relevant files, patterns, tech stack, feature_audit (existing capabilities mapped to shipped requirements)
115
-
116
- 3. **External Research — API & Technology Details (Optional)**
117
-
118
- Spawn `workflow-external-researcher` agent when requirement mentions specific technologies, APIs, or external services.
119
-
120
- **Trigger**: Technology keywords detected in requirement or codebase exploration found external dependencies. Auto-trigger in auto mode (`-y`). Skip if requirement is purely organizational.
121
-
122
- ```
123
- // Extract technology keywords from requirement + codebase exploration
124
- researchTopics = extract named technologies, APIs, frameworks, protocols
125
-
126
- IF researchTopics is not empty:
127
- Agent(
128
- subagent_type="workflow-external-researcher",
129
- prompt="""
130
- <objective>
131
- Research API details and technology specifics for: {requirement}
132
- Mode: API Research
133
- </objective>
134
-
135
- <context>
136
- Technologies identified: {researchTopics}
137
- Codebase tech stack: {codebase_exploration.tech_stack or "none"}
138
- </context>
139
-
140
- <task>
141
- For each identified technology/API:
142
- 1. Current stable version and key capabilities
143
- 2. Core API surface: key endpoints/methods, auth model
144
- 3. Integration patterns and recommended setup
145
- 4. Known limitations, breaking changes, or deprecations
146
- 5. Effort estimation signals (simple wrapper vs complex integration)
147
-
148
- Focus on details that affect phase decomposition and dependency ordering.
149
- Be prescriptive. Return structured markdown only — do NOT write files.
150
- </task>
151
- """,
152
- run_in_background=false
153
- )
154
- apiResearchContext = agent_output
155
- ELSE:
156
- apiResearchContext = null
157
- ```
158
-
159
- `apiResearchContext` is passed into:
160
- - Step 3 (Decomposition): technology complexity informs phase sizing and ordering
161
- - Step 4 (Refinement): API constraints surface realistic dependency chains
162
-
163
- If research fails: `apiResearchContext = null`, continue without external context.
164
-
165
- 4. **Assess Uncertainty**
166
- ```
167
- Factors: scope_clarity, technical_risk, dependency_unknown,
168
- domain_familiarity, requirement_stability
169
- Each: low | medium | high
170
- ≥3 high → progressive, ≥3 low → direct, else → ask
171
- ```
172
-
173
- 5. **Strategy Selection** (skip if `-m` specified or `-y`)
174
- - Present uncertainty assessment
175
- - User selects: Progressive or Direct
176
- - `-y`: use recommended strategy
177
-
178
- ---
179
-
180
- ## Step 3: Decomposition
181
-
182
- **Objective**: Break requirement into phases via CLI-assisted analysis.
183
-
184
- Spawn `cli-roadmap-plan-agent`.
185
- If `apiResearchContext` is set: include as "External API Research" context in the agent prompt — technology complexity, API constraints, and integration effort inform phase sizing and dependency ordering.
186
-
187
- ### Minimum-Phase Principle (MANDATORY)
188
-
189
- **Core rule: Phase = synchronization barrier.** Each Phase triggers a full plan→execute→verify→transition serial cycle. More phases = slower delivery. The wave DAG inside each Phase already handles task ordering and parallelism, so only create a new Phase when tasks **cannot** start until a previous Phase's entire output exists.
190
-
191
- **Default: 1 Phase.** Put everything into a single Phase unless a hard dependency forces a split.
192
-
193
- | Rule | Constraint |
194
- |------|-----------|
195
- | **Default** | **1 Phase**. All work in one plan→execute cycle; wave DAG handles internal ordering. |
196
- | **Maximum** | **2 Phases**. Only when a hard dependency boundary exists that cannot be resolved. |
197
- | **Exceptional** | **3 Phases**. Must explicitly justify why 2 is insufficient. |
198
- | **Minimum tasks per phase** | 5 tasks. If a phase would have fewer, merge it into an adjacent phase. |
199
- | **Merge principle** | Same-module, same-concern, or tightly-coupled work belongs in ONE phase. Infra + core logic + API in one phase is fine. |
200
- | **Split principle** | Only split when ALL three hard-dependency conditions are met (see below). |
201
-
202
- **Hard dependency — all three conditions required to justify a Phase split:**
203
- 1. **Runtime dependency**: Phase B code at runtime MUST call Phase A's real output (cannot mock/stub).
204
- 2. **Not parallelizable**: A and B cannot develop concurrently via contract/interface/type agreement.
205
- 3. **Full barrier**: ALL of Phase A's tasks must complete before ANY of Phase B's tasks can start.
206
-
207
- If only 1-2 conditions are met → keep in the same Phase, use wave dependencies instead.
208
-
209
- **Phase sizing checklist (applied after decomposition, before presenting to user):**
210
- 1. Count total phases. If > 2 → justify each split against the 3 hard-dependency conditions, merge if unjustified.
211
- 2. Count estimated tasks per phase. Any phase < 5 tasks → merge into neighbor.
212
- 3. Verify each phase has a meaningful deliverable boundary (not just "setup" or "cleanup").
213
-
214
- **Scope escalation:**
215
- - **Single project** (any size): 1-2 Phases. Use wave DAG for internal parallelism.
216
- - **Large scope** (monorepo with 2+ independently deployable services): Use **Milestones** to divide scope. Each Milestone follows the 1-2 Phase limit independently.
217
-
218
- **Progressive mode**:
219
- - Progressive layers (MVP → Usable → Refined) map to **Milestones**, not Phases.
220
- - Each Milestone contains 1-2 Phases following the minimum-phase principle.
221
- - MVP must be self-contained (no external dependencies)
222
- - Each feature in exactly ONE milestone (no overlap)
223
-
224
- **Direct mode**:
225
- - Topologically-sorted task sequence
226
- - Each task: title, type, scope, inputs, outputs, convergence, depends_on
227
- - parallel_group for truly independent tasks
228
-
229
- **Phase format** (both modes):
230
- ```markdown
231
- ### Phase {N}: {Title}
232
- - **Goal**: <what this phase achieves>
233
- - **Depends on**: <prerequisite phases or "Nothing">
234
- - **Requirements**: <REQ-IDs mapped from project.md Active requirements>
235
- - **Success Criteria** (what must be TRUE):
236
- 1. <observable behavior from user perspective>
237
- 2. <observable behavior from user perspective>
238
- ```
239
-
240
- Phase numbering: integers (1, 2, 3) for planned work, decimals (2.1, 2.2) for inserted phases.
241
- Decimal phases count toward the total phase limit.
242
- Phase directories use `{NN}-{slug}` format (e.g., `01-auth`, `02-api`).
243
-
244
- **Requirements traceability**: Every Active requirement from project.md MUST appear in exactly one phase's Requirements field. If a requirement maps to no phase, surface it as a gap.
245
-
246
- ---
247
-
248
- ## Step 4: Iterative Refinement
249
-
250
- **Objective**: Multi-round user feedback to refine roadmap.
251
-
252
- 1. **Present Roadmap**
253
- - Phase count, milestone structure, dependency graph
254
- - Key success criteria per phase
255
-
256
- 2. **Gather Feedback** (skip if `-y` or `config.gates.confirm_roadmap == false`)
257
- - Options: Approve / Adjust Scope / Reorder / Split-Merge / Re-decompose
258
- - Max 5 rounds
259
-
260
- 3. **Process Feedback**
261
- - **Approve**: Run minimum-phase checklist (Step 3 rules) before accepting. If violations found, auto-merge and inform user.
262
- - **Adjust Scope**: Move features between milestones, modify criteria
263
- - **Reorder**: Change phase sequencing
264
- - **Split/Merge**: Break large phases or combine small ones (enforce min 5 tasks, max 2 phases)
265
- - **Re-decompose**: Return to Step 3 with new strategy
266
-
267
- 4. **Loop** until approved or max rounds reached
268
-
269
- ---
270
-
271
- ## Step 5: Write Outputs
272
-
273
- 1. **Write roadmap.md** to `.workflow/roadmap.md` using @templates/roadmap.md:
274
- ```markdown
275
- # Roadmap: {project_name}
276
-
277
- ## Overview
278
- <one paragraph describing the journey>
279
-
280
- ## Phases
281
- - [ ] **Phase 1: {Title}** - {one-line description}
282
- - [ ] **Phase 2: {Title}** - {one-line description}
283
-
284
- ## Phase Details
285
-
286
- ### Phase 1: {Title}
287
- **Goal**: {what this phase delivers}
288
- **Depends on**: Nothing (first phase)
289
- **Requirements**: {REQ-IDs from project.md Active requirements}
290
- **Success Criteria** (what must be TRUE):
291
- 1. {observable behavior from user perspective}
292
- 2. {observable behavior from user perspective}
293
-
294
- ### Phase 2: {Title}
295
- **Goal**: {what this phase delivers}
296
- **Depends on**: Phase 1
297
- **Requirements**: {REQ-IDs}
298
- **Success Criteria** (what must be TRUE):
299
- 1. {observable behavior}
300
-
301
- ## Scope Decisions
302
- - In scope: <included>
303
- - Deferred: <later milestones>
304
- - Out of scope: <excluded>
305
-
306
- ## Progress
307
- | Phase | Status | Completed |
308
- |-------|--------|-----------|
309
- | 1. {Title} | Not started | - |
310
- ```
311
-
312
- **Requirements traceability**: Cross-check that every Active requirement from project.md maps to exactly one phase. Surface unmapped requirements as gaps.
313
-
314
- 2. **Ensure scratch directory**: `mkdir -p .workflow/scratch/`
315
-
316
- 3. **Update state.json** (if exists): set milestones from roadmap, set `current_milestone` to first milestone
317
-
318
- ---
319
-
320
- ## Step 6: Handoff
321
-
322
- Display summary and offer next steps:
323
-
324
- ```
325
- === ROADMAP CREATED ===
326
- Strategy: {progressive|direct}
327
- Phases: {phase_count} across {milestone_count} milestones
328
- Roadmap: .workflow/roadmap.md
329
-
330
- Next steps:
331
- Skill({ skill: "maestro-init" }) -- Set up project (if not yet initialized)
332
- Skill({ skill: "maestro-plan", args: "1" }) -- Plan first phase
333
- Skill({ skill: "maestro-brainstorm", args: "1" }) -- Explore first phase ideas
334
- Skill({ skill: "manage-status" }) -- View project dashboard
335
- ```
1
+ # Workflow: roadmap
2
+
3
+ Interactive roadmap creation with iterative refinement. Lightweight path from requirements to roadmap without full specification documents.
4
+
5
+ ---
6
+
7
+ ## Worktree Guard
8
+
9
+ ```
10
+ # Block in worktree
11
+ IF file_exists(".workflow/worktree-scope.json"):
12
+ ERROR "Cannot run maestro-roadmap inside a worktree. Run from the main worktree."
13
+ EXIT
14
+ ```
15
+
16
+ ## Step 1: Session Initialization
17
+
18
+ ```javascript
19
+ const getUtc8ISOString = () => new Date(Date.now() + 8 * 60 * 60 * 1000).toISOString()
20
+
21
+ // Parse flags
22
+ const autoYes = $ARGUMENTS.includes('--yes') || $ARGUMENTS.includes('-y')
23
+ const continueMode = $ARGUMENTS.includes('--continue') || $ARGUMENTS.includes('-c')
24
+ const modeMatch = $ARGUMENTS.match(/(?:--mode|-m)\s+(progressive|direct|auto)/)
25
+ const requestedMode = modeMatch ? modeMatch[1] : 'auto'
26
+ const brainstormMatch = $ARGUMENTS.match(/--from-brainstorm\s+(\S+)/)
27
+
28
+ // Clean requirement text
29
+ const requirement = $ARGUMENTS
30
+ .replace(/--yes|-y|--continue|-c|--mode\s+\w+|-m\s+\w+|--from-brainstorm\s+\S+/g, '')
31
+ .trim()
32
+
33
+ const slug = requirement.toLowerCase()
34
+ .replace(/[^a-z0-9\u4e00-\u9fa5]+/g, '-')
35
+ .substring(0, 40)
36
+ const dateStr = getUtc8ISOString().substring(0, 10)
37
+ ```
38
+
39
+ **Session directory**: `.workflow/.roadmap/RMAP-{slug}-{date}/`
40
+
41
+ **Continue mode**: If `-c` and session exists, resume from last state.
42
+
43
+ **Brainstorm import**: If `--from-brainstorm`, read `guidance-specification.md` for enriched context (problem statement, features, non-goals, terminology).
44
+
45
+ ---
46
+
47
+ ## Step 1.5: Load Project Context
48
+
49
+ ### 1.5.1: Load Specs
50
+ ```
51
+ specs_content = maestro spec load --category arch
52
+ ```
53
+ Ensure phases in Step 2 respect architectural constraints.
54
+
55
+ ### 1.5.2: Load Project History (if `.workflow/` exists)
56
+
57
+ Read project artifacts to understand what has already been built and what carries forward:
58
+
59
+ ```
60
+ IF .workflow/project.md exists:
61
+ Read project.md:
62
+ - "### Validated" section → already_shipped (completed features, DO NOT re-plan)
63
+ - "### Active" section → current_scope (features to plan for)
64
+ - "## Context" section → project_history (milestone summaries, prior work)
65
+ - "## Key Decisions" section → locked_decisions (constraints on new phases)
66
+
67
+ IF .workflow/state.json exists:
68
+ Read state.json.accumulated_context:
69
+ - deferred[] → candidate_requirements (explicitly pushed to this milestone)
70
+ - key_decisions[] → architectural_constraints
71
+ - blockers[] → known_risks
72
+
73
+ IF .workflow/codebase/ exists (from codebase-rebuild or codebase-refresh):
74
+ Read available codebase docs for feature inventory
75
+ ```
76
+
77
+ **Context assembly** — pass to Step 2 as `project_context`:
78
+ ```json
79
+ {
80
+ "already_shipped": ["REQ-001: User auth", "REQ-002: API layer"],
81
+ "current_scope": ["REQ-003: Payments", "REQ-004: i18n"],
82
+ "deferred_from_previous": ["Internationalization deferred from v1.0"],
83
+ "locked_decisions": ["JWT stateless auth", "PostgreSQL"],
84
+ "learnings": ["JWT has perf issues at scale — consider caching"],
85
+ "project_history": "Milestone v1.0 completed 2026-03-15: auth + API layer shipped"
86
+ }
87
+ ```
88
+
89
+ **Rules**:
90
+ - NEVER re-plan features listed in `already_shipped` — they are done
91
+ - `deferred_from_previous` items are HIGH PRIORITY candidates for new phases
92
+ - `locked_decisions` constrain technology choices in decomposition
93
+ - `learnings` inform risk assessment and phase sizing
94
+
95
+ ---
96
+
97
+ ## Step 2: Requirement Understanding & Strategy
98
+
99
+ **Objective**: Parse requirement, assess uncertainty, select decomposition strategy.
100
+
101
+ 1. **Parse Requirement**
102
+ - Extract: goal, constraints, stakeholders, keywords
103
+ - If `--from-brainstorm`: enrich from guidance-specification.md
104
+ - If `project_context` loaded (Step 1.5.2): merge into requirement analysis
105
+ - Cross-reference requirement against `already_shipped` — flag overlaps as "already done"
106
+ - Promote `deferred_from_previous` items into active requirement scope
107
+ - Apply `locked_decisions` as constraints
108
+
109
+ 2. **Codebase Exploration (conditional)**
110
+ - Detect if project has source files
111
+ - If yes: spawn `cli-explore-agent` for context discovery
112
+ - If `project_context.already_shipped` exists: include as "feature audit" directive —
113
+ agent should verify which shipped features are present in code and identify integration points for new work
114
+ - Output: relevant files, patterns, tech stack, feature_audit (existing capabilities mapped to shipped requirements)
115
+
116
+ 3. **External Research — API & Technology Details (Optional)**
117
+
118
+ Spawn `workflow-external-researcher` agent when requirement mentions specific technologies, APIs, or external services.
119
+
120
+ **Trigger**: Technology keywords detected in requirement or codebase exploration found external dependencies. Auto-trigger in auto mode (`-y`). Skip if requirement is purely organizational.
121
+
122
+ ```
123
+ // Extract technology keywords from requirement + codebase exploration
124
+ researchTopics = extract named technologies, APIs, frameworks, protocols
125
+
126
+ IF researchTopics is not empty:
127
+ Agent(
128
+ subagent_type="workflow-external-researcher",
129
+ prompt="""
130
+ <objective>
131
+ Research API details and technology specifics for: {requirement}
132
+ Mode: API Research
133
+ </objective>
134
+
135
+ <context>
136
+ Technologies identified: {researchTopics}
137
+ Codebase tech stack: {codebase_exploration.tech_stack or "none"}
138
+ </context>
139
+
140
+ <task>
141
+ For each identified technology/API:
142
+ 1. Current stable version and key capabilities
143
+ 2. Core API surface: key endpoints/methods, auth model
144
+ 3. Integration patterns and recommended setup
145
+ 4. Known limitations, breaking changes, or deprecations
146
+ 5. Effort estimation signals (simple wrapper vs complex integration)
147
+
148
+ Focus on details that affect phase decomposition and dependency ordering.
149
+ Be prescriptive. Return structured markdown only — do NOT write files.
150
+ </task>
151
+ """,
152
+ run_in_background=false
153
+ )
154
+ apiResearchContext = agent_output
155
+ ELSE:
156
+ apiResearchContext = null
157
+ ```
158
+
159
+ `apiResearchContext` is passed into:
160
+ - Step 3 (Decomposition): technology complexity informs phase sizing and ordering
161
+ - Step 4 (Refinement): API constraints surface realistic dependency chains
162
+
163
+ If research fails: `apiResearchContext = null`, continue without external context.
164
+
165
+ 4. **Assess Uncertainty**
166
+ ```
167
+ Factors: scope_clarity, technical_risk, dependency_unknown,
168
+ domain_familiarity, requirement_stability
169
+ Each: low | medium | high
170
+ ≥3 high → progressive, ≥3 low → direct, else → ask
171
+ ```
172
+
173
+ 5. **Strategy Selection** (skip if `-m` specified or `-y`)
174
+ - Present uncertainty assessment
175
+ - User selects: Progressive or Direct
176
+ - `-y`: use recommended strategy
177
+
178
+ ---
179
+
180
+ ## Step 3: Decomposition
181
+
182
+ **Objective**: Break requirement into phases via CLI-assisted analysis.
183
+
184
+ Spawn `cli-roadmap-plan-agent`.
185
+ If `apiResearchContext` is set: include as "External API Research" context in the agent prompt — technology complexity, API constraints, and integration effort inform phase sizing and dependency ordering.
186
+
187
+ ### Minimum-Phase Principle (MANDATORY)
188
+
189
+ **Core rule: Phase = synchronization barrier.** Each Phase triggers a full plan→execute→verify→transition serial cycle. More phases = slower delivery. The wave DAG inside each Phase already handles task ordering and parallelism, so only create a new Phase when tasks **cannot** start until a previous Phase's entire output exists.
190
+
191
+ **Default: 1 Phase.** Put everything into a single Phase unless a hard dependency forces a split.
192
+
193
+ | Rule | Constraint |
194
+ |------|-----------|
195
+ | **Default** | **1 Phase**. All work in one plan→execute cycle; wave DAG handles internal ordering. |
196
+ | **Maximum** | **2 Phases**. Only when a hard dependency boundary exists that cannot be resolved. |
197
+ | **Exceptional** | **3 Phases**. Must explicitly justify why 2 is insufficient. |
198
+ | **Minimum tasks per phase** | 5 tasks. If a phase would have fewer, merge it into an adjacent phase. |
199
+ | **Merge principle** | Same-module, same-concern, or tightly-coupled work belongs in ONE phase. Infra + core logic + API in one phase is fine. |
200
+ | **Split principle** | Only split when ALL three hard-dependency conditions are met (see below). |
201
+
202
+ **Hard dependency — all three conditions required to justify a Phase split:**
203
+ 1. **Runtime dependency**: Phase B code at runtime MUST call Phase A's real output (cannot mock/stub).
204
+ 2. **Not parallelizable**: A and B cannot develop concurrently via contract/interface/type agreement.
205
+ 3. **Full barrier**: ALL of Phase A's tasks must complete before ANY of Phase B's tasks can start.
206
+
207
+ If only 1-2 conditions are met → keep in the same Phase, use wave dependencies instead.
208
+
209
+ **Phase sizing checklist (applied after decomposition, before presenting to user):**
210
+ 1. Count total phases. If > 2 → justify each split against the 3 hard-dependency conditions, merge if unjustified.
211
+ 2. Count estimated tasks per phase. Any phase < 5 tasks → merge into neighbor.
212
+ 3. Verify each phase has a meaningful deliverable boundary (not just "setup" or "cleanup").
213
+
214
+ **Scope escalation:**
215
+ - **Single project** (any size): 1-2 Phases. Use wave DAG for internal parallelism.
216
+ - **Large scope** (monorepo with 2+ independently deployable services): Use **Milestones** to divide scope. Each Milestone follows the 1-2 Phase limit independently.
217
+
218
+ **Progressive mode**:
219
+ - Progressive layers (MVP → Usable → Refined) map to **Milestones**, not Phases.
220
+ - Each Milestone contains 1-2 Phases following the minimum-phase principle.
221
+ - MVP must be self-contained (no external dependencies)
222
+ - Each feature in exactly ONE milestone (no overlap)
223
+
224
+ **Direct mode**:
225
+ - Topologically-sorted task sequence
226
+ - Each task: title, type, scope, inputs, outputs, convergence, depends_on
227
+ - parallel_group for truly independent tasks
228
+
229
+ **Phase format** (both modes):
230
+ ```markdown
231
+ ### Phase {N}: {Title}
232
+ - **Goal**: <what this phase achieves>
233
+ - **Depends on**: <prerequisite phases or "Nothing">
234
+ - **Requirements**: <REQ-IDs mapped from project.md Active requirements>
235
+ - **Success Criteria** (what must be TRUE):
236
+ 1. <observable behavior from user perspective>
237
+ 2. <observable behavior from user perspective>
238
+ ```
239
+
240
+ Phase numbering: integers (1, 2, 3) for planned work, decimals (2.1, 2.2) for inserted phases.
241
+ Decimal phases count toward the total phase limit.
242
+ Phase directories use `{NN}-{slug}` format (e.g., `01-auth`, `02-api`).
243
+
244
+ **Requirements traceability**: Every Active requirement from project.md MUST appear in exactly one phase's Requirements field. If a requirement maps to no phase, surface it as a gap.
245
+
246
+ ---
247
+
248
+ ## Step 4: Iterative Refinement
249
+
250
+ **Objective**: Multi-round user feedback to refine roadmap.
251
+
252
+ 1. **Present Roadmap**
253
+ - Phase count, milestone structure, dependency graph
254
+ - Key success criteria per phase
255
+
256
+ 2. **Gather Feedback** (skip if `-y` or `config.gates.confirm_roadmap == false`)
257
+ - Options: Approve / Adjust Scope / Reorder / Split-Merge / Re-decompose
258
+ - Max 5 rounds
259
+
260
+ 3. **Process Feedback**
261
+ - **Approve**: Run minimum-phase checklist (Step 3 rules) before accepting. If violations found, auto-merge and inform user.
262
+ - **Adjust Scope**: Move features between milestones, modify criteria
263
+ - **Reorder**: Change phase sequencing
264
+ - **Split/Merge**: Break large phases or combine small ones (enforce min 5 tasks, max 2 phases)
265
+ - **Re-decompose**: Return to Step 3 with new strategy
266
+
267
+ 4. **Loop** until approved or max rounds reached
268
+
269
+ ---
270
+
271
+ ## Step 5: Write Outputs
272
+
273
+ 1. **Write roadmap.md** to `.workflow/roadmap.md` using @templates/roadmap.md:
274
+ ```markdown
275
+ # Roadmap: {project_name}
276
+
277
+ ## Overview
278
+ <one paragraph describing the journey>
279
+
280
+ ## Phases
281
+ - [ ] **Phase 1: {Title}** - {one-line description}
282
+ - [ ] **Phase 2: {Title}** - {one-line description}
283
+
284
+ ## Phase Details
285
+
286
+ ### Phase 1: {Title}
287
+ **Goal**: {what this phase delivers}
288
+ **Depends on**: Nothing (first phase)
289
+ **Requirements**: {REQ-IDs from project.md Active requirements}
290
+ **Success Criteria** (what must be TRUE):
291
+ 1. {observable behavior from user perspective}
292
+ 2. {observable behavior from user perspective}
293
+
294
+ ### Phase 2: {Title}
295
+ **Goal**: {what this phase delivers}
296
+ **Depends on**: Phase 1
297
+ **Requirements**: {REQ-IDs}
298
+ **Success Criteria** (what must be TRUE):
299
+ 1. {observable behavior}
300
+
301
+ ## Scope Decisions
302
+ - In scope: <included>
303
+ - Deferred: <later milestones>
304
+ - Out of scope: <excluded>
305
+
306
+ ## Progress
307
+ | Phase | Status | Completed |
308
+ |-------|--------|-----------|
309
+ | 1. {Title} | Not started | - |
310
+ ```
311
+
312
+ **Requirements traceability**: Cross-check that every Active requirement from project.md maps to exactly one phase. Surface unmapped requirements as gaps.
313
+
314
+ 2. **Ensure scratch directory**: `mkdir -p .workflow/scratch/`
315
+
316
+ 3. **Update state.json** (if exists): set milestones from roadmap, set `current_milestone` to first milestone
317
+
318
+ ---
319
+
320
+ ## Step 6: Handoff
321
+
322
+ Display summary and offer next steps:
323
+
324
+ ```
325
+ === ROADMAP CREATED ===
326
+ Strategy: {progressive|direct}
327
+ Phases: {phase_count} across {milestone_count} milestones
328
+ Roadmap: .workflow/roadmap.md
329
+
330
+ Next steps:
331
+ Skill({ skill: "maestro-init" }) -- Set up project (if not yet initialized)
332
+ Skill({ skill: "maestro-plan", args: "1" }) -- Plan first phase
333
+ Skill({ skill: "maestro-brainstorm", args: "1" }) -- Explore first phase ideas
334
+ Skill({ skill: "manage-status" }) -- View project dashboard
335
+ ```