maestro-flow 0.3.14 → 0.3.16

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 (392) hide show
  1. package/.claude/commands/maestro-amend.md +300 -0
  2. package/.claude/commands/maestro-analyze.md +1 -49
  3. package/.claude/commands/maestro-composer.md +354 -0
  4. package/.claude/commands/maestro-execute.md +2 -56
  5. package/.claude/commands/maestro-fork.md +3 -50
  6. package/.claude/commands/maestro-merge.md +2 -26
  7. package/.claude/commands/maestro-milestone-audit.md +1 -5
  8. package/.claude/commands/maestro-milestone-complete.md +1 -7
  9. package/.claude/commands/maestro-plan.md +6 -127
  10. package/.claude/commands/maestro-player.md +404 -0
  11. package/.claude/commands/maestro-roadmap.md +3 -101
  12. package/.claude/commands/maestro-spec-generate.md +1 -25
  13. package/.claude/commands/maestro-ui-design.md +14 -73
  14. package/.claude/commands/maestro-verify.md +1 -32
  15. package/.claude/commands/maestro.md +13 -30
  16. package/.claude/commands/manage-harvest.md +7 -44
  17. package/.claude/commands/manage-knowhow-capture.md +193 -0
  18. package/.claude/commands/{manage-memory.md → manage-knowhow.md} +77 -88
  19. package/.claude/commands/manage-learn.md +3 -28
  20. package/.claude/commands/manage-status.md +1 -20
  21. package/.claude/commands/manage-wiki.md +1 -1
  22. package/.claude/commands/quality-business-test.md +1 -1
  23. package/.claude/commands/quality-debug.md +3 -18
  24. package/.claude/commands/quality-integration-test.md +3 -23
  25. package/.claude/commands/quality-retrospective.md +1 -28
  26. package/.claude/commands/quality-review.md +3 -52
  27. package/.claude/commands/quality-test-gen.md +1 -10
  28. package/.claude/commands/quality-test.md +3 -25
  29. package/.claude/commands/spec-add.md +1 -21
  30. package/.claude/commands/spec-load.md +1 -16
  31. package/.claude/commands/wiki-connect.md +2 -112
  32. package/.claude/commands/wiki-digest.md +2 -141
  33. package/.claude/skills/skill-iter-tune/SKILL.md +382 -0
  34. package/.claude/skills/skill-iter-tune/phases/01-setup.md +144 -0
  35. package/.claude/skills/skill-iter-tune/phases/02-execute.md +292 -0
  36. package/.claude/skills/skill-iter-tune/phases/03-evaluate.md +312 -0
  37. package/.claude/skills/skill-iter-tune/phases/04-improve.md +186 -0
  38. package/.claude/skills/skill-iter-tune/phases/05-report.md +166 -0
  39. package/.claude/skills/skill-iter-tune/specs/evaluation-criteria.md +63 -0
  40. package/.claude/skills/skill-iter-tune/templates/eval-prompt.md +134 -0
  41. package/.claude/skills/skill-iter-tune/templates/execute-prompt.md +97 -0
  42. package/.claude/skills/workflow-skill-designer/SKILL.md +496 -0
  43. package/.claude/skills/workflow-skill-designer/phases/01-requirements-analysis.md +356 -0
  44. package/.claude/skills/workflow-skill-designer/phases/02-orchestrator-design.md +444 -0
  45. package/.claude/skills/workflow-skill-designer/phases/03-phase-design.md +458 -0
  46. package/.claude/skills/workflow-skill-designer/phases/04-validation.md +471 -0
  47. package/.codex/skills/learn-decompose/SKILL.md +2 -8
  48. package/.codex/skills/maestro/SKILL.md +60 -146
  49. package/.codex/skills/maestro-analyze/SKILL.md +52 -150
  50. package/.codex/skills/maestro-brainstorm/SKILL.md +36 -91
  51. package/.codex/skills/maestro-composer/SKILL.md +213 -0
  52. package/.codex/skills/maestro-execute/SKILL.md +46 -177
  53. package/.codex/skills/maestro-init/SKILL.md +7 -51
  54. package/.codex/skills/maestro-link-coordinate/SKILL.md +56 -229
  55. package/.codex/skills/maestro-milestone-audit/SKILL.md +7 -36
  56. package/.codex/skills/maestro-milestone-complete/SKILL.md +11 -93
  57. package/.codex/skills/maestro-overlay/SKILL.md +23 -92
  58. package/.codex/skills/maestro-plan/SKILL.md +42 -166
  59. package/.codex/skills/maestro-player/SKILL.md +323 -0
  60. package/.codex/skills/maestro-quick/SKILL.md +5 -48
  61. package/.codex/skills/maestro-roadmap/SKILL.md +21 -66
  62. package/.codex/skills/maestro-spec-generate/SKILL.md +20 -56
  63. package/.codex/skills/maestro-ui-design/SKILL.md +6 -53
  64. package/.codex/skills/maestro-verify/SKILL.md +39 -136
  65. package/.codex/skills/manage-codebase-rebuild/SKILL.md +25 -75
  66. package/.codex/skills/manage-codebase-refresh/SKILL.md +5 -32
  67. package/.codex/skills/manage-issue/SKILL.md +1 -6
  68. package/.codex/skills/manage-issue-discover/SKILL.md +33 -93
  69. package/.codex/skills/{manage-memory → manage-knowhow}/SKILL.md +95 -95
  70. package/.codex/skills/manage-knowhow-capture/SKILL.md +110 -0
  71. package/.codex/skills/manage-learn/SKILL.md +17 -71
  72. package/.codex/skills/manage-status/SKILL.md +4 -35
  73. package/.codex/skills/manage-wiki/SKILL.md +1 -1
  74. package/.codex/skills/quality-business-test/SKILL.md +2 -14
  75. package/.codex/skills/quality-debug/SKILL.md +41 -133
  76. package/.codex/skills/quality-integration-test/SKILL.md +36 -145
  77. package/.codex/skills/quality-refactor/SKILL.md +6 -59
  78. package/.codex/skills/quality-retrospective/SKILL.md +292 -531
  79. package/.codex/skills/quality-review/SKILL.md +30 -65
  80. package/.codex/skills/quality-sync/SKILL.md +2 -11
  81. package/.codex/skills/quality-test/SKILL.md +4 -45
  82. package/.codex/skills/quality-test-gen/SKILL.md +33 -121
  83. package/.codex/skills/spec-add/SKILL.md +2 -9
  84. package/.codex/skills/spec-load/SKILL.md +4 -14
  85. package/.codex/skills/spec-map/SKILL.md +4 -37
  86. package/.codex/skills/spec-remove/SKILL.md +3 -35
  87. package/.codex/skills/spec-setup/SKILL.md +2 -19
  88. package/.codex/skills/team-coordinate/SKILL.md +20 -132
  89. package/.codex/skills/team-coordinate/roles/coordinator/commands/monitor.md +61 -215
  90. package/.codex/skills/team-executor/SKILL.md +7 -66
  91. package/.codex/skills/team-executor/roles/executor/commands/monitor.md +60 -182
  92. package/.codex/skills/team-executor/specs/session-schema.md +22 -56
  93. package/.codex/skills/team-lifecycle-v4/SKILL.md +22 -143
  94. package/.codex/skills/team-lifecycle-v4/roles/coordinator/commands/monitor.md +31 -223
  95. package/.codex/skills/team-quality-assurance/SKILL.md +14 -88
  96. package/.codex/skills/team-quality-assurance/roles/coordinator/commands/monitor.md +46 -186
  97. package/.codex/skills/team-review/SKILL.md +12 -86
  98. package/.codex/skills/team-review/roles/coordinator/commands/monitor.md +49 -187
  99. package/.codex/skills/team-tech-debt/SKILL.md +11 -50
  100. package/.codex/skills/team-tech-debt/roles/coordinator/commands/monitor.md +50 -239
  101. package/.codex/skills/team-testing/SKILL.md +14 -99
  102. package/.codex/skills/team-testing/roles/coordinator/commands/monitor.md +52 -228
  103. package/.codex/skills/wiki-connect/SKILL.md +2 -5
  104. package/README.md +6 -0
  105. package/README.zh-CN.md +6 -0
  106. package/chains/_intent-map.json +7 -7
  107. package/chains/singles/{memory-capture.json → knowhow-capture.json} +5 -5
  108. package/chains/singles/{memory.json → knowhow.json} +6 -6
  109. package/dashboard/dist/assets/{ArtifactsPage-CUrrDGgN.js → ArtifactsPage-iJZtYsmR.js} +6 -6
  110. package/dashboard/dist/assets/ChatInput-DNnDLdQF.js +6 -0
  111. package/dashboard/dist/assets/ChatPage-BjBibfE4.js +22 -0
  112. package/dashboard/dist/assets/{CollabPage-DIUXeazv.js → CollabPage-8lUMUol_.js} +1 -1
  113. package/dashboard/dist/assets/{ExecutionPanel-VmYeADFj.js → ExecutionPanel-BKV3GZ7Q.js} +1 -1
  114. package/dashboard/dist/assets/{KanbanPage-DLq8v7hg.js → KanbanPage-diY3QmGd.js} +2 -2
  115. package/dashboard/dist/assets/{MarkdownRenderer-D7AehrnR.js → MarkdownRenderer-cYFfe1uX.js} +1 -1
  116. package/dashboard/dist/assets/McpPage-COjuIf7U.js +21 -0
  117. package/dashboard/dist/assets/MeetingRoomPage-wnvT7wlB.js +85 -0
  118. package/dashboard/dist/assets/{OutputPanel-B-Rjwgmv.js → OutputPanel-DDL90Idy.js} +1 -1
  119. package/dashboard/dist/assets/{ProblemsPanel-GEpF-oi4.js → ProblemsPanel-zFN9IIs0.js} +1 -1
  120. package/dashboard/dist/assets/{RequirementBoardPage-xs8uDM7I.js → RequirementBoardPage-DOPJoT0I.js} +2 -2
  121. package/dashboard/dist/assets/{RequirementPage-BKDSFwjA.js → RequirementPage-CEVquRgM.js} +1 -1
  122. package/dashboard/dist/assets/RoomsPage-D5USEWDh.js +1 -0
  123. package/dashboard/dist/assets/{SpecsPage-DLFb9ZH0.js → SpecsPage-BOwBin_o.js} +1 -1
  124. package/dashboard/dist/assets/{SupervisorPage-SOki_kgz.js → SupervisorPage-5iRyMU5T.js} +1 -1
  125. package/dashboard/dist/assets/TeamsPage-DlcEmr_Q.js +1 -0
  126. package/dashboard/dist/assets/{TreeBrowser-B9DHdULE.js → TreeBrowser-Y48Wz-QY.js} +1 -1
  127. package/dashboard/dist/assets/WorkflowPage-CmQaRVgL.js +6 -0
  128. package/dashboard/dist/assets/arrow-left-NCUOENvg.js +6 -0
  129. package/dashboard/dist/assets/{check-DJDk3A2a.js → check-o7nfGNHf.js} +1 -1
  130. package/dashboard/dist/assets/{chevron-right-C7bVDreZ.js → chevron-right-BXySK2fn.js} +1 -1
  131. package/dashboard/dist/assets/{circle-alert-Na1vf6qQ.js → circle-alert-DcSBokh4.js} +1 -1
  132. package/dashboard/dist/assets/{circle-check-CEGgy3NV.js → circle-check-Cd-jce4j.js} +1 -1
  133. package/dashboard/dist/assets/{circle-check-big-3JB8zRYj.js → circle-check-big-BN7Mdp4i.js} +1 -1
  134. package/dashboard/dist/assets/{circle-Qfgy4LB_.js → circle-cooAwnAR.js} +1 -1
  135. package/dashboard/dist/assets/{code-Ble63Idz.js → code-BQa9oL1n.js} +1 -1
  136. package/dashboard/dist/assets/{columns-3-BUcKlxve.js → columns-3-BzgxelGx.js} +1 -1
  137. package/dashboard/dist/assets/{download-CMqkfn8x.js → download-swRJnate.js} +1 -1
  138. package/dashboard/dist/assets/en-C_BD3UCD.js +1 -0
  139. package/dashboard/dist/assets/{folder-B9ewx9LL.js → folder-DbGbLNFN.js} +1 -1
  140. package/dashboard/dist/assets/index-BEUaOz_b.css +1 -0
  141. package/dashboard/dist/assets/{index-JTmGteaT.js → index-DIoMBMbv.js} +1 -1
  142. package/dashboard/dist/assets/index-DLBN_7fb.js +44 -0
  143. package/dashboard/dist/assets/index-uIqUCT8y.js +236 -0
  144. package/dashboard/dist/assets/{list-DI8Wn2aT.js → list-BTRAIvDq.js} +1 -1
  145. package/dashboard/dist/assets/loader-NHtB6Mdn.js +6 -0
  146. package/dashboard/dist/assets/{minus-Lp_BfctG.js → minus-BjMxRTET.js} +1 -1
  147. package/dashboard/dist/assets/{pen-line-Ch7sphzZ.js → pen-line-C4_O16H0.js} +1 -1
  148. package/dashboard/dist/assets/{pencil-_yRMHmGT.js → pencil-DTmKhyDY.js} +1 -1
  149. package/dashboard/dist/assets/{proxy-D72Y8a4Y.js → proxy-Dtx5p6IO.js} +1 -1
  150. package/dashboard/dist/assets/rows-2-GR1dZtRu.js +6 -0
  151. package/dashboard/dist/assets/{search-BS6fI6Bg.js → search-DVtgy2W7.js} +1 -1
  152. package/dashboard/dist/assets/{shallow-BXasQBvr.js → shallow-BOmvDNsv.js} +1 -1
  153. package/dashboard/dist/assets/{table-CeGlFjlP.js → table-DCzuJAFh.js} +1 -1
  154. package/dashboard/dist/assets/team-types-BPeOvVdA.js +6 -0
  155. package/dashboard/dist/assets/{terminal-BJic2yW-.js → terminal-CzogW4cl.js} +1 -1
  156. package/dashboard/dist/assets/{trash-2-Czz4X8Fb.js → trash-2-52LATVfW.js} +1 -1
  157. package/dashboard/dist/assets/users-DLFE2voE.js +6 -0
  158. package/dashboard/dist/assets/{zap-C3H0jVFA.js → zap-DhiYlgyZ.js} +1 -1
  159. package/dashboard/dist/assets/zh-CN-DvQKfow3.js +1 -0
  160. package/dashboard/dist/index.html +2 -2
  161. package/dashboard/dist-server/dashboard/src/server/agents/agent-manager.d.ts +2 -0
  162. package/dashboard/dist-server/dashboard/src/server/agents/agent-manager.js +19 -11
  163. package/dashboard/dist-server/dashboard/src/server/agents/agent-manager.js.map +1 -1
  164. package/dashboard/dist-server/dashboard/src/server/agents/agent-sdk-adapter.js +5 -0
  165. package/dashboard/dist-server/dashboard/src/server/agents/agent-sdk-adapter.js.map +1 -1
  166. package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.d.ts +1 -0
  167. package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.js +21 -4
  168. package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.js.map +1 -1
  169. package/dashboard/dist-server/dashboard/src/server/agents/env-cleanup.js +8 -0
  170. package/dashboard/dist-server/dashboard/src/server/agents/env-cleanup.js.map +1 -1
  171. package/dashboard/dist-server/dashboard/src/server/coordinator/chain-map.js +6 -6
  172. package/dashboard/dist-server/dashboard/src/server/coordinator/chain-map.js.map +1 -1
  173. package/dashboard/dist-server/dashboard/src/server/coordinator/chain-map.test.js +2 -2
  174. package/dashboard/dist-server/dashboard/src/server/coordinator/chain-map.test.js.map +1 -1
  175. package/dashboard/dist-server/dashboard/src/server/index.js +14 -3
  176. package/dashboard/dist-server/dashboard/src/server/index.js.map +1 -1
  177. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/mcp-config-builder.d.ts +24 -0
  178. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/mcp-config-builder.js +220 -0
  179. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/mcp-config-builder.js.map +1 -0
  180. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/mcp-config-builder.test.d.ts +1 -0
  181. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/mcp-config-builder.test.js +115 -0
  182. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/mcp-config-builder.test.js.map +1 -0
  183. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/meeting-room-mcp-server.d.ts +44 -0
  184. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/meeting-room-mcp-server.js +260 -0
  185. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/meeting-room-mcp-server.js.map +1 -0
  186. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/meeting-room-mcp-server.test.d.ts +1 -0
  187. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/meeting-room-mcp-server.test.js +194 -0
  188. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/meeting-room-mcp-server.test.js.map +1 -0
  189. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/stdio-bridge.d.ts +2 -0
  190. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/stdio-bridge.js +279 -0
  191. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/stdio-bridge.js.map +1 -0
  192. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/tcp-helpers.d.ts +14 -0
  193. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/tcp-helpers.js +131 -0
  194. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/tcp-helpers.js.map +1 -0
  195. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/tcp-helpers.test.d.ts +1 -0
  196. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/tcp-helpers.test.js +134 -0
  197. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/tcp-helpers.test.js.map +1 -0
  198. package/dashboard/dist-server/dashboard/src/server/rooms/meeting-room-session.d.ts +51 -0
  199. package/dashboard/dist-server/dashboard/src/server/rooms/meeting-room-session.js +185 -0
  200. package/dashboard/dist-server/dashboard/src/server/rooms/meeting-room-session.js.map +1 -0
  201. package/dashboard/dist-server/dashboard/src/server/rooms/room-agent-registry.d.ts +29 -0
  202. package/dashboard/dist-server/dashboard/src/server/rooms/room-agent-registry.js +125 -0
  203. package/dashboard/dist-server/dashboard/src/server/rooms/room-agent-registry.js.map +1 -0
  204. package/dashboard/dist-server/dashboard/src/server/rooms/room-mailbox.d.ts +18 -0
  205. package/dashboard/dist-server/dashboard/src/server/rooms/room-mailbox.js +63 -0
  206. package/dashboard/dist-server/dashboard/src/server/rooms/room-mailbox.js.map +1 -0
  207. package/dashboard/dist-server/dashboard/src/server/rooms/room-session-manager.d.ts +19 -0
  208. package/dashboard/dist-server/dashboard/src/server/rooms/room-session-manager.js +45 -0
  209. package/dashboard/dist-server/dashboard/src/server/rooms/room-session-manager.js.map +1 -0
  210. package/dashboard/dist-server/dashboard/src/server/rooms/room-task-board.d.ts +25 -0
  211. package/dashboard/dist-server/dashboard/src/server/rooms/room-task-board.js +115 -0
  212. package/dashboard/dist-server/dashboard/src/server/rooms/room-task-board.js.map +1 -0
  213. package/dashboard/dist-server/dashboard/src/server/rooms/room-types.d.ts +53 -0
  214. package/dashboard/dist-server/dashboard/src/server/rooms/room-types.js +5 -0
  215. package/dashboard/dist-server/dashboard/src/server/rooms/room-types.js.map +1 -0
  216. package/dashboard/dist-server/dashboard/src/server/routes/agents.js +6 -0
  217. package/dashboard/dist-server/dashboard/src/server/routes/agents.js.map +1 -1
  218. package/dashboard/dist-server/dashboard/src/server/routes/cli-history.js +20 -1
  219. package/dashboard/dist-server/dashboard/src/server/routes/cli-history.js.map +1 -1
  220. package/dashboard/dist-server/dashboard/src/server/routes/index.d.ts +2 -1
  221. package/dashboard/dist-server/dashboard/src/server/routes/index.js +8 -1
  222. package/dashboard/dist-server/dashboard/src/server/routes/index.js.map +1 -1
  223. package/dashboard/dist-server/dashboard/src/server/routes/install.js +1 -1
  224. package/dashboard/dist-server/dashboard/src/server/routes/install.js.map +1 -1
  225. package/dashboard/dist-server/dashboard/src/server/routes/mcp.js +2 -2
  226. package/dashboard/dist-server/dashboard/src/server/routes/mcp.js.map +1 -1
  227. package/dashboard/dist-server/dashboard/src/server/routes/room-mcp.d.ts +3 -0
  228. package/dashboard/dist-server/dashboard/src/server/routes/room-mcp.js +246 -0
  229. package/dashboard/dist-server/dashboard/src/server/routes/room-mcp.js.map +1 -0
  230. package/dashboard/dist-server/dashboard/src/server/routes/rooms.d.ts +3 -0
  231. package/dashboard/dist-server/dashboard/src/server/routes/rooms.js +38 -0
  232. package/dashboard/dist-server/dashboard/src/server/routes/rooms.js.map +1 -0
  233. package/dashboard/dist-server/dashboard/src/server/routes/wiki.integration.test.js +7 -7
  234. package/dashboard/dist-server/dashboard/src/server/routes/wiki.integration.test.js.map +1 -1
  235. package/dashboard/dist-server/dashboard/src/server/routes/wiki.js +1 -1
  236. package/dashboard/dist-server/dashboard/src/server/routes/wiki.js.map +1 -1
  237. package/dashboard/dist-server/dashboard/src/server/state/event-bus.d.ts +39 -1
  238. package/dashboard/dist-server/dashboard/src/server/state/event-bus.js +12 -0
  239. package/dashboard/dist-server/dashboard/src/server/state/event-bus.js.map +1 -1
  240. package/dashboard/dist-server/dashboard/src/server/wiki/stress.test.js +1 -1
  241. package/dashboard/dist-server/dashboard/src/server/wiki/stress.test.js.map +1 -1
  242. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js +25 -14
  243. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js.map +1 -1
  244. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.test.js +6 -6
  245. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.test.js.map +1 -1
  246. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-types.d.ts +1 -1
  247. package/dashboard/dist-server/dashboard/src/server/wiki/writer-stress.test.js +17 -16
  248. package/dashboard/dist-server/dashboard/src/server/wiki/writer-stress.test.js.map +1 -1
  249. package/dashboard/dist-server/dashboard/src/server/wiki/writer.d.ts +1 -1
  250. package/dashboard/dist-server/dashboard/src/server/wiki/writer.js +18 -7
  251. package/dashboard/dist-server/dashboard/src/server/wiki/writer.js.map +1 -1
  252. package/dashboard/dist-server/dashboard/src/server/ws/handlers/agent-handler.d.ts +3 -1
  253. package/dashboard/dist-server/dashboard/src/server/ws/handlers/agent-handler.js +75 -1
  254. package/dashboard/dist-server/dashboard/src/server/ws/handlers/agent-handler.js.map +1 -1
  255. package/dashboard/dist-server/dashboard/src/server/ws/handlers/room-handler.d.ts +17 -0
  256. package/dashboard/dist-server/dashboard/src/server/ws/handlers/room-handler.js +192 -0
  257. package/dashboard/dist-server/dashboard/src/server/ws/handlers/room-handler.js.map +1 -0
  258. package/dashboard/dist-server/dashboard/src/server/ws/session-scoped-event-filter.d.ts +13 -0
  259. package/dashboard/dist-server/dashboard/src/server/ws/session-scoped-event-filter.js +37 -0
  260. package/dashboard/dist-server/dashboard/src/server/ws/session-scoped-event-filter.js.map +1 -0
  261. package/dashboard/dist-server/dashboard/src/server/ws/ws-manager.d.ts +7 -1
  262. package/dashboard/dist-server/dashboard/src/server/ws/ws-manager.js +39 -2
  263. package/dashboard/dist-server/dashboard/src/server/ws/ws-manager.js.map +1 -1
  264. package/dashboard/dist-server/dashboard/src/shared/constants.js +12 -0
  265. package/dashboard/dist-server/dashboard/src/shared/constants.js.map +1 -1
  266. package/dashboard/dist-server/dashboard/src/shared/room-leader-prompt.d.ts +1 -0
  267. package/dashboard/dist-server/dashboard/src/shared/room-leader-prompt.js +38 -0
  268. package/dashboard/dist-server/dashboard/src/shared/room-leader-prompt.js.map +1 -0
  269. package/dashboard/dist-server/dashboard/src/shared/team-types.d.ts +66 -0
  270. package/dashboard/dist-server/dashboard/src/shared/team-types.js.map +1 -1
  271. package/dashboard/dist-server/dashboard/src/shared/types.d.ts +24 -3
  272. package/dashboard/dist-server/dashboard/src/shared/ws-protocol.d.ts +76 -2
  273. package/dashboard/dist-server/dashboard/src/shared/ws-protocol.js.map +1 -1
  274. package/dashboard/dist-server/shared/agent-types.d.ts +2 -0
  275. package/dashboard/dist-server/src/commands/delegate.js +11 -8
  276. package/dashboard/dist-server/src/commands/delegate.js.map +1 -1
  277. package/dist/shared/agent-types.d.ts +2 -0
  278. package/dist/shared/agent-types.d.ts.map +1 -1
  279. package/dist/src/cli.js +2 -2
  280. package/dist/src/cli.js.map +1 -1
  281. package/dist/src/commands/delegate.d.ts.map +1 -1
  282. package/dist/src/commands/delegate.js +11 -8
  283. package/dist/src/commands/delegate.js.map +1 -1
  284. package/dist/src/commands/install-backend.d.ts +1 -1
  285. package/dist/src/commands/install-backend.d.ts.map +1 -1
  286. package/dist/src/commands/install-backend.js +1 -1
  287. package/dist/src/commands/install-backend.js.map +1 -1
  288. package/dist/src/commands/knowhow.d.ts +10 -0
  289. package/dist/src/commands/knowhow.d.ts.map +1 -0
  290. package/dist/src/commands/knowhow.js +217 -0
  291. package/dist/src/commands/knowhow.js.map +1 -0
  292. package/dist/src/commands/overlay-ui/OverlayList.d.ts +2 -0
  293. package/dist/src/commands/overlay-ui/OverlayList.d.ts.map +1 -1
  294. package/dist/src/commands/overlay-ui/OverlayList.js +6 -3
  295. package/dist/src/commands/overlay-ui/OverlayList.js.map +1 -1
  296. package/dist/src/commands/overlay-ui/index.d.ts.map +1 -1
  297. package/dist/src/commands/overlay-ui/index.js +70 -44
  298. package/dist/src/commands/overlay-ui/index.js.map +1 -1
  299. package/dist/src/commands/overlay.d.ts.map +1 -1
  300. package/dist/src/commands/overlay.js +4 -3
  301. package/dist/src/commands/overlay.js.map +1 -1
  302. package/dist/src/core/overlay/applier.d.ts +1 -1
  303. package/dist/src/core/overlay/applier.d.ts.map +1 -1
  304. package/dist/src/core/overlay/applier.js +40 -13
  305. package/dist/src/core/overlay/applier.js.map +1 -1
  306. package/dist/src/core/overlay/loader.d.ts.map +1 -1
  307. package/dist/src/core/overlay/loader.js +6 -0
  308. package/dist/src/core/overlay/loader.js.map +1 -1
  309. package/dist/src/core/overlay/types.d.ts +5 -1
  310. package/dist/src/core/overlay/types.d.ts.map +1 -1
  311. package/dist/src/core/overlay/types.js +1 -1
  312. package/dist/src/core/overlay/types.js.map +1 -1
  313. package/dist/src/hooks/context-monitor.js +1 -1
  314. package/dist/src/hooks/context-monitor.js.map +1 -1
  315. package/dist/src/hooks/skill-context.js +1 -1
  316. package/dist/src/hooks/skill-context.js.map +1 -1
  317. package/dist/src/mcp/delegate-channel-relay.d.ts +4 -0
  318. package/dist/src/mcp/delegate-channel-relay.d.ts.map +1 -1
  319. package/dist/src/mcp/delegate-channel-relay.js +73 -4
  320. package/dist/src/mcp/delegate-channel-relay.js.map +1 -1
  321. package/dist/src/tools/index.js +2 -2
  322. package/dist/src/tools/index.js.map +1 -1
  323. package/dist/src/tools/store-knowhow.d.ts +21 -0
  324. package/dist/src/tools/store-knowhow.d.ts.map +1 -0
  325. package/dist/src/tools/store-knowhow.js +295 -0
  326. package/dist/src/tools/store-knowhow.js.map +1 -0
  327. package/package.json +1 -1
  328. package/shared/agent-types.ts +2 -0
  329. package/templates/workflows/specs/node-catalog.md +170 -0
  330. package/templates/workflows/specs/template-schema.md +157 -0
  331. package/workflows/analyze.md +61 -185
  332. package/workflows/brainstorm.md +3 -23
  333. package/workflows/codebase-rebuild.md +79 -191
  334. package/workflows/codebase-refresh.md +26 -124
  335. package/workflows/debug.md +21 -141
  336. package/workflows/execute.md +183 -350
  337. package/workflows/fork.md +72 -230
  338. package/workflows/harvest.md +12 -79
  339. package/workflows/init.md +3 -17
  340. package/workflows/integration-test.md +21 -190
  341. package/workflows/issue-analyze.md +35 -153
  342. package/workflows/issue-discover.md +88 -263
  343. package/workflows/issue-execute.md +29 -208
  344. package/workflows/issue-plan.md +33 -154
  345. package/workflows/issue.md +44 -202
  346. package/workflows/knowhow.md +374 -0
  347. package/workflows/learn.md +30 -177
  348. package/workflows/maestro-coordinate.codex.md +77 -362
  349. package/workflows/maestro-link-coordinate.md +12 -61
  350. package/workflows/maestro.codex.md +124 -457
  351. package/workflows/maestro.md +562 -976
  352. package/workflows/map.md +16 -53
  353. package/workflows/merge.md +42 -197
  354. package/workflows/milestone-audit.md +5 -43
  355. package/workflows/milestone-complete.md +11 -60
  356. package/workflows/plan.md +176 -387
  357. package/workflows/quick.md +25 -174
  358. package/workflows/refactor.md +28 -221
  359. package/workflows/retrospective.md +104 -443
  360. package/workflows/review.md +87 -299
  361. package/workflows/roadmap.md +117 -97
  362. package/workflows/spec-generate.md +22 -118
  363. package/workflows/specs-add.md +5 -25
  364. package/workflows/specs-load.md +1 -5
  365. package/workflows/specs-remove.md +0 -11
  366. package/workflows/specs-setup.md +11 -47
  367. package/workflows/status.md +58 -200
  368. package/workflows/sync.md +28 -141
  369. package/workflows/test-gen.md +23 -100
  370. package/workflows/test.md +15 -125
  371. package/workflows/ui-design.md +139 -465
  372. package/workflows/ui-style.md +36 -228
  373. package/workflows/verify.md +52 -273
  374. package/workflows/wiki-connect.md +9 -46
  375. package/workflows/wiki-digest.md +7 -50
  376. package/workflows/wiki-manage.md +11 -108
  377. package/.claude/commands/maestro-coordinate.md +0 -63
  378. package/.claude/commands/manage-memory-capture.md +0 -59
  379. package/.codex/skills/maestro-coordinate/SKILL.md +0 -213
  380. package/.codex/skills/manage-memory-capture/SKILL.md +0 -93
  381. package/dashboard/dist/assets/ChatInput-pUOLJIKE.js +0 -49
  382. package/dashboard/dist/assets/ChatPage-B8Xqkt0v.js +0 -27
  383. package/dashboard/dist/assets/McpPage-BY0SjTgw.js +0 -21
  384. package/dashboard/dist/assets/TeamsPage-BO2kP70F.js +0 -11
  385. package/dashboard/dist/assets/WorkflowPage-C8hWbYim.js +0 -6
  386. package/dashboard/dist/assets/en-ZbRpfzuP.js +0 -1
  387. package/dashboard/dist/assets/index-C2Mcb4TJ.js +0 -231
  388. package/dashboard/dist/assets/index-DyBbPc18.css +0 -1
  389. package/dashboard/dist/assets/loader-B5F6PzFT.js +0 -11
  390. package/dashboard/dist/assets/zh-CN-CoXBFuny.js +0 -1
  391. package/workflows/maestro-coordinate.md +0 -582
  392. package/workflows/memory.md +0 -451
