maestro-flow 0.3.7 → 0.3.9

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 (254) hide show
  1. package/.claude/commands/learn-decompose.md +3 -3
  2. package/.claude/commands/learn-follow.md +5 -5
  3. package/.claude/commands/learn-investigate.md +3 -3
  4. package/.claude/commands/learn-retro.md +303 -0
  5. package/.claude/commands/learn-second-opinion.md +3 -3
  6. package/.claude/commands/maestro-analyze.md +123 -99
  7. package/.claude/commands/maestro-brainstorm.md +2 -2
  8. package/.claude/commands/maestro-execute.md +137 -96
  9. package/.claude/commands/maestro-fork.md +111 -0
  10. package/.claude/commands/maestro-init.md +6 -6
  11. package/.claude/commands/maestro-learn.md +74 -298
  12. package/.claude/commands/maestro-merge.md +77 -0
  13. package/.claude/commands/maestro-milestone-audit.md +72 -60
  14. package/.claude/commands/maestro-milestone-complete.md +67 -59
  15. package/.claude/commands/maestro-milestone-release.md +6 -6
  16. package/.claude/commands/maestro-plan.md +151 -130
  17. package/.claude/commands/maestro-quick.md +4 -4
  18. package/.claude/commands/maestro-roadmap.md +5 -5
  19. package/.claude/commands/maestro-spec-generate.md +5 -5
  20. package/.claude/commands/maestro-ui-design.md +3 -3
  21. package/.claude/commands/maestro-verify.md +106 -87
  22. package/.claude/commands/maestro.md +10 -4
  23. package/.claude/commands/manage-codebase-rebuild.md +4 -4
  24. package/.claude/commands/manage-codebase-refresh.md +1 -1
  25. package/.claude/commands/manage-harvest.md +5 -5
  26. package/.claude/commands/manage-issue-discover.md +1 -1
  27. package/.claude/commands/manage-issue-execute.md +6 -6
  28. package/.claude/commands/manage-issue.md +6 -6
  29. package/.claude/commands/manage-learn.md +23 -17
  30. package/.claude/commands/manage-memory-capture.md +15 -17
  31. package/.claude/commands/manage-memory.md +3 -3
  32. package/.claude/commands/manage-status.md +24 -24
  33. package/.claude/commands/quality-business-test.md +5 -5
  34. package/.claude/commands/quality-debug.md +4 -4
  35. package/.claude/commands/quality-integration-test.md +4 -4
  36. package/.claude/commands/quality-refactor.md +3 -3
  37. package/.claude/commands/quality-retrospective.md +7 -7
  38. package/.claude/commands/quality-review.md +4 -4
  39. package/.claude/commands/quality-sync.md +3 -3
  40. package/.claude/commands/quality-test-gen.md +4 -4
  41. package/.claude/commands/quality-test.md +9 -9
  42. package/.claude/commands/spec-add.md +2 -2
  43. package/.claude/commands/spec-load.md +8 -3
  44. package/.claude/commands/spec-setup.md +5 -5
  45. package/.claude/commands/wiki-connect.md +3 -3
  46. package/.claude/commands/wiki-digest.md +30 -5
  47. package/.codex/skills/maestro-analyze/SKILL.md +52 -14
  48. package/.codex/skills/maestro-execute/SKILL.md +27 -26
  49. package/.codex/skills/maestro-milestone-audit/SKILL.md +103 -209
  50. package/.codex/skills/maestro-milestone-complete/SKILL.md +149 -158
  51. package/.codex/skills/maestro-plan/SKILL.md +47 -17
  52. package/.codex/skills/maestro-roadmap/SKILL.md +3 -2
  53. package/.codex/skills/team-coordinate/roles/coordinator/commands/monitor.md +2 -2
  54. package/.codex/skills/team-executor/roles/executor/commands/monitor.md +1 -1
  55. package/.codex/skills/team-lifecycle-v4/roles/coordinator/commands/monitor.md +2 -2
  56. package/.codex/skills/team-lifecycle-v4/specs/knowledge-transfer.md +2 -2
  57. package/.codex/skills/team-quality-assurance/roles/coordinator/commands/monitor.md +1 -1
  58. package/.codex/skills/team-review/roles/coordinator/commands/monitor.md +1 -1
  59. package/.codex/skills/team-tech-debt/roles/coordinator/commands/monitor.md +1 -1
  60. package/.codex/skills/team-testing/roles/coordinator/commands/monitor.md +1 -1
  61. package/README.md +115 -227
  62. package/README.zh-CN.md +169 -187
  63. package/bin/maestro-mcp.js +1 -1
  64. package/chains/_intent-map.json +21 -9
  65. package/chains/_router.json +30 -77
  66. package/chains/brainstorm-driven.json +17 -6
  67. package/chains/full-lifecycle.json +22 -23
  68. package/chains/milestone-close.json +20 -7
  69. package/chains/milestone-fork-merge.json +50 -0
  70. package/chains/roadmap-driven.json +17 -6
  71. package/chains/spec-driven.json +17 -6
  72. package/dashboard/dist/assets/{ArtifactsPage-A9yzYtpj.js → ArtifactsPage-DZNCi6tn.js} +12 -7
  73. package/dashboard/dist/assets/ChatInput-Bvr-FeEq.js +49 -0
  74. package/dashboard/dist/assets/ChatPage-D9zTkJZo.js +22 -0
  75. package/dashboard/dist/assets/CollabPage-B4NAHXS2.js +1 -0
  76. package/dashboard/dist/assets/ExecutionPanel-CFt4LJyq.js +1 -0
  77. package/dashboard/dist/assets/KanbanPage-C8USth6H.js +21 -0
  78. package/dashboard/dist/assets/{MarkdownRenderer-CCXHaut3.js → MarkdownRenderer-X4af_WNb.js} +1 -1
  79. package/dashboard/dist/assets/McpPage-BKfCVIyU.js +21 -0
  80. package/dashboard/dist/assets/OutputPanel-BlBQFJSW.js +1 -0
  81. package/dashboard/dist/assets/ProblemsPanel-De3DLvoI.js +1 -0
  82. package/dashboard/dist/assets/{RequirementBoardPage-CEOvppGn.js → RequirementBoardPage-Bf1trzqs.js} +2 -2
  83. package/dashboard/dist/assets/{RequirementPage-DpnbTEqY.js → RequirementPage-Bllxe2XI.js} +10 -5
  84. package/dashboard/dist/assets/{SpecsPage-CYqOfFkB.js → SpecsPage-9lwxKT27.js} +2 -2
  85. package/dashboard/dist/assets/{SupervisorPage-B2sZwkq8.js → SupervisorPage-SusdfHFq.js} +1 -1
  86. package/dashboard/dist/assets/{TeamsPage-CkZdCAVZ.js → TeamsPage-DsuM6OwC.js} +2 -2
  87. package/dashboard/dist/assets/TreeBrowser-Q12qobZs.js +6 -0
  88. package/dashboard/dist/assets/WorkflowPage-D_Fzdy3_.js +6 -0
  89. package/dashboard/dist/assets/{arrow-left-6fktHyjN.js → arrow-left-Bqtb2hle.js} +1 -1
  90. package/dashboard/dist/assets/{check-Cbxq2l1-.js → check-u6fGOwQO.js} +1 -1
  91. package/dashboard/dist/assets/{chevron-right-Yts3bi8p.js → chevron-right-Csu22t58.js} +1 -1
  92. package/dashboard/dist/assets/{circle-4Ci4Xolf.js → circle-CMrkbRNg.js} +1 -1
  93. package/dashboard/dist/assets/{circle-alert-B25g9BTL.js → circle-alert-c3tH1P4z.js} +1 -1
  94. package/dashboard/dist/assets/{circle-check-big-DzO2BlL7.js → circle-check-big-TDSeWstm.js} +1 -1
  95. package/dashboard/dist/assets/{circle-check-BA5_XqeV.js → circle-check-gYxxSYuH.js} +1 -1
  96. package/dashboard/dist/assets/{code-zxwuybO8.js → code-CFN2uX9V.js} +1 -1
  97. package/dashboard/dist/assets/{columns-3-DV4oeCfU.js → columns-3-38xIDlzy.js} +1 -1
  98. package/dashboard/dist/assets/{download-CXCyQw8M.js → download-DC7KkKyP.js} +1 -1
  99. package/dashboard/dist/assets/{folder-Bvjj8Vn9.js → folder-CWq_lAnf.js} +1 -1
  100. package/dashboard/dist/assets/index-DWG-WrzT.js +231 -0
  101. package/dashboard/dist/assets/{index-BvScJmJM.js → index-Do71weNR.js} +1 -1
  102. package/dashboard/dist/assets/index-GUNJodSR.css +1 -0
  103. package/dashboard/dist/assets/{list-Dj4i9N75.js → list-CgIP_2A-.js} +1 -1
  104. package/dashboard/dist/assets/{minus-DwlFabsT.js → minus-DYoN5UGk.js} +1 -1
  105. package/dashboard/dist/assets/{pen-line-D7UzECt6.js → pen-line-Bh_WKYHm.js} +1 -1
  106. package/dashboard/dist/assets/{proxy-B9XRqHD9.js → proxy-BKxDAKTj.js} +1 -1
  107. package/dashboard/dist/assets/{search-BQbBTIYl.js → search-SieXnOgr.js} +1 -1
  108. package/dashboard/dist/assets/{shallow-Clb1Lyd_.js → shallow-Bme1JY57.js} +1 -1
  109. package/dashboard/dist/assets/{table-BqxCXid2.js → table-llyEtj-7.js} +1 -1
  110. package/dashboard/dist/assets/terminal-BB3Xfuv5.js +6 -0
  111. package/dashboard/dist/assets/{trash-2-6rN9B-EQ.js → trash-2-C8f4vFFM.js} +1 -1
  112. package/dashboard/dist/assets/{zap-DxUhG-gk.js → zap-4uwlzVm0.js} +1 -1
  113. package/dashboard/dist/index.html +2 -2
  114. package/dashboard/dist-server/dashboard/src/server/agents/agent-sdk-adapter.d.ts +1 -1
  115. package/dashboard/dist-server/dashboard/src/server/agents/agent-sdk-adapter.js +5 -4
  116. package/dashboard/dist-server/dashboard/src/server/agents/agent-sdk-adapter.js.map +1 -1
  117. package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.js +8 -4
  118. package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.js.map +1 -1
  119. package/dashboard/dist-server/dashboard/src/server/agents/entry-normalizer.d.ts +1 -0
  120. package/dashboard/dist-server/dashboard/src/server/agents/entry-normalizer.js +2 -1
  121. package/dashboard/dist-server/dashboard/src/server/agents/entry-normalizer.js.map +1 -1
  122. package/dashboard/dist-server/dashboard/src/server/agents/stream-json-adapter.js +20 -10
  123. package/dashboard/dist-server/dashboard/src/server/agents/stream-json-adapter.js.map +1 -1
  124. package/dashboard/dist-server/dashboard/src/server/agents/tools/issue-mcp-server.d.ts +1 -1
  125. package/dashboard/dist-server/dashboard/src/server/agents/tools/issue-mcp-server.js +3 -4
  126. package/dashboard/dist-server/dashboard/src/server/agents/tools/issue-mcp-server.js.map +1 -1
  127. package/dashboard/dist-server/dashboard/src/server/agents/tools/issue-mcp-server.test.js +4 -4
  128. package/dashboard/dist-server/dashboard/src/server/agents/tools/issue-mcp-server.test.js.map +1 -1
  129. package/dashboard/dist-server/dashboard/src/server/commander/commander-agent.js +4 -3
  130. package/dashboard/dist-server/dashboard/src/server/commander/commander-agent.js.map +1 -1
  131. package/dashboard/dist-server/dashboard/src/server/commander/commander-agent.test.js +20 -7
  132. package/dashboard/dist-server/dashboard/src/server/commander/commander-agent.test.js.map +1 -1
  133. package/dashboard/dist-server/dashboard/src/server/execution/wave-executor.d.ts +1 -1
  134. package/dashboard/dist-server/dashboard/src/server/execution/wave-executor.js +4 -4
  135. package/dashboard/dist-server/dashboard/src/server/execution/wave-executor.js.map +1 -1
  136. package/dashboard/dist-server/dashboard/src/server/index.js +2 -1
  137. package/dashboard/dist-server/dashboard/src/server/index.js.map +1 -1
  138. package/dashboard/dist-server/dashboard/src/server/routes/git.d.ts +2 -0
  139. package/dashboard/dist-server/dashboard/src/server/routes/git.js +79 -0
  140. package/dashboard/dist-server/dashboard/src/server/routes/git.js.map +1 -0
  141. package/dashboard/dist-server/dashboard/src/server/routes/index.js +3 -0
  142. package/dashboard/dist-server/dashboard/src/server/routes/index.js.map +1 -1
  143. package/dashboard/dist-server/dashboard/src/server/routes/issues.js +14 -14
  144. package/dashboard/dist-server/dashboard/src/server/routes/issues.js.map +1 -1
  145. package/dashboard/dist-server/dashboard/src/server/routes/linear.js +7 -5
  146. package/dashboard/dist-server/dashboard/src/server/routes/linear.js.map +1 -1
  147. package/dashboard/dist-server/dashboard/src/server/routes/workspace.js +43 -0
  148. package/dashboard/dist-server/dashboard/src/server/routes/workspace.js.map +1 -1
  149. package/dashboard/dist-server/dashboard/src/server/state/state-manager.js +186 -25
  150. package/dashboard/dist-server/dashboard/src/server/state/state-manager.js.map +1 -1
  151. package/dashboard/dist-server/dashboard/src/server/utils/issue-store.d.ts +6 -0
  152. package/dashboard/dist-server/dashboard/src/server/utils/issue-store.js +24 -2
  153. package/dashboard/dist-server/dashboard/src/server/utils/issue-store.js.map +1 -1
  154. package/dashboard/dist-server/dashboard/src/server/ws/handlers/execution-handler.js +4 -7
  155. package/dashboard/dist-server/dashboard/src/server/ws/handlers/execution-handler.js.map +1 -1
  156. package/dashboard/dist-server/dashboard/src/shared/constants.js +2 -1
  157. package/dashboard/dist-server/dashboard/src/shared/constants.js.map +1 -1
  158. package/dashboard/dist-server/dashboard/src/shared/constants.test.js +5 -5
  159. package/dashboard/dist-server/dashboard/src/shared/constants.test.js.map +1 -1
  160. package/dashboard/dist-server/dashboard/src/shared/issue-types.test.js +4 -4
  161. package/dashboard/dist-server/dashboard/src/shared/issue-types.test.js.map +1 -1
  162. package/dashboard/dist-server/src/commands/delegate.js +7 -1
  163. package/dashboard/dist-server/src/commands/delegate.js.map +1 -1
  164. package/dashboard/package.json +59 -59
  165. package/dist/src/cli.js +3 -1
  166. package/dist/src/cli.js.map +1 -1
  167. package/dist/src/commands/{team.d.ts → collab.d.ts} +2 -2
  168. package/dist/src/commands/collab.d.ts.map +1 -0
  169. package/dist/src/commands/{team.js → collab.js} +391 -24
  170. package/dist/src/commands/collab.js.map +1 -0
  171. package/dist/src/commands/delegate.d.ts.map +1 -1
  172. package/dist/src/commands/delegate.js +7 -1
  173. package/dist/src/commands/delegate.js.map +1 -1
  174. package/dist/src/commands/msg.d.ts.map +1 -1
  175. package/dist/src/commands/msg.js +4 -3
  176. package/dist/src/commands/msg.js.map +1 -1
  177. package/dist/src/hooks/team-monitor.d.ts.map +1 -1
  178. package/dist/src/hooks/team-monitor.js +16 -0
  179. package/dist/src/hooks/team-monitor.js.map +1 -1
  180. package/dist/src/tools/collab-adapter.d.ts +85 -0
  181. package/dist/src/tools/collab-adapter.d.ts.map +1 -0
  182. package/dist/src/tools/collab-adapter.js +320 -0
  183. package/dist/src/tools/collab-adapter.js.map +1 -0
  184. package/dist/src/tools/namespace-guard.d.ts +2 -0
  185. package/dist/src/tools/namespace-guard.d.ts.map +1 -1
  186. package/dist/src/tools/namespace-guard.js +12 -0
  187. package/dist/src/tools/namespace-guard.js.map +1 -1
  188. package/dist/src/tools/phase-gate-evaluator.d.ts +45 -0
  189. package/dist/src/tools/phase-gate-evaluator.d.ts.map +1 -0
  190. package/dist/src/tools/phase-gate-evaluator.js +42 -0
  191. package/dist/src/tools/phase-gate-evaluator.js.map +1 -0
  192. package/dist/src/tools/team-members.d.ts +18 -0
  193. package/dist/src/tools/team-members.d.ts.map +1 -1
  194. package/dist/src/tools/team-members.js +50 -0
  195. package/dist/src/tools/team-members.js.map +1 -1
  196. package/dist/src/tools/team-tasks.d.ts +120 -0
  197. package/dist/src/tools/team-tasks.d.ts.map +1 -0
  198. package/dist/src/tools/team-tasks.js +365 -0
  199. package/dist/src/tools/team-tasks.js.map +1 -0
  200. package/dist/src/tools/transition-recorder.d.ts +3 -0
  201. package/dist/src/tools/transition-recorder.d.ts.map +1 -1
  202. package/dist/src/tools/transition-recorder.js +52 -1
  203. package/dist/src/tools/transition-recorder.js.map +1 -1
  204. package/dist/src/utils/get-version.d.ts.map +1 -1
  205. package/dist/src/utils/get-version.js +15 -4
  206. package/dist/src/utils/get-version.js.map +1 -1
  207. package/package.json +1 -1
  208. package/templates/config.json +7 -0
  209. package/templates/worktree-scope.json +10 -0
  210. package/templates/worktrees.json +27 -0
  211. package/workflows/analyze.md +86 -36
  212. package/workflows/brainstorm.md +17 -37
  213. package/workflows/delegate-usage.md +39 -41
  214. package/workflows/execute.md +247 -61
  215. package/workflows/fork.md +309 -0
  216. package/workflows/init.md +11 -2
  217. package/workflows/issue.md +66 -7
  218. package/workflows/maestro-coordinate.codex.md +1 -1
  219. package/workflows/maestro-coordinate.md +24 -17
  220. package/workflows/maestro.md +54 -37
  221. package/workflows/memory.md +2 -1
  222. package/workflows/merge.md +285 -0
  223. package/workflows/milestone-audit.md +89 -70
  224. package/workflows/milestone-complete.md +89 -156
  225. package/workflows/plan.md +131 -19
  226. package/workflows/retrospective.md +5 -5
  227. package/workflows/roadmap.md +12 -4
  228. package/workflows/spec-generate.md +9 -0
  229. package/workflows/status.md +76 -27
  230. package/workflows/ui-design.md +14 -12
  231. package/workflows/verify.md +44 -8
  232. package/.claude/commands/learn-retro-decision.md +0 -198
  233. package/.claude/commands/learn-retro-git.md +0 -160
  234. package/.claude/commands/maestro-phase-add.md +0 -63
  235. package/.claude/commands/maestro-phase-transition.md +0 -75
  236. package/.codex/skills/maestro-phase-add/SKILL.md +0 -154
  237. package/.codex/skills/maestro-phase-transition/SKILL.md +0 -173
  238. package/chains/singles/phase-add.json +0 -31
  239. package/chains/singles/phase-transition.json +0 -23
  240. package/dashboard/dist/assets/ChatInput-PuCvZZ3y.js +0 -67
  241. package/dashboard/dist/assets/ChatPage-v19GURYH.js +0 -8
  242. package/dashboard/dist/assets/CollabPage-I5k_mCbG.js +0 -1
  243. package/dashboard/dist/assets/KanbanPage-PDDBv5-9.js +0 -16
  244. package/dashboard/dist/assets/McpPage-CiqXpCHg.js +0 -16
  245. package/dashboard/dist/assets/TreeBrowser-0VIMWclo.js +0 -11
  246. package/dashboard/dist/assets/WorkflowPage-Csm23wUS.js +0 -6
  247. package/dashboard/dist/assets/git-branch-DL8p9kVC.js +0 -6
  248. package/dashboard/dist/assets/index-11DuhKhc.js +0 -231
  249. package/dashboard/dist/assets/index-D2Mtyw7I.css +0 -1
  250. package/dashboard/dist/assets/wrench-BScEJFqC.js +0 -11
  251. package/dist/src/commands/team.d.ts.map +0 -1
  252. package/dist/src/commands/team.js.map +0 -1
  253. package/workflows/phase-add.md +0 -252
  254. package/workflows/phase-transition.md +0 -399
