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,566 +1,556 @@
1
- ---
2
- name: maestro-verify
3
- description: Goal-Backward 3-layer verification via CSV wave pipeline. Staged parallel waves check Truths, Artifacts, and Wiring with anti-pattern scan and Nyquist test coverage audit. Replaces maestro-verify command.
4
- argument-hint: "[-y|--yes] [-c|--concurrency N] [--continue] \"<phase> [--skip-tests] [--skip-antipattern]\""
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 check decomposition, skip interactive validation, use defaults for layer detection.
11
-
12
- # Maestro Verify (CSV Wave)
13
-
14
- ## Usage
15
-
16
- ```bash
17
- $maestro-verify "3"
18
- $maestro-verify -c 4 "3 --skip-tests"
19
- $maestro-verify -y "3 --skip-antipattern"
20
- $maestro-verify --continue "verify-phase3-20260318"
21
- ```
22
-
23
- **Flags**:
24
- - `-y, --yes`: Skip all confirmations (auto mode)
25
- - `-c, --concurrency N`: Max concurrent agents within each wave (default: 4)
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) + `verification.json` (structured verification output) + `validation.json` (test coverage output, if Nyquist ran)
30
-
31
- ---
32
-
33
- ## Overview
34
-
35
- Wave-based 3-layer Goal-Backward verification using `spawn_agents_on_csv`. Decomposes verification into staged parallel checks across three waves: truth + artifact existence (Wave 1), artifact substance + wiring (Wave 2), anti-pattern scan + Nyquist audit (Wave 3).
36
-
37
- **Core workflow**: Load Phase Artifacts -> Establish Must-Haves -> Decompose Checks -> Staged Parallel Verification -> Aggregate + Fix Plans
38
-
39
- **Core principle**: Task completion != Goal achievement. A task marked complete may contain stubs/placeholders. This verifier checks that goals are actually achieved.
40
-
41
- ```
42
- +-------------------------------------------------------------------------+
43
- | VERIFICATION CSV WAVE WORKFLOW |
44
- +-------------------------------------------------------------------------+
45
- | |
46
- | Phase 1: Phase Resolution -> CSV |
47
- | +-- Resolve phase directory from arguments |
48
- | +-- Load index.json, plan.json, TASK-*.json, summaries |
49
- | +-- Establish must-haves (truths, artifacts, key links) |
50
- | +-- Decompose into check tasks per layer |
51
- | +-- Assign waves based on layer dependencies |
52
- | +-- Generate tasks.csv with one row per check |
53
- | +-- User validates check breakdown (skip if -y) |
54
- | |
55
- | Phase 2: Wave Execution Engine |
56
- | +-- Wave 1: Truth Checks + Artifact Existence (parallel) |
57
- | | +-- Truth agents verify observable behaviors |
58
- | | +-- Artifact-exist agents check L1 (file exists on disk) |
59
- | | +-- Discoveries shared via board (gap patterns, stubs) |
60
- | | +-- Results: status + evidence + gaps_found per check |
61
- | +-- Wave 2: Artifact Substance + Wiring (parallel) |
62
- | | +-- Substance agents check L2 (real impl, not stub) |
63
- | | +-- Wiring agents check L3 (imported + used) |
64
- | | +-- Needs truth context from wave 1 |
65
- | | +-- Results: status + evidence + gaps_found per check |
66
- | +-- Wave 3: Anti-Pattern Scan + Nyquist Audit (parallel) |
67
- | | +-- Anti-pattern agent scans modified files (skip if flagged) |
68
- | | +-- Nyquist agent maps requirements to tests (skip if flagged) |
69
- | | +-- Needs artifact context from wave 2 |
70
- | | +-- Results: antipatterns[] + coverage gaps |
71
- | +-- discoveries.ndjson shared across all waves (append-only) |
72
- | |
73
- | Phase 3: Results Aggregation |
74
- | +-- Export results.csv |
75
- | +-- Build verification.json (must_haves, gaps, antipatterns, fixes) |
76
- | +-- Build validation.json (if Nyquist ran) |
77
- | +-- Generate context.md with all findings |
78
- | +-- Auto-create issues for gaps + blocker anti-patterns |
79
- | +-- Generate fix plans (cluster related gaps) |
80
- | +-- Update phase index.json with verification status |
81
- | +-- Display summary with next steps |
82
- | |
83
- +-------------------------------------------------------------------------+
84
- ```
85
-
86
- ---
87
-
88
- ## CSV Schema
89
-
90
- ### tasks.csv (Master State)
91
-
92
- ```csv
93
- id,title,description,layer,phase_dir,check_type,deps,context_from,wave,status,findings,gaps_found,fix_plan,error
94
- "1","Truth: User can see existing messages","Verify observable behavior: user can see existing messages by checking supporting artifacts, API calls, and render logic.","truth",".workflow/phases/03-chat/","observable_behavior","","","1","","","","",""
95
- "2","Truth: User can send new messages","Verify observable behavior: user can send new messages by checking form submission, API POST, and state update.","truth",".workflow/phases/03-chat/","observable_behavior","","","1","","","","",""
96
- "3","Artifact Exists: src/components/Chat.tsx","Check L1 existence: verify file src/components/Chat.tsx exists on disk.","artifact",".workflow/phases/03-chat/","exists","","","1","","","","",""
97
- "4","Artifact Exists: src/api/chat.ts","Check L1 existence: verify file src/api/chat.ts exists on disk.","artifact",".workflow/phases/03-chat/","exists","","","1","","","","",""
98
- "5","Artifact Substance: src/components/Chat.tsx","Check L2 substance: verify src/components/Chat.tsx has real implementation (not stub/placeholder). Minimum logic threshold, no placeholder markers.","artifact",".workflow/phases/03-chat/","substance","3","3","2","","","","",""
99
- "6","Artifact Substance: src/api/chat.ts","Check L2 substance: verify src/api/chat.ts has real implementation (not stub/placeholder).","artifact",".workflow/phases/03-chat/","substance","4","4","2","","","","",""
100
- "7","Wiring: Chat.tsx -> /api/chat","Check L3 wiring: verify Chat.tsx imports and calls /api/chat endpoints. Check import statements and actual usage beyond imports.","wiring",".workflow/phases/03-chat/","import_usage","3;4","3;4","2","","","","",""
101
- "8","Anti-Pattern Scan","Scan all modified files for TODO/FIXME/XXX/HACK, placeholder content, empty returns, log-only functions, hardcoded test data, disabled tests. Categorize as Blocker/Warning/Info.","antipattern",".workflow/phases/03-chat/","pattern_scan","1;2;5;6;7","1;2;5;6;7","3","","","","",""
102
- "9","Nyquist Test Coverage Audit","Map requirements to test files. Classify each as COVERED/PARTIAL/MISSING. Detect test framework, run coverage if available.","nyquist",".workflow/phases/03-chat/","test_coverage","1;2;5;6;7","1;2;5;6;7","3","","","","",""
103
- ```
104
-
105
- **Columns**:
106
-
107
- | Column | Phase | Description |
108
- |--------|-------|-------------|
109
- | `id` | Input | Unique task identifier (string) |
110
- | `title` | Input | Short check title |
111
- | `description` | Input | Detailed verification instructions for this check |
112
- | `layer` | Input | Verification layer: truth/artifact/wiring/antipattern/nyquist |
113
- | `phase_dir` | Input | Phase directory path (e.g., `.workflow/phases/03-chat/`) |
114
- | `check_type` | Input | Specific check type: observable_behavior/exists/substance/import_usage/pattern_scan/test_coverage |
115
- | `deps` | Input | Semicolon-separated dependency task IDs |
116
- | `context_from` | Input | Semicolon-separated task IDs whose findings this task needs |
117
- | `wave` | Computed | Wave number (1 = truths + existence, 2 = substance + wiring, 3 = antipattern + nyquist) |
118
- | `status` | Output | `pending` -> `completed` / `failed` / `skipped` |
119
- | `findings` | Output | Key verification findings summary (max 500 chars) |
120
- | `gaps_found` | Output | JSON array of gap descriptions: `[{"id":"GAP-001","type":"missing_feature","severity":"critical","description":"...","fix_direction":"..."}]` |
121
- | `fix_plan` | Output | Suggested fix actions for identified gaps |
122
- | `error` | Output | Error message if failed |
123
-
124
- ### Per-Wave CSV (Temporary)
125
-
126
- Each wave generates `wave-{N}.csv` with extra `prev_context` column.
127
-
128
- ---
129
-
130
- ## Output Artifacts
131
-
132
- | File | Purpose | Lifecycle |
133
- |------|---------|-----------|
134
- | `tasks.csv` | Master state -- all tasks with status/findings | Updated after each wave |
135
- | `wave-{N}.csv` | Per-wave input (temporary) | Created before wave, deleted after |
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 verification report | Created in Phase 3 |
139
- | `verification.json` | Structured verification output for downstream | Created in Phase 3 |
140
- | `validation.json` | Nyquist test coverage output (if ran) | Created in Phase 3 |
141
-
142
- ---
143
-
144
- ## Session Structure
145
-
146
- ```
147
- .workflow/.csv-wave/verify-{phase}-{date}/
148
- +-- tasks.csv
149
- +-- results.csv
150
- +-- discoveries.ndjson
151
- +-- context.md
152
- +-- verification.json
153
- +-- validation.json (if Nyquist ran)
154
- +-- wave-{N}.csv (temporary)
155
- ```
156
-
157
- ---
158
-
159
- ## Implementation
160
-
161
- ### Session Initialization
162
-
163
- ```javascript
164
- const getUtc8ISOString = () => new Date(Date.now() + 8 * 60 * 60 * 1000).toISOString()
165
-
166
- // Parse flags
167
- const AUTO_YES = $ARGUMENTS.includes('--yes') || $ARGUMENTS.includes('-y')
168
- const continueMode = $ARGUMENTS.includes('--continue')
169
- const concurrencyMatch = $ARGUMENTS.match(/(?:--concurrency|-c)\s+(\d+)/)
170
- const maxConcurrency = concurrencyMatch ? parseInt(concurrencyMatch[1]) : 4
171
-
172
- // Parse verify-specific flags
173
- const skipTests = $ARGUMENTS.includes('--skip-tests')
174
- const skipAntipattern = $ARGUMENTS.includes('--skip-antipattern')
175
-
176
- // Clean phase text
177
- const phaseArg = $ARGUMENTS
178
- .replace(/--yes|-y|--continue|--concurrency\s+\d+|-c\s+\d+|--skip-tests|--skip-antipattern/g, '')
179
- .trim()
180
-
181
- const dateStr = getUtc8ISOString().substring(0, 10).replace(/-/g, '')
182
- const sessionId = `verify-phase${phaseArg}-${dateStr}`
183
- const sessionFolder = `.workflow/.csv-wave/${sessionId}`
184
-
185
- Bash(`mkdir -p ${sessionFolder}`)
186
- ```
187
-
188
- ---
189
-
190
- ### Phase 1: Phase Resolution -> CSV
191
-
192
- **Objective**: Resolve phase, load artifacts, establish must-haves, decompose into check tasks, generate tasks.csv.
193
-
194
- **Decomposition Rules**:
195
-
196
- 1. **Phase resolution**: Resolve `{phaseArg}` to `.workflow/phases/{NN}-{slug}/`
197
- 2. **Artifact loading**: Read from phase directory:
198
- - `index.json` -- success_criteria (ground truth for verification)
199
- - `plan.json` -- original plan with task_ids
200
- - All `.task/TASK-{NNN}.json` -- task definitions with convergence.criteria
201
- - All `.summaries/TASK-{NNN}-summary.md` -- execution results
202
- - `uat.md` (if exists) -- human UAT gaps to incorporate
203
-
204
- 3. **Must-have establishment** (priority order):
205
- - **success_criteria from index.json** -- primary contract
206
- - **convergence.criteria from task JSON** -- per-task completion criteria
207
- - **Derived from phase goal** -- fallback: derive 3-7 observable behaviors
208
-
209
- 4. **Must-have decomposition** into 3 layers:
210
- - **Truths**: Observable behaviors (e.g., "User can see existing messages")
211
- - **Artifacts**: Concrete file paths that must exist and be substantive
212
- - **Key Links**: Critical wiring between artifacts (e.g., "Chat.tsx imports /api/chat")
213
-
214
- 5. **Check task generation**: For each must-have, generate check rows:
215
-
216
- | Layer | Check Types | Wave |
217
- |-------|-------------|------|
218
- | truth | observable_behavior | 1 |
219
- | artifact (exists) | exists | 1 |
220
- | artifact (substance) | substance | 2 |
221
- | wiring | import_usage | 2 |
222
- | antipattern | pattern_scan | 3 (skip if `--skip-antipattern`) |
223
- | nyquist | test_coverage | 3 (skip if `--skip-tests`) |
224
-
225
- 6. **Wave computation**: Assign waves based on layer dependency chain:
226
- - Wave 1: truth + artifact/exists (no predecessors, parallel)
227
- - Wave 2: artifact/substance + wiring (need existence confirmation from wave 1)
228
- - Wave 3: antipattern + nyquist (need substance/wiring context from wave 2)
229
-
230
- 7. **Specs loading**: `specs_content = maestro spec load --category validation`
231
-
232
- 8. **CSV generation**: One row per check task.
233
-
234
- **User validation**: Display check breakdown (skip if AUTO_YES).
235
-
236
- ---
237
-
238
- ### Phase 2: Wave Execution Engine
239
-
240
- **Objective**: Execute verification checks wave-by-wave via spawn_agents_on_csv.
241
-
242
- #### Wave 1: Truth Checks + Artifact Existence (Parallel)
243
-
244
- 1. Read master `tasks.csv`
245
- 2. Filter rows where `wave == 1` AND `status == pending`
246
- 3. No prev_context needed (wave 1 has no predecessors)
247
- 4. Write `wave-1.csv`
248
- 5. Execute:
249
-
250
- ```javascript
251
- spawn_agents_on_csv({
252
- csv_path: `${sessionFolder}/wave-1.csv`,
253
- id_column: "id",
254
- instruction: buildVerifyInstruction(sessionFolder, "wave1"),
255
- max_concurrency: maxConcurrency,
256
- max_runtime_seconds: 600,
257
- output_csv_path: `${sessionFolder}/wave-1-results.csv`,
258
- output_schema: {
259
- type: "object",
260
- properties: {
261
- id: { type: "string" },
262
- status: { type: "string", enum: ["completed", "failed"] },
263
- findings: { type: "string" },
264
- gaps_found: { type: "string" },
265
- fix_plan: { type: "string" },
266
- error: { type: "string" }
267
- },
268
- required: ["id", "status", "findings"]
269
- }
270
- })
271
- ```
272
-
273
- 6. Read `wave-1-results.csv`, merge into master `tasks.csv`
274
- 7. Delete `wave-1.csv`
275
-
276
- **Truth check agent protocol**:
277
- - For each truth, identify supporting artifacts
278
- - Check artifact existence and substance indicators
279
- - Check wiring indicators (import/usage grep)
280
- - Determine truth status: VERIFIED / FAILED / UNCERTAIN
281
- - Report gaps for FAILED truths with severity and fix direction
282
-
283
- **Artifact existence agent protocol**:
284
- - Check file exists on disk via `ls` or `stat`
285
- - If missing, report gap with severity=critical
286
- - If exists, note file size and basic structure for wave 2
287
-
288
- #### Wave 2: Artifact Substance + Wiring (Parallel)
289
-
290
- 1. Read master `tasks.csv`
291
- 2. Filter rows where `wave == 2` AND `status == pending`
292
- 3. Check deps -- if all wave 1 existence checks failed for a given artifact, skip substance check
293
- 4. Build `prev_context` from wave 1 findings:
294
- ```
295
- [Task 1: Truth: User can see messages] VERIFIED - Chat.tsx renders message list from API response
296
- [Task 3: Artifact Exists: Chat.tsx] completed - file exists, 142 lines
297
- ...
298
- ```
299
- 5. Write `wave-2.csv` with `prev_context` column
300
- 6. Execute `spawn_agents_on_csv` for substance + wiring agents
301
- 7. Merge results into master `tasks.csv`
302
- 8. Delete `wave-2.csv`
303
-
304
- **Substance check agent protocol**:
305
- - Files under ~10 lines of real logic -> STUB
306
- - Contains "placeholder", "coming soon", "TODO: implement" -> STUB
307
- - Real implementation with business logic -> SUBSTANTIVE
308
-
309
- **Wiring check agent protocol**:
310
- - `grep -r "import.*{artifact_name}" src/` -- check imported
311
- - `grep -r "{artifact_name}" src/ | grep -v "import"` -- check used beyond import
312
- - Status: WIRED / ORPHANED / NOT_WIRED
313
-
314
- #### Wave 3: Anti-Pattern Scan + Nyquist Audit (Parallel)
315
-
316
- 1. Read master `tasks.csv`
317
- 2. Filter rows where `wave == 3` AND `status == pending`
318
- 3. If `--skip-antipattern`: mark antipattern task as `skipped`
319
- 4. If `--skip-tests`: mark nyquist task as `skipped`
320
- 5. Build `prev_context` from wave 1 + wave 2 findings
321
- 6. Write `wave-3.csv` with `prev_context` column
322
- 7. Execute `spawn_agents_on_csv` for remaining tasks
323
- 8. Merge results into master `tasks.csv`
324
- 9. Delete `wave-3.csv`
325
-
326
- **Anti-pattern scan agent protocol**:
327
- - Extract modified files from task summaries
328
- - Scan for: TODO/FIXME/XXX/HACK, placeholder content, empty returns, log-only functions, hardcoded test data, disabled tests
329
- - Categorize: Blocker (prevents goal) / Warning (incomplete) / Info (notable)
330
- - Report as JSON array in gaps_found
331
-
332
- **Nyquist audit agent protocol**:
333
- - Detect test framework (jest, vitest, pytest, etc.)
334
- - Map requirements (must-haves) to test files
335
- - Classify: COVERED / PARTIAL / MISSING
336
- - Run coverage command if available
337
- - Report gaps and coverage percentage
338
-
339
- ---
340
-
341
- ### Phase 3: Results Aggregation
342
-
343
- **Objective**: Generate final results, fix plans, and human-readable report.
344
-
345
- 1. Read final master `tasks.csv`
346
- 2. Export as `results.csv`
347
- 3. **Aggregate must_haves** from all check results:
348
-
349
- ```json
350
- {
351
- "truths": [
352
- { "claim": "User can see existing messages", "status": "verified", "evidence": "Chat.tsx renders from /api/chat GET" }
353
- ],
354
- "artifacts": [
355
- { "path": "src/components/Chat.tsx", "status": "exists", "substantive": true }
356
- ],
357
- "key_links": [
358
- { "from": "Chat.tsx -> /api/chat", "status": "wired" }
359
- ]
360
- }
361
- ```
362
-
363
- 4. **Collect all gaps** from all tasks' `gaps_found` columns + UAT gaps (if uat.md exists)
364
- 5. **Generate fix plans**: Cluster related gaps -> generate plan per cluster -> order by dependency
365
- 6. **Build verification.json**:
366
-
367
- ```json
368
- {
369
- "phase": "<phase>",
370
- "status": "passed|gaps_found|human_needed",
371
- "verified_at": "<ISO>",
372
- "verifier": "csv-wave-verifier",
373
- "must_haves": { "truths": [...], "artifacts": [...], "key_links": [...] },
374
- "gaps": [...],
375
- "antipatterns": [...],
376
- "fix_plans": [...],
377
- "human_verification": [...],
378
- "coverage_score": 0.85
379
- }
380
- ```
381
-
382
- 7. **Build validation.json** (if Nyquist ran):
383
-
384
- ```json
385
- {
386
- "phase": "<phase>",
387
- "status": "passed|gaps_found",
388
- "validated_at": "<ISO>",
389
- "test_framework": "vitest",
390
- "coverage": { "statements": 80, "branches": 72, "functions": 85, "lines": 78 },
391
- "requirement_coverage": [
392
- { "requirement": "REQ-001", "tests": ["auth.spec.ts"], "status": "covered" }
393
- ],
394
- "gaps": [...]
395
- }
396
- ```
397
-
398
- 8. **Generate context.md**:
399
-
400
- ```markdown
401
- # Verification Report -- Phase {phase}
402
-
403
- ## Summary
404
- - Truths: {verified}/{total} verified
405
- - Artifacts: {artifact_verified}/{artifact_total} (L1-L3)
406
- - Wiring: {links_wired}/{links_total} key links
407
- - Anti-patterns: {blocker_count} blockers, {warning_count} warnings
408
- - Nyquist: {coverage_pct}% coverage ({skipped|status})
409
-
410
- ## Overall Status: **{status}**
411
-
412
- ## Must-Have Truths
413
- ### {truth_claim}
414
- Status: {VERIFIED|FAILED|UNCERTAIN}
415
- Evidence: {evidence}
416
-
417
- ## Artifact Checks
418
- | Path | Exists | Substantive | Wired | Status |
419
- |------|--------|-------------|-------|--------|
420
-
421
- ## Key Links
422
- | Link | Status | Evidence |
423
-
424
- ## Gaps
425
- | ID | Type | Severity | Description | Fix Direction |
426
-
427
- ## Anti-Patterns
428
- | File:Line | Pattern | Severity | Description |
429
-
430
- ## Fix Plans
431
- ### {cluster_name}
432
- Objective: {objective}
433
- Tasks: {task_list}
434
- Issue Refs: {issue_ids}
435
-
436
- ## Nyquist Coverage
437
- {requirement_coverage_table}
438
- ```
439
-
440
- 9. **Overall status determination**:
441
-
442
- | Condition | Status |
443
- |-----------|--------|
444
- | All truths VERIFIED, all artifacts pass L1-L3, all key links WIRED, no blockers | passed |
445
- | Any truth FAILED, artifact MISSING/STUB, key link NOT_WIRED, or blocker found | gaps_found |
446
- | All automated checks pass but human verification items remain | human_needed |
447
-
448
- 10. **Auto-create issues** from gaps + blocker anti-patterns (same ID generation as verify workflow: ISS-YYYYMMDD-NNN)
449
-
450
- 11. **Archive previous verification artifacts** before writing to phase directory:
451
- - If `verification.json` or `validation.json` exists in phase dir, move to `.history/`
452
-
453
- 12. **Copy output files** to phase directory:
454
- - `verification.json` -> `{phase_dir}/verification.json`
455
- - `validation.json` -> `{phase_dir}/validation.json` (if generated)
456
-
457
- 13. **Update phase index.json** with verification status and timestamps.
458
-
459
- 14. **Display summary**:
460
-
461
- ```
462
- === VERIFICATION RESULTS ===
463
- Phase: {phase_name}
464
-
465
- Goal-Backward: {verified_count}/{total_truths} truths verified
466
- Artifacts: {artifact_verified}/{artifact_total} (L1-L3)
467
- Wiring: {links_wired}/{links_total} key links
468
- Anti-patterns: {blocker_count} blockers, {warning_count} warnings
469
- Nyquist: {coverage_pct}% coverage ({SKIPPED|status})
470
-
471
- Gaps: {gap_count}
472
- Critical: {critical_count}
473
- High: {high_count}
474
- Medium: {medium_count}
475
- Low: {low_count}
476
-
477
- Fix Plans: {fix_plan_count} generated
478
- Issues Created: {issue_count}
479
- Human Verification: {human_items} items
480
-
481
- Files:
482
- {session_folder}/verification.json
483
- {session_folder}/validation.json (if generated)
484
- {phase_dir}/verification.json
485
- {phase_dir}/validation.json (if generated)
486
- ```
487
-
488
- 15. **Next step routing**:
489
-
490
- | Result | Suggestion |
491
- |--------|------------|
492
- | All passed, no gaps | `$quality-review "{phase}"` for code review |
493
- | Critical gaps found | `$quality-debug` for investigation |
494
- | Minor gaps only | `$maestro-plan "{phase} --gaps"` -> `$maestro-execute` -> re-run `$maestro-verify` |
495
- | Low test coverage | `$quality-test-gen "{phase}"` to generate missing tests |
496
- | Human verification needed | `$quality-test "{phase}"` for interactive UAT |
497
-
498
- ---
499
-
500
- ## Shared Discovery Board Protocol
501
-
502
- ### Standard Discovery Types
503
-
504
- | Type | Dedup Key | Data Schema | Description |
505
- |------|-----------|-------------|-------------|
506
- | `code_pattern` | `data.name` | `{name, file, description}` | Reusable code pattern found |
507
- | `integration_point` | `data.file` | `{file, description, exports[]}` | Module connection point |
508
- | `convention` | singleton | `{naming, imports, formatting}` | Project code conventions |
509
- | `blocker` | `data.issue` | `{issue, severity, impact}` | Blocking issue found |
510
- | `tech_stack` | singleton | `{framework, language, tools[]}` | Technology stack info |
511
-
512
- ### Domain Discovery Types
513
-
514
- | Type | Dedup Key | Data Schema | Description |
515
- |------|-----------|-------------|-------------|
516
- | `verification_gap` | `data.gap_id` | `{gap_id, layer, severity, description}` | Verification gap found |
517
- | `stub_detected` | `data.file` | `{file, line, marker, content}` | Stub/placeholder file detected |
518
- | `broken_wiring` | `data.from+data.to` | `{from, to, expected, actual}` | Broken integration link |
519
- | `antipattern` | `data.location` | `{location, pattern, severity}` | Anti-pattern instance |
520
- | `test_gap` | `data.requirement` | `{requirement, status, suggested_test}` | Missing test coverage |
521
-
522
- ### Protocol
523
-
524
- 1. **Read** `{session_folder}/discoveries.ndjson` before own check
525
- 2. **Skip covered**: If discovery of same type + dedup key exists, skip
526
- 3. **Write immediately**: Append findings as found
527
- 4. **Append-only**: Never modify or delete
528
- 5. **Deduplicate**: Check before writing
529
-
530
- ```bash
531
- echo '{"ts":"<ISO>","worker":"{id}","type":"verification_gap","data":{"gap_id":"GAP-001","layer":"truth","severity":"critical","description":"User cannot send messages - form handler is a stub"}}' >> {session_folder}/discoveries.ndjson
532
- ```
533
-
534
- ---
535
-
536
- ## Error Handling
537
-
538
- | Error | Resolution |
539
- |-------|------------|
540
- | Phase directory not found | Abort with error: "Phase {N} not found" |
541
- | No execution results found | Abort with error: "No completed tasks found -- run execute first" |
542
- | No summaries found | Warn, proceed with task file analysis only |
543
- | No success_criteria in index.json | Derive must-haves from phase goal (fallback) |
544
- | Truth check agent timeout | Mark as failed, continue remaining checks |
545
- | Substance check on missing artifact | Auto-skip (dep failed), mark as skipped |
546
- | Anti-pattern scan disabled | Mark as skipped, note in context.md |
547
- | Nyquist audit disabled | Mark as skipped, note in context.md |
548
- | Test framework not detected | Skip coverage calculation, warn user |
549
- | CSV parse error | Validate format, show line number |
550
- | discoveries.ndjson corrupt | Ignore malformed lines |
551
- | Continue mode: no session found | List available sessions |
552
-
553
- ---
554
-
555
- ## Core Rules
556
-
557
- 1. **Start Immediately**: First action is session initialization, then Phase 1
558
- 2. **Wave Order is Sacred**: Never execute wave 2 before wave 1 completes and results are merged
559
- 3. **CSV is Source of Truth**: Master tasks.csv holds all state
560
- 4. **Context Propagation**: prev_context built from master CSV, not from memory
561
- 5. **Discovery Board is Append-Only**: Never clear, modify, or recreate discoveries.ndjson
562
- 6. **Skip on Failure**: If artifact existence check failed, skip its substance/wiring checks
563
- 7. **Respect Skip Flags**: `--skip-tests` and `--skip-antipattern` mark wave 3 tasks as skipped, not removed
564
- 8. **Cleanup Temp Files**: Remove wave-{N}.csv after results are merged
565
- 9. **DO NOT STOP**: Continuous execution until all waves complete
566
- 10. **Goal-Backward**: Verify goals are achieved, not just tasks completed
1
+ ---
2
+ name: maestro-verify
3
+ description: Goal-Backward 3-layer verification via CSV wave pipeline. Staged parallel waves check Truths, Artifacts, and Wiring with anti-pattern scan and Nyquist test coverage audit. Replaces maestro-verify command.
4
+ argument-hint: "[-y|--yes] [-c|--concurrency N] [--continue] \"<phase> [--skip-tests] [--skip-antipattern]\""
5
+ allowed-tools: spawn_agents_on_csv, Read, Write, Edit, Bash, Glob, Grep, AskUserQuestion
6
+ ---
7
+
8
+ <purpose>
9
+ Wave-based 3-layer Goal-Backward verification using `spawn_agents_on_csv`. Decomposes verification into staged parallel checks across three waves: truth + artifact existence (Wave 1), artifact substance + wiring (Wave 2), anti-pattern scan + Nyquist audit (Wave 3).
10
+
11
+ **Core workflow**: Load Phase Artifacts -> Establish Must-Haves -> Decompose Checks -> Staged Parallel Verification -> Aggregate + Fix Plans
12
+
13
+ **Core principle**: Task completion != Goal achievement. A task marked complete may contain stubs/placeholders. This verifier checks that goals are actually achieved.
14
+
15
+ ```
16
+ +-------------------------------------------------------------------------+
17
+ | VERIFICATION CSV WAVE WORKFLOW |
18
+ +-------------------------------------------------------------------------+
19
+ | |
20
+ | Phase 1: Phase Resolution -> CSV |
21
+ | +-- Resolve phase directory from arguments |
22
+ | +-- Load index.json, plan.json, TASK-*.json, summaries |
23
+ | +-- Establish must-haves (truths, artifacts, key links) |
24
+ | +-- Decompose into check tasks per layer |
25
+ | +-- Assign waves based on layer dependencies |
26
+ | +-- Generate tasks.csv with one row per check |
27
+ | +-- User validates check breakdown (skip if -y) |
28
+ | |
29
+ | Phase 2: Wave Execution Engine |
30
+ | +-- Wave 1: Truth Checks + Artifact Existence (parallel) |
31
+ | | +-- Truth agents verify observable behaviors |
32
+ | | +-- Artifact-exist agents check L1 (file exists on disk) |
33
+ | | +-- Discoveries shared via board (gap patterns, stubs) |
34
+ | | +-- Results: status + evidence + gaps_found per check |
35
+ | +-- Wave 2: Artifact Substance + Wiring (parallel) |
36
+ | | +-- Substance agents check L2 (real impl, not stub) |
37
+ | | +-- Wiring agents check L3 (imported + used) |
38
+ | | +-- Needs truth context from wave 1 |
39
+ | | +-- Results: status + evidence + gaps_found per check |
40
+ | +-- Wave 3: Anti-Pattern Scan + Nyquist Audit (parallel) |
41
+ | | +-- Anti-pattern agent scans modified files (skip if flagged) |
42
+ | | +-- Nyquist agent maps requirements to tests (skip if flagged) |
43
+ | | +-- Needs artifact context from wave 2 |
44
+ | | +-- Results: antipatterns[] + coverage gaps |
45
+ | +-- discoveries.ndjson shared across all waves (append-only) |
46
+ | |
47
+ | Phase 3: Results Aggregation |
48
+ | +-- Export results.csv |
49
+ | +-- Build verification.json (must_haves, gaps, antipatterns, fixes) |
50
+ | +-- Build validation.json (if Nyquist ran) |
51
+ | +-- Generate context.md with all findings |
52
+ | +-- Auto-create issues for gaps + blocker anti-patterns |
53
+ | +-- Generate fix plans (cluster related gaps) |
54
+ | +-- Update phase index.json with verification status |
55
+ | +-- Display summary with next steps |
56
+ | |
57
+ +-------------------------------------------------------------------------+
58
+ ```
59
+ </purpose>
60
+
61
+ <context>
62
+ ```bash
63
+ $maestro-verify "3"
64
+ $maestro-verify -c 4 "3 --skip-tests"
65
+ $maestro-verify -y "3 --skip-antipattern"
66
+ $maestro-verify --continue "verify-phase3-20260318"
67
+ ```
68
+
69
+ **Flags**:
70
+ - `-y, --yes`: Skip all confirmations (auto mode)
71
+ - `-c, --concurrency N`: Max concurrent agents within each wave (default: 4)
72
+ - `--continue`: Resume existing session
73
+
74
+ When `--yes` or `-y`: Auto-confirm check decomposition, skip interactive validation, use defaults for layer detection.
75
+
76
+ **Output Directory**: `.workflow/.csv-wave/{session-id}/`
77
+ **Core Output**: `tasks.csv` (master state) + `results.csv` (final) + `discoveries.ndjson` (shared exploration) + `context.md` (human-readable report) + `verification.json` (structured verification output) + `validation.json` (test coverage output, if Nyquist ran)
78
+ </context>
79
+
80
+ <csv_schema>
81
+
82
+ ### tasks.csv (Master State)
83
+
84
+ ```csv
85
+ id,title,description,layer,phase_dir,check_type,deps,context_from,wave,status,findings,gaps_found,fix_plan,error
86
+ "1","Truth: User can see existing messages","Verify observable behavior: user can see existing messages by checking supporting artifacts, API calls, and render logic.","truth",".workflow/scratch/plan-chat-2026/","observable_behavior","","","1","","","","",""
87
+ "2","Truth: User can send new messages","Verify observable behavior: user can send new messages by checking form submission, API POST, and state update.","truth",".workflow/scratch/plan-chat-2026/","observable_behavior","","","1","","","","",""
88
+ "3","Artifact Exists: src/components/Chat.tsx","Check L1 existence: verify file src/components/Chat.tsx exists on disk.","artifact",".workflow/scratch/plan-chat-2026/","exists","","","1","","","","",""
89
+ "4","Artifact Exists: src/api/chat.ts","Check L1 existence: verify file src/api/chat.ts exists on disk.","artifact",".workflow/scratch/plan-chat-2026/","exists","","","1","","","","",""
90
+ "5","Artifact Substance: src/components/Chat.tsx","Check L2 substance: verify src/components/Chat.tsx has real implementation (not stub/placeholder). Minimum logic threshold, no placeholder markers.","artifact",".workflow/scratch/plan-chat-2026/","substance","3","3","2","","","","",""
91
+ "6","Artifact Substance: src/api/chat.ts","Check L2 substance: verify src/api/chat.ts has real implementation (not stub/placeholder).","artifact",".workflow/scratch/plan-chat-2026/","substance","4","4","2","","","","",""
92
+ "7","Wiring: Chat.tsx -> /api/chat","Check L3 wiring: verify Chat.tsx imports and calls /api/chat endpoints. Check import statements and actual usage beyond imports.","wiring",".workflow/scratch/plan-chat-2026/","import_usage","3;4","3;4","2","","","","",""
93
+ "8","Anti-Pattern Scan","Scan all modified files for TODO/FIXME/XXX/HACK, placeholder content, empty returns, log-only functions, hardcoded test data, disabled tests. Categorize as Blocker/Warning/Info.","antipattern",".workflow/scratch/plan-chat-2026/","pattern_scan","1;2;5;6;7","1;2;5;6;7","3","","","","",""
94
+ "9","Nyquist Test Coverage Audit","Map requirements to test files. Classify each as COVERED/PARTIAL/MISSING. Detect test framework, run coverage if available.","nyquist",".workflow/scratch/plan-chat-2026/","test_coverage","1;2;5;6;7","1;2;5;6;7","3","","","","",""
95
+ ```
96
+
97
+ **Columns**:
98
+
99
+ | Column | Phase | Description |
100
+ |--------|-------|-------------|
101
+ | `id` | Input | Unique task identifier (string) |
102
+ | `title` | Input | Short check title |
103
+ | `description` | Input | Detailed verification instructions for this check |
104
+ | `layer` | Input | Verification layer: truth/artifact/wiring/antipattern/nyquist |
105
+ | `phase_dir` | Input | Target directory path (e.g., `.workflow/scratch/plan-chat-2026/`; legacy: `.workflow/phases/03-chat/`) |
106
+ | `check_type` | Input | Specific check type: observable_behavior/exists/substance/import_usage/pattern_scan/test_coverage |
107
+ | `deps` | Input | Semicolon-separated dependency task IDs |
108
+ | `context_from` | Input | Semicolon-separated task IDs whose findings this task needs |
109
+ | `wave` | Computed | Wave number (1 = truths + existence, 2 = substance + wiring, 3 = antipattern + nyquist) |
110
+ | `status` | Output | `pending` -> `completed` / `failed` / `skipped` |
111
+ | `findings` | Output | Key verification findings summary (max 500 chars) |
112
+ | `gaps_found` | Output | JSON array of gap descriptions: `[{"id":"GAP-001","type":"missing_feature","severity":"critical","description":"...","fix_direction":"..."}]` |
113
+ | `fix_plan` | Output | Suggested fix actions for identified gaps |
114
+ | `error` | Output | Error message if failed |
115
+
116
+ ### Per-Wave CSV (Temporary)
117
+
118
+ Each wave generates `wave-{N}.csv` with extra `prev_context` column.
119
+
120
+ ### Output Artifacts
121
+
122
+ | File | Purpose | Lifecycle |
123
+ |------|---------|-----------|
124
+ | `tasks.csv` | Master state -- all tasks with status/findings | Updated after each wave |
125
+ | `wave-{N}.csv` | Per-wave input (temporary) | Created before wave, deleted after |
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 verification report | Created in Phase 3 |
129
+ | `verification.json` | Structured verification output for downstream | Created in Phase 3 |
130
+ | `validation.json` | Nyquist test coverage output (if ran) | Created in Phase 3 |
131
+
132
+ ### Session Structure
133
+
134
+ ```
135
+ .workflow/.csv-wave/verify-{phase}-{date}/
136
+ +-- tasks.csv
137
+ +-- results.csv
138
+ +-- discoveries.ndjson
139
+ +-- context.md
140
+ +-- verification.json
141
+ +-- validation.json (if Nyquist ran)
142
+ +-- wave-{N}.csv (temporary)
143
+ ```
144
+ </csv_schema>
145
+
146
+ <invariants>
147
+ 1. **Start Immediately**: First action is session initialization, then Phase 1
148
+ 2. **Wave Order is Sacred**: Never execute wave 2 before wave 1 completes and results are merged
149
+ 3. **CSV is Source of Truth**: Master tasks.csv holds all state
150
+ 4. **Context Propagation**: prev_context built from master CSV, not from memory
151
+ 5. **Discovery Board is Append-Only**: Never clear, modify, or recreate discoveries.ndjson
152
+ 6. **Skip on Failure**: If artifact existence check failed, skip its substance/wiring checks
153
+ 7. **Respect Skip Flags**: `--skip-tests` and `--skip-antipattern` mark wave 3 tasks as skipped, not removed
154
+ 8. **Cleanup Temp Files**: Remove wave-{N}.csv after results are merged
155
+ 9. **DO NOT STOP**: Continuous execution until all waves complete
156
+ 10. **Goal-Backward**: Verify goals are achieved, not just tasks completed
157
+ </invariants>
158
+
159
+ <execution>
160
+
161
+ ### Session Initialization
162
+
163
+ ```javascript
164
+ const getUtc8ISOString = () => new Date(Date.now() + 8 * 60 * 60 * 1000).toISOString()
165
+
166
+ // Parse flags
167
+ const AUTO_YES = $ARGUMENTS.includes('--yes') || $ARGUMENTS.includes('-y')
168
+ const continueMode = $ARGUMENTS.includes('--continue')
169
+ const concurrencyMatch = $ARGUMENTS.match(/(?:--concurrency|-c)\s+(\d+)/)
170
+ const maxConcurrency = concurrencyMatch ? parseInt(concurrencyMatch[1]) : 4
171
+
172
+ // Parse verify-specific flags
173
+ const skipTests = $ARGUMENTS.includes('--skip-tests')
174
+ const skipAntipattern = $ARGUMENTS.includes('--skip-antipattern')
175
+
176
+ // Clean phase text
177
+ const phaseArg = $ARGUMENTS
178
+ .replace(/--yes|-y|--continue|--concurrency\s+\d+|-c\s+\d+|--skip-tests|--skip-antipattern/g, '')
179
+ .trim()
180
+
181
+ const dateStr = getUtc8ISOString().substring(0, 10).replace(/-/g, '')
182
+ const sessionId = `verify-phase${phaseArg}-${dateStr}`
183
+ const sessionFolder = `.workflow/.csv-wave/${sessionId}`
184
+
185
+ Bash(`mkdir -p ${sessionFolder}`)
186
+ ```
187
+
188
+ ### Phase 1: Phase Resolution -> CSV
189
+
190
+ **Objective**: Resolve phase, load artifacts, establish must-haves, decompose into check tasks, generate tasks.csv.
191
+
192
+ **Decomposition Rules**:
193
+
194
+ 1. **Phase resolution**: Resolve `{phaseArg}` via artifact registry in `state.json` to `.workflow/scratch/{type}-{slug}-{date}/`; legacy fallback to `.workflow/phases/{NN}-{slug}/`
195
+ 2. **Artifact loading**: Read from phase directory:
196
+ - `index.json` -- success_criteria (ground truth for verification)
197
+ - `plan.json` -- original plan with task_ids
198
+ - All `.task/TASK-{NNN}.json` -- task definitions with convergence.criteria
199
+ - All `.summaries/TASK-{NNN}-summary.md` -- execution results
200
+ - `uat.md` (if exists) -- human UAT gaps to incorporate
201
+
202
+ 3. **Must-have establishment** (priority order):
203
+ - **success_criteria from index.json** -- primary contract
204
+ - **convergence.criteria from task JSON** -- per-task completion criteria
205
+ - **Derived from phase goal** -- fallback: derive 3-7 observable behaviors
206
+
207
+ 4. **Must-have decomposition** into 3 layers:
208
+ - **Truths**: Observable behaviors (e.g., "User can see existing messages")
209
+ - **Artifacts**: Concrete file paths that must exist and be substantive
210
+ - **Key Links**: Critical wiring between artifacts (e.g., "Chat.tsx imports /api/chat")
211
+
212
+ 5. **Check task generation**: For each must-have, generate check rows:
213
+
214
+ | Layer | Check Types | Wave |
215
+ |-------|-------------|------|
216
+ | truth | observable_behavior | 1 |
217
+ | artifact (exists) | exists | 1 |
218
+ | artifact (substance) | substance | 2 |
219
+ | wiring | import_usage | 2 |
220
+ | antipattern | pattern_scan | 3 (skip if `--skip-antipattern`) |
221
+ | nyquist | test_coverage | 3 (skip if `--skip-tests`) |
222
+
223
+ 6. **Wave computation**: Assign waves based on layer dependency chain:
224
+ - Wave 1: truth + artifact/exists (no predecessors, parallel)
225
+ - Wave 2: artifact/substance + wiring (need existence confirmation from wave 1)
226
+ - Wave 3: antipattern + nyquist (need substance/wiring context from wave 2)
227
+
228
+ 7. **Specs loading**: `specs_content = maestro spec load --category validation`
229
+
230
+ 8. **CSV generation**: One row per check task.
231
+
232
+ **User validation**: Display check breakdown (skip if AUTO_YES).
233
+
234
+ ### Phase 2: Wave Execution Engine
235
+
236
+ **Objective**: Execute verification checks wave-by-wave via spawn_agents_on_csv.
237
+
238
+ #### Wave 1: Truth Checks + Artifact Existence (Parallel)
239
+
240
+ 1. Read master `tasks.csv`
241
+ 2. Filter rows where `wave == 1` AND `status == pending`
242
+ 3. No prev_context needed (wave 1 has no predecessors)
243
+ 4. Write `wave-1.csv`
244
+ 5. Execute:
245
+
246
+ ```javascript
247
+ spawn_agents_on_csv({
248
+ csv_path: `${sessionFolder}/wave-1.csv`,
249
+ id_column: "id",
250
+ instruction: buildVerifyInstruction(sessionFolder, "wave1"),
251
+ max_concurrency: maxConcurrency,
252
+ max_runtime_seconds: 600,
253
+ output_csv_path: `${sessionFolder}/wave-1-results.csv`,
254
+ output_schema: {
255
+ type: "object",
256
+ properties: {
257
+ id: { type: "string" },
258
+ status: { type: "string", enum: ["completed", "failed"] },
259
+ findings: { type: "string" },
260
+ gaps_found: { type: "string" },
261
+ fix_plan: { type: "string" },
262
+ error: { type: "string" }
263
+ },
264
+ required: ["id", "status", "findings"]
265
+ }
266
+ })
267
+ ```
268
+
269
+ 6. Read `wave-1-results.csv`, merge into master `tasks.csv`
270
+ 7. Delete `wave-1.csv`
271
+
272
+ **Truth check agent protocol**:
273
+ - For each truth, identify supporting artifacts
274
+ - Check artifact existence and substance indicators
275
+ - Check wiring indicators (import/usage grep)
276
+ - Determine truth status: VERIFIED / FAILED / UNCERTAIN
277
+ - Report gaps for FAILED truths with severity and fix direction
278
+
279
+ **Artifact existence agent protocol**:
280
+ - Check file exists on disk via `ls` or `stat`
281
+ - If missing, report gap with severity=critical
282
+ - If exists, note file size and basic structure for wave 2
283
+
284
+ #### Wave 2: Artifact Substance + Wiring (Parallel)
285
+
286
+ 1. Read master `tasks.csv`
287
+ 2. Filter rows where `wave == 2` AND `status == pending`
288
+ 3. Check deps -- if all wave 1 existence checks failed for a given artifact, skip substance check
289
+ 4. Build `prev_context` from wave 1 findings:
290
+ ```
291
+ [Task 1: Truth: User can see messages] VERIFIED - Chat.tsx renders message list from API response
292
+ [Task 3: Artifact Exists: Chat.tsx] completed - file exists, 142 lines
293
+ ...
294
+ ```
295
+ 5. Write `wave-2.csv` with `prev_context` column
296
+ 6. Execute `spawn_agents_on_csv` for substance + wiring agents
297
+ 7. Merge results into master `tasks.csv`
298
+ 8. Delete `wave-2.csv`
299
+
300
+ **Substance check agent protocol**:
301
+ - Files under ~10 lines of real logic -> STUB
302
+ - Contains "placeholder", "coming soon", "TODO: implement" -> STUB
303
+ - Real implementation with business logic -> SUBSTANTIVE
304
+
305
+ **Wiring check agent protocol**:
306
+ - `grep -r "import.*{artifact_name}" src/` -- check imported
307
+ - `grep -r "{artifact_name}" src/ | grep -v "import"` -- check used beyond import
308
+ - Status: WIRED / ORPHANED / NOT_WIRED
309
+
310
+ #### Wave 3: Anti-Pattern Scan + Nyquist Audit (Parallel)
311
+
312
+ 1. Read master `tasks.csv`
313
+ 2. Filter rows where `wave == 3` AND `status == pending`
314
+ 3. If `--skip-antipattern`: mark antipattern task as `skipped`
315
+ 4. If `--skip-tests`: mark nyquist task as `skipped`
316
+ 5. Build `prev_context` from wave 1 + wave 2 findings
317
+ 6. Write `wave-3.csv` with `prev_context` column
318
+ 7. Execute `spawn_agents_on_csv` for remaining tasks
319
+ 8. Merge results into master `tasks.csv`
320
+ 9. Delete `wave-3.csv`
321
+
322
+ **Anti-pattern scan agent protocol**:
323
+ - Extract modified files from task summaries
324
+ - Scan for: TODO/FIXME/XXX/HACK, placeholder content, empty returns, log-only functions, hardcoded test data, disabled tests
325
+ - Categorize: Blocker (prevents goal) / Warning (incomplete) / Info (notable)
326
+ - Report as JSON array in gaps_found
327
+
328
+ **Nyquist audit agent protocol**:
329
+ - Detect test framework (jest, vitest, pytest, etc.)
330
+ - Map requirements (must-haves) to test files
331
+ - Classify: COVERED / PARTIAL / MISSING
332
+ - Run coverage command if available
333
+ - Report gaps and coverage percentage
334
+
335
+ ### Phase 3: Results Aggregation
336
+
337
+ **Objective**: Generate final results, fix plans, and human-readable report.
338
+
339
+ 1. Read final master `tasks.csv`
340
+ 2. Export as `results.csv`
341
+ 3. **Aggregate must_haves** from all check results:
342
+
343
+ ```json
344
+ {
345
+ "truths": [
346
+ { "claim": "User can see existing messages", "status": "verified", "evidence": "Chat.tsx renders from /api/chat GET" }
347
+ ],
348
+ "artifacts": [
349
+ { "path": "src/components/Chat.tsx", "status": "exists", "substantive": true }
350
+ ],
351
+ "key_links": [
352
+ { "from": "Chat.tsx -> /api/chat", "status": "wired" }
353
+ ]
354
+ }
355
+ ```
356
+
357
+ 4. **Collect all gaps** from all tasks' `gaps_found` columns + UAT gaps (if uat.md exists)
358
+ 5. **Generate fix plans**: Cluster related gaps -> generate plan per cluster -> order by dependency
359
+ 6. **Build verification.json**:
360
+
361
+ ```json
362
+ {
363
+ "phase": "<phase>",
364
+ "status": "passed|gaps_found|human_needed",
365
+ "verified_at": "<ISO>",
366
+ "verifier": "csv-wave-verifier",
367
+ "must_haves": { "truths": [...], "artifacts": [...], "key_links": [...] },
368
+ "gaps": [...],
369
+ "antipatterns": [...],
370
+ "fix_plans": [...],
371
+ "human_verification": [...],
372
+ "coverage_score": 0.85
373
+ }
374
+ ```
375
+
376
+ 7. **Build validation.json** (if Nyquist ran):
377
+
378
+ ```json
379
+ {
380
+ "phase": "<phase>",
381
+ "status": "passed|gaps_found",
382
+ "validated_at": "<ISO>",
383
+ "test_framework": "vitest",
384
+ "coverage": { "statements": 80, "branches": 72, "functions": 85, "lines": 78 },
385
+ "requirement_coverage": [
386
+ { "requirement": "REQ-001", "tests": ["auth.spec.ts"], "status": "covered" }
387
+ ],
388
+ "gaps": [...]
389
+ }
390
+ ```
391
+
392
+ 8. **Generate context.md**:
393
+
394
+ ```markdown
395
+ # Verification Report -- Phase {phase}
396
+
397
+ ## Summary
398
+ - Truths: {verified}/{total} verified
399
+ - Artifacts: {artifact_verified}/{artifact_total} (L1-L3)
400
+ - Wiring: {links_wired}/{links_total} key links
401
+ - Anti-patterns: {blocker_count} blockers, {warning_count} warnings
402
+ - Nyquist: {coverage_pct}% coverage ({skipped|status})
403
+
404
+ ## Overall Status: **{status}**
405
+
406
+ ## Must-Have Truths
407
+ ### {truth_claim}
408
+ Status: {VERIFIED|FAILED|UNCERTAIN}
409
+ Evidence: {evidence}
410
+
411
+ ## Artifact Checks
412
+ | Path | Exists | Substantive | Wired | Status |
413
+ |------|--------|-------------|-------|--------|
414
+
415
+ ## Key Links
416
+ | Link | Status | Evidence |
417
+
418
+ ## Gaps
419
+ | ID | Type | Severity | Description | Fix Direction |
420
+
421
+ ## Anti-Patterns
422
+ | File:Line | Pattern | Severity | Description |
423
+
424
+ ## Fix Plans
425
+ ### {cluster_name}
426
+ Objective: {objective}
427
+ Tasks: {task_list}
428
+ Issue Refs: {issue_ids}
429
+
430
+ ## Nyquist Coverage
431
+ {requirement_coverage_table}
432
+ ```
433
+
434
+ 9. **Overall status determination**:
435
+
436
+ | Condition | Status |
437
+ |-----------|--------|
438
+ | All truths VERIFIED, all artifacts pass L1-L3, all key links WIRED, no blockers | passed |
439
+ | Any truth FAILED, artifact MISSING/STUB, key link NOT_WIRED, or blocker found | gaps_found |
440
+ | All automated checks pass but human verification items remain | human_needed |
441
+
442
+ 10. **Auto-create issues** from gaps + blocker anti-patterns (same ID generation as verify workflow: ISS-YYYYMMDD-NNN)
443
+
444
+ 11. **Archive previous verification artifacts** before writing to phase directory:
445
+ - If `verification.json` or `validation.json` exists in phase dir, move to `.history/`
446
+
447
+ 12. **Copy output files** to phase directory:
448
+ - `verification.json` -> `{phase_dir}/verification.json`
449
+ - `validation.json` -> `{phase_dir}/validation.json` (if generated)
450
+
451
+ 13. **Update phase index.json** with verification status and timestamps.
452
+
453
+ 14. **Display summary**:
454
+
455
+ ```
456
+ === VERIFICATION RESULTS ===
457
+ Phase: {phase_name}
458
+
459
+ Goal-Backward: {verified_count}/{total_truths} truths verified
460
+ Artifacts: {artifact_verified}/{artifact_total} (L1-L3)
461
+ Wiring: {links_wired}/{links_total} key links
462
+ Anti-patterns: {blocker_count} blockers, {warning_count} warnings
463
+ Nyquist: {coverage_pct}% coverage ({SKIPPED|status})
464
+
465
+ Gaps: {gap_count}
466
+ Critical: {critical_count}
467
+ High: {high_count}
468
+ Medium: {medium_count}
469
+ Low: {low_count}
470
+
471
+ Fix Plans: {fix_plan_count} generated
472
+ Issues Created: {issue_count}
473
+ Human Verification: {human_items} items
474
+
475
+ Files:
476
+ {session_folder}/verification.json
477
+ {session_folder}/validation.json (if generated)
478
+ {phase_dir}/verification.json
479
+ {phase_dir}/validation.json (if generated)
480
+ ```
481
+
482
+ 15. **Next step routing**:
483
+
484
+ | Result | Suggestion |
485
+ |--------|------------|
486
+ | All passed, no gaps | `$quality-review "{phase}"` for code review |
487
+ | Critical gaps found | `$quality-debug` for investigation |
488
+ | Minor gaps only | `$maestro-plan "{phase} --gaps"` -> `$maestro-execute` -> re-run `$maestro-verify` |
489
+ | Low test coverage | `$quality-test-gen "{phase}"` to generate missing tests |
490
+ | Human verification needed | `$quality-test "{phase}"` for interactive UAT |
491
+
492
+ ### Shared Discovery Board Protocol
493
+
494
+ #### Standard Discovery Types
495
+
496
+ | Type | Dedup Key | Data Schema | Description |
497
+ |------|-----------|-------------|-------------|
498
+ | `code_pattern` | `data.name` | `{name, file, description}` | Reusable code pattern found |
499
+ | `integration_point` | `data.file` | `{file, description, exports[]}` | Module connection point |
500
+ | `convention` | singleton | `{naming, imports, formatting}` | Project code conventions |
501
+ | `blocker` | `data.issue` | `{issue, severity, impact}` | Blocking issue found |
502
+ | `tech_stack` | singleton | `{framework, language, tools[]}` | Technology stack info |
503
+
504
+ #### Domain Discovery Types
505
+
506
+ | Type | Dedup Key | Data Schema | Description |
507
+ |------|-----------|-------------|-------------|
508
+ | `verification_gap` | `data.gap_id` | `{gap_id, layer, severity, description}` | Verification gap found |
509
+ | `stub_detected` | `data.file` | `{file, line, marker, content}` | Stub/placeholder file detected |
510
+ | `broken_wiring` | `data.from+data.to` | `{from, to, expected, actual}` | Broken integration link |
511
+ | `antipattern` | `data.location` | `{location, pattern, severity}` | Anti-pattern instance |
512
+ | `test_gap` | `data.requirement` | `{requirement, status, suggested_test}` | Missing test coverage |
513
+
514
+ #### Protocol
515
+
516
+ 1. **Read** `{session_folder}/discoveries.ndjson` before own check
517
+ 2. **Skip covered**: If discovery of same type + dedup key exists, skip
518
+ 3. **Write immediately**: Append findings as found
519
+ 4. **Append-only**: Never modify or delete
520
+ 5. **Deduplicate**: Check before writing
521
+
522
+ ```bash
523
+ echo '{"ts":"<ISO>","worker":"{id}","type":"verification_gap","data":{"gap_id":"GAP-001","layer":"truth","severity":"critical","description":"User cannot send messages - form handler is a stub"}}' >> {session_folder}/discoveries.ndjson
524
+ ```
525
+ </execution>
526
+
527
+ <error_codes>
528
+
529
+ | Error | Resolution |
530
+ |-------|------------|
531
+ | Phase directory not found | Resolve via state.json artifact registry; legacy fallback to `.workflow/phases/`; abort if neither found |
532
+ | No execution results found | Abort with error: "No completed tasks found -- run execute first" |
533
+ | No summaries found | Warn, proceed with task file analysis only |
534
+ | No success_criteria in index.json | Derive must-haves from phase goal (fallback) |
535
+ | Truth check agent timeout | Mark as failed, continue remaining checks |
536
+ | Substance check on missing artifact | Auto-skip (dep failed), mark as skipped |
537
+ | Anti-pattern scan disabled | Mark as skipped, note in context.md |
538
+ | Nyquist audit disabled | Mark as skipped, note in context.md |
539
+ | Test framework not detected | Skip coverage calculation, warn user |
540
+ | CSV parse error | Validate format, show line number |
541
+ | discoveries.ndjson corrupt | Ignore malformed lines |
542
+ | Continue mode: no session found | List available sessions |
543
+ </error_codes>
544
+
545
+ <success_criteria>
546
+ - [ ] Session folder created with valid tasks.csv
547
+ - [ ] All 3 waves executed in order (with skip flags respected)
548
+ - [ ] verification.json produced with must_haves, gaps, antipatterns
549
+ - [ ] validation.json produced (if Nyquist ran)
550
+ - [ ] context.md produced with full report
551
+ - [ ] Fix plans generated for gap clusters
552
+ - [ ] Issues auto-created for gaps + blocker anti-patterns
553
+ - [ ] Output files copied to phase directory
554
+ - [ ] Phase index.json updated with verification status
555
+ - [ ] discoveries.ndjson append-only throughout
556
+ </success_criteria>