@@ -40,19 +40,18 @@ This is a **post-execution analysis** workflow. It reads only — until the rout
40
40
  ## Stage 1: parse_input
41
41
 
42
42
  ```
43
- 1. Verify .workflow/ exists; else error E001.
44
- 2. Tokenize $ARGUMENTS:
45
- - First non-flag token: phase number, range "N..M", or "--all"
46
- - Flags: --lens, --no-route, --all, --compare, --auto-yes
47
- 3. Build:
48
- mode = "scan" | "single" | "range" | "all"
49
- phases = [] (filled in Stage 2)
50
- lenses = ["technical","process","quality","decision"]
51
- route = true (false if --no-route)
52
- compare_to = null | <phase number>
53
- auto_yes = false
54
- 4. Validate --lens names. Unknown name error E002.
55
- 5. Validate --compare requires single mode. Else error E003.
43
+ Require .workflow/ exists (E001).
44
+ Parse $ARGUMENTS → first non-flag token as phase/range/"--all", remaining as flags.
45
+
46
+ Build config:
47
+ mode = "scan" | "single" | "range" | "all"
48
+ phases = [] (filled in Stage 2)
49
+ lenses = ["technical","process","quality","decision"]
50
+ route = true (false if --no-route)
51
+ compare_to = null | <phase number>
52
+ auto_yes = false
53
+
54
+ Validate: --lens names must be known (E002), --compare requires single mode (E003).
56
55
  ```