@@ -1,158 +1,149 @@
1
- ---
2
- name: maestro-milestone-complete
3
- description: Archive completed milestone and prepare for next. Validates all phases complete, creates archive, extracts learnings, updates state.json.
4
- argument-hint: "[milestone] [--force]"
5
- allowed-tools: Read, Write, Edit, Bash, Glob, Grep
6
- ---
7
-
8
- # Milestone Complete
9
-
10
- ## Usage
11
-
12
- ```bash
13
- $maestro-milestone-complete "v1.0"
14
- $maestro-milestone-complete # uses current_milestone from state.json
15
- $maestro-milestone-complete --force "v1.0" # skip audit check
16
- ```
17
-
18
- **Flags**:
19
- - `[milestone]`: Target milestone identifier (default: current_milestone from state.json)
20
- - `--force`: Skip audit verification, complete without passing audit
21
-
22
- **Output**: `.workflow/milestones/{milestone}/` archive directory
23
-
24
- ---
25
-
26
- ## Overview
27
-
28
- Sequential milestone archival: validate audit + phases -> create archive -> extract learnings -> update state -> report.
29
-
30
- ---
31
-
32
- ## Implementation
33
-
34
- ### Step 1: Parse Input
35
-
36
- 1. Read `.workflow/state.json` to get `current_milestone`
37
- 2. If `$ARGUMENTS` contains a milestone identifier, use it; otherwise use `current_milestone`
38
- 3. Detect `--force` flag
39
- 4. If no milestone resolvable: **E001** -- exit
40
-
41
- ### Step 2: Validate Completion
42
-
43
- **2a. Check audit report:**
44
- ```
45
- Read .workflow/milestone-audit-{milestone}.md
46
- ```
47
- - If missing and not `--force`: **E002** -- warn "No audit report found. Run milestone-audit first." Ask user to proceed or abort.
48
- - If verdict is FAIL and not `--force`: **E002** -- exit with suggestion to fix failing items
49
-
50
- **2b. Verify all phases completed:**
51
- ```
52
- For each phase in milestone (from roadmap.md):
53
- Read .workflow/phases/{NN}-{slug}/index.json
54
- If status != "completed": E003 -- list incomplete phases, exit
55
- ```
56
-
57
- ### Step 3: Create Archive
58
-
59
- 1. Create archive directory:
60
- ```bash
61
- mkdir -p .workflow/milestones/{milestone}/phases/
62
- ```
63
-
64
- 2. Snapshot roadmap:
65
- ```bash
66
- cp .workflow/roadmap.md .workflow/milestones/{milestone}/roadmap-snapshot.md
67
- ```
68
-
69
- 3. Archive each phase directory:
70
- ```bash
71
- cp -r .workflow/phases/{NN}-{slug}/ .workflow/milestones/{milestone}/phases/{NN}-{slug}/
72
- ```
73
-
74
- 4. Copy audit report (if exists):
75
- ```bash
76
- cp .workflow/milestone-audit-{milestone}.md .workflow/milestones/{milestone}/audit-report.md
77
- ```
78
-
79
- ### Step 4: Extract Learnings
80
-
81
- 1. Load existing learnings from `.workflow/specs/learnings.md` to avoid duplicates
82
- 2. For each phase, read `reflection-log.md` if exists:
83
- - Extract strategy adjustments, patterns discovered, pitfalls encountered
84
- 3. Append aggregated learnings to `.workflow/specs/learnings.md`:
85
- ```markdown
86
- ## Milestone {milestone} Learnings ({date})
87
-
88
- ### Strategy Adjustments
89
- - {from reflection-log entries}
90
-
91
- ### Patterns Discovered
92
- - {from reflection-log entries}
93
-
94
- ### Pitfalls Encountered
95
- - {from reflection-log entries}
96
- ```
97
-
98
- ### Step 5: Update State
99
-
100
- 1. Update `.workflow/state.json`:
101
- - `current_milestone` -> next version (increment minor)
102
- - `current_phase` -> 1 (reset)
103
- - `status` -> "idle"
104
- - Reset `phases_summary` counters
105
- - Preserve `accumulated_context` (decisions + deferred items carry forward)
106
- - Set `last_updated` timestamp
107
-
108
- 2. Clean up completed phase directories:
109
- ```bash
110
- rm -rf .workflow/phases/{NN}-{slug}/ # for each archived phase
111
- ```
112
- Keep `.workflow/phases/` directory (empty, ready for new milestone).
113
-
114
- ### Step 6: Report and Route
115
-
116
- Display completion summary:
117
- ```
118
- ====================================================
119
- MILESTONE COMPLETED: {milestone}
120
- ====================================================
121
-
122
- Archived:
123
- - {N} phases archived to .workflow/milestones/{milestone}/
124
- - Roadmap snapshot saved
125
- - Audit report archived
126
- - {M} learnings extracted to specs/learnings.md
127
-
128
- State reset:
129
- - Current milestone: {next_milestone}
130
- - Current phase: 1
131
- - Status: idle
132
-
133
- ====================================================
134
- ```
135
-
136
- Suggest next steps:
137
- - "Start planning next milestone?" -> Skill({ skill: "maestro-plan" })
138
- - "Project is idle." -> Skill({ skill: "manage-status" })
139
-
140
- ---
141
-
142
- ## Error Handling
143
-
144
- | Code | Severity | Condition | Recovery |
145
- |------|----------|-----------|----------|
146
- | E001 | error | Milestone identifier required and not resolvable | Prompt user for milestone |
147
- | E002 | error | Audit not passed (missing or FAIL verdict) | Run milestone-audit first, or use --force |
148
- | E003 | error | Incomplete phases remain | Complete or verify remaining phases |
149
-
150
- ---
151
-
152
- ## Core Rules
153
-
154
- - **Never delete** phase directories before archiving -- always copy first
155
- - **Preserve** `accumulated_context` across milestone boundaries
156
- - **Learnings dedup** -- check existing entries before appending
157
- - **Git commit** if in a git repo: `chore: complete milestone {milestone}`
158
- - **--force** bypasses audit check only, not phase completion check
1
+ ---
2
+ name: maestro-milestone-complete
3
+ description: Archive completed milestone scratch artifacts to milestones/ dir, move artifact entries to milestone_history, extract learnings, advance state.
4
+ argument-hint: "[milestone] [--force]"
5
+ allowed-tools: Read, Write, Edit, Bash, Glob, Grep
6
+ ---
7
+
8
+ # Milestone Complete
9
+
10
+ ## Usage
11
+
12
+ ```bash
13
+ $maestro-milestone-complete "M1"
14
+ $maestro-milestone-complete # uses current_milestone from state.json
15
+ $maestro-milestone-complete --force "M1" # skip audit check
16
+ ```
17
+
18
+ **Output**: `.workflow/milestones/{milestone}/` archive directory
19
+
20
+ ---
21
+
22
+ ## Overview
23
+
24
+ Sequential milestone archival: validate audit → archive scratch dirs → extract learnings → move artifact entries to milestone_history → advance state → clean scratch.
25
+
26
+ ---
27
+
28
+ ## Implementation
29
+
30
+ ### Step 1: Parse & Validate
31
+
32
+ 1. Read `.workflow/state.json` to get `current_milestone`, `artifacts[]`, `milestones[]`
33
+ 2. Determine target milestone (from args or current_milestone)
34
+ 3. Check `--force` flag
35
+ 4. If no milestone: **E001**
36
+ 5. Check audit report exists at `.workflow/milestones/{milestone}/audit-report.md`
37
+ - Missing + not --force: **E002**
38
+ - Verdict FAIL + not --force: **E002**
39
+ 6. Check all milestone artifacts completed:
40
+ - `state.json.artifacts.filter(a => a.milestone == target && a.status != "completed")`
41
+ - If any incomplete + not --force: **E003**
42
+
43
+ ### Step 2: Archive Scratch Dirs
44
+
45
+ ```bash
46
+ mkdir -p .workflow/milestones/{milestone}/artifacts/
47
+
48
+ # For each artifact path, copy to archive
49
+ for artifact in milestone_artifacts:
50
+ if dir exists .workflow/{artifact.path}:
51
+ cp -r .workflow/{artifact.path} .workflow/milestones/{milestone}/artifacts/$(basename {artifact.path})/
52
+ ```
53
+
54
+ Snapshot roadmap:
55
+ ```bash
56
+ cp .workflow/roadmap.md .workflow/milestones/{milestone}/roadmap-snapshot.md
57
+ ```
58
+
59
+ ### Step 3: Extract Learnings
60
+
61
+ - Read `.summaries/` from each execute artifact's plan dir
62
+ - Read `reflection-log.md` if exists
63
+ - Extract patterns, pitfalls, strategy adjustments
64
+ - Append to `.workflow/specs/learnings.md`
65
+ - Avoid duplicates (check existing entries)
66
+
67
+ ### Step 4: Archive Artifact Entries
68
+
69
+ Move artifact entries from `state.json.artifacts[]` to `milestone_history`:
70
+
71
+ ```json
72
+ {
73
+ "milestone_history": [
74
+ ...existing,
75
+ {
76
+ "id": "{milestone}",
77
+ "name": "{milestone_name}",
78
+ "status": "completed",
79
+ "completed_at": "{now}",
80
+ "archive_path": "milestones/{milestone}/",
81
+ "archived_artifacts": [ ...all milestone artifact entries... ]
82
+ }
83
+ ]
84
+ }
85
+ ```
86
+
87
+ Remove from `artifacts[]`:
88
+ ```
89
+ state.json.artifacts = state.json.artifacts.filter(a => a.milestone != target)
90
+ ```
91
+
92
+ ### Step 5: Advance State
93
+
94
+ ```
95
+ next = state.json.milestones.find(m => m.status == "pending")
96
+ if next:
97
+ state.json.current_milestone = next.id
98
+ next.status = "active"
99
+ else:
100
+ state.json.current_milestone = null
101
+ state.json.status = "completed"
102
+
103
+ state.json.last_updated = now()
104
+ Write state.json (atomic)
105
+ ```
106
+
107
+ ### Step 6: Clean Scratch
108
+
109
+ ```bash
110
+ for artifact in archived_artifacts:
111
+ rm -rf .workflow/{artifact.path}
112
+ ```
113
+
114
+ ### Step 7: Generate Summary & Report
115
+
116
+ Write `.workflow/milestones/{milestone}/summary.md` with outcomes and learnings.
117
+ Update `.workflow/project.md` Context section.
118
+
119
+ ```
120
+ === MILESTONE COMPLETE ===
121
+ Milestone: {milestone} ({name})
122
+ Artifacts: {count} archived
123
+ Next: {next_milestone or "Project complete"}
124
+
125
+ Next steps:
126
+ $maestro-milestone-release -- Cut release
127
+ $maestro-analyze -- Start next milestone
128
+ $manage-status -- View state
129
+ ```
130
+
131
+ ---
132
+
133
+ ## Error Handling
134
+
135
+ | Code | Severity | Description | Recovery |
136
+ |------|----------|-------------|----------|
137
+ | E001 | error | Milestone identifier required | Specify milestone |
138
+ | E002 | error | Audit not passed | Run milestone-audit first |
139
+ | E003 | error | Incomplete artifacts remain | Complete work first |
140
+
141
+ ---
142
+
143
+ ## Core Rules
144
+
145
+ 1. **Audit before archive** — refuse without passing audit (unless --force)
146
+ 2. **Atomic state update** write state.json via tmp+rename
147
+ 3. **Learnings are mandatory** always extract before archiving
148
+ 4. **Clean after archive** remove scratch dirs only after successful copy
149
+ 5. **Advance state** — always set next milestone or mark project complete
@@ -163,13 +163,48 @@ const phaseArg = $ARGUMENTS
163
163
  .replace(/--yes|-y|--continue|--concurrency\s+\d+|-c\s+\d+|--auto|--gaps|--parallel|--collab|--dir\s+\S+|--spec\s+\S+/g, '')
