maestro-flow 0.3.10 → 0.3.12

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 (311) hide show
  1. package/.claude/agents/conceptual-planning-agent.md +1 -0
  2. package/.claude/agents/workflow-analyzer.md +114 -114
  3. package/.claude/agents/workflow-collab-planner.md +144 -144
  4. package/.claude/agents/workflow-debugger.md +102 -103
  5. package/.claude/agents/workflow-executor.md +127 -128
  6. package/.claude/agents/workflow-integration-checker.md +82 -82
  7. package/.claude/agents/workflow-nyquist-auditor.md +85 -84
  8. package/.claude/agents/workflow-phase-researcher.md +85 -85
  9. package/.claude/agents/workflow-plan-checker.md +90 -90
  10. package/.claude/agents/workflow-planner.md +178 -178
  11. package/.claude/agents/workflow-roadmapper.md +81 -83
  12. package/.claude/agents/workflow-verifier.md +119 -119
  13. package/.claude/commands/learn-decompose.md +176 -176
  14. package/.claude/commands/learn-follow.md +167 -167
  15. package/.claude/commands/learn-retro.md +3 -3
  16. package/.claude/commands/learn-second-opinion.md +2 -2
  17. package/.claude/commands/maestro-brainstorm.md +1 -0
  18. package/.claude/commands/maestro-coordinate.md +1 -3
  19. package/.claude/commands/maestro-fork.md +133 -111
  20. package/.claude/commands/maestro-merge.md +85 -77
  21. package/.claude/commands/maestro-plan.md +88 -2
  22. package/.claude/commands/maestro-roadmap.md +113 -2
  23. package/.claude/commands/maestro.md +1 -0
  24. package/.claude/commands/manage-harvest.md +131 -131
  25. package/.claude/commands/manage-issue.md +2 -2
  26. package/.claude/commands/quality-business-test.md +5 -5
  27. package/.claude/commands/quality-debug.md +3 -2
  28. package/.claude/commands/quality-retrospective.md +6 -4
  29. package/.claude/commands/quality-review.md +1 -1
  30. package/.claude/commands/quality-test-gen.md +5 -4
  31. package/.claude/commands/spec-add.md +67 -56
  32. package/.claude/commands/spec-load.md +66 -64
  33. package/.claude/commands/spec-setup.md +5 -9
  34. package/.codex/skills/learn-decompose/SKILL.md +119 -0
  35. package/.codex/skills/learn-follow/SKILL.md +83 -0
  36. package/.codex/skills/learn-investigate/SKILL.md +83 -0
  37. package/.codex/skills/learn-retro/SKILL.md +83 -0
  38. package/.codex/skills/learn-second-opinion/SKILL.md +86 -0
  39. package/.codex/skills/maestro/SKILL.md +151 -279
  40. package/.codex/skills/maestro-analyze/SKILL.md +59 -71
  41. package/.codex/skills/maestro-brainstorm/SKILL.md +452 -463
  42. package/.codex/skills/maestro-chain/SKILL.md +95 -110
  43. package/.codex/skills/maestro-coordinate/SKILL.md +68 -234
  44. package/.codex/skills/maestro-execute/SKILL.md +435 -446
  45. package/.codex/skills/maestro-fork/SKILL.md +98 -0
  46. package/.codex/skills/maestro-init/SKILL.md +172 -167
  47. package/.codex/skills/maestro-learn/SKILL.md +80 -0
  48. package/.codex/skills/maestro-link-coordinate/SKILL.md +224 -220
  49. package/.codex/skills/maestro-merge/SKILL.md +69 -0
  50. package/.codex/skills/maestro-milestone-audit/SKILL.md +108 -103
  51. package/.codex/skills/maestro-milestone-complete/SKILL.md +155 -149
  52. package/.codex/skills/maestro-milestone-release/SKILL.md +70 -0
  53. package/.codex/skills/maestro-overlay/SKILL.md +188 -185
  54. package/.codex/skills/maestro-plan/SKILL.md +58 -69
  55. package/.codex/skills/maestro-quick/SKILL.md +26 -23
  56. package/.codex/skills/maestro-roadmap/SKILL.md +65 -73
  57. package/.codex/skills/maestro-spec-generate/SKILL.md +66 -74
  58. package/.codex/skills/maestro-ui-design/SKILL.md +35 -32
  59. package/.codex/skills/maestro-verify/SKILL.md +556 -566
  60. package/.codex/skills/manage-codebase-rebuild/SKILL.md +397 -405
  61. package/.codex/skills/manage-codebase-refresh/SKILL.md +93 -82
  62. package/.codex/skills/manage-harvest/SKILL.md +82 -0
  63. package/.codex/skills/manage-issue/SKILL.md +80 -65
  64. package/.codex/skills/manage-issue-discover/SKILL.md +491 -503
  65. package/.codex/skills/manage-learn/SKILL.md +190 -186
  66. package/.codex/skills/manage-memory/SKILL.md +95 -72
  67. package/.codex/skills/manage-memory-capture/SKILL.md +99 -86
  68. package/.codex/skills/manage-status/SKILL.md +102 -89
  69. package/.codex/skills/quality-business-test/SKILL.md +228 -223
  70. package/.codex/skills/quality-debug/SKILL.md +54 -66
  71. package/.codex/skills/quality-integration-test/SKILL.md +532 -544
  72. package/.codex/skills/quality-refactor/SKILL.md +197 -191
  73. package/.codex/skills/quality-retrospective/SKILL.md +512 -505
  74. package/.codex/skills/quality-review/SKILL.md +95 -107
  75. package/.codex/skills/quality-sync/SKILL.md +101 -89
  76. package/.codex/skills/quality-test/SKILL.md +202 -198
  77. package/.codex/skills/quality-test-gen/SKILL.md +94 -105
  78. package/.codex/skills/spec-add/SKILL.md +58 -39
  79. package/.codex/skills/spec-load/SKILL.md +45 -40
  80. package/.codex/skills/spec-map/SKILL.md +180 -182
  81. package/.codex/skills/spec-setup/SKILL.md +94 -76
  82. package/.codex/skills/team-coordinate/SKILL.md +346 -357
  83. package/.codex/skills/team-executor/SKILL.md +70 -112
  84. package/.codex/skills/team-lifecycle-v4/SKILL.md +311 -299
  85. package/.codex/skills/team-quality-assurance/SKILL.md +234 -227
  86. package/.codex/skills/team-review/SKILL.md +232 -225
  87. package/.codex/skills/team-tech-debt/SKILL.md +78 -100
  88. package/.codex/skills/team-testing/SKILL.md +242 -235
  89. package/.codex/skills/wiki-connect/SKILL.md +75 -0
  90. package/.codex/skills/wiki-digest/SKILL.md +87 -0
  91. package/README.md +9 -4
  92. package/README.zh-CN.md +9 -4
  93. package/dashboard/dist/assets/{ArtifactsPage-DZNCi6tn.js → ArtifactsPage-CUrrDGgN.js} +1 -1
  94. package/dashboard/dist/assets/ChatInput-pUOLJIKE.js +49 -0
  95. package/dashboard/dist/assets/ChatPage-B8Xqkt0v.js +27 -0
  96. package/dashboard/dist/assets/{CollabPage-B4NAHXS2.js → CollabPage-DIUXeazv.js} +1 -1
  97. package/dashboard/dist/assets/{ExecutionPanel-CFt4LJyq.js → ExecutionPanel-VmYeADFj.js} +1 -1
  98. package/dashboard/dist/assets/KanbanPage-DLq8v7hg.js +21 -0
  99. package/dashboard/dist/assets/{MarkdownRenderer-X4af_WNb.js → MarkdownRenderer-D7AehrnR.js} +1 -1
  100. package/dashboard/dist/assets/{McpPage-BKfCVIyU.js → McpPage-BY0SjTgw.js} +2 -2
  101. package/dashboard/dist/assets/{OutputPanel-BlBQFJSW.js → OutputPanel-B-Rjwgmv.js} +1 -1
  102. package/dashboard/dist/assets/{ProblemsPanel-De3DLvoI.js → ProblemsPanel-GEpF-oi4.js} +1 -1
  103. package/dashboard/dist/assets/RequirementBoardPage-xs8uDM7I.js +6 -0
  104. package/dashboard/dist/assets/{RequirementPage-Bllxe2XI.js → RequirementPage-BKDSFwjA.js} +5 -10
  105. package/dashboard/dist/assets/SpecsPage-DLFb9ZH0.js +36 -0
  106. package/dashboard/dist/assets/SupervisorPage-SOki_kgz.js +6 -0
  107. package/dashboard/dist/assets/TeamsPage-BO2kP70F.js +11 -0
  108. package/dashboard/dist/assets/{TreeBrowser-Q12qobZs.js → TreeBrowser-B9DHdULE.js} +1 -1
  109. package/dashboard/dist/assets/{WorkflowPage-D_Fzdy3_.js → WorkflowPage-C8hWbYim.js} +1 -1
  110. package/dashboard/dist/assets/{check-u6fGOwQO.js → check-DJDk3A2a.js} +1 -1
  111. package/dashboard/dist/assets/{chevron-right-Csu22t58.js → chevron-right-C7bVDreZ.js} +1 -1
  112. package/dashboard/dist/assets/{circle-CMrkbRNg.js → circle-Qfgy4LB_.js} +1 -1
  113. package/dashboard/dist/assets/{circle-alert-c3tH1P4z.js → circle-alert-Na1vf6qQ.js} +1 -1
  114. package/dashboard/dist/assets/{circle-check-gYxxSYuH.js → circle-check-CEGgy3NV.js} +1 -1
  115. package/dashboard/dist/assets/{circle-check-big-TDSeWstm.js → circle-check-big-3JB8zRYj.js} +1 -1
  116. package/dashboard/dist/assets/{code-CFN2uX9V.js → code-Ble63Idz.js} +1 -1
  117. package/dashboard/dist/assets/{columns-3-38xIDlzy.js → columns-3-BUcKlxve.js} +1 -1
  118. package/dashboard/dist/assets/{download-DC7KkKyP.js → download-CMqkfn8x.js} +1 -1
  119. package/dashboard/dist/assets/{folder-CWq_lAnf.js → folder-B9ewx9LL.js} +1 -1
  120. package/dashboard/dist/assets/index-C2Mcb4TJ.js +231 -0
  121. package/dashboard/dist/assets/index-DyBbPc18.css +1 -0
  122. package/dashboard/dist/assets/{index-Do71weNR.js → index-JTmGteaT.js} +1 -1
  123. package/dashboard/dist/assets/{list-CgIP_2A-.js → list-DI8Wn2aT.js} +1 -1
  124. package/dashboard/dist/assets/loader-B5F6PzFT.js +11 -0
  125. package/dashboard/dist/assets/{minus-DYoN5UGk.js → minus-Lp_BfctG.js} +1 -1
  126. package/dashboard/dist/assets/{pen-line-Bh_WKYHm.js → pen-line-Ch7sphzZ.js} +1 -1
  127. package/dashboard/dist/assets/pencil-_yRMHmGT.js +6 -0
  128. package/dashboard/dist/assets/{proxy-BKxDAKTj.js → proxy-D72Y8a4Y.js} +1 -1
  129. package/dashboard/dist/assets/{search-SieXnOgr.js → search-BS6fI6Bg.js} +1 -1
  130. package/dashboard/dist/assets/{shallow-Bme1JY57.js → shallow-BXasQBvr.js} +1 -1
  131. package/dashboard/dist/assets/table-CeGlFjlP.js +6 -0
  132. package/dashboard/dist/assets/{terminal-BB3Xfuv5.js → terminal-BJic2yW-.js} +1 -1
  133. package/dashboard/dist/assets/{trash-2-C8f4vFFM.js → trash-2-Czz4X8Fb.js} +1 -1
  134. package/dashboard/dist/assets/{zap-4uwlzVm0.js → zap-C3H0jVFA.js} +1 -1
  135. package/dashboard/dist/index.html +2 -2
  136. package/dashboard/dist-server/dashboard/src/server/agents/agent-manager.js +16 -1
  137. package/dashboard/dist-server/dashboard/src/server/agents/agent-manager.js.map +1 -1
  138. package/dashboard/dist-server/dashboard/src/server/agents/delegate-broker-monitor.js +1 -2
  139. package/dashboard/dist-server/dashboard/src/server/agents/delegate-broker-monitor.js.map +1 -1
  140. package/dashboard/dist-server/dashboard/src/server/commander/commander-prompts.d.ts +1 -1
  141. package/dashboard/dist-server/dashboard/src/server/commander/commander-prompts.js +2 -1
  142. package/dashboard/dist-server/dashboard/src/server/commander/commander-prompts.js.map +1 -1
  143. package/dashboard/dist-server/dashboard/src/server/index.js +3 -0
  144. package/dashboard/dist-server/dashboard/src/server/index.js.map +1 -1
  145. package/dashboard/dist-server/dashboard/src/server/routes/collab.js +124 -0
  146. package/dashboard/dist-server/dashboard/src/server/routes/collab.js.map +1 -1
  147. package/dashboard/dist-server/dashboard/src/server/routes/specs.d.ts +1 -1
  148. package/dashboard/dist-server/dashboard/src/server/routes/specs.js +75 -30
  149. package/dashboard/dist-server/dashboard/src/server/routes/specs.js.map +1 -1
  150. package/dashboard/dist-server/dashboard/src/server/state/event-bus.d.ts +5 -0
  151. package/dashboard/dist-server/dashboard/src/server/state/event-bus.js +5 -0
  152. package/dashboard/dist-server/dashboard/src/server/state/event-bus.js.map +1 -1
  153. package/dashboard/dist-server/dashboard/src/server/ws/handlers/team-handler.d.ts +10 -0
  154. package/dashboard/dist-server/dashboard/src/server/ws/handlers/team-handler.js +73 -0
  155. package/dashboard/dist-server/dashboard/src/server/ws/handlers/team-handler.js.map +1 -0
  156. package/dashboard/dist-server/dashboard/src/shared/collab-types.d.ts +31 -0
  157. package/dashboard/dist-server/dashboard/src/shared/collab-types.js +28 -0
  158. package/dashboard/dist-server/dashboard/src/shared/collab-types.js.map +1 -1
  159. package/dashboard/dist-server/dashboard/src/shared/constants.js +10 -0
  160. package/dashboard/dist-server/dashboard/src/shared/constants.js.map +1 -1
  161. package/dashboard/dist-server/dashboard/src/shared/coordinate-types.d.ts +22 -0
  162. package/dashboard/dist-server/dashboard/src/shared/issue-types.d.ts +12 -0
  163. package/dashboard/dist-server/dashboard/src/shared/issue-types.js +12 -0
  164. package/dashboard/dist-server/dashboard/src/shared/issue-types.js.map +1 -1
  165. package/dashboard/dist-server/dashboard/src/shared/team-types.d.ts +22 -0
  166. package/dashboard/dist-server/dashboard/src/shared/team-types.js +7 -0
  167. package/dashboard/dist-server/dashboard/src/shared/team-types.js.map +1 -1
  168. package/dashboard/dist-server/dashboard/src/shared/types.d.ts +3 -2
  169. package/dashboard/dist-server/dashboard/src/shared/ws-protocol.d.ts +28 -2
  170. package/dashboard/dist-server/dashboard/src/shared/ws-protocol.js.map +1 -1
  171. package/dashboard/dist-server/shared/agent-types.d.ts +4 -0
  172. package/dashboard/dist-server/src/hooks/constants.d.ts +3 -1
  173. package/dashboard/dist-server/src/hooks/constants.js +4 -2
  174. package/dashboard/dist-server/src/hooks/constants.js.map +1 -1
  175. package/dist/shared/agent-types.d.ts +4 -0
  176. package/dist/shared/agent-types.d.ts.map +1 -1
  177. package/dist/src/commands/collab.js +4 -4
  178. package/dist/src/commands/collab.js.map +1 -1
  179. package/dist/src/commands/hooks.d.ts.map +1 -1
  180. package/dist/src/commands/hooks.js +66 -1
  181. package/dist/src/commands/hooks.js.map +1 -1
  182. package/dist/src/commands/install-backend.d.ts.map +1 -1
  183. package/dist/src/commands/install-backend.js +29 -18
  184. package/dist/src/commands/install-backend.js.map +1 -1
  185. package/dist/src/commands/spec.d.ts.map +1 -1
  186. package/dist/src/commands/spec.js +7 -2
  187. package/dist/src/commands/spec.js.map +1 -1
  188. package/dist/src/hooks/__tests__/statusline-visual-test.js +23 -1
  189. package/dist/src/hooks/__tests__/statusline-visual-test.js.map +1 -1
  190. package/dist/src/hooks/constants.d.ts +3 -1
  191. package/dist/src/hooks/constants.d.ts.map +1 -1
  192. package/dist/src/hooks/constants.js +4 -2
  193. package/dist/src/hooks/constants.js.map +1 -1
  194. package/dist/src/hooks/guards/index.d.ts +1 -0
  195. package/dist/src/hooks/guards/index.d.ts.map +1 -1
  196. package/dist/src/hooks/guards/index.js +1 -0
  197. package/dist/src/hooks/guards/index.js.map +1 -1
  198. package/dist/src/hooks/guards/spec-validator.d.ts +25 -0
  199. package/dist/src/hooks/guards/spec-validator.d.ts.map +1 -0
  200. package/dist/src/hooks/guards/spec-validator.js +66 -0
  201. package/dist/src/hooks/guards/spec-validator.js.map +1 -0
  202. package/dist/src/hooks/keyword-spec-injector.d.ts +21 -0
  203. package/dist/src/hooks/keyword-spec-injector.d.ts.map +1 -0
  204. package/dist/src/hooks/keyword-spec-injector.js +96 -0
  205. package/dist/src/hooks/keyword-spec-injector.js.map +1 -0
  206. package/dist/src/hooks/plugins/spec-injection-plugin.d.ts +2 -1
  207. package/dist/src/hooks/plugins/spec-injection-plugin.d.ts.map +1 -1
  208. package/dist/src/hooks/plugins/spec-injection-plugin.js +21 -12
  209. package/dist/src/hooks/plugins/spec-injection-plugin.js.map +1 -1
  210. package/dist/src/hooks/skill-context.d.ts +3 -0
  211. package/dist/src/hooks/skill-context.d.ts.map +1 -1
  212. package/dist/src/hooks/skill-context.js +95 -9
  213. package/dist/src/hooks/skill-context.js.map +1 -1
  214. package/dist/src/hooks/spec-bridge.d.ts +40 -0
  215. package/dist/src/hooks/spec-bridge.d.ts.map +1 -0
  216. package/dist/src/hooks/spec-bridge.js +97 -0
  217. package/dist/src/hooks/spec-bridge.js.map +1 -0
  218. package/dist/src/hooks/spec-injector.d.ts.map +1 -1
  219. package/dist/src/hooks/spec-injector.js +18 -12
  220. package/dist/src/hooks/spec-injector.js.map +1 -1
  221. package/dist/src/hooks/statusline.d.ts.map +1 -1
  222. package/dist/src/hooks/statusline.js +6 -3
  223. package/dist/src/hooks/statusline.js.map +1 -1
  224. package/dist/src/team/phase-orchestrator.d.ts +52 -0
  225. package/dist/src/team/phase-orchestrator.d.ts.map +1 -0
  226. package/dist/src/team/phase-orchestrator.js +165 -0
  227. package/dist/src/team/phase-orchestrator.js.map +1 -0
  228. package/dist/src/team/phase-types.d.ts +51 -0
  229. package/dist/src/team/phase-types.d.ts.map +1 -0
  230. package/dist/src/team/phase-types.js +41 -0
  231. package/dist/src/team/phase-types.js.map +1 -0
  232. package/dist/src/tools/index.d.ts.map +1 -1
  233. package/dist/src/tools/index.js +6 -0
  234. package/dist/src/tools/index.js.map +1 -1
  235. package/dist/src/tools/merge-validator.d.ts.map +1 -1
  236. package/dist/src/tools/merge-validator.js +114 -16
  237. package/dist/src/tools/merge-validator.js.map +1 -1
  238. package/dist/src/tools/spec-entry-parser.d.ts +56 -0
  239. package/dist/src/tools/spec-entry-parser.d.ts.map +1 -0
  240. package/dist/src/tools/spec-entry-parser.js +196 -0
  241. package/dist/src/tools/spec-entry-parser.js.map +1 -0
  242. package/dist/src/tools/spec-init.d.ts.map +1 -1
  243. package/dist/src/tools/spec-init.js +66 -92
  244. package/dist/src/tools/spec-init.js.map +1 -1
  245. package/dist/src/tools/spec-keyword-index.d.ts +30 -0
  246. package/dist/src/tools/spec-keyword-index.d.ts.map +1 -0
  247. package/dist/src/tools/spec-keyword-index.js +101 -0
  248. package/dist/src/tools/spec-keyword-index.js.map +1 -0
  249. package/dist/src/tools/spec-loader.d.ts +3 -3
  250. package/dist/src/tools/spec-loader.d.ts.map +1 -1
  251. package/dist/src/tools/spec-loader.js +49 -23
  252. package/dist/src/tools/spec-loader.js.map +1 -1
  253. package/dist/src/tools/team-agents.d.ts +27 -0
  254. package/dist/src/tools/team-agents.d.ts.map +1 -0
  255. package/dist/src/tools/team-agents.js +362 -0
  256. package/dist/src/tools/team-agents.js.map +1 -0
  257. package/dist/src/tools/team-mailbox.d.ts +40 -0
  258. package/dist/src/tools/team-mailbox.d.ts.map +1 -0
  259. package/dist/src/tools/team-mailbox.js +384 -0
  260. package/dist/src/tools/team-mailbox.js.map +1 -0
  261. package/dist/src/tools/team-msg.d.ts +17 -8
  262. package/dist/src/tools/team-msg.d.ts.map +1 -1
  263. package/dist/src/tools/team-msg.js +110 -13
  264. package/dist/src/tools/team-msg.js.map +1 -1
  265. package/dist/src/tools/team-tasks-mcp.d.ts +27 -0
  266. package/dist/src/tools/team-tasks-mcp.d.ts.map +1 -0
  267. package/dist/src/tools/team-tasks-mcp.js +408 -0
  268. package/dist/src/tools/team-tasks-mcp.js.map +1 -0
  269. package/package.json +2 -1
  270. package/shared/agent-types.ts +4 -0
  271. package/templates/worktree-scope.json +9 -10
  272. package/templates/worktrees.json +26 -27
  273. package/workflows/analyze.md +816 -816
  274. package/workflows/brainstorm.md +480 -471
  275. package/workflows/codebase-rebuild.md +332 -332
  276. package/workflows/codebase-refresh.md +240 -240
  277. package/workflows/debug.md +16 -6
  278. package/workflows/execute.md +1 -1
  279. package/workflows/fork.md +100 -36
  280. package/workflows/harvest.md +420 -420
  281. package/workflows/integration-test.md +355 -343
  282. package/workflows/issue-discover.md +414 -414
  283. package/workflows/issue.md +14 -4
  284. package/workflows/learn.md +19 -5
  285. package/workflows/maestro.md +1 -0
  286. package/workflows/map.md +111 -111
  287. package/workflows/merge.md +113 -55
  288. package/workflows/milestone-complete.md +176 -176
  289. package/workflows/plan.md +1 -1
  290. package/workflows/quick.md +497 -497
  291. package/workflows/refactor.md +300 -300
  292. package/workflows/retrospective.md +61 -22
  293. package/workflows/review.md +17 -4
  294. package/workflows/roadmap.md +335 -335
  295. package/workflows/spec-generate.md +640 -640
  296. package/workflows/specs-add.md +46 -81
  297. package/workflows/specs-load.md +15 -17
  298. package/workflows/specs-setup.md +40 -161
  299. package/workflows/test.md +12 -2
  300. package/workflows/ui-style.md +9 -2
  301. package/dashboard/dist/assets/ChatInput-Bvr-FeEq.js +0 -49
  302. package/dashboard/dist/assets/ChatPage-D9zTkJZo.js +0 -22
  303. package/dashboard/dist/assets/KanbanPage-C8USth6H.js +0 -21
  304. package/dashboard/dist/assets/RequirementBoardPage-Bf1trzqs.js +0 -11
  305. package/dashboard/dist/assets/SpecsPage-9lwxKT27.js +0 -36
  306. package/dashboard/dist/assets/SupervisorPage-SusdfHFq.js +0 -6
  307. package/dashboard/dist/assets/TeamsPage-DsuM6OwC.js +0 -6
  308. package/dashboard/dist/assets/arrow-left-Bqtb2hle.js +0 -6
  309. package/dashboard/dist/assets/index-DWG-WrzT.js +0 -231
  310. package/dashboard/dist/assets/index-GUNJodSR.css +0 -1
  311. package/dashboard/dist/assets/table-llyEtj-7.js +0 -6
@@ -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
+ ```