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,503 +1,491 @@
1
- ---
2
- name: manage-issue-discover
3
- description: Multi-perspective issue discovery via CSV wave pipeline. 8 parallel perspective agents scan the codebase independently, then a dedup agent aggregates and creates issues. Replaces manage-issue-discover command.
4
- argument-hint: "[-y|--yes] [-c|--concurrency N] [--continue] \"[by-prompt 'what to look for']\""
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 perspective selection, skip interactive validation, use defaults for scope detection.
11
-
12
- # Maestro Issue Discover (CSV Wave)
13
-
14
- ## Usage
15
-
16
- ```bash
17
- $manage-issue-discover
18
- $manage-issue-discover -c 8 ""
19
- $manage-issue-discover -y "by-prompt 'error handling gaps in auth module'"
20
- $manage-issue-discover --continue "discover-multi-20260318"
21
- ```
22
-
23
- **Flags**:
24
- - `-y, --yes`: Skip all confirmations (auto mode)
25
- - `-c, --concurrency N`: Max concurrent agents within each wave (default: 8)
26
- - `--continue`: Resume existing session
27
-
28
- **Output Directory**: `.workflow/.csv-wave/{session-id}/`
29
- **Core Output**: `tasks.csv` (master state) + `results.csv` (final) + `discoveries.ndjson` (shared exploration) + `context.md` (human-readable report) + issues appended to `.workflow/issues/issues.jsonl`
30
-
31
- ---
32
-
33
- ## Overview
34
-
35
- Wave-based multi-perspective issue discovery using `spawn_agents_on_csv`. In default mode, 8 independent perspective agents scan the codebase in parallel (Wave 1), then a single dedup + issue creation agent aggregates all findings (Wave 2). In by-prompt mode, user-defined exploration dimensions replace the 8 fixed perspectives.
36
-
37
- **Core workflow**: Parse Mode -> Define Perspectives -> Parallel Scan -> Dedup + Issue Creation
38
-
39
- **Dual mode**:
40
- - **Default (no args)**: 8-perspective scan (security, performance, reliability, maintainability, scalability, ux, accessibility, compliance)
41
- - **`by-prompt "..."`**: User-driven exploration decomposed into 3-5 search dimensions
42
-
43
- ```
44
- +-------------------------------------------------------------------------+
45
- | ISSUE DISCOVERY CSV WAVE WORKFLOW |
46
- +-------------------------------------------------------------------------+
47
- | |
48
- | Phase 1: Mode Resolution -> CSV |
49
- | +-- Parse mode from arguments (multi-perspective or by-prompt) |
50
- | +-- Validate environment (.workflow/ exists) |
51
- | +-- Initialize discovery session directory |
52
- | +-- [multi] Generate 8 perspective rows + 1 dedup row |
53
- | +-- [by-prompt] Decompose prompt into 3-5 dimensions + 1 dedup row |
54
- | +-- Determine scope globs per perspective/dimension |
55
- | +-- Generate tasks.csv |
56
- | +-- User validates perspective breakdown (skip if -y) |
57
- | |
58
- | Phase 2: Wave Execution Engine |
59
- | +-- Wave 1: Perspective/Dimension Scan (parallel) |
60
- | | +-- Each agent scans codebase from its perspective |
61
- | | +-- Agent identifies concrete issues with file:line evidence |
62
- | | +-- Agent rates findings by severity (critical/high/medium/low) |
63
- | | +-- Discoveries shared via board (cross-perspective patterns) |
64
- | | +-- Results: issues_found + severity_distribution per agent |
65
- | +-- Wave 2: Dedup + Issue Creation (single agent) |
66
- | | +-- Aggregates all perspective findings |
67
- | | +-- Deduplicates by file path + description similarity |
68
- | | +-- Keeps higher-severity duplicate |
69
- | | +-- Creates issue records (ISS-YYYYMMDD-NNN) |
70
- | | +-- Appends to issues.jsonl |
71
- | +-- discoveries.ndjson shared across all waves (append-only) |
72
- | |
73
- | Phase 3: Results Aggregation |
74
- | +-- Export results.csv |
75
- | +-- Generate context.md with all findings |
76
- | +-- Update discovery-state.json |
77
- | +-- Display summary with breakdown by perspective + severity |
78
- | +-- Suggest next steps |
79
- | |
80
- +-------------------------------------------------------------------------+
81
- ```
82
-
83
- ---
84
-
85
- ## CSV Schema
86
-
87
- ### tasks.csv (Master State)
88
-
89
- ```csv
90
- id,title,description,perspective,scope_glob,deps,context_from,wave,status,findings,issues_found,severity_distribution,error
91
- "1","Security Scan","Scan codebase for security vulnerabilities: authentication bypass, injection flaws, XSS, CSRF, sensitive data exposure, insecure crypto, secrets in code. Rate each finding critical/high/medium/low with file:line references.","security","src/**/*.{ts,tsx,js,jsx}","","","1","","","","",""
92
- "2","Performance Scan","Scan codebase for performance issues: N+1 queries, unbounded loops, missing caching, memory leaks, large payloads, blocking operations, unoptimized algorithms.","performance","src/**/*.{ts,tsx,js,jsx}","","","1","","","","",""
93
- "3","Reliability Scan","Scan codebase for reliability issues: unhandled errors, missing retry logic, race conditions, data integrity gaps, missing graceful degradation, silent failures.","reliability","src/**/*.{ts,tsx,js,jsx}","","","1","","","","",""
94
- "4","Maintainability Scan","Scan codebase for maintainability issues: code duplication, tight coupling, missing abstractions, unclear naming, dead code, overly complex functions.","maintainability","src/**/*.{ts,tsx,js,jsx}","","","1","","","","",""
95
- "5","Scalability Scan","Scan codebase for scalability issues: hardcoded limits, single-threaded bottlenecks, stateful assumptions, schema rigidity, missing pagination.","scalability","src/**/*.{ts,tsx,js,jsx}","","","1","","","","",""
96
- "6","UX Scan","Scan codebase for UX issues: confusing flows, missing user feedback, inconsistent behavior, missing loading states, poor error messages.","ux","src/**/*.{ts,tsx,js,jsx}","","","1","","","","",""
97
- "7","Accessibility Scan","Scan codebase for accessibility issues: missing ARIA labels, keyboard navigation gaps, color contrast problems, missing alt text, focus management issues.","accessibility","src/**/*.{ts,tsx,js,jsx}","","","1","","","","",""
98
- "8","Compliance Scan","Scan codebase for compliance issues: logging gaps, missing audit trails, data retention violations, privacy control gaps, regulatory requirement gaps.","compliance","src/**/*.{ts,tsx,js,jsx}","","","1","","","","",""
99
- "9","Dedup + Issue Creation","Aggregate all perspective findings. Deduplicate by file path + description similarity (keep higher severity). Generate ISS-YYYYMMDD-NNN issue records. Append to .workflow/issues/issues.jsonl.","dedup","","1;2;3;4;5;6;7;8","1;2;3;4;5;6;7;8","2","","","","",""
100
- ```
101
-
102
- **Columns**:
103
-
104
- | Column | Phase | Description |
105
- |--------|-------|-------------|
106
- | `id` | Input | Unique task identifier (string) |
107
- | `title` | Input | Short task title |
108
- | `description` | Input | Detailed scan instructions for this perspective |
109
- | `perspective` | Input | Scan perspective: security/performance/reliability/maintainability/scalability/ux/accessibility/compliance/dedup |
110
- | `scope_glob` | Input | File scope glob for analysis (e.g., `src/**/*.{ts,tsx}`) |
111
- | `deps` | Input | Semicolon-separated dependency task IDs |
112
- | `context_from` | Input | Semicolon-separated task IDs whose findings this task needs |
113
- | `wave` | Computed | Wave number (1 = perspective scans, 2 = dedup + issue creation) |
114
- | `status` | Output | `pending` -> `completed` / `failed` / `skipped` |
115
- | `findings` | Output | Key scan findings summary (max 500 chars) |
116
- | `issues_found` | Output | JSON array of discovered issues: `[{"title":"...","severity":"critical","description":"...","location":"file:line","fix_direction":"...","affected_components":["..."]}]` |
117
- | `severity_distribution` | Output | JSON: `{"critical":N,"high":N,"medium":N,"low":N}` |
118
- | `error` | Output | Error message if failed |
119
-
120
- ### Per-Wave CSV (Temporary)
121
-
122
- Each wave generates `wave-{N}.csv` with extra `prev_context` column.
123
-
124
- ---
125
-
126
- ## Output Artifacts
127
-
128
- | File | Purpose | Lifecycle |
129
- |------|---------|-----------|
130
- | `tasks.csv` | Master state -- all tasks with status/findings | Updated after each wave |
131
- | `wave-{N}.csv` | Per-wave input (temporary) | Created before wave, deleted after |
132
- | `results.csv` | Final export of all task results | Created in Phase 3 |
133
- | `discoveries.ndjson` | Shared exploration board | Append-only, carries across waves |
134
- | `context.md` | Human-readable discovery report | Created in Phase 3 |
135
- | `discovery-state.json` | Session metadata and progress | Updated throughout |
136
- | `.workflow/issues/issues.jsonl` | Issues appended here | Append-only |
137
-
138
- ---
139
-
140
- ## Session Structure
141
-
142
- ```
143
- .workflow/.csv-wave/discover-{mode}-{date}/
144
- +-- tasks.csv
145
- +-- results.csv
146
- +-- discoveries.ndjson
147
- +-- context.md
148
- +-- discovery-state.json
149
- +-- wave-{N}.csv (temporary)
150
- ```
151
-
152
- Also writes to:
153
- ```
154
- .workflow/issues/discoveries/{SESSION_ID}/
155
- +-- discovery-state.json (copy)
156
- +-- discovery-issues.jsonl
157
- +-- {perspective}-findings.json (per perspective raw output)
158
- ```
159
-
160
- ---
161
-
162
- ## Implementation
163
-
164
- ### Session Initialization
165
-
166
- ```javascript
167
- const getUtc8ISOString = () => new Date(Date.now() + 8 * 60 * 60 * 1000).toISOString()
168
-
169
- // Parse flags
170
- const AUTO_YES = $ARGUMENTS.includes('--yes') || $ARGUMENTS.includes('-y')
171
- const continueMode = $ARGUMENTS.includes('--continue')
172
- const concurrencyMatch = $ARGUMENTS.match(/(?:--concurrency|-c)\s+(\d+)/)
173
- const maxConcurrency = concurrencyMatch ? parseInt(concurrencyMatch[1]) : 8
174
-
175
- // Parse mode
176
- const cleanArgs = $ARGUMENTS
177
- .replace(/--yes|-y|--continue|--concurrency\s+\d+|-c\s+\d+/g, '')
178
- .trim()
179
-
180
- const isByPrompt = cleanArgs.startsWith('by-prompt')
181
- const userPrompt = isByPrompt
182
- ? cleanArgs.replace(/^by-prompt\s*/, '').replace(/^['"]|['"]$/g, '').trim()
183
- : ''
184
- const mode = isByPrompt ? 'by-prompt' : 'multi'
185
-
186
- const dateStr = getUtc8ISOString().substring(0, 10).replace(/-/g, '')
187
- const timeStr = getUtc8ISOString().substring(11, 19).replace(/:/g, '')
188
- const sessionId = `DBP-${dateStr}-${timeStr}`
189
- const csvSessionId = `discover-${mode}-${dateStr}`
190
- const sessionFolder = `.workflow/.csv-wave/${csvSessionId}`
191
- const discoveryDir = `.workflow/issues/discoveries/${sessionId}`
192
-
193
- Bash(`mkdir -p ${sessionFolder} && mkdir -p ${discoveryDir} && mkdir -p .workflow/issues`)
194
- Bash(`touch .workflow/issues/issues.jsonl`)
195
- ```
196
-
197
- Initialize `discovery-state.json`:
198
- ```json
199
- {
200
- "id": "{sessionId}",
201
- "mode": "{mode}",
202
- "status": "in_progress",
203
- "started_at": "{ISO}",
204
- "completed_at": null,
205
- "perspectives_completed": [],
206
- "issues_found": 0,
207
- "issues_deduplicated": 0
208
- }
209
- ```
210
-
211
- ---
212
-
213
- ### Phase 1: Mode Resolution -> CSV
214
-
215
- **Objective**: Determine mode, define perspectives/dimensions, determine scope, generate tasks.csv.
216
-
217
- #### Multi-Perspective Mode (default)
218
-
219
- **8 fixed perspectives**:
220
-
221
- | # | Perspective | Focus | Guiding Question |
222
- |---|-------------|-------|------------------|
223
- | 1 | security | Auth, authz, input validation, secrets, injection | What security vulnerabilities or unsafe patterns exist? |
224
- | 2 | performance | N+1 queries, loops, caching, memory, payloads | What performance bottlenecks or inefficiencies exist? |
225
- | 3 | reliability | Error handling, retry, race conditions, data integrity | What failure modes are unhandled or could cause data loss? |
226
- | 4 | maintainability | Duplication, coupling, abstractions, naming, dead code | What makes this codebase harder to understand or change? |
227
- | 5 | scalability | Hardcoded limits, single-thread, stateful, schema rigidity | What will break or degrade as load/data/users increase? |
228
- | 6 | ux | Confusing flows, feedback, consistency, loading states | What creates friction or confusion for end users? |
229
- | 7 | accessibility | Screen reader, keyboard nav, contrast, ARIA, focus | What barriers exist for users with disabilities? |
230
- | 8 | compliance | Logging, audit trails, retention, privacy, regulatory | What regulatory or policy requirements are not met? |
231
-
232
- **CSV generation**: 8 perspective rows (wave 1) + 1 dedup row (wave 2).
233
-
234
- **Scope detection**: Default `src/**/*.{ts,tsx,js,jsx}`. Refine by reading `.workflow/project.md` for tech stack hints.
235
-
236
- #### By-Prompt Mode
237
-
238
- 1. Parse `userPrompt` -- if empty, ask user interactively
239
- 2. Decompose prompt into 3-5 exploration dimensions (use analysis to break down the user's intent into searchable dimensions)
240
- 3. For each dimension: define name, description, search patterns, file patterns, finding criteria
241
- 4. Store dimensions in `{discoveryDir}/exploration-plan.json`
242
- 5. Generate N dimension rows (wave 1) + 1 dedup row (wave 2)
243
-
244
- **Specs loading**: `specs_content = maestro spec load --category execution` -- pass to agents for severity calibration.
245
-
246
- **User validation**: Display perspective/dimension breakdown (skip if AUTO_YES).
247
-
248
- ---
249
-
250
- ### Phase 2: Wave Execution Engine
251
-
252
- **Objective**: Execute perspective scans wave-by-wave via spawn_agents_on_csv.
253
-
254
- #### Wave 1: Perspective/Dimension Scans (Parallel)
255
-
256
- 1. Read master `tasks.csv`
257
- 2. Filter rows where `wave == 1` AND `status == pending`
258
- 3. No prev_context needed (wave 1 has no predecessors)
259
- 4. Write `wave-1.csv`
260
- 5. Execute:
261
-
262
- ```javascript
263
- spawn_agents_on_csv({
264
- csv_path: `${sessionFolder}/wave-1.csv`,
265
- id_column: "id",
266
- instruction: buildDiscoverInstruction(sessionFolder, discoveryDir, mode),
267
- max_concurrency: maxConcurrency,
268
- max_runtime_seconds: 900,
269
- output_csv_path: `${sessionFolder}/wave-1-results.csv`,
270
- output_schema: {
271
- type: "object",
272
- properties: {
273
- id: { type: "string" },
274
- status: { type: "string", enum: ["completed", "failed"] },
275
- findings: { type: "string" },
276
- issues_found: { type: "string" },
277
- severity_distribution: { type: "string" },
278
- error: { type: "string" }
279
- },
280
- required: ["id", "status", "findings"]
281
- }
282
- })
283
- ```
284
-
285
- 6. Read `wave-1-results.csv`, merge into master `tasks.csv`
286
- 7. For each completed perspective, save raw findings to `{discoveryDir}/{perspective}-findings.json`
287
- 8. Update `discovery-state.json`: `perspectives_completed += ["{perspective}"]`
288
- 9. Delete `wave-1.csv`
289
-
290
- **Perspective scan agent protocol**:
291
- - Scan all source files matching scope_glob
292
- - Identify concrete issues with file:line references
293
- - Rate each finding: critical / high / medium / low
294
- - Provide brief fix direction for each finding
295
- - Report affected_components[]
296
- - Share cross-cutting discoveries via discovery board
297
- - Output issues_found as JSON array + severity_distribution as JSON object
298
-
299
- #### Wave 2: Dedup + Issue Creation (Single Agent)
300
-
301
- 1. Read master `tasks.csv`
302
- 2. Filter rows where `wave == 2` AND `status == pending`
303
- 3. Check deps -- if all wave 1 agents failed, skip dedup
304
- 4. Build `prev_context` from wave 1 findings:
305
- ```
306
- [Task 1: Security Scan] Found 3 issues: SQL injection in query builder (critical), missing CSRF token (high)...
307
- [Task 2: Performance Scan] Found 5 issues: N+1 query in user listing (high), missing pagination (medium)...
308
- ...
309
- ```
310
- 5. Write `wave-2.csv` with `prev_context` column
311
- 6. Execute `spawn_agents_on_csv` for dedup agent
312
- 7. Merge results into master `tasks.csv`
313
- 8. Delete `wave-2.csv`
314
-
315
- **Dedup agent protocol**:
316
- - Load all perspective findings from prev_context
317
- - Merge into single list
318
- - Deduplicate:
319
- - Group findings by affected file path
320
- - Within each file group, compare descriptions
321
- - If two findings describe the same issue (>80% overlap or same file:line), keep higher severity
322
- - For each unique finding:
323
- - Generate ISS-YYYYMMDD-NNN ID (read existing issues.jsonl to avoid collisions)
324
- - Build issue record with full schema (id, title, status, priority, severity, source, description, fix_direction, context, tags, etc.)
325
- - Severity-to-priority: critical->1, high->2, medium->3, low->4
326
- - Set source = "discovery", tags = ["{perspective}"]
327
- - Append all issues to `.workflow/issues/issues.jsonl`
328
- - Append to `{discoveryDir}/discovery-issues.jsonl`
329
- - Report: total issues_found (pre-dedup), issues after dedup, severity_distribution
330
-
331
- ---
332
-
333
- ### Phase 3: Results Aggregation
334
-
335
- **Objective**: Generate final results and human-readable report.
336
-
337
- 1. Read final master `tasks.csv`
338
- 2. Export as `results.csv`
339
- 3. **Update discovery-state.json**:
340
-
341
- ```json
342
- {
343
- "id": "{sessionId}",
344
- "mode": "{mode}",
345
- "status": "completed",
346
- "started_at": "{ISO}",
347
- "completed_at": "{ISO}",
348
- "perspectives_completed": ["security", "performance", ...],
349
- "issues_found": 42,
350
- "issues_deduplicated": 31
351
- }
352
- ```
353
-
354
- 4. Copy `discovery-state.json` to `{discoveryDir}/discovery-state.json`
355
-
356
- 5. **Generate context.md**:
357
-
358
- ```markdown
359
- # Issue Discovery Report
360
-
361
- ## Summary
362
- - Session: {sessionId}
363
- - Mode: {mode}
364
- - Perspectives: {perspective_count}
365
- - Raw findings: {issues_found}
366
- - Unique issues: {issues_deduplicated}
367
-
368
- ## Breakdown by Perspective
369
- | Perspective | Findings | Critical | High | Medium | Low |
370
- |-------------|----------|----------|------|--------|-----|
371
- | Security | {N} | {N} | {N} | {N} | {N} |
372
- | Performance | {N} | {N} | {N} | {N} | {N} |
373
- | ... | | | | | |
374
-
375
- ## Severity Distribution
376
- | Severity | Count |
377
- |----------|-------|
378
- | Critical | {N} |
379
- | High | {N} |
380
- | Medium | {N} |
381
- | Low | {N} |
382
-
383
- ## Perspective Details
384
- ### {perspective_name}
385
- {findings_summary}
386
-
387
- **Top Issues:**
388
- {top_issues_list}
389
-
390
- ## Issues Created
391
- {list of ISS-YYYYMMDD-NNN IDs with titles}
392
- ```
393
-
394
- 6. **Display summary**:
395
-
396
- ```
397
- ====================================================
398
- DISCOVERY COMPLETE: {sessionId}
399
- Mode: {mode} ({perspective_count} perspectives)
400
- Findings: {issues_found} raw, {issues_deduplicated} unique
401
- Issues created: {issues_deduplicated}
402
- ====================================================
403
-
404
- BREAKDOWN BY PERSPECTIVE:
405
- Security: {count}
406
- Performance: {count}
407
- Reliability: {count}
408
- Maintainability: {count}
409
- Scalability: {count}
410
- UX: {count}
411
- Accessibility: {count}
412
- Compliance: {count}
413
-
414
- BREAKDOWN BY SEVERITY:
415
- Critical: {count}
416
- High: {count}
417
- Medium: {count}
418
- Low: {count}
419
-
420
- Files:
421
- {session_folder}/results.csv
422
- {session_folder}/context.md
423
- {discoveryDir}/discovery-state.json
424
- {discoveryDir}/discovery-issues.jsonl
425
- .workflow/issues/issues.jsonl (appended)
426
- ```
427
-
428
- 7. **Next step routing**:
429
-
430
- | Result | Suggestion |
431
- |--------|------------|
432
- | Critical issues found | `$manage-issue "list --severity critical"` -- Review critical issues |
433
- | Issues created | `$manage-issue "list"` -- View all issues |
434
- | Specific area needs deeper look | `$manage-issue-discover "by-prompt '...'"` -- Explore deeper |
435
- | Full scan complete | `$manage-issue "list --source discovery"` -- View discovered issues |
436
-
437
- ---
438
-
439
- ## Shared Discovery Board Protocol
440
-
441
- ### Standard Discovery Types
442
-
443
- | Type | Dedup Key | Data Schema | Description |
444
- |------|-----------|-------------|-------------|
445
- | `code_pattern` | `data.name` | `{name, file, description}` | Reusable code pattern found |
446
- | `integration_point` | `data.file` | `{file, description, exports[]}` | Module connection point |
447
- | `convention` | singleton | `{naming, imports, formatting}` | Project code conventions |
448
- | `blocker` | `data.issue` | `{issue, severity, impact}` | Blocking issue found |
449
- | `tech_stack` | singleton | `{framework, language, tools[]}` | Technology stack info |
450
-
451
- ### Domain Discovery Types
452
-
453
- | Type | Dedup Key | Data Schema | Description |
454
- |------|-----------|-------------|-------------|
455
- | `vulnerability` | `data.location` | `{location, type, severity, cwe}` | Security vulnerability |
456
- | `code_smell` | `data.location` | `{location, type, severity, description}` | Code quality issue |
457
- | `performance_hotspot` | `data.location` | `{location, type, impact}` | Performance issue |
458
- | `reliability_risk` | `data.location` | `{location, failure_mode, impact}` | Reliability concern |
459
- | `scalability_limit` | `data.location` | `{location, constraint, threshold}` | Scalability bottleneck |
460
-
461
- ### Protocol
462
-
463
- 1. **Read** `{session_folder}/discoveries.ndjson` before own scan
464
- 2. **Skip covered**: If discovery of same type + dedup key exists, skip
465
- 3. **Write immediately**: Append findings as found
466
- 4. **Append-only**: Never modify or delete
467
- 5. **Deduplicate**: Check before writing
468
-
469
- ```bash
470
- echo '{"ts":"<ISO>","worker":"{id}","type":"vulnerability","data":{"location":"src/auth/login.ts:42","type":"sql_injection","severity":"critical","cwe":"CWE-89"}}' >> {session_folder}/discoveries.ndjson
471
- ```
472
-
473
- ---
474
-
475
- ## Error Handling
476
-
477
- | Error | Resolution |
478
- |-------|------------|
479
- | `.workflow/` does not exist | Abort: "No project initialized. Run maestro-init first." |
480
- | `by-prompt` with empty prompt | Interactive prompt with suggested options |
481
- | Perspective agent timeout | Mark as failed, continue remaining perspectives |
482
- | All perspective agents failed | Skip dedup, report no findings |
483
- | Dedup agent failed | Use wave 1 results directly, create issues from raw findings |
484
- | issues.jsonl write failure | Retry once, then report error with findings in context.md |
485
- | CSV parse error | Validate format, show line number |
486
- | discoveries.ndjson corrupt | Ignore malformed lines |
487
- | Continue mode: no session found | List available sessions |
488
- | ID collision in issues.jsonl | Re-read file, recalculate next sequence number |
489
-
490
- ---
491
-
492
- ## Core Rules
493
-
494
- 1. **Start Immediately**: First action is session initialization, then Phase 1
495
- 2. **Wave Order is Sacred**: Never execute wave 2 before wave 1 completes and results are merged
496
- 3. **CSV is Source of Truth**: Master tasks.csv holds all state
497
- 4. **Context Propagation**: prev_context built from master CSV, not from memory
498
- 5. **Discovery Board is Append-Only**: Never clear, modify, or recreate discoveries.ndjson
499
- 6. **Skip on Failure**: If all perspective agents failed, skip dedup
500
- 7. **Evidence Required**: Every finding must have file:line reference -- no speculative issues
501
- 8. **Dedup Before Create**: Never append to issues.jsonl without deduplication
502
- 9. **Cleanup Temp Files**: Remove wave-{N}.csv after results are merged
503
- 10. **DO NOT STOP**: Continuous execution until all waves complete
1
+ ---
2
+ name: manage-issue-discover
3
+ description: Multi-perspective issue discovery via CSV wave pipeline. 8 parallel perspective agents scan the codebase independently, then a dedup agent aggregates and creates issues. Replaces manage-issue-discover command.
4
+ argument-hint: "[-y|--yes] [-c|--concurrency N] [--continue] \"[by-prompt 'what to look for']\""
5
+ allowed-tools: spawn_agents_on_csv, Read, Write, Edit, Bash, Glob, Grep, AskUserQuestion
6
+ ---
7
+
8
+ <purpose>
9
+ Wave-based multi-perspective issue discovery using `spawn_agents_on_csv`. In default mode, 8 independent perspective agents scan the codebase in parallel (Wave 1), then a single dedup + issue creation agent aggregates all findings (Wave 2). In by-prompt mode, user-defined exploration dimensions replace the 8 fixed perspectives.
10
+
11
+ **Core workflow**: Parse Mode -> Define Perspectives -> Parallel Scan -> Dedup + Issue Creation
12
+
13
+ **Dual mode**:
14
+ - **Default (no args)**: 8-perspective scan (security, performance, reliability, maintainability, scalability, ux, accessibility, compliance)
15
+ - **`by-prompt "..."`**: User-driven exploration decomposed into 3-5 search dimensions
16
+
17
+ ```
18
+ +-------------------------------------------------------------------------+
19
+ | ISSUE DISCOVERY CSV WAVE WORKFLOW |
20
+ +-------------------------------------------------------------------------+
21
+ | |
22
+ | Phase 1: Mode Resolution -> CSV |
23
+ | +-- Parse mode from arguments (multi-perspective or by-prompt) |
24
+ | +-- Validate environment (.workflow/ exists) |
25
+ | +-- Initialize discovery session directory |
26
+ | +-- [multi] Generate 8 perspective rows + 1 dedup row |
27
+ | +-- [by-prompt] Decompose prompt into 3-5 dimensions + 1 dedup row |
28
+ | +-- Determine scope globs per perspective/dimension |
29
+ | +-- Generate tasks.csv |
30
+ | +-- User validates perspective breakdown (skip if -y) |
31
+ | |
32
+ | Phase 2: Wave Execution Engine |
33
+ | +-- Wave 1: Perspective/Dimension Scan (parallel) |
34
+ | | +-- Each agent scans codebase from its perspective |
35
+ | | +-- Agent identifies concrete issues with file:line evidence |
36
+ | | +-- Agent rates findings by severity (critical/high/medium/low) |
37
+ | | +-- Discoveries shared via board (cross-perspective patterns) |
38
+ | | +-- Results: issues_found + severity_distribution per agent |
39
+ | +-- Wave 2: Dedup + Issue Creation (single agent) |
40
+ | | +-- Aggregates all perspective findings |
41
+ | | +-- Deduplicates by file path + description similarity |
42
+ | | +-- Keeps higher-severity duplicate |
43
+ | | +-- Creates issue records (ISS-YYYYMMDD-NNN) |
44
+ | | +-- Appends to issues.jsonl |
45
+ | +-- discoveries.ndjson shared across all waves (append-only) |
46
+ | |
47
+ | Phase 3: Results Aggregation |
48
+ | +-- Export results.csv |
49
+ | +-- Generate context.md with all findings |
50
+ | +-- Update discovery-state.json |
51
+ | +-- Display summary with breakdown by perspective + severity |
52
+ | +-- Suggest next steps |
53
+ | |
54
+ +-------------------------------------------------------------------------+
55
+ ```
56
+ </purpose>
57
+
58
+ <context>
59
+ ```bash
60
+ $manage-issue-discover
61
+ $manage-issue-discover -c 8 ""
62
+ $manage-issue-discover -y "by-prompt 'error handling gaps in auth module'"
63
+ $manage-issue-discover --continue "discover-multi-20260318"
64
+ ```
65
+
66
+ **Flags**:
67
+ - `-y, --yes`: Skip all confirmations (auto mode)
68
+ - `-c, --concurrency N`: Max concurrent agents within each wave (default: 8)
69
+ - `--continue`: Resume existing session
70
+
71
+ When `--yes` or `-y`: Auto-confirm perspective selection, skip interactive validation, use defaults for scope detection.
72
+
73
+ **Output Directory**: `.workflow/.csv-wave/{session-id}/`
74
+ **Core Output**: `tasks.csv` (master state) + `results.csv` (final) + `discoveries.ndjson` (shared exploration) + `context.md` (human-readable report) + issues appended to `.workflow/issues/issues.jsonl`
75
+ </context>
76
+
77
+ <csv_schema>
78
+ ### tasks.csv (Master State)
79
+
80
+ ```csv
81
+ id,title,description,perspective,scope_glob,deps,context_from,wave,status,findings,issues_found,severity_distribution,error
82
+ "1","Security Scan","Scan codebase for security vulnerabilities: authentication bypass, injection flaws, XSS, CSRF, sensitive data exposure, insecure crypto, secrets in code. Rate each finding critical/high/medium/low with file:line references.","security","src/**/*.{ts,tsx,js,jsx}","","","1","","","","",""
83
+ "2","Performance Scan","Scan codebase for performance issues: N+1 queries, unbounded loops, missing caching, memory leaks, large payloads, blocking operations, unoptimized algorithms.","performance","src/**/*.{ts,tsx,js,jsx}","","","1","","","","",""
84
+ "3","Reliability Scan","Scan codebase for reliability issues: unhandled errors, missing retry logic, race conditions, data integrity gaps, missing graceful degradation, silent failures.","reliability","src/**/*.{ts,tsx,js,jsx}","","","1","","","","",""
85
+ "4","Maintainability Scan","Scan codebase for maintainability issues: code duplication, tight coupling, missing abstractions, unclear naming, dead code, overly complex functions.","maintainability","src/**/*.{ts,tsx,js,jsx}","","","1","","","","",""
86
+ "5","Scalability Scan","Scan codebase for scalability issues: hardcoded limits, single-threaded bottlenecks, stateful assumptions, schema rigidity, missing pagination.","scalability","src/**/*.{ts,tsx,js,jsx}","","","1","","","","",""
87
+ "6","UX Scan","Scan codebase for UX issues: confusing flows, missing user feedback, inconsistent behavior, missing loading states, poor error messages.","ux","src/**/*.{ts,tsx,js,jsx}","","","1","","","","",""
88
+ "7","Accessibility Scan","Scan codebase for accessibility issues: missing ARIA labels, keyboard navigation gaps, color contrast problems, missing alt text, focus management issues.","accessibility","src/**/*.{ts,tsx,js,jsx}","","","1","","","","",""
89
+ "8","Compliance Scan","Scan codebase for compliance issues: logging gaps, missing audit trails, data retention violations, privacy control gaps, regulatory requirement gaps.","compliance","src/**/*.{ts,tsx,js,jsx}","","","1","","","","",""
90
+ "9","Dedup + Issue Creation","Aggregate all perspective findings. Deduplicate by file path + description similarity (keep higher severity). Generate ISS-YYYYMMDD-NNN issue records. Append to .workflow/issues/issues.jsonl.","dedup","","1;2;3;4;5;6;7;8","1;2;3;4;5;6;7;8","2","","","","",""
91
+ ```
92
+
93
+ **Columns**:
94
+
95
+ | Column | Phase | Description |
96
+ |--------|-------|-------------|
97
+ | `id` | Input | Unique task identifier (string) |
98
+ | `title` | Input | Short task title |
99
+ | `description` | Input | Detailed scan instructions for this perspective |
100
+ | `perspective` | Input | Scan perspective: security/performance/reliability/maintainability/scalability/ux/accessibility/compliance/dedup |
101
+ | `scope_glob` | Input | File scope glob for analysis (e.g., `src/**/*.{ts,tsx}`) |
102
+ | `deps` | Input | Semicolon-separated dependency task IDs |
103
+ | `context_from` | Input | Semicolon-separated task IDs whose findings this task needs |
104
+ | `wave` | Computed | Wave number (1 = perspective scans, 2 = dedup + issue creation) |
105
+ | `status` | Output | `pending` -> `completed` / `failed` / `skipped` |
106
+ | `findings` | Output | Key scan findings summary (max 500 chars) |
107
+ | `issues_found` | Output | JSON array of discovered issues: `[{"title":"...","severity":"critical","description":"...","location":"file:line","fix_direction":"...","affected_components":["..."]}]` |
108
+ | `severity_distribution` | Output | JSON: `{"critical":N,"high":N,"medium":N,"low":N}` |
109
+ | `error` | Output | Error message if failed |
110
+
111
+ ### Per-Wave CSV (Temporary)
112
+
113
+ Each wave generates `wave-{N}.csv` with extra `prev_context` column.
114
+
115
+ ### Output Artifacts
116
+
117
+ | File | Purpose | Lifecycle |
118
+ |------|---------|-----------|
119
+ | `tasks.csv` | Master state -- all tasks with status/findings | Updated after each wave |
120
+ | `wave-{N}.csv` | Per-wave input (temporary) | Created before wave, deleted after |
121
+ | `results.csv` | Final export of all task results | Created in Phase 3 |
122
+ | `discoveries.ndjson` | Shared exploration board | Append-only, carries across waves |
123
+ | `context.md` | Human-readable discovery report | Created in Phase 3 |
124
+ | `discovery-state.json` | Session metadata and progress | Updated throughout |
125
+ | `.workflow/issues/issues.jsonl` | Issues appended here | Append-only |
126
+
127
+ ### Session Structure
128
+
129
+ ```
130
+ .workflow/.csv-wave/discover-{mode}-{date}/
131
+ +-- tasks.csv
132
+ +-- results.csv
133
+ +-- discoveries.ndjson
134
+ +-- context.md
135
+ +-- discovery-state.json
136
+ +-- wave-{N}.csv (temporary)
137
+ ```
138
+
139
+ Also writes to:
140
+ ```
141
+ .workflow/issues/discoveries/{SESSION_ID}/
142
+ +-- discovery-state.json (copy)
143
+ +-- discovery-issues.jsonl
144
+ +-- {perspective}-findings.json (per perspective raw output)
145
+ ```
146
+ </csv_schema>
147
+
148
+ <invariants>
149
+ 1. **Start Immediately**: First action is session initialization, then Phase 1
150
+ 2. **Wave Order is Sacred**: Never execute wave 2 before wave 1 completes and results are merged
151
+ 3. **CSV is Source of Truth**: Master tasks.csv holds all state
152
+ 4. **Context Propagation**: prev_context built from master CSV, not from memory
153
+ 5. **Discovery Board is Append-Only**: Never clear, modify, or recreate discoveries.ndjson
154
+ 6. **Skip on Failure**: If all perspective agents failed, skip dedup
155
+ 7. **Evidence Required**: Every finding must have file:line reference -- no speculative issues
156
+ 8. **Dedup Before Create**: Never append to issues.jsonl without deduplication
157
+ 9. **Cleanup Temp Files**: Remove wave-{N}.csv after results are merged
158
+ 10. **DO NOT STOP**: Continuous execution until all waves complete
159
+ </invariants>
160
+
161
+ <execution>
162
+
163
+ ### Session Initialization
164
+
165
+ ```javascript
166
+ const getUtc8ISOString = () => new Date(Date.now() + 8 * 60 * 60 * 1000).toISOString()
167
+
168
+ // Parse flags
169
+ const AUTO_YES = $ARGUMENTS.includes('--yes') || $ARGUMENTS.includes('-y')
170
+ const continueMode = $ARGUMENTS.includes('--continue')
171
+ const concurrencyMatch = $ARGUMENTS.match(/(?:--concurrency|-c)\s+(\d+)/)
172
+ const maxConcurrency = concurrencyMatch ? parseInt(concurrencyMatch[1]) : 8
173
+
174
+ // Parse mode
175
+ const cleanArgs = $ARGUMENTS
176
+ .replace(/--yes|-y|--continue|--concurrency\s+\d+|-c\s+\d+/g, '')
177
+ .trim()
178
+
179
+ const isByPrompt = cleanArgs.startsWith('by-prompt')
180
+ const userPrompt = isByPrompt
181
+ ? cleanArgs.replace(/^by-prompt\s*/, '').replace(/^['"]|['"]$/g, '').trim()
182
+ : ''
183
+ const mode = isByPrompt ? 'by-prompt' : 'multi'
184
+
185
+ const dateStr = getUtc8ISOString().substring(0, 10).replace(/-/g, '')
186
+ const timeStr = getUtc8ISOString().substring(11, 19).replace(/:/g, '')
187
+ const sessionId = `DBP-${dateStr}-${timeStr}`
188
+ const csvSessionId = `discover-${mode}-${dateStr}`
189
+ const sessionFolder = `.workflow/.csv-wave/${csvSessionId}`
190
+ const discoveryDir = `.workflow/issues/discoveries/${sessionId}`
191
+
192
+ Bash(`mkdir -p ${sessionFolder} && mkdir -p ${discoveryDir} && mkdir -p .workflow/issues`)
193
+ Bash(`touch .workflow/issues/issues.jsonl`)
194
+ ```
195
+
196
+ Initialize `discovery-state.json`:
197
+ ```json
198
+ {
199
+ "id": "{sessionId}",
200
+ "mode": "{mode}",
201
+ "status": "in_progress",
202
+ "started_at": "{ISO}",
203
+ "completed_at": null,
204
+ "perspectives_completed": [],
205
+ "issues_found": 0,
206
+ "issues_deduplicated": 0
207
+ }
208
+ ```
209
+
210
+ ### Phase 1: Mode Resolution -> CSV
211
+
212
+ **Objective**: Determine mode, define perspectives/dimensions, determine scope, generate tasks.csv.
213
+
214
+ #### Multi-Perspective Mode (default)
215
+
216
+ **8 fixed perspectives**:
217
+
218
+ | # | Perspective | Focus | Guiding Question |
219
+ |---|-------------|-------|------------------|
220
+ | 1 | security | Auth, authz, input validation, secrets, injection | What security vulnerabilities or unsafe patterns exist? |
221
+ | 2 | performance | N+1 queries, loops, caching, memory, payloads | What performance bottlenecks or inefficiencies exist? |
222
+ | 3 | reliability | Error handling, retry, race conditions, data integrity | What failure modes are unhandled or could cause data loss? |
223
+ | 4 | maintainability | Duplication, coupling, abstractions, naming, dead code | What makes this codebase harder to understand or change? |
224
+ | 5 | scalability | Hardcoded limits, single-thread, stateful, schema rigidity | What will break or degrade as load/data/users increase? |
225
+ | 6 | ux | Confusing flows, feedback, consistency, loading states | What creates friction or confusion for end users? |
226
+ | 7 | accessibility | Screen reader, keyboard nav, contrast, ARIA, focus | What barriers exist for users with disabilities? |
227
+ | 8 | compliance | Logging, audit trails, retention, privacy, regulatory | What regulatory or policy requirements are not met? |
228
+
229
+ **CSV generation**: 8 perspective rows (wave 1) + 1 dedup row (wave 2).
230
+
231
+ **Scope detection**: Default `src/**/*.{ts,tsx,js,jsx}`. Refine by reading `.workflow/project.md` for tech stack hints.
232
+
233
+ #### By-Prompt Mode
234
+
235
+ 1. Parse `userPrompt` -- if empty, ask user interactively
236
+ 2. Decompose prompt into 3-5 exploration dimensions (use analysis to break down the user's intent into searchable dimensions)
237
+ 3. For each dimension: define name, description, search patterns, file patterns, finding criteria
238
+ 4. Store dimensions in `{discoveryDir}/exploration-plan.json`
239
+ 5. Generate N dimension rows (wave 1) + 1 dedup row (wave 2)
240
+
241
+ **Specs loading**: `specs_content = maestro spec load --category coding` -- pass to agents for severity calibration.
242
+
243
+ **User validation**: Display perspective/dimension breakdown (skip if AUTO_YES).
244
+
245
+ ### Phase 2: Wave Execution Engine
246
+
247
+ **Objective**: Execute perspective scans wave-by-wave via spawn_agents_on_csv.
248
+
249
+ #### Wave 1: Perspective/Dimension Scans (Parallel)
250
+
251
+ 1. Read master `tasks.csv`
252
+ 2. Filter rows where `wave == 1` AND `status == pending`
253
+ 3. No prev_context needed (wave 1 has no predecessors)
254
+ 4. Write `wave-1.csv`
255
+ 5. Execute:
256
+
257
+ ```javascript
258
+ spawn_agents_on_csv({
259
+ csv_path: `${sessionFolder}/wave-1.csv`,
260
+ id_column: "id",
261
+ instruction: buildDiscoverInstruction(sessionFolder, discoveryDir, mode),
262
+ max_concurrency: maxConcurrency,
263
+ max_runtime_seconds: 900,
264
+ output_csv_path: `${sessionFolder}/wave-1-results.csv`,
265
+ output_schema: {
266
+ type: "object",
267
+ properties: {
268
+ id: { type: "string" },
269
+ status: { type: "string", enum: ["completed", "failed"] },
270
+ findings: { type: "string" },
271
+ issues_found: { type: "string" },
272
+ severity_distribution: { type: "string" },
273
+ error: { type: "string" }
274
+ },
275
+ required: ["id", "status", "findings"]
276
+ }
277
+ })
278
+ ```
279
+
280
+ 6. Read `wave-1-results.csv`, merge into master `tasks.csv`
281
+ 7. For each completed perspective, save raw findings to `{discoveryDir}/{perspective}-findings.json`
282
+ 8. Update `discovery-state.json`: `perspectives_completed += ["{perspective}"]`
283
+ 9. Delete `wave-1.csv`
284
+
285
+ **Perspective scan agent protocol**:
286
+ - Scan all source files matching scope_glob
287
+ - Identify concrete issues with file:line references
288
+ - Rate each finding: critical / high / medium / low
289
+ - Provide brief fix direction for each finding
290
+ - Report affected_components[]
291
+ - Share cross-cutting discoveries via discovery board
292
+ - Output issues_found as JSON array + severity_distribution as JSON object
293
+
294
+ #### Wave 2: Dedup + Issue Creation (Single Agent)
295
+
296
+ 1. Read master `tasks.csv`
297
+ 2. Filter rows where `wave == 2` AND `status == pending`
298
+ 3. Check deps -- if all wave 1 agents failed, skip dedup
299
+ 4. Build `prev_context` from wave 1 findings:
300
+ ```
301
+ [Task 1: Security Scan] Found 3 issues: SQL injection in query builder (critical), missing CSRF token (high)...
302
+ [Task 2: Performance Scan] Found 5 issues: N+1 query in user listing (high), missing pagination (medium)...
303
+ ...
304
+ ```
305
+ 5. Write `wave-2.csv` with `prev_context` column
306
+ 6. Execute `spawn_agents_on_csv` for dedup agent
307
+ 7. Merge results into master `tasks.csv`
308
+ 8. Delete `wave-2.csv`
309
+
310
+ **Dedup agent protocol**:
311
+ - Load all perspective findings from prev_context
312
+ - Merge into single list
313
+ - Deduplicate:
314
+ - Group findings by affected file path
315
+ - Within each file group, compare descriptions
316
+ - If two findings describe the same issue (>80% overlap or same file:line), keep higher severity
317
+ - For each unique finding:
318
+ - Generate ISS-YYYYMMDD-NNN ID (read existing issues.jsonl to avoid collisions)
319
+ - Build issue record with full schema (id, title, status, priority, severity, source, description, fix_direction, context, tags, etc.)
320
+ - Severity-to-priority: critical->1, high->2, medium->3, low->4
321
+ - Set source = "discovery", tags = ["{perspective}"]
322
+ - Append all issues to `.workflow/issues/issues.jsonl`
323
+ - Append to `{discoveryDir}/discovery-issues.jsonl`
324
+ - Report: total issues_found (pre-dedup), issues after dedup, severity_distribution
325
+
326
+ ### Phase 3: Results Aggregation
327
+
328
+ **Objective**: Generate final results and human-readable report.
329
+
330
+ 1. Read final master `tasks.csv`
331
+ 2. Export as `results.csv`
332
+ 3. **Update discovery-state.json**:
333
+
334
+ ```json
335
+ {
336
+ "id": "{sessionId}",
337
+ "mode": "{mode}",
338
+ "status": "completed",
339
+ "started_at": "{ISO}",
340
+ "completed_at": "{ISO}",
341
+ "perspectives_completed": ["security", "performance", "..."],
342
+ "issues_found": 42,
343
+ "issues_deduplicated": 31
344
+ }
345
+ ```
346
+
347
+ 4. Copy `discovery-state.json` to `{discoveryDir}/discovery-state.json`
348
+
349
+ 5. **Generate context.md**:
350
+
351
+ ```markdown
352
+ # Issue Discovery Report
353
+
354
+ ## Summary
355
+ - Session: {sessionId}
356
+ - Mode: {mode}
357
+ - Perspectives: {perspective_count}
358
+ - Raw findings: {issues_found}
359
+ - Unique issues: {issues_deduplicated}
360
+
361
+ ## Breakdown by Perspective
362
+ | Perspective | Findings | Critical | High | Medium | Low |
363
+ |-------------|----------|----------|------|--------|-----|
364
+ | Security | {N} | {N} | {N} | {N} | {N} |
365
+ | Performance | {N} | {N} | {N} | {N} | {N} |
366
+ | ... | | | | | |
367
+
368
+ ## Severity Distribution
369
+ | Severity | Count |
370
+ |----------|-------|
371
+ | Critical | {N} |
372
+ | High | {N} |
373
+ | Medium | {N} |
374
+ | Low | {N} |
375
+
376
+ ## Perspective Details
377
+ ### {perspective_name}
378
+ {findings_summary}
379
+
380
+ **Top Issues:**
381
+ {top_issues_list}
382
+
383
+ ## Issues Created
384
+ {list of ISS-YYYYMMDD-NNN IDs with titles}
385
+ ```
386
+
387
+ 6. **Display summary**:
388
+
389
+ ```
390
+ ====================================================
391
+ DISCOVERY COMPLETE: {sessionId}
392
+ Mode: {mode} ({perspective_count} perspectives)
393
+ Findings: {issues_found} raw, {issues_deduplicated} unique
394
+ Issues created: {issues_deduplicated}
395
+ ====================================================
396
+
397
+ BREAKDOWN BY PERSPECTIVE:
398
+ Security: {count}
399
+ Performance: {count}
400
+ Reliability: {count}
401
+ Maintainability: {count}
402
+ Scalability: {count}
403
+ UX: {count}
404
+ Accessibility: {count}
405
+ Compliance: {count}
406
+
407
+ BREAKDOWN BY SEVERITY:
408
+ Critical: {count}
409
+ High: {count}
410
+ Medium: {count}
411
+ Low: {count}
412
+
413
+ Files:
414
+ {session_folder}/results.csv
415
+ {session_folder}/context.md
416
+ {discoveryDir}/discovery-state.json
417
+ {discoveryDir}/discovery-issues.jsonl
418
+ .workflow/issues/issues.jsonl (appended)
419
+ ```
420
+
421
+ 7. **Next step routing**:
422
+
423
+ | Result | Suggestion |
424
+ |--------|------------|
425
+ | Critical issues found | `$manage-issue "list --severity critical"` -- Review critical issues |
426
+ | Issues created | `$manage-issue "list"` -- View all issues |
427
+ | Specific area needs deeper look | `$manage-issue-discover "by-prompt '...'"` -- Explore deeper |
428
+ | Full scan complete | `$manage-issue "list --source discovery"` -- View discovered issues |
429
+
430
+ ### Shared Discovery Board Protocol
431
+
432
+ #### Standard Discovery Types
433
+
434
+ | Type | Dedup Key | Data Schema | Description |
435
+ |------|-----------|-------------|-------------|
436
+ | `code_pattern` | `data.name` | `{name, file, description}` | Reusable code pattern found |
437
+ | `integration_point` | `data.file` | `{file, description, exports[]}` | Module connection point |
438
+ | `convention` | singleton | `{naming, imports, formatting}` | Project code conventions |
439
+ | `blocker` | `data.issue` | `{issue, severity, impact}` | Blocking issue found |
440
+ | `tech_stack` | singleton | `{framework, language, tools[]}` | Technology stack info |
441
+
442
+ #### Domain Discovery Types
443
+
444
+ | Type | Dedup Key | Data Schema | Description |
445
+ |------|-----------|-------------|-------------|
446
+ | `vulnerability` | `data.location` | `{location, type, severity, cwe}` | Security vulnerability |
447
+ | `code_smell` | `data.location` | `{location, type, severity, description}` | Code quality issue |
448
+ | `performance_hotspot` | `data.location` | `{location, type, impact}` | Performance issue |
449
+ | `reliability_risk` | `data.location` | `{location, failure_mode, impact}` | Reliability concern |
450
+ | `scalability_limit` | `data.location` | `{location, constraint, threshold}` | Scalability bottleneck |
451
+
452
+ #### Protocol
453
+
454
+ 1. **Read** `{session_folder}/discoveries.ndjson` before own scan
455
+ 2. **Skip covered**: If discovery of same type + dedup key exists, skip
456
+ 3. **Write immediately**: Append findings as found
457
+ 4. **Append-only**: Never modify or delete
458
+ 5. **Deduplicate**: Check before writing
459
+
460
+ ```bash
461
+ echo '{"ts":"<ISO>","worker":"{id}","type":"vulnerability","data":{"location":"src/auth/login.ts:42","type":"sql_injection","severity":"critical","cwe":"CWE-89"}}' >> {session_folder}/discoveries.ndjson
462
+ ```
463
+ </execution>
464
+
465
+ <error_codes>
466
+
467
+ | Error | Resolution |
468
+ |-------|------------|
469
+ | `.workflow/` does not exist | Abort: "No project initialized. Run maestro-init first." |
470
+ | `by-prompt` with empty prompt | Interactive prompt with suggested options |
471
+ | Perspective agent timeout | Mark as failed, continue remaining perspectives |
472
+ | All perspective agents failed | Skip dedup, report no findings |
473
+ | Dedup agent failed | Use wave 1 results directly, create issues from raw findings |
474
+ | issues.jsonl write failure | Retry once, then report error with findings in context.md |
475
+ | CSV parse error | Validate format, show line number |
476
+ | discoveries.ndjson corrupt | Ignore malformed lines |
477
+ | Continue mode: no session found | List available sessions |
478
+ | ID collision in issues.jsonl | Re-read file, recalculate next sequence number |
479
+ </error_codes>
480
+
481
+ <success_criteria>
482
+ - [ ] Session initialized with discovery-state.json
483
+ - [ ] tasks.csv generated with correct perspective/wave assignments
484
+ - [ ] All perspective agents executed in parallel (wave 1)
485
+ - [ ] Dedup agent aggregates and deduplicates findings (wave 2)
486
+ - [ ] Issues appended to .workflow/issues/issues.jsonl with unique IDs
487
+ - [ ] results.csv and context.md generated with full breakdown
488
+ - [ ] Temporary wave-{N}.csv files cleaned up after merge
489
+ - [ ] discoveries.ndjson maintained as append-only
490
+ - [ ] Per-perspective findings saved to discovery directory
491
+ </success_criteria>