57
56
 
58
57
  ---
@@ -60,28 +59,13 @@ This is a **post-execution analysis** workflow. It reads only — until the rout
60
59
  ## Stage 2: scan_unreviewed (mode = "scan" or "all")
61
60
 
62
61
  ```
63
- candidates = []
64
-
65
62
  Read .workflow/state.json → state
66
- artifacts = state.artifacts ?? []
67
-
68
- // Resolve completed phases from artifact registry
69
- phaseNums = [...new Set(artifacts.map(a => a.phase).filter(Boolean))]
70
- FOR each phaseNum in phaseNums:
71
- execArt = artifacts.find(a => a.type === 'execute' && a.phase === phaseNum && a.status === 'completed')
72
- IF execArt:
73
- artifact_dir = ".workflow/" + execArt.path
74
- has_retro = file exists at "{artifact_dir}/retrospective.json"
75
- candidates.push({
76
- number: phaseNum,
77
- slug: execArt.slug ?? "phase-" + phaseNum,
78
- title: execArt.title ?? execArt.slug ?? "Phase " + phaseNum,
79
- completed_at: execArt.completed_at,
80
- has_retro: has_retro,
81
- phase_dir: artifact_dir,
82
- gaps: 0,
83
- review_verdict: "—"
84
- })
63
+
64
+ candidates = all completed execute artifacts from state.artifacts, each mapped to:
65
+ { number, slug, title, completed_at, has_retro, phase_dir, gaps: 0, review_verdict: "—" }
66
+
67
+ where phase_dir = ".workflow/" + artifact.path
68
+ has_retro = exists "{phase_dir}/retrospective.json"
85
69
  ```
86
70
 
87
71
  ### Display backlog
@@ -111,10 +95,7 @@ FOR each phaseNum in phaseNums:
111
95
 
112
96
  If overwriting existing retrospective.json:
113
97
  ```
114
- mkdir -p "{candidate.phase_dir}/.history" // phase_dir is artifact_dir from registry
115
- TIMESTAMP = format(now(), "YYYY-MM-DDTHH-mm-ss")
116
- mv "{candidate.phase_dir}/retrospective.json" "{candidate.phase_dir}/.history/retrospective-{TIMESTAMP}.json"
117
- mv "{candidate.phase_dir}/retrospective.md" "{candidate.phase_dir}/.history/retrospective-{TIMESTAMP}.md"
98
+ Archive existing retrospective.{json,md} to "{candidate.phase_dir}/.history/retrospective-{YYYY-MM-DDTHH-mm-ss}.{ext}"
118
99
  ```
119
100
 
120
101
  ---
@@ -124,65 +105,43 @@ mv "{candidate.phase_dir}/retrospective.md" "{candidate.phase_dir}/.history/re
124
105
  For each selected phase (using `candidate.phase_dir` resolved in Stage 2), build the in-memory artifacts bundle:
125
106
 
126
107
  ```
127
- phase_dir = candidate.phase_dir // already resolved from artifact registry (e.g. .workflow/scratch/plan-auth-2026-04-20)
128
-
129
- artifacts = {
130
- phase_num: NN,
131
- phase_slug: slug,
132
- artifact_dir: artifact_dir,
133
- index: read "{artifact_dir}/index.json" or null,
134
- state: read .workflow/state.json,
135
- plan: read "{artifact_dir}/plan.json" or null,
136
- verification: read "{artifact_dir}/verification.json" or null,
137
- review: read "{artifact_dir}/review.json" or null,
138
- uat: read "{artifact_dir}/uat.md" or null,
139
- task_summaries: read all "{artifact_dir}/.summaries/TASK-*-summary.md",
140
- task_jsons: read all "{artifact_dir}/.task/TASK-*.json",
141
- phase_issues: filter ".workflow/issues/issues.jsonl" + ".workflow/issues/issue-history.jsonl"
142
- where issue.phase_ref == phase_slug or issue.phase_ref == NN,
143
- prior_retro: null
144
- }
108
+ artifact_dir = candidate.phase_dir (resolved from artifact registry)
145
109
 
146
- // Resolve --compare target
147
- IF --compare M:
148
- compareArt = state.artifacts.find(a => a.type === 'execute' && a.phase === M)
149
- IF compareArt:
150
- artifacts.prior_retro = read ".workflow/" + compareArt.path + "/retrospective.json"
151
- }
110
+ Load artifacts bundle from artifact_dir:
111
+ index ← {artifact_dir}/index.json
112
+ state .workflow/state.json
113
+ plan ← {artifact_dir}/plan.json
114
+ verification {artifact_dir}/verification.json
115
+ review ← {artifact_dir}/review.json
116
+ uat ← {artifact_dir}/uat.md
117
+ task_summaries ← {artifact_dir}/.summaries/TASK-*-summary.md
118
+ task_jsons ← {artifact_dir}/.task/TASK-*.json
119
+ phase_issues ← .workflow/issues/{issues,issue-history}.jsonl filtered by phase_ref == slug|NN
120
+ prior_retro ← if --compare M: load phase M's retrospective.json via artifact registry
152
121
  ```
153
122
 
154
123
  ### Compute base metrics
155
124
 
156
125
  ```
157
126
  metrics = {
158
- tasks_planned: plan?.tasks?.length or task_jsons.length,
159
- tasks_completed: count task_jsons where status == "completed",
160
- tasks_deferred: state.accumulated_context.deferred?.filter(d => d.phase == NN)?.length or 0,
161
- gaps_found: verification?.gaps?.length or 0,
162
- gaps_closed: verification?.gaps?.filter(g => g.status == "closed")?.length or 0,
163
- antipatterns: verification?.antipatterns?.length or 0,
164
- constraint_violations: verification?.constraint_violations?.length or 0,
165
- issues_opened: phase_issues.filter(i => i.source in ["verification","review","antipattern","discovery"]).length,
166
- issues_closed: phase_issues.filter(i => i.status in ["completed","failed"]).length,
167
- rework_iterations: count entries in .history/ matching verification-*.json,
168
- severity_distribution: review?.severity_distribution or {critical:0,high:0,medium:0,low:0,total:0},
169
- review_verdict: review?.verdict or "not_run",
170
- review_level: review?.level or null,
171
- uat_blockers: count blockers parsed from uat.md or 0
127
+ tasks_planned plan.tasks.length or task_jsons.length
128
+ tasks_completed task_jsons where status=="completed"
129
+ tasks_deferred state.accumulated_context.deferred for this phase
130
+ gaps_found / closed ← verification.gaps (total vs status=="closed")
131
+ antipatterns ← verification.antipatterns count
132
+ constraint_violations ← verification.constraint_violations count
133
+ issues_opened ← phase_issues where source in [verification,review,antipattern,discovery]
134
+ issues_closed ← phase_issues where status in [completed,failed]
135
+ rework_iterations ← count .history/verification-*.json
136
+ severity_distribution ← review.severity_distribution or {critical:0,high:0,medium:0,low:0,total:0}
137
+ review_verdict/level ← review.verdict or "not_run", review.level
138
+ uat_blockers ← count blockers from uat.md
172
139
  }
173
140
  ```
174
141
 
175
- If `--compare M` is set, also compute delta:
142
+ If `--compare M` is set, compute delta (current minus prior_retro) for:
176
143
  ```
177
- delta = {
178
- vs_phase: M,
179
- tasks_completed: metrics.tasks_completed - prior_retro.metrics.tasks_completed,
180
- gaps_found: metrics.gaps_found - prior_retro.metrics.gaps_found,
181
- issues_opened: metrics.issues_opened - prior_retro.metrics.issues_opened,
182
- rework_iterations: metrics.rework_iterations - prior_retro.metrics.rework_iterations,
183
- severity_critical: metrics.severity_distribution.critical - prior_retro.metrics.severity_distribution.critical,
184
- severity_high: metrics.severity_distribution.high - prior_retro.metrics.severity_distribution.high
185
- }
144
+ delta = { vs_phase, tasks_completed, gaps_found, issues_opened, rework_iterations, severity_critical, severity_high }
186
145
  ```
187
146
 
188
147
  ---
@@ -287,19 +246,11 @@ Return ONLY a single JSON object, no prose, matching this schema:
287
246
  **decision**:
288
247
  > Reconstruct the key decisions made during the phase, their stated rationale, and the alternatives rejected. Where did mid-phase pivots happen and why? What constraints surfaced late? Watch for: decisions made without recorded rationale, late pivots that suggest weak upfront framing.
289
248
 
290
- ### Spawn pattern (single message, all lenses parallel)
249
+ ### Spawn pattern
291
250
 
292
- ```
293
- For each lens in lenses:
294
- Agent({
295
- subagent_type: "general-purpose",
296
- description: "Retrospective: {lens} lens for phase {NN}",
297
- prompt: <rendered lens prompt template>,
298
- run_in_background: false
299
- })
300
- ```
251
+ Spawn all active lenses in parallel as `general-purpose` Agents (run_in_background: false), each receiving the rendered lens prompt template.
301
252
 
302
- Collect lens results into `lens_results = { technical: {...}, process: {...}, quality: {...}, decision: {...} }`. If any lens agent fails, log warning W001 and proceed with the lenses that returned.
253
+ Collect results into `lens_results = { technical, process, quality, decision }`. If any lens fails, log W001 and proceed with successful lenses.
303
254
 
304
255
  ---
305
256
 
@@ -309,141 +260,23 @@ Merge lens results into the canonical retrospective record.
309
260
 
310
261
  ### Generate insight IDs
311
262
 
312
- For each insight across all lenses, generate `INS-{8 lowercase hex chars}` using a stable hash of `phase_num + lens + title` so re-runs do not duplicate.
263
+ Assign `INS-{8 lowercase hex}` per insight using stable hash of `phase_num + lens + title` (idempotent across re-runs).
313
264
 
314
265
  ### Build retrospective.json
315
266
 
316
- ```
317
- retrospective = {
318
- phase: NN,
319
- phase_slug: slug,
320
- phase_title: index.title,
321
- retrospected_at: now() ISO 8601 UTC,
322
- lenses_run: [...lens names that returned],
323
- metrics: <from Stage 3>,
324
- delta: <from Stage 3 if --compare set, else null>,
325
- findings_by_lens: {
326
- technical: { wins, challenges, watch_patterns },
327
- process: { wins, challenges, watch_patterns },
328
- quality: { wins, challenges, watch_patterns },
329
- decision: { wins, challenges, watch_patterns }
330
- },
331
- distilled_insights: [
332
- {
333
- id: "INS-a1b2c3d4",
334
- lens: "technical",
335
- category: "pattern",
336
- title: "...",
337
- summary: "...",
338
- confidence: "high",
339
- evidence_refs: [...],
340
- tags: [...],
341
- routed_to: "spec",
342
- routed_id: null // filled in Stage 6
343
- },
344
- ...
345
- ],
346
- routing_recommendations: [
347
- { insight_id: "INS-a1b2c3d4", target: "spec", rationale: "..." },
348
- { insight_id: "INS-...", target: "issue", rationale: "..." },
349
- { insight_id: "INS-...", target: "note", rationale: "..." }
350
- ],
351
- tweetable: "Phase {NN} ({title}): {N} tasks shipped, {gaps} gaps closed, verdict {verdict}. {top_insight_title}"
352
- }
353
- ```
267
+ Assemble the canonical record with structure: `{ phase, phase_slug, phase_title, retrospected_at, lenses_run, metrics, delta, findings_by_lens, distilled_insights, routing_recommendations, tweetable }`. See full schema in [Schemas](#retrospectivejson) section. Each insight's `routed_id` is null here (populated in Stage 6).
354
268
 
355
269
  ### Build retrospective.md (human-readable)
356
270
 
357
- ```markdown
358
- # Phase {NN} Retrospective: {title}
359
-
360
- > {tweetable}
361
-
362
- **Phase**: {phase_slug}
363
- **Retrospected**: {retrospected_at}
364
- **Lenses**: {lenses_run joined by ", "}
365
-
366
- ## Metrics
367
-
368
- | Metric | Value |
369
- |--------|-------|
370
- | Tasks planned / completed / deferred | {planned} / {completed} / {deferred} |
371
- | Gaps found / closed | {gaps_found} / {gaps_closed} |
372
- | Issues opened / closed | {issues_opened} / {issues_closed} |
373
- | Antipatterns | {antipatterns} |
374
- | Constraint violations | {constraint_violations} |
375
- | Rework iterations | {rework_iterations} |
376
- | Review verdict | {review_verdict} ({review_level}) |
377
- | Severity (C/H/M/L) | {critical}/{high}/{medium}/{low} |
378
- | UAT blockers | {uat_blockers} |
379
-
380
- {IF delta:
381
- ## Delta vs Phase {compare_to}
382
-
383
- | Metric | Delta |
384
- |--------|-------|
385
- | Tasks completed | {±N} |
386
- | Gaps found | {±N} |
387
- | Issues opened | {±N} |
388
- | Rework iterations | {±N} |
389
- | Critical findings | {±N} |
390
- | High findings | {±N} |
391
- }
392
-
393
- ## Findings by Lens
394
-
395
- {FOR each lens in [technical, process, quality, decision]:}
396
- ### {Lens title}
397
-
398
- **Wins**
399
- 1. {win.title} — {evidence_refs joined by ", "}
400
- 2. ...
401
- 3. ...
402
-
403
- **Challenges**
404
- 1. {challenge.title} — {evidence_refs}
405
- 2. ...
406
- 3. ...
407
-
408
- **Watch patterns**
409
- 1. {watch.title} — {evidence_refs}
410
- 2. ...
411
- 3. ...
412
-
413
- {END FOR}
414
-
415
- ## Distilled Insights
416
-
417
- {FOR each insight in distilled_insights:}
418
- ### {INS-id}: {title}
419
-
420
- - **Category**: {category}
421
- - **Lens**: {lens}
422
- - **Confidence**: {confidence}
423
- - **Tags**: {tags}
424
- - **Routed to**: {routed_to} ({routed_id or "pending"})
425
-
426
- {summary}
271
+ Render a markdown report with these sections:
272
+ 1. **Header**: tweetable quote, phase metadata, lenses run
273
+ 2. **Metrics table**: all metrics fields from Stage 3
274
+ 3. **Delta table** (if --compare): ± values for key metrics
275
+ 4. **Findings by Lens**: for each lens → numbered wins, challenges, watch_patterns with evidence_refs
276
+ 5. **Distilled Insights**: per insight → category, lens, confidence, tags, routed_to, summary, evidence refs
277
+ 6. **Routing Recommendations table**: insight_id | target | rationale
427
278
 
428
- **Evidence**:
429
- {FOR ref in evidence_refs:} - `{ref}`{END FOR}
430
-
431
- {END FOR}
432
-
433
- ## Routing Recommendations
434
-
435
- | Insight | Target | Rationale |
436
- |---------|--------|-----------|
437
- | {INS-id} | spec | ... |
438
- | {INS-id} | issue | ... |
439
- | {INS-id} | note | ... |
440
- ```
441
-
442
- Write both files (phase_dir already resolved in Stage 2):
443
- ```
444
- Write "{artifact_dir}/retrospective.json"
445
- Write "{artifact_dir}/retrospective.md"
446
- ```
279
+ Write both `{artifact_dir}/retrospective.json` and `{artifact_dir}/retrospective.md`.
447
280
 
448
281
  ---
449
282
 
@@ -477,34 +310,18 @@ Route spec-routed insights as `<spec-entry>` entries into the appropriate catego
477
310
  - quality-related → `quality`
478
311
 
479
312
  ```
480
- category = map_insight_to_category(insight.type)
481
- target_file = category_to_file(category) # e.g., coding → coding-conventions.md
482
-
483
- keywords = extract_keywords(insight.title + insight.summary) # 3-5 domain-specific terms
484
-
485
- Append to .workflow/specs/{target_file}:
486
- <spec-entry category="{category}" keywords="{keywords}" date="{YYYY-MM-DD}" source="retrospective">
313
+ Map insight type → category target file:
314
+ pattern/convention coding → coding-conventions.md
315
+ adr-candidate/architecture → arch → arch-decisions.md
316
+ quality-related quality quality-conventions.md
487
317
 
488
- ### {insight.title}
318
+ Append <spec-entry> to .workflow/specs/{target_file} with:
319
+ category, keywords (3-5 extracted from title+summary), date, source="retrospective"
320
+ Body: insight title, summary, evidence refs, phase/lens/INS_id/confidence metadata
489
321
 
490
- {insight.summary}
322
+ Create target file with category frontmatter if it does not exist.
491
323
 
492
- **Evidence:** {FOR ref in evidence_refs:} `{ref}` {END FOR}
493
- **Phase:** {NN} ({phase_slug}) | **Lens:** {lens} | **Insight:** {INS_id} | **Confidence:** {insight.confidence}
494
-
495
- </spec-entry>
496
- ```
497
-
498
- If the target file does not exist, create it with category frontmatter first (same as `spec-add` on-demand creation).
499
-
500
- ## Routing trail
501
-
502
- - Phase: {NN}-{phase_slug}
503
- - Lens: {lens}
504
- - Insight: {INS_id}
505
- - Confidence: {confidence}
506
-
507
- insight.routed_id = "{category_file}#INS-{INS_id}" # e.g., coding-conventions.md#INS-a1b2c3d4
324
+ insight.routed_id = "{category_file}#INS-{INS_id}"
508
325
  ```
509
326
 
510
327
  #### Target: note
@@ -512,88 +329,37 @@ insight.routed_id = "{category_file}#INS-{INS_id}" # e.g., coding-conventions.m
512
329
  Reuse the existing `manage-learn` skill in tip mode — do not duplicate the learning pipeline.
513
330
 
514
331
  ```
515
- note_text = "[Retro phase {NN} / {lens}] {insight.title}: {insight.summary}"
516
- tags = insight.tags + ["retrospective", "phase-{NN}", insight.lens]
517
-
518
- Skill({
519
- skill: "manage-learn",
520
- args: "tip \"{note_text}\" --tag " + tags.join(",")
521
- })
332
+ Invoke manage-learn tip with:
333
+ text = "[Retro phase {NN} / {lens}] {insight.title}: {insight.summary}"
334
+ tags = insight.tags + ["retrospective", "phase-{NN}", insight.lens]
522
335
 
523
- Capture the returned TIP-{id} from the skill output.
524
336
  insight.routed_id = "TIP-{captured_id}"
525
337
  ```
526
338
 
527
- If the skill call cannot be intercepted to capture the ID, fall back to writing the tip file directly using the schema in `workflows/memory.md` Part B Step 3 (Tip mode), and update `wiki-index.json` per Step 4.
339
+ Fallback: if skill ID cannot be captured, write tip file directly per `workflows/knowhow.md` Part B Step 3 and update `wiki-index.json` per Step 4.
528
340
 
529
341
  #### Target: issue
530
342
 
531
343
  Append a new entry to `.workflow/issues/issues.jsonl` matching the canonical schema from `workflows/issue.md` Step 4.
532
344
 
533
345
  ```
534
- mkdir -p ".workflow/issues"
535
- touch ".workflow/issues/issues.jsonl"
536
-
537
- # Generate next ID for today (scan both active and history)
538
- today = format(now(), "YYYYMMDD")
539
- existing_ids = []
540
- read .workflow/issues/issues.jsonl collect ids matching ISS-{today}-*
541
- read .workflow/issues/issue-history.jsonl → collect ids matching ISS-{today}-*
542
- counter = max sequence number from existing_ids + 1, or 1 if none
543
- issue_id = "ISS-{today}-{counter padded to 3 digits}"
544
-
545
- # Map insight category → severity (operator on the insight, not finding severity)
546
- severity = match insight.category:
547
- "antipattern" "high"
548
- "gotcha" → "medium"
549
- "pattern" → "low"
550
- "decision" → "low"
551
- "tool" → "low"
552
- "technique" → "low"
553
- default → "medium"
554
-
555
- priority = match severity:
556
- critical → 1
557
- high → 2
558
- medium → 3
559
- low → 4
560
-
561
- issue = {
562
- id: issue_id,
563
- title: "[Retro] {insight.title}" (truncated to 100 chars),
564
- status: "open",
565
- priority: priority,
566
- severity: severity,
567
- source: "retrospective",
568
- phase_ref: phase_slug,
569
- gap_ref: insight.id,
570
- description: insight.summary,
571
- fix_direction: "Surfaced by phase {NN} retrospective ({lens} lens). " +
572
- "Review evidence refs and determine fix scope.",
573
- context: {
574
- location: insight.evidence_refs[0] or "",
575
- suggested_fix: "",
576
- notes: "Confidence: " + insight.confidence
577
- },
578
- tags: insight.tags + ["retrospective", "phase-" + NN, insight.lens],
579
- affected_components: [],
580
- feedback: [],
581
- issue_history: [
582
- {
583
- timestamp: now ISO,
584
- from_status: null,
585
- to_status: "open",
586
- actor: "retrospective",
587
- note: "Auto-created from phase " + NN + " retrospective insight " + insight.id
588
- }
589
- ],
590
- created_at: now ISO,
591
- updated_at: now ISO,
592
- resolved_at: null,
593
- resolution: null
594
- }
346
+ Ensure .workflow/issues/issues.jsonl exists.
347
+
348
+ Generate issue_id = "ISS-{YYYYMMDD}-{NNN}" (next sequence from issues.jsonl + issue-history.jsonl).
349
+
350
+ Map insight.category severity:
351
+ antipattern→high, gotcha→medium, pattern/decision/tool/technique→low, default→medium
352
+ Map severity priority: critical→1, high→2, medium→3, low→4
353
+
354
+ Create issue per canonical schema (workflows/issue.md Step 4):
355
+ title: "[Retro] {insight.title}" (max 100 chars)
356
+ source: "retrospective", phase_ref: phase_slug, gap_ref: insight.id
357
+ description: insight.summary
358
+ fix_direction: "Surfaced by phase {NN} retrospective ({lens} lens). Review evidence refs."
359
+ tags: insight.tags + ["retrospective", "phase-{NN}", insight.lens]
360
+ Initial issue_history entry with actor="retrospective"
595
361
 
596
- Append serialized JSON line to .workflow/issues/issues.jsonl
362
+ Append to .workflow/issues/issues.jsonl
597
363
  insight.routed_id = issue_id
598
364
  ```
599
365
 
@@ -610,84 +376,32 @@ Append every distilled insight (regardless of routing target, including `routed_
610
376
  ### Bootstrap
611
377
 
612
378
  ```
613
- mkdir -p ".workflow/learning"
614
- touch ".workflow/learning/lessons.jsonl"
615
-
616
- INDEX_FILE = ".workflow/learning/learning-index.json"
617
- IF NOT exists INDEX_FILE:
618
- Write '{"entries":[],"_metadata":{"created":"' + now ISO + '","version":"1.0"}}'
379
+ Ensure .workflow/learning/lessons.jsonl and learning-index.json exist.
380
+ Initialize learning-index.json with {"entries":[],"_metadata":{"created":"...","version":"1.0"}} if new.
619
381
  ```
620
382
 
621
383
  ### Append rows
622
384
 
623
- For each insight in `distilled_insights`:
624
-
625
- ```
626
- row = {
627
- id: insight.id,
628
- phase: NN,
629
- phase_slug: phase_slug,
630
- lens: insight.lens,
631
- category: insight.category,
632
- title: insight.title,
633
- summary: insight.summary,
634
- confidence: insight.confidence,
635
- tags: insight.tags,
636
- evidence_refs: insight.evidence_refs,
637
- routed_to: insight.routed_to,
638
- routed_id: insight.routed_id,
639
- source: "retrospective",
640
- captured_at: now ISO
641
- }
642
-
643
- Append serialized JSON line to .workflow/learning/lessons.jsonl
644
- ```
385
+ For each insight in `distilled_insights`, append a JSON line to `.workflow/learning/lessons.jsonl` with fields:
386
+ `{ id, phase, phase_slug, lens, category, title, summary, confidence, tags, evidence_refs, routed_to, routed_id, source: "retrospective", captured_at }`
645
387
 
646
388
  ### Update index
647
389
 
648
- ```
649
- Read .workflow/learning/learning-index.json
650
- For each new insight:
651
- Append to entries[]:
652
- {
653
- id: insight.id,
654
- type: "insight",
655
- timestamp: now ISO,
656
- file: "lessons.jsonl",
657
- summary: insight.title (truncated to 80 chars),
658
- tags: insight.tags,
659
- lens: insight.lens,
660
- category: insight.category,
661
- phase: NN,
662
- phase_slug: phase_slug,
663
- confidence: insight.confidence,
664
- routed_to: insight.routed_to,
665
- routed_id: insight.routed_id
666
- }
667
- Write .workflow/learning/learning-index.json
668
- ```
390
+ Append an entry to `.workflow/learning/learning-index.json` entries[] for each new insight:
391
+ `{ id, type: "insight", timestamp, file: "lessons.jsonl", summary (80 chars), tags, lens, category, phase, phase_slug, confidence, routed_to, routed_id }`
669
392
 
670
393
  ### Backward-compat append to specs/learnings.md
671
394
 
672
395
  Append learnings to `.workflow/specs/learnings.md` (shared with milestone-complete's learning extraction) using `<spec-entry>` closed-tag format:
673
396
 
674
397
  ```
675
- IF .workflow/specs/learnings.md exists:
676
- FOR each insight:
677
- keywords = extract_keywords(insight.title + insight.summary) # 3-5 domain-specific terms
678
- Append:
679
- <spec-entry category="learning" keywords="{keywords}" date="{YYYY-MM-DD}" source="retrospective">
680
-
681
- ### {title}
398
+ Append each insight to .workflow/specs/learnings.md as <spec-entry> with:
399
+ category="learning", keywords (3-5 extracted), date, source="retrospective"
400
+ Body: title, summary, phase/lens/INS_id metadata
682
401
 
683
- {summary}
684
- Phase: {NN} | Lens: {lens} | Insight: {INS_id}
685
-
686
- </spec-entry>
402
+ Create file with category frontmatter + "## Entries" header if it does not exist.
687
403
  ```
688
404
 
689
- If the file does not exist, create it with category frontmatter and a `## Entries` header.
690
-
691
405
  ---
692
406
 
693
407
  ## Stage 8: next_step
@@ -695,38 +409,16 @@ If the file does not exist, create it with category frontmatter and a `## Entrie
695
409
  Print confirmation banner and route the user.
696
410
 
697
411
  ```
698
- === RETROSPECTIVE COMPLETE ===
699
- Phase: {NN} ({phase_slug})
700
- Lenses run: {lenses joined by ", "}
701
- Insights: {count}
702
-
703
- Routing summary:
704
- Spec entries: {N} → .workflow/specs/{category-file}.md
705
- Notes saved: {N} → .workflow/memory/TIP-*
706
- Issues opened: {N} → .workflow/issues/issues.jsonl
707
- Lessons logged: {N} → .workflow/learning/lessons.jsonl
708
-
709
- Files:
710
- {artifact_dir}/retrospective.md
711
- {artifact_dir}/retrospective.json
412
+ Print banner: phase, lenses run, insight count, routing summary (spec/note/issue/lesson counts with target paths), output file paths.
712
413
 
713
- Next steps (suggested):
714
- Skill({ skill: "manage-status" }) — Review project state
715
- Skill({ skill: "manage-issue", args: "list --source retrospective" }) — Triage created issues
716
- Skill({ skill: "manage-learn", args: "list" }) — Browse the lessons library
717
- Skill({ skill: "maestro-milestone-audit" }) — Audit milestone if all phases done
414
+ Suggested next steps:
415
+ manage-status — Review project state
416
+ manage-issue list --source retrospective — Triage created issues
417
+ manage-learn list — Browse the lessons library
418
+ maestro-milestone-audit — Audit milestone if all phases done
718
419
  ```
719
420
 
720
- If `mode == "range"` or `--all`, loop Stages 38 per phase, then print an aggregate summary at the end:
721
-
722
- ```
723
- === RETROSPECTIVE BATCH COMPLETE ===
724
- Phases retrospected: {count}
725
- Total insights: {sum}
726
- Total specs: {sum}
727
- Total notes: {sum}
728
- Total issues: {sum}
729
- ```
421
+ If `mode == "range"` or `--all`, loop Stages 3-8 per phase, then print aggregate batch summary (phases retrospected, total insights/specs/notes/issues).
730
422
 
731
423
  ---
732
424
 
@@ -828,34 +520,3 @@ One JSON object per line:
828
520
  }
829
521
  ```
830
522
 
831
- ---
832
-
833
- ## Error Codes
834
-
835
- | Code | Severity | Description |
836
- |------|----------|-------------|
837
- | E001 | error | `.workflow/` not initialized — run `Skill({ skill: "maestro-init" })` first |
838
- | E002 | error | Unknown `--lens` name (must be one of: technical, process, quality, decision) |
839
- | E003 | error | `--compare` requires a single phase argument |
840
- | E004 | error | Phase argument resolves to a phase that has not executed yet (no `.task/` or `.summaries/`) |
841
- | E005 | error | Phase argument out of range / phase directory not found |
842
- | W001 | warning | One or more lens agents failed — proceeding with partial lens coverage |
843
- | W002 | warning | Existing retrospective.json found and not `--all`/`--force` — prompted user to overwrite |
844
- | W003 | warning | `manage-memory-capture` skill returned without parseable TIP id; fell back to direct write |
845
- | W004 | warning | `--compare` target phase has no retrospective.json; delta omitted |
846
-
847
- ---
848
-
849
- ## Success Criteria
850
-
851
- - [ ] `.workflow/` exists and target phase resolved
852
- - [ ] All requested lenses returned valid JSON (or partial-coverage warning W001 logged)
853
- - [ ] `retrospective.json` written with metrics, findings_by_lens, distilled_insights
854
- - [ ] `retrospective.md` written and human-readable
855
- - [ ] Each insight has stable `INS-{8hex}` id
856
- - [ ] Routing executed (unless `--no-route`): every recommendation either created an artifact or was explicitly skipped by user
857
- - [ ] `lessons.jsonl` appended with one row per insight
858
- - [ ] `learning-index.json` updated
859
- - [ ] Issue rows match the canonical issues.jsonl schema (verifiable with `jq`)
860
- - [ ] No existing phase artifacts modified (verification.json, review.json, plan.json, etc. untouched)
861
- - [ ] Confirmation banner printed with routing counts and next-step suggestions