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,446 +1,435 @@
1
- ---
2
- name: maestro-execute
3
- description: Wave-based parallel task execution via CSV wave pipeline. Reads plan.json to build CSV with pre-computed waves, executes tasks in parallel per wave with cross-wave context propagation. Core execution engine replacing maestro-execute command.
4
- argument-hint: "[-y|--yes] [-c|--concurrency N] [--continue] \"<phase> [--auto-commit] [--method agent|cli] [--dir <path>]\""
5
- allowed-tools: spawn_agents_on_csv, Read, Write, Edit, Bash, Glob, Grep, AskUserQuestion
6
- ---
7
-
8
- ## Auto Mode
9
-
10
- When `--yes` or `-y`: Auto-confirm task breakdown, skip blocked-task prompts, auto-continue through all waves.
11
-
12
- # Maestro Execute (CSV Wave)
13
-
14
- ## Usage
15
-
16
- ```bash
17
- $maestro-execute "3"
18
- $maestro-execute -c 4 "3 --auto-commit"
19
- $maestro-execute -y "3 --method cli"
20
- $maestro-execute "3 --dir .workflow/scratch/quick-fix"
21
- $maestro-execute --continue "execute-phase3-20260318"
22
- ```
23
-
24
- **Flags**:
25
- - `-y, --yes`: Skip all confirmations (auto mode)
26
- - `-c, --concurrency N`: Max concurrent agents within each wave (default: 5)
27
- - `--continue`: Resume existing session
28
-
29
- **Inner flags** (passed inside quotes):
30
- - `--auto-commit`: Atomic git commit after each task completion
31
- - `--method agent|cli`: Override execution method (default: from config.json)
32
- - `--dir <path>`: Use arbitrary directory instead of phase resolution (scratch mode)
33
-
34
- **Output Directory**: `.workflow/.csv-wave/{session-id}/`
35
- **Core Output**: `tasks.csv` (master state) + `results.csv` (final) + `discoveries.ndjson` (shared exploration) + `context.md` (human-readable report)
36
-
37
- ---
38
-
39
- ## Overview
40
-
41
- Wave-based parallel task execution using `spawn_agents_on_csv`. Reads plan.json to build a CSV where waves are pre-computed from the plan. Each wave runs tasks in parallel, with cross-wave context propagation via `prev_context`. This is the core execution engine of the maestro pipeline.
42
-
43
- **Core workflow**: Load Plan → Build CSV from Tasks → Wave-by-Wave Parallel Execution → Aggregate Results
44
-
45
- **Topology**: Custom (waves inherited from plan.json — no Kahn's algorithm needed)
46
-
47
- ```
48
- +---------------------------------------------------------------------------+
49
- | TASK EXECUTION CSV WAVE WORKFLOW |
50
- +---------------------------------------------------------------------------+
51
- | |
52
- | Phase 1: Plan Resolution -> CSV |
53
- | +-- Resolve phase directory (or --dir path) |
54
- | +-- Read plan.json + .task/TASK-*.json definitions |
55
- | +-- Detect completed tasks (breakpoint resume) |
56
- | +-- Build tasks.csv with one row per pending task |
57
- | +-- Waves inherited from plan.json (pre-computed) |
58
- | +-- Load project specs for executor context |
59
- | +-- User validates task breakdown (skip if -y) |
60
- | |
61
- | Phase 2: Wave Execution Engine |
62
- | +-- For each wave (sequential): |
63
- | | +-- Wave N: Task Execution (parallel within wave) |
64
- | | | +-- Each agent implements one task |
65
- | | | +-- Agent reads task definition + convergence criteria |
66
- | | | +-- Agent creates/modifies files per task.files |
67
- | | | +-- Agent verifies convergence.criteria (max 3 fix attempts) |
68
- | | | +-- Agent writes .summaries/TASK-{NNN}-summary.md |
69
- | | | +-- Atomic commit if --auto-commit |
70
- | | | +-- Discoveries shared via board (patterns, blockers) |
71
- | | +-- Merge wave results into master tasks.csv |
72
- | | +-- Build prev_context for next wave from completed findings |
73
- | | +-- If blocked tasks: prompt user (skip if -y: auto-continue) |
74
- | +-- discoveries.ndjson shared across all waves (append-only) |
75
- | |
76
- | Phase 3: Results Aggregation |
77
- | +-- Export results.csv |
78
- | +-- Update .task/TASK-*.json statuses |
79
- | +-- Update index.json execution progress |
80
- | +-- Update state.json project progress |
81
- | +-- Generate context.md with execution report |
82
- | +-- Auto-sync codebase docs (if configured) |
83
- | +-- Display summary with next steps |
84
- | |
85
- +---------------------------------------------------------------------------+
86
- ```
87
-
88
- ---
89
-
90
- ## CSV Schema
91
-
92
- ### tasks.csv (Master State)
93
-
94
- ```csv
95
- id,title,description,scope,convergence_criteria,hints,execution_directives,deps,context_from,wave,status,findings,files_modified,tests_passed,error
96
- "TASK-001","Setup auth module","Create authentication module with JWT token generation and verification. Export verifyToken and generateToken functions.","src/auth/","auth.ts contains export function verifyToken(; auth.ts contains export function generateToken(","Reference existing middleware pattern in src/middleware/auth.ts","npm test -- --grep auth","","","1","","","","",""
97
- "TASK-002","Create user model","Define User interface and database schema with email, passwordHash, role fields. Use existing Result type pattern.","src/models/","user.ts contains export interface User; user.ts contains email: string","See src/models/session.ts for existing model pattern","npm test -- --grep user","","","1","","","","",""
98
- "TASK-003","Auth middleware","Create Express middleware that validates JWT from Authorization header. Use verifyToken from auth module. Return 401 on invalid token.","src/middleware/","auth-middleware.ts contains export function authMiddleware(; auth-middleware.ts contains verifyToken","Follows existing middleware pattern in src/middleware/logging.ts","npm test -- --grep middleware","TASK-001","TASK-001","2","","","","",""
99
- "TASK-004","Login endpoint","Implement POST /api/login endpoint. Validate credentials against user model, return JWT on success. Use generateToken from auth module.","src/routes/","login.ts contains router.post('/api/login'; login.ts contains generateToken(","Wire into existing Express app in src/app.ts","curl -X POST localhost:3000/api/login","TASK-001;TASK-002","TASK-001;TASK-002","2","","","","",""
100
- "TASK-005","Integration tests","Write integration tests for full auth flow: register, login, access protected route, token refresh.","tests/","tests/auth.test.ts exists; npm test exits with code 0","Use existing test setup in tests/setup.ts","npm test","TASK-003;TASK-004","TASK-003;TASK-004","3","","","","",""
101
- ```
102
-
103
- **Columns**:
104
-
105
- | Column | Phase | Description |
106
- |--------|-------|-------------|
107
- | `id` | Input | Task ID (TASK-NNN format, from plan.json) |
108
- | `title` | Input | Short task title from task definition |
109
- | `description` | Input | Full task description from TASK-*.json |
110
- | `scope` | Input | Target file/directory glob from task.files |
111
- | `convergence_criteria` | Input | Grep-verifiable completion criteria (semicolon-separated) |
112
- | `hints` | Input | Implementation hints + reference files from task definition |
113
- | `execution_directives` | Input | Verification commands to run after implementation |
114
- | `deps` | Input | Semicolon-separated dependency task IDs |
115
- | `context_from` | Input | Semicolon-separated task IDs whose findings this task needs |
116
- | `wave` | Computed | Wave number from plan.json wave assignment |
117
- | `status` | Output | `pending` -> `completed` / `failed` / `blocked` / `skipped` |
118
- | `findings` | Output | Implementation notes and observations (max 500 chars) |
119
- | `files_modified` | Output | Semicolon-separated list of created/modified files |
120
- | `tests_passed` | Output | Test pass/fail status from execution_directives |
121
- | `error` | Output | Error message if failed or blocked |
122
-
123
- ### Per-Wave CSV (Temporary)
124
-
125
- Each wave generates `wave-{N}.csv` with extra `prev_context` column populated from predecessor task findings.
126
-
127
- ---
128
-
129
- ## Output Artifacts
130
-
131
- | File | Purpose | Lifecycle |
132
- |------|---------|-----------|
133
- | `tasks.csv` | Master state -- all tasks with status/findings | Updated after each wave |
134
- | `wave-{N}.csv` | Per-wave input (temporary) | Created before wave, deleted after |
135
- | `wave-{N}-results.csv` | Per-wave output | Created by spawn_agents_on_csv |
136
- | `results.csv` | Final export of all task results | Created in Phase 3 |
137
- | `discoveries.ndjson` | Shared exploration board | Append-only, carries across waves |
138
- | `context.md` | Human-readable execution report | Created in Phase 3 |
139
-
140
- ---
141
-
142
- ## Session Structure
143
-
144
- ```
145
- .workflow/.csv-wave/execute-{phase}-{date}/
146
- +-- tasks.csv
147
- +-- results.csv
148
- +-- discoveries.ndjson
149
- +-- context.md
150
- +-- config.json
151
- +-- wave-{N}.csv (temporary)
152
- +-- wave-{N}-results.csv (temporary)
153
- ```
154
-
155
- ---
156
-
157
- ## Implementation
158
-
159
- ### Session Initialization
160
-
161
- ```javascript
162
- const getUtc8ISOString = () => new Date(Date.now() + 8 * 60 * 60 * 1000).toISOString()
163
-
164
- // Parse flags
165
- const AUTO_YES = $ARGUMENTS.includes('--yes') || $ARGUMENTS.includes('-y')
166
- const continueMode = $ARGUMENTS.includes('--continue')
167
- const concurrencyMatch = $ARGUMENTS.match(/(?:--concurrency|-c)\s+(\d+)/)
168
- const maxConcurrency = concurrencyMatch ? parseInt(concurrencyMatch[1]) : 5
169
-
170
- // Parse execute-specific flags
171
- const autoCommit = $ARGUMENTS.includes('--auto-commit')
172
- const methodMatch = $ARGUMENTS.match(/--method\s+(agent|cli)/)
173
- const executionMethod = methodMatch ? methodMatch[1] : null
174
- const dirMatch = $ARGUMENTS.match(/--dir\s+(\S+)/)
175
- const scratchDir = dirMatch ? dirMatch[1] : null
176
-
177
- // Clean phase text
178
- const phaseArg = $ARGUMENTS
179
- .replace(/--yes|-y|--continue|--concurrency\s+\d+|-c\s+\d+|--auto-commit|--method\s+\w+|--dir\s+\S+/g, '')
180
- .trim()
181
-
182
- const dateStr = getUtc8ISOString().substring(0, 10).replace(/-/g, '')
183
- const sessionId = scratchDir
184
- ? `execute-scratch-${dateStr}`
185
- : `execute-phase${phaseArg}-${dateStr}`
186
- const sessionFolder = `.workflow/.csv-wave/${sessionId}`
187
-
188
- Bash(`mkdir -p ${sessionFolder}`)
189
- ```
190
-
191
- ---
192
-
193
- ### Phase 1: Plan Resolution -> CSV
194
-
195
- **Objective**: Resolve phase, load plan + task definitions, detect resume point, generate tasks.csv.
196
-
197
- **Decomposition Rules**:
198
-
199
- 1. **Plan resolution** (per scratch-milestone-architecture):
200
-
201
- | Input | Resolution |
202
- |-------|------------|
203
- | `--dir <path>` | Use path directly (scratch plan dir) |
204
- | No args | Find all pending plans for current milestone from state.json.artifacts[] |
205
- | Number (e.g., `3`) | Find pending plans for phase N from state.json.artifacts[] |
206
-
207
- For multi-plan: execute sequentially. Each plan is a full CSV session.
208
-
209
- 2. **Load plan** (per PLAN_DIR):
210
- - Read `{PLAN_DIR}/plan.json` for wave structure
211
- - Extract `plan.waves` array with task assignments
212
-
213
- 3. **Detect completed tasks (breakpoint resume)**:
214
- - For each task in plan, read `.task/TASK-{NNN}.json`
215
- - If `status == "completed"`: exclude from CSV
216
- - Log: "Resuming: {completed}/{total} tasks already completed"
217
-
218
- 4. **Build tasks.csv from task definitions**:
219
- - For each pending task in each wave:
220
- - Read `.task/TASK-{NNN}.json`
221
- - Extract: title, description, files (build scope), convergence.criteria, hints, execution_directives
222
- - Set `deps` from task dependency field
223
- - Set `context_from` = same as deps (findings propagate along dependency edges)
224
- - Set `wave` from plan.json wave assignment
225
- - Write `tasks.csv`
226
-
227
- 5. **Load project specs**:
228
- - Read `.workflow/specs/` for coding conventions and architecture constraints
229
- - Pass as context to all executor agents
230
-
231
- 6. **User validation**: Display task/wave breakdown. Skip if AUTO_YES.
232
-
233
- ---
234
-
235
- ### Phase 2: Wave Execution Engine
236
-
237
- **Objective**: Execute tasks wave-by-wave via spawn_agents_on_csv with cross-wave context propagation.
238
-
239
- #### Per-Wave Execution Loop
240
-
241
- For each wave in ascending order:
242
-
243
- 1. Read master `tasks.csv`
244
- 2. Filter rows where `wave == N` AND `status == pending`
245
- 3. If no pending tasks in this wave: skip to next wave
246
- 4. Build `prev_context` for each task from completed predecessor findings:
247
- ```
248
- [TASK-001: Setup auth module] Created src/auth/auth.ts with verifyToken and generateToken...
249
- [TASK-002: Create user model] Created src/models/user.ts with User interface...
250
- ```
251
- 5. Write `wave-{N}.csv` with `prev_context` column added
252
- 6. Execute:
253
-
254
- ```javascript
255
- spawn_agents_on_csv({
256
- csv_path: `${sessionFolder}/wave-${N}.csv`,
257
- id_column: "id",
258
- instruction: buildExecutorInstruction(sessionFolder, phaseDir, autoCommit, specsContent),
259
- max_concurrency: maxConcurrency,
260
- max_runtime_seconds: 900,
261
- output_csv_path: `${sessionFolder}/wave-${N}-results.csv`,
262
- output_schema: {
263
- type: "object",
264
- properties: {
265
- id: { type: "string" },
266
- status: { type: "string", enum: ["completed", "failed", "blocked"] },
267
- findings: { type: "string" },
268
- files_modified: { type: "string" },
269
- tests_passed: { type: "string" },
270
- error: { type: "string" }
271
- },
272
- required: ["id", "status", "findings"]
273
- }
274
- })
275
- ```
276
-
277
- 7. Read `wave-{N}-results.csv`, merge into master `tasks.csv`
278
- 8. Delete `wave-{N}.csv`
279
-
280
- #### Blocked Task Handling
281
-
282
- After each wave:
283
- - Count blocked/failed tasks
284
- - If any blocked and NOT AUTO_YES:
285
- ```
286
- AskUserQuestion: "Tasks blocked: {blocked_list}. Continue to next wave or stop?"
287
- Options: [Continue (skip blocked deps), Stop and review]
288
- ```
289
- - If AUTO_YES: auto-continue, skip tasks whose deps are blocked
290
-
291
- #### Cascading Skip
292
-
293
- If a task is blocked/failed and other tasks in later waves depend on it:
294
- - Mark dependent tasks as `skipped` with error: "Dependency {dep_id} blocked/failed"
295
- - Do not attempt execution of skipped tasks
296
-
297
- ---
298
-
299
- ### Phase 3: Results Aggregation
300
-
301
- **Objective**: Update all state files and generate execution report.
302
-
303
- 1. Read final master `tasks.csv`
304
- 2. Export as `results.csv`
305
-
306
- 3. **Update task files**: For each row in results:
307
- - Read `.task/{id}.json`
308
- - Update `status` to match CSV status
309
- - Write back to disk
310
-
311
- 3b. **Issue status sync**: For each completed/failed task that has `issue_id`:
312
- - Read issue from `.workflow/issues/issues.jsonl` by `issue_id`
313
- - Collect all `task_refs[]` statuses for that issue:
314
- - All task_refs completed → `issue.status = "resolved"`
315
- - Any task_ref failed → `issue.status = "in_progress"`
316
- - Append history entry: `{ action: "executed", at: <ISO>, by: "maestro-execute", summary: "TASK-{NNN} {status}" }`
317
- - Write updated issue back to `issues.jsonl`
318
-
319
- 4. **Register EXC artifact in state.json**:
320
- ```
321
- Read .workflow/state.json
322
- plan_artifact = state.json.artifacts.find(a => a.type == "plan" && a.path == PLAN_DIR_relative)
323
- next_id = max EXC-NNN + 1
324
- Push artifact: { id: "EXC-{next_id}", type: "execute", milestone: plan_artifact.milestone,
325
- phase: plan_artifact.phase, scope: plan_artifact.scope, path: plan_artifact.path,
326
- status: "completed", depends_on: plan_artifact.id, harvested: false,
327
- created_at: execution_start, completed_at: now() }
328
- Write state.json (atomic)
329
- ```
330
-
331
- 5. **Extract incremental learnings**:
332
- - Read all `.summaries/` from PLAN_DIR
333
- - Extract strategy adjustments, patterns, pitfalls
334
- - Append to `.workflow/specs/learnings.md`
335
- - Mark artifact `harvested: true` in state.json
336
-
337
- 6. **Generate context.md**:
338
-
339
- ```markdown
340
- # Execution Report -- Phase {phase}
341
-
342
- ## Summary
343
- - Tasks: {completed}/{total} completed
344
- - Blocked: {blocked_count}
345
- - Waves executed: {waves_run}/{waves_total}
346
- - Auto-commit: {yes/no}
347
-
348
- ## Wave Results
349
-
350
- ### Wave {N}
351
- | Task | Status | Files Modified | Tests |
352
- |------|--------|---------------|-------|
353
- | {id}: {title} | {status} | {files} | {tests} |
354
-
355
- ## Blocked Tasks
356
- {if any: task ID, error, checkpoint info}
357
-
358
- ## Discovery Board Summary
359
- {aggregated discovery findings}
360
-
361
- ## Next Steps
362
- - Run verify to validate results
363
- - Run debug for any blocked tasks
364
- ```
365
-
366
- 7. **Auto-sync** (if config.json.codebase.auto_sync_after_execute == true):
367
- - Detect changed files from execution
368
- - Trigger codebase doc update
369
-
370
- 8. **Display completion report**:
371
-
372
- ```
373
- === EXECUTION COMPLETE ===
374
- Phase: {phase_name}
375
- Completed: {completed_count}/{total_count} tasks
376
- Blocked: {blocked_count} tasks
377
- Waves: {waves_executed}/{total_waves}
378
-
379
- Summaries: {PLAN_DIR}/.summaries/
380
- Tasks: {PLAN_DIR}/.task/
381
-
382
- Next steps:
383
- Skill({ skill: "maestro-verify" })
384
- Skill({ skill: "maestro-verify", args: "--dir {PLAN_DIR}" })
385
- Skill({ skill: "manage-status" })
386
- ```
387
-
388
- ---
389
-
390
- ## Shared Discovery Board Protocol
391
-
392
- ### Standard Discovery Types
393
-
394
- | Type | Dedup Key | Data Schema | Description |
395
- |------|-----------|-------------|-------------|
396
- | `code_pattern` | `data.name` | `{name, file, description}` | Reusable code pattern found during implementation |
397
- | `integration_point` | `data.file` | `{file, description, exports[]}` | Module connection point discovered |
398
- | `convention` | singleton | `{naming, imports, formatting}` | Project coding conventions observed |
399
- | `blocker` | `data.issue` | `{issue, severity, impact}` | Blocking issue encountered |
400
- | `tech_stack` | singleton | `{framework, language, tools[]}` | Technology stack detail confirmed |
401
- | `test_command` | `data.command` | `{command, scope, result}` | Working test command discovered |
402
-
403
- ### Protocol
404
-
405
- 1. **Read** `{session_folder}/discoveries.ndjson` before starting task implementation
406
- 2. **Skip covered**: If discovery of same type + dedup key exists, skip
407
- 3. **Write immediately**: Append findings as discovered
408
- 4. **Append-only**: Never modify or delete existing entries
409
- 5. **Deduplicate**: Check before writing
410
-
411
- ```bash
412
- echo '{"ts":"<ISO>","worker":"TASK-001","type":"code_pattern","data":{"name":"Result type","file":"src/types/result.ts","description":"All functions return Result<T,E> for error handling"}}' >> {session_folder}/discoveries.ndjson
413
- ```
414
-
415
- ---
416
-
417
- ## Error Handling
418
-
419
- | Error | Resolution |
420
- |-------|------------|
421
- | Phase directory not found | Abort with error: "Phase {N} not found" |
422
- | plan.json not found | Abort with error: "No plan found -- run plan first" |
423
- | No pending tasks (all completed) | Abort with info: "All tasks already completed" |
424
- | Task file (.task/TASK-*.json) missing | Skip task, log error, mark as failed |
425
- | Agent spawn fails | Retry once, then mark task as blocked with checkpoint |
426
- | Convergence criteria not met after 3 attempts | Mark task as blocked, write checkpoint |
427
- | Git commit fails (--auto-commit) | Log warning, continue (task still marked completed) |
428
- | All tasks in wave blocked | Stop execution, report blocked wave |
429
- | CSV parse error | Validate format, show line number |
430
- | discoveries.ndjson corrupt | Ignore malformed lines, continue |
431
- | Continue mode: no session found | List available sessions |
432
-
433
- ---
434
-
435
- ## Core Rules
436
-
437
- 1. **Start Immediately**: First action is session initialization, then Phase 1
438
- 2. **Wave Order is Sacred**: Never execute wave N+1 before wave N completes and results are merged
439
- 3. **CSV is Source of Truth**: Master tasks.csv holds all execution state
440
- 4. **Context Propagation**: prev_context built from master CSV findings, not from memory
441
- 5. **Discovery Board is Append-Only**: Never clear, modify, or recreate discoveries.ndjson
442
- 6. **Cascading Skip on Failure**: If a task fails/blocks, all dependent tasks are skipped
443
- 7. **Cleanup Temp Files**: Remove wave-{N}.csv after results are merged
444
- 8. **Max 3 Fix Attempts**: Per task, auto-fix convergence failures up to 3 times, then mark blocked
445
- 9. **Breakpoint Resume**: Always detect completed tasks and skip them on re-run
446
- 10. **DO NOT STOP**: Continuous execution until all waves complete or user explicitly stops
1
+ ---
2
+ name: maestro-execute
3
+ description: Wave-based parallel task execution via CSV wave pipeline. Reads plan.json to build CSV with pre-computed waves, executes tasks in parallel per wave with cross-wave context propagation. Core execution engine replacing maestro-execute command.
4
+ argument-hint: "[-y|--yes] [-c|--concurrency N] [--continue] \"<phase> [--auto-commit] [--method agent|cli] [--dir <path>]\""
5
+ allowed-tools: spawn_agents_on_csv, Read, Write, Edit, Bash, Glob, Grep, AskUserQuestion
6
+ ---
7
+
8
+ <purpose>
9
+ Wave-based parallel task execution using `spawn_agents_on_csv`. Reads plan.json to build a CSV where waves are pre-computed from the plan. Each wave runs tasks in parallel, with cross-wave context propagation via `prev_context`. This is the core execution engine of the maestro pipeline.
10
+
11
+ **Core workflow**: Load Plan -> Build CSV from Tasks -> Wave-by-Wave Parallel Execution -> Aggregate Results
12
+
13
+ **Topology**: Custom (waves inherited from plan.json -- no Kahn's algorithm needed)
14
+
15
+ ```
16
+ +---------------------------------------------------------------------------+
17
+ | TASK EXECUTION CSV WAVE WORKFLOW |
18
+ +---------------------------------------------------------------------------+
19
+ | |
20
+ | Phase 1: Plan Resolution -> CSV |
21
+ | +-- Resolve phase directory (or --dir path) |
22
+ | +-- Read plan.json + .task/TASK-*.json definitions |
23
+ | +-- Detect completed tasks (breakpoint resume) |
24
+ | +-- Build tasks.csv with one row per pending task |
25
+ | +-- Waves inherited from plan.json (pre-computed) |
26
+ | +-- Load project specs for executor context |
27
+ | +-- User validates task breakdown (skip if -y) |
28
+ | |
29
+ | Phase 2: Wave Execution Engine |
30
+ | +-- For each wave (sequential): |
31
+ | | +-- Wave N: Task Execution (parallel within wave) |
32
+ | | | +-- Each agent implements one task |
33
+ | | | +-- Agent reads task definition + convergence criteria |
34
+ | | | +-- Agent creates/modifies files per task.files |
35
+ | | | +-- Agent verifies convergence.criteria (max 3 fix attempts) |
36
+ | | | +-- Agent writes .summaries/TASK-{NNN}-summary.md |
37
+ | | | +-- Atomic commit if --auto-commit |
38
+ | | | +-- Discoveries shared via board (patterns, blockers) |
39
+ | | +-- Merge wave results into master tasks.csv |
40
+ | | +-- Build prev_context for next wave from completed findings |
41
+ | | +-- If blocked tasks: prompt user (skip if -y: auto-continue) |
42
+ | +-- discoveries.ndjson shared across all waves (append-only) |
43
+ | |
44
+ | Phase 3: Results Aggregation |
45
+ | +-- Export results.csv |
46
+ | +-- Update .task/TASK-*.json statuses |
47
+ | +-- Update index.json execution progress |
48
+ | +-- Update state.json project progress |
49
+ | +-- Generate context.md with execution report |
50
+ | +-- Auto-sync codebase docs (if configured) |
51
+ | +-- Display summary with next steps |
52
+ | |
53
+ +---------------------------------------------------------------------------+
54
+ ```
55
+ </purpose>
56
+
57
+ <context>
58
+ ```bash
59
+ $maestro-execute "3"
60
+ $maestro-execute -c 4 "3 --auto-commit"
61
+ $maestro-execute -y "3 --method cli"
62
+ $maestro-execute "3 --dir .workflow/scratch/quick-fix"
63
+ $maestro-execute --continue "execute-phase3-20260318"
64
+ ```
65
+
66
+ **Flags**:
67
+ - `-y, --yes`: Skip all confirmations (auto mode)
68
+ - `-c, --concurrency N`: Max concurrent agents within each wave (default: 5)
69
+ - `--continue`: Resume existing session
70
+
71
+ **Inner flags** (passed inside quotes):
72
+ - `--auto-commit`: Atomic git commit after each task completion
73
+ - `--method agent|cli`: Override execution method (default: from config.json)
74
+ - `--dir <path>`: Use arbitrary directory instead of phase resolution (scratch mode)
75
+
76
+ When `--yes` or `-y`: Auto-confirm task breakdown, skip blocked-task prompts, auto-continue through all waves.
77
+
78
+ **Output Directory**: `.workflow/.csv-wave/{session-id}/`
79
+ **Core Output**: `tasks.csv` (master state) + `results.csv` (final) + `discoveries.ndjson` (shared exploration) + `context.md` (human-readable report)
80
+ </context>
81
+
82
+ <csv_schema>
83
+
84
+ ### tasks.csv (Master State)
85
+
86
+ ```csv
87
+ id,title,description,scope,convergence_criteria,hints,execution_directives,deps,context_from,wave,status,findings,files_modified,tests_passed,error
88
+ "TASK-001","Setup auth module","Create authentication module with JWT token generation and verification. Export verifyToken and generateToken functions.","src/auth/","auth.ts contains export function verifyToken(; auth.ts contains export function generateToken(","Reference existing middleware pattern in src/middleware/auth.ts","npm test -- --grep auth","","","1","","","","",""
89
+ "TASK-002","Create user model","Define User interface and database schema with email, passwordHash, role fields. Use existing Result type pattern.","src/models/","user.ts contains export interface User; user.ts contains email: string","See src/models/session.ts for existing model pattern","npm test -- --grep user","","","1","","","","",""
90
+ "TASK-003","Auth middleware","Create Express middleware that validates JWT from Authorization header. Use verifyToken from auth module. Return 401 on invalid token.","src/middleware/","auth-middleware.ts contains export function authMiddleware(; auth-middleware.ts contains verifyToken","Follows existing middleware pattern in src/middleware/logging.ts","npm test -- --grep middleware","TASK-001","TASK-001","2","","","","",""
91
+ "TASK-004","Login endpoint","Implement POST /api/login endpoint. Validate credentials against user model, return JWT on success. Use generateToken from auth module.","src/routes/","login.ts contains router.post('/api/login'; login.ts contains generateToken(","Wire into existing Express app in src/app.ts","curl -X POST localhost:3000/api/login","TASK-001;TASK-002","TASK-001;TASK-002","2","","","","",""
92
+ "TASK-005","Integration tests","Write integration tests for full auth flow: register, login, access protected route, token refresh.","tests/","tests/auth.test.ts exists; npm test exits with code 0","Use existing test setup in tests/setup.ts","npm test","TASK-003;TASK-004","TASK-003;TASK-004","3","","","","",""
93
+ ```
94
+
95
+ **Columns**:
96
+
97
+ | Column | Phase | Description |
98
+ |--------|-------|-------------|
99
+ | `id` | Input | Task ID (TASK-NNN format, from plan.json) |
100
+ | `title` | Input | Short task title from task definition |
101
+ | `description` | Input | Full task description from TASK-*.json |
102
+ | `scope` | Input | Target file/directory glob from task.files |
103
+ | `convergence_criteria` | Input | Grep-verifiable completion criteria (semicolon-separated) |
104
+ | `hints` | Input | Implementation hints + reference files from task definition |
105
+ | `execution_directives` | Input | Verification commands to run after implementation |
106
+ | `deps` | Input | Semicolon-separated dependency task IDs |
107
+ | `context_from` | Input | Semicolon-separated task IDs whose findings this task needs |
108
+ | `wave` | Computed | Wave number from plan.json wave assignment |
109
+ | `status` | Output | `pending` -> `completed` / `failed` / `blocked` / `skipped` |
110
+ | `findings` | Output | Implementation notes and observations (max 500 chars) |
111
+ | `files_modified` | Output | Semicolon-separated list of created/modified files |
112
+ | `tests_passed` | Output | Test pass/fail status from execution_directives |
113
+ | `error` | Output | Error message if failed or blocked |
114
+
115
+ ### Per-Wave CSV (Temporary)
116
+
117
+ Each wave generates `wave-{N}.csv` with extra `prev_context` column populated from predecessor task findings.
118
+
119
+ ### Output Artifacts
120
+
121
+ | File | Purpose | Lifecycle |
122
+ |------|---------|-----------|
123
+ | `tasks.csv` | Master state -- all tasks with status/findings | Updated after each wave |
124
+ | `wave-{N}.csv` | Per-wave input (temporary) | Created before wave, deleted after |
125
+ | `wave-{N}-results.csv` | Per-wave output | Created by spawn_agents_on_csv |
126
+ | `results.csv` | Final export of all task results | Created in Phase 3 |
127
+ | `discoveries.ndjson` | Shared exploration board | Append-only, carries across waves |
128
+ | `context.md` | Human-readable execution report | Created in Phase 3 |
129
+
130
+ ### Session Structure
131
+
132
+ ```
133
+ .workflow/.csv-wave/execute-{phase}-{date}/
134
+ +-- tasks.csv
135
+ +-- results.csv
136
+ +-- discoveries.ndjson
137
+ +-- context.md
138
+ +-- config.json
139
+ +-- wave-{N}.csv (temporary)
140
+ +-- wave-{N}-results.csv (temporary)
141
+ ```
142
+ </csv_schema>
143
+
144
+ <invariants>
145
+ 1. **Start Immediately**: First action is session initialization, then Phase 1
146
+ 2. **Wave Order is Sacred**: Never execute wave N+1 before wave N completes and results are merged
147
+ 3. **CSV is Source of Truth**: Master tasks.csv holds all execution state
148
+ 4. **Context Propagation**: prev_context built from master CSV findings, not from memory
149
+ 5. **Discovery Board is Append-Only**: Never clear, modify, or recreate discoveries.ndjson
150
+ 6. **Cascading Skip on Failure**: If a task fails/blocks, all dependent tasks are skipped
151
+ 7. **Cleanup Temp Files**: Remove wave-{N}.csv after results are merged
152
+ 8. **Max 3 Fix Attempts**: Per task, auto-fix convergence failures up to 3 times, then mark blocked
153
+ 9. **Breakpoint Resume**: Always detect completed tasks and skip them on re-run
154
+ 10. **DO NOT STOP**: Continuous execution until all waves complete or user explicitly stops
155
+ </invariants>
156
+
157
+ <execution>
158
+
159
+ ### Session Initialization
160
+
161
+ ```javascript
162
+ const getUtc8ISOString = () => new Date(Date.now() + 8 * 60 * 60 * 1000).toISOString()
163
+
164
+ // Parse flags
165
+ const AUTO_YES = $ARGUMENTS.includes('--yes') || $ARGUMENTS.includes('-y')
166
+ const continueMode = $ARGUMENTS.includes('--continue')
167
+ const concurrencyMatch = $ARGUMENTS.match(/(?:--concurrency|-c)\s+(\d+)/)
168
+ const maxConcurrency = concurrencyMatch ? parseInt(concurrencyMatch[1]) : 5
169
+
170
+ // Parse execute-specific flags
171
+ const autoCommit = $ARGUMENTS.includes('--auto-commit')
172
+ const methodMatch = $ARGUMENTS.match(/--method\s+(agent|cli)/)
173
+ const executionMethod = methodMatch ? methodMatch[1] : null
174
+ const dirMatch = $ARGUMENTS.match(/--dir\s+(\S+)/)
175
+ const scratchDir = dirMatch ? dirMatch[1] : null
176
+
177
+ // Clean phase text
178
+ const phaseArg = $ARGUMENTS
179
+ .replace(/--yes|-y|--continue|--concurrency\s+\d+|-c\s+\d+|--auto-commit|--method\s+\w+|--dir\s+\S+/g, '')
180
+ .trim()
181
+
182
+ const dateStr = getUtc8ISOString().substring(0, 10).replace(/-/g, '')
183
+ const sessionId = scratchDir
184
+ ? `execute-scratch-${dateStr}`
185
+ : `execute-phase${phaseArg}-${dateStr}`
186
+ const sessionFolder = `.workflow/.csv-wave/${sessionId}`
187
+
188
+ Bash(`mkdir -p ${sessionFolder}`)
189
+ ```
190
+
191
+ ### Phase 1: Plan Resolution -> CSV
192
+
193
+ **Objective**: Resolve phase, load plan + task definitions, detect resume point, generate tasks.csv.
194
+
195
+ **Decomposition Rules**:
196
+
197
+ 1. **Plan resolution** (per scratch-milestone-architecture):
198
+
199
+ | Input | Resolution |
200
+ |-------|------------|
201
+ | `--dir <path>` | Use path directly (scratch plan dir) |
202
+ | No args | Find all pending plans for current milestone from state.json.artifacts[] |
203
+ | Number (e.g., `3`) | Find pending plans for phase N from state.json.artifacts[] |
204
+
205
+ For multi-plan: execute sequentially. Each plan is a full CSV session.
206
+
207
+ 2. **Load plan** (per PLAN_DIR):
208
+ - Read `{PLAN_DIR}/plan.json` for wave structure
209
+ - Extract `plan.waves` array with task assignments
210
+
211
+ 3. **Detect completed tasks (breakpoint resume)**:
212
+ - For each task in plan, read `.task/TASK-{NNN}.json`
213
+ - If `status == "completed"`: exclude from CSV
214
+ - Log: "Resuming: {completed}/{total} tasks already completed"
215
+
216
+ 4. **Build tasks.csv from task definitions**:
217
+ - For each pending task in each wave:
218
+ - Read `.task/TASK-{NNN}.json`
219
+ - Extract: title, description, files (build scope), convergence.criteria, hints, execution_directives
220
+ - Set `deps` from task dependency field
221
+ - Set `context_from` = same as deps (findings propagate along dependency edges)
222
+ - Set `wave` from plan.json wave assignment
223
+ - Write `tasks.csv`
224
+
225
+ 5. **Load project specs**:
226
+ - Read `.workflow/specs/` for coding conventions and architecture constraints
227
+ - Pass as context to all executor agents
228
+
229
+ 6. **User validation**: Display task/wave breakdown. Skip if AUTO_YES.
230
+
231
+ ### Phase 2: Wave Execution Engine
232
+
233
+ **Objective**: Execute tasks wave-by-wave via spawn_agents_on_csv with cross-wave context propagation.
234
+
235
+ #### Per-Wave Execution Loop
236
+
237
+ For each wave in ascending order:
238
+
239
+ 1. Read master `tasks.csv`
240
+ 2. Filter rows where `wave == N` AND `status == pending`
241
+ 3. If no pending tasks in this wave: skip to next wave
242
+ 4. Build `prev_context` for each task from completed predecessor findings:
243
+ ```
244
+ [TASK-001: Setup auth module] Created src/auth/auth.ts with verifyToken and generateToken...
245
+ [TASK-002: Create user model] Created src/models/user.ts with User interface...
246
+ ```
247
+ 5. Write `wave-{N}.csv` with `prev_context` column added
248
+ 6. Execute:
249
+
250
+ ```javascript
251
+ spawn_agents_on_csv({
252
+ csv_path: `${sessionFolder}/wave-${N}.csv`,
253
+ id_column: "id",
254
+ instruction: buildExecutorInstruction(sessionFolder, phaseDir, autoCommit, specsContent),
255
+ max_concurrency: maxConcurrency,
256
+ max_runtime_seconds: 900,
257
+ output_csv_path: `${sessionFolder}/wave-${N}-results.csv`,
258
+ output_schema: {
259
+ type: "object",
260
+ properties: {
261
+ id: { type: "string" },
262
+ status: { type: "string", enum: ["completed", "failed", "blocked"] },
263
+ findings: { type: "string" },
264
+ files_modified: { type: "string" },
265
+ tests_passed: { type: "string" },
266
+ error: { type: "string" }
267
+ },
268
+ required: ["id", "status", "findings"]
269
+ }
270
+ })
271
+ ```
272
+
273
+ 7. Read `wave-{N}-results.csv`, merge into master `tasks.csv`
274
+ 8. Delete `wave-{N}.csv`
275
+
276
+ #### Blocked Task Handling
277
+
278
+ After each wave:
279
+ - Count blocked/failed tasks
280
+ - If any blocked and NOT AUTO_YES:
281
+ ```
282
+ AskUserQuestion: "Tasks blocked: {blocked_list}. Continue to next wave or stop?"
283
+ Options: [Continue (skip blocked deps), Stop and review]
284
+ ```
285
+ - If AUTO_YES: auto-continue, skip tasks whose deps are blocked
286
+
287
+ #### Cascading Skip
288
+
289
+ If a task is blocked/failed and other tasks in later waves depend on it:
290
+ - Mark dependent tasks as `skipped` with error: "Dependency {dep_id} blocked/failed"
291
+ - Do not attempt execution of skipped tasks
292
+
293
+ ### Phase 3: Results Aggregation
294
+
295
+ **Objective**: Update all state files and generate execution report.
296
+
297
+ 1. Read final master `tasks.csv`
298
+ 2. Export as `results.csv`
299
+
300
+ 3. **Update task files**: For each row in results:
301
+ - Read `.task/{id}.json`
302
+ - Update `status` to match CSV status
303
+ - Write back to disk
304
+
305
+ 3b. **Issue status sync**: For each completed/failed task that has `issue_id`:
306
+ - Read issue from `.workflow/issues/issues.jsonl` by `issue_id`
307
+ - Collect all `task_refs[]` statuses for that issue:
308
+ - All task_refs completed -> `issue.status = "resolved"`
309
+ - Any task_ref failed -> `issue.status = "in_progress"`
310
+ - Append history entry: `{ action: "executed", at: <ISO>, by: "maestro-execute", summary: "TASK-{NNN} {status}" }`
311
+ - Write updated issue back to `issues.jsonl`
312
+
313
+ 4. **Register EXC artifact in state.json**:
314
+ ```
315
+ Read .workflow/state.json
316
+ plan_artifact = state.json.artifacts.find(a => a.type == "plan" && a.path == PLAN_DIR_relative)
317
+ next_id = max EXC-NNN + 1
318
+ Push artifact: { id: "EXC-{next_id}", type: "execute", milestone: plan_artifact.milestone,
319
+ phase: plan_artifact.phase, scope: plan_artifact.scope, path: plan_artifact.path,
320
+ status: "completed", depends_on: plan_artifact.id, harvested: false,
321
+ created_at: execution_start, completed_at: now() }
322
+ Write state.json (atomic)
323
+ ```
324
+
325
+ 5. **Extract incremental learnings**:
326
+ - Read all `.summaries/` from PLAN_DIR
327
+ - Extract strategy adjustments, patterns, pitfalls
328
+ - Append to `.workflow/specs/learnings.md`
329
+ - Mark artifact `harvested: true` in state.json
330
+
331
+ 6. **Generate context.md**:
332
+
333
+ ```markdown
334
+ # Execution Report -- Phase {phase}
335
+
336
+ ## Summary
337
+ - Tasks: {completed}/{total} completed
338
+ - Blocked: {blocked_count}
339
+ - Waves executed: {waves_run}/{waves_total}
340
+ - Auto-commit: {yes/no}
341
+
342
+ ## Wave Results
343
+
344
+ ### Wave {N}
345
+ | Task | Status | Files Modified | Tests |
346
+ |------|--------|---------------|-------|
347
+ | {id}: {title} | {status} | {files} | {tests} |
348
+
349
+ ## Blocked Tasks
350
+ {if any: task ID, error, checkpoint info}
351
+
352
+ ## Discovery Board Summary
353
+ {aggregated discovery findings}
354
+
355
+ ## Next Steps
356
+ - Run verify to validate results
357
+ - Run debug for any blocked tasks
358
+ ```
359
+
360
+ 7. **Auto-sync** (if config.json.codebase.auto_sync_after_execute == true):
361
+ - Detect changed files from execution
362
+ - Trigger codebase doc update
363
+
364
+ 8. **Display completion report**:
365
+
366
+ ```
367
+ === EXECUTION COMPLETE ===
368
+ Phase: {phase_name}
369
+ Completed: {completed_count}/{total_count} tasks
370
+ Blocked: {blocked_count} tasks
371
+ Waves: {waves_executed}/{total_waves}
372
+
373
+ Summaries: {PLAN_DIR}/.summaries/
374
+ Tasks: {PLAN_DIR}/.task/
375
+
376
+ Next steps:
377
+ Skill({ skill: "maestro-verify" })
378
+ Skill({ skill: "maestro-verify", args: "--dir {PLAN_DIR}" })
379
+ Skill({ skill: "manage-status" })
380
+ ```
381
+
382
+ ### Shared Discovery Board Protocol
383
+
384
+ #### Standard Discovery Types
385
+
386
+ | Type | Dedup Key | Data Schema | Description |
387
+ |------|-----------|-------------|-------------|
388
+ | `code_pattern` | `data.name` | `{name, file, description}` | Reusable code pattern found during implementation |
389
+ | `integration_point` | `data.file` | `{file, description, exports[]}` | Module connection point discovered |
390
+ | `convention` | singleton | `{naming, imports, formatting}` | Project coding conventions observed |
391
+ | `blocker` | `data.issue` | `{issue, severity, impact}` | Blocking issue encountered |
392
+ | `tech_stack` | singleton | `{framework, language, tools[]}` | Technology stack detail confirmed |
393
+ | `test_command` | `data.command` | `{command, scope, result}` | Working test command discovered |
394
+
395
+ #### Protocol
396
+
397
+ 1. **Read** `{session_folder}/discoveries.ndjson` before starting task implementation
398
+ 2. **Skip covered**: If discovery of same type + dedup key exists, skip
399
+ 3. **Write immediately**: Append findings as discovered
400
+ 4. **Append-only**: Never modify or delete existing entries
401
+ 5. **Deduplicate**: Check before writing
402
+
403
+ ```bash
404
+ echo '{"ts":"<ISO>","worker":"TASK-001","type":"code_pattern","data":{"name":"Result type","file":"src/types/result.ts","description":"All functions return Result<T,E> for error handling"}}' >> {session_folder}/discoveries.ndjson
405
+ ```
406
+ </execution>
407
+
408
+ <error_codes>
409
+
410
+ | Error | Resolution |
411
+ |-------|------------|
412
+ | Phase directory not found | Abort with error: "Phase {N} not found" |
413
+ | plan.json not found | Abort with error: "No plan found -- run plan first" |
414
+ | No pending tasks (all completed) | Abort with info: "All tasks already completed" |
415
+ | Task file (.task/TASK-*.json) missing | Skip task, log error, mark as failed |
416
+ | Agent spawn fails | Retry once, then mark task as blocked with checkpoint |
417
+ | Convergence criteria not met after 3 attempts | Mark task as blocked, write checkpoint |
418
+ | Git commit fails (--auto-commit) | Log warning, continue (task still marked completed) |
419
+ | All tasks in wave blocked | Stop execution, report blocked wave |
420
+ | CSV parse error | Validate format, show line number |
421
+ | discoveries.ndjson corrupt | Ignore malformed lines, continue |
422
+ | Continue mode: no session found | List available sessions |
423
+ </error_codes>
424
+
425
+ <success_criteria>
426
+ - [ ] Session folder created with valid tasks.csv
427
+ - [ ] All waves executed in order with cross-wave context propagation
428
+ - [ ] Completed tasks have .summaries/TASK-{NNN}-summary.md
429
+ - [ ] .task/TASK-*.json statuses updated to match execution results
430
+ - [ ] state.json updated with EXC artifact
431
+ - [ ] context.md produced with execution report
432
+ - [ ] Blocked tasks have checkpoint info for resume
433
+ - [ ] Cascading skip applied for dependent tasks
434
+ - [ ] discoveries.ndjson append-only throughout
435
+ </success_criteria>