164
164
  .trim()
165
165
 
166
+ // Auto-bootstrap state.json if missing
167
+ if (!fileExists('.workflow/state.json')) {
168
+ Bash('mkdir -p .workflow/scratch/')
169
+ writeMinimalStateJson()
170
+ }
171
+
172
+ // Scope determination (per scratch-milestone-architecture)
173
+ const state = JSON.parse(Read('.workflow/state.json'))
174
+ let scope, phaseNum = null, phaseSlug, contextDir
175
+
176
+ if (dirMatch) {
177
+ contextDir = dirMatch[1]
178
+ phaseSlug = contextDir.split('/').pop()
179
+ // Inherit scope from parent artifact if registered
180
+ const parentArtifact = state.artifacts.find(a => a.path === contextDir)
181
+ scope = parentArtifact?.scope || 'standalone'
182
+ } else if (phaseArg === '') {
183
+ if (state.current_milestone && fileExists('.workflow/roadmap.md')) {
184
+ scope = 'milestone'
185
+ phaseSlug = slugify(state.milestones.find(m => m.id === state.current_milestone)?.name || state.current_milestone)
186
+ // Find latest analyze artifact for this milestone
187
+ contextDir = state.artifacts.filter(a => a.type === 'analyze' && a.milestone === state.current_milestone && a.status === 'completed').pop()?.path
188
+ } else {
189
+ ERROR('E001: No args and no roadmap')
190
+ }
191
+ } else if (/^\d+$/.test(phaseArg)) {
192
+ scope = 'phase'
193
+ phaseNum = parseInt(phaseArg)
194
+ phaseSlug = resolvePhaseSlugFromRoadmap(phaseNum)
195
+ contextDir = state.artifacts.filter(a => a.type === 'analyze' && a.milestone === state.current_milestone && a.phase === phaseNum && a.status === 'completed').pop()?.path
196
+ } else {
197
+ scope = state.current_milestone ? 'adhoc' : 'standalone'
198
+ phaseSlug = phaseArg.toLowerCase().replace(/[^a-z0-9]+/g, '-').substring(0, 40)
199
+ }
200
+
166
201
  const dateStr = getUtc8ISOString().substring(0, 10).replace(/-/g, '')
167
- const sessionId = dirMatch
168
- ? `plan-${dirMatch[1].split('/').pop()}-${dateStr}`
169
- : `plan-phase${phaseArg}-${dateStr}`
202
+ const sessionId = `plan-${phaseSlug}-${dateStr}`
170
203
  const sessionFolder = `.workflow/.csv-wave/${sessionId}`
204
+ const scratchDir = `.workflow/scratch/plan-${phaseSlug}-${dateStr}`
171
205
 
172
206
  Bash(`mkdir -p ${sessionFolder}`)
207
+ Bash(`mkdir -p ${scratchDir}/.task/`)
173
208
  ```
174
209
 
175
210
  ---
@@ -180,25 +215,20 @@ Bash(`mkdir -p ${sessionFolder}`)
180
215
 
181
216
  **Decomposition Rules**:
182
217
 
183
- 1. **Phase resolution**:
184
-
185
- | Condition | Action |
186
- |-----------|--------|
187
- | `--dir <path>` provided | Use path directly, set SCRATCH_MODE = true |
188
- | Number argument | Resolve `.workflow/phases/{NN}-*/` |
189
- | Slug argument | Resolve `.workflow/phases/*-{slug}/` |
218
+ 1. **Scope resolution**: Already determined in Session Initialization (milestone/phase/adhoc/standalone)
190
219
 
191
- 2. **Context loading**:
192
- - Read `{PHASE_DIR}/context.md` (user decisions from analyze)
193
- - Read `{PHASE_DIR}/index.json` (phase metadata, success criteria)
194
- - Read spec-ref if `--spec` flag or index.json has spec_ref
220
+ 2. **Context loading** (from upstream analyze artifact or --dir):
221
+ - Read `{contextDir}/context.md` (user decisions from analyze) — if contextDir resolved
222
+ - Read `.workflow/project.md` project vision and constraints
223
+ - Read `.workflow/roadmap.md` phase structure and dependencies
224
+ - Read spec-ref if `--spec` flag
195
225
  - Read `.workflow/codebase/doc-index.json` if exists
196
- - Read `{PHASE_DIR}/design-ref/MASTER.md` if exists (UI design reference)
226
+ - Find design artifacts from `state.json.artifacts[]` (type=brainstorm with ui-designer) for MASTER.md
197
227
  - Load project specs via `maestro spec load --category planning`
198
228
 
199
229
  3. **Upstream analysis check**:
200
- - If `{PHASE_DIR}/conclusions.json` exists and has content: reuse as exploration context, skip wave 1
201
- - If `{PHASE_DIR}/explorations.json` exists: load as additional context
230
+ - If `{contextDir}/conclusions.json` exists and has content: reuse as exploration context, skip wave 1
231
+ - If `{contextDir}/explorations.json` exists: load as additional context
202
232
 
203
233
  4. **Gap mode** (if `--gaps`):
204
234
  - Load gaps from `.workflow/issues/issues.jsonl` (primary), `verification.json` (fallback), `uat.md` (additional)
@@ -73,7 +73,7 @@ $maestro-roadmap --from-brainstorm WFS-001 "Enhance auth system"
73
73
  | +-- Interactive refinement (max 3 rounds, skip if -y) |
74
74
  | +-- Generate context.md with roadmap summary |
75
75
  | +-- Write .workflow/roadmap.md |
76
- | +-- Create phase directories under .workflow/phases/ |
76
+ | +-- Ensure .workflow/scratch/ directory exists |
77
77
  | +-- Display summary with next steps |
78
78
  | |
79
79
  +---------------------------------------------------------------------------+
@@ -303,7 +303,8 @@ spawn_agents_on_csv({
303
303
 
304
304
  5. **Write outputs**:
305
305
  - Write `.workflow/roadmap.md` using standard roadmap template structure
306
- - Create phase directories: `.workflow/phases/{NN}-{slug}/` with empty `index.json`
306
+ - Ensure `.workflow/scratch/` directory exists (phases are labels, not directories)
307
+ - Update `state.json` milestones array and set `current_milestone`
307
308
  - Update `.workflow/state.json` (if exists): set `current_phase: 1`
308
309
 
309
310
  6. Display summary:
@@ -126,8 +126,8 @@ Read-only status report with progress milestones. No pipeline advancement.
126
126
 
127
127
  **CLI equivalent for human monitoring** (works while coordinator is blocked):
128
128
  ```bash
129
- maestro msg list -s "<session_id>" --type progress --last 10
130
- maestro msg list -s "<session_id>" --type blocker
129
+ maestro agent-msg list -s "<session_id>" --type progress --last 10
130
+ maestro agent-msg list -s "<session_id>" --type blocker
131
131
  ```
132
132
 
133
133
  Then STOP.
@@ -97,7 +97,7 @@ const blockerMsgs = mcp__maestro-tools__team_msg({
97
97
  [executor] Commands: 'resume' to advance | 'check' to refresh
98
98
 
99
99
  **CLI monitoring** (works while executor is blocked):
100
- maestro msg list -s "<session_id>" --type progress --last 10
100
+ maestro agent-msg list -s "<session_id>" --type progress --last 10
101
101
  ```
102
102
 
103
103
  Then STOP.
@@ -67,8 +67,8 @@ Read-only status report from tasks.json + team_msg progress, then STOP.
67
67
 
68
68
  **CLI equivalent for human monitoring** (no coordinator needed):
69
69
  ```bash
70
- maestro msg list -s "<session_id>" --type progress --last 10
71
- maestro msg list -s "<session_id>" --type blocker
70
+ maestro agent-msg list -s "<session_id>" --type progress --last 10
71
+ maestro agent-msg list -s "<session_id>" --type blocker
72
72
  ```
73
73
 
74
74
  ## handleResume
@@ -131,7 +131,7 @@ Prevents redundant research across tasks.
131
131
  ## 6. Progress Milestone Protocol
132
132
 
133
133
  Workers report progress during execution via `team_msg`. This provides:
134
- - **Human CLI monitoring**: `maestro msg list -s <session-id> --type progress` works while coordinator is blocked in `wait_agent`
134
+ - **Human CLI monitoring**: `maestro agent-msg list -s <session-id> --type progress` works while coordinator is blocked in `wait_agent`
135
135
  - **Coordinator post-wait trace**: Full execution history for forensics and status display
136
136
  - **Blocker awareness**: Coordinator knows where worker got stuck on timeout
137
137
 
@@ -169,7 +169,7 @@ mcp__maestro-tools__team_msg({
169
169
  `wait_agent` is **blocking** — coordinator cannot read team_msg during wait. Progress is only consumed:
170
170
  1. On `handleCheck` (user types "check" while coordinator is idle)
171
171
  2. On `handleResume` after `wait_agent` returns (drain bus before collecting discoveries)
172
- 3. By human via `maestro msg list` CLI (works anytime, independent of coordinator)
172
+ 3. By human via `maestro agent-msg list` CLI (works anytime, independent of coordinator)
173
173
 
174
174
  ### Relationship to Discoveries
175
175
 
@@ -107,7 +107,7 @@ Output:
107
107
  [coordinator] Commands: 'resume' to advance | 'check' to refresh
108
108
 
109
109
  **CLI monitoring** (works while coordinator is blocked):
110
- maestro msg list -s "<session_id>" --type progress --last 10
110
+ maestro agent-msg list -s "<session_id>" --type progress --last 10
111
111
  ```
112
112
 
113
113
  Then STOP.
@@ -66,7 +66,7 @@ Output:
66
66
  [coordinator] Commands: 'resume' to advance | 'check' to refresh
67
67
 
68
68
  **CLI monitoring** (works while coordinator is blocked):
69
- maestro msg list -s "<session_id>" --type progress --last 10
69
+ maestro agent-msg list -s "<session_id>" --type progress --last 10
70
70
  ```
71
71
 
72
72
  Then STOP.
@@ -56,7 +56,7 @@ Session: <session-id>
56
56
  Commands: 'resume' to advance | 'check' to refresh
57
57
 
58
58
  **CLI monitoring** (works while coordinator is blocked):
59
- maestro msg list -s "<session_id>" --type progress --last 10
59
+ maestro agent-msg list -s "<session_id>" --type progress --last 10
60
60
  ```
61
61
 
62
62
  Output status -- do NOT advance pipeline.
@@ -71,7 +71,7 @@ Output:
71
71
  [coordinator] Commands: 'resume' to advance | 'check' to refresh
72
72
 
73
73
  **CLI monitoring** (works while coordinator is blocked):
74
- maestro msg list -s "<session_id>" --type progress --last 10
74
+ maestro agent-msg list -s "<session_id>" --type progress --last 10
75
75
  ```
76
76
 
77
77
  Then STOP.