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
@@ -1,531 +1,292 @@
1
- ---
2
- name: quality-retrospective
3
- description: Multi-lens 复盘 (retrospective) for completed phases. Context-Agent Fork loads phase artifacts once; four parallel lens agents (technical, process, quality, decision) analyze independently; synthesizer distills insights; outputs are routed to spec stubs, memory tips, issues, and lessons.jsonl.
4
- argument-hint: "[phase|N..M] [--lens technical|process|quality|decision] [--all] [--no-route] [--compare N] [--auto-yes]"
5
- allowed-tools: Read, Write, Edit, Bash, Glob, Grep
6
- ---
7
-
8
- <purpose>
9
- Multi-lens retrospective for completed phases. Context-Agent Fork loads phase artifacts once;
10
- four parallel lens agents (technical, process, quality, decision) analyze independently;
11
- synthesizer distills insights; outputs are routed to spec stubs, memory tips, issues, and lessons.jsonl.
12
-
13
- ```
14
- +------------------------------------------------------------------+
15
- | quality-retrospective -- Context-Agent Fork + Parallel Fan-out |
16
- +------------------------------------------------------------------+
17
-
18
- Stage 1-3: Read-only resolution (no writes)
19
- +---------------------------------------------+
20
- | Parse mode -> Validate artifacts |
21
- | -> [scan] Find unreviewed phases |
22
- +----------------------+-----------------------+
23
- |
24
- Stage 4: Context-Agent Fork (Pattern 2.10)
25
- +----------------------------------------------------------------+
26
- | spawn ctx (fork_turns: "none") |
27
- | wait ctx |
28
- | +----------+ +----------+ +----------+ +----------+ |
29
- | |lens-tech | |lens-proc | |lens-qual | |lens-dec | |
30
- | |fork=true | |fork=true | |fork=true | |fork=true | |
31
- | +----------+ +----------+ +----------+ +----------+ |
32
- | wait_agent([lens-tech, lens-proc, lens-qual, lens-dec]) |
33
- | close lenses -> close ctx LAST |
34
- +----------------------+-----------------------------------------+
35
- | lens results
36
- Stage 5: Synthesizer
37
- +------------------------------------------+
38
- | spawn synthesizer (fork_turns: "none") |
39
- | -> wait -> close |
40
- +----------------------+-------------------+
41
- | distilled_insights
42
- Stage 6-8: Route -> Write -> Report
43
- ```
44
- </purpose>
45
-
46
- <context>
47
- ```bash
48
- $quality-retrospective
49
- $quality-retrospective "3"
50
- $quality-retrospective "2..4"
51
- $quality-retrospective "--all"
52
- $quality-retrospective "3 --lens technical --no-route"
53
- $quality-retrospective "3 --compare 2 --auto-yes"
54
- ```
55
-
56
- **Flags**:
57
- - No phase argument -> `scan` mode: report unreviewed completed phases, prompt selection
58
- - `<N>` -> `single` mode: retrospect phase N
59
- - `<N>..<M>` -> `range` mode: retrospect phases N through M (inclusive)
60
- - `--all` -> batch mode: re-run for every completed phase
61
- - `--lens <name>` -- restrict to one lens (repeatable): `technical|process|quality|decision`
62
- - `--no-route` -- produce retrospective.{md,json} only; skip auto-creation of spec/note/issue
63
- - `--compare <M>` -- emit a delta section vs phase M's prior retrospective
64
- - `--auto-yes` -- accept all routing recommendations without prompting
65
-
66
- When `--auto-yes`: Accept all routing recommendations without prompting. Route all insights automatically.
67
-
68
- **Storage written**:
69
- - `{target_dir}/retrospective.md` -- human-readable record (target_dir resolved via state.json artifact registry to `.workflow/scratch/{YYYYMMDD}-{type}-{slug}/`)
70
- - `{target_dir}/retrospective.json` -- structured record
71
- - `.workflow/specs/{category-file}.md` -- `<spec-entry>` entries appended to matching category files (one per spec-routed insight)
72
- - `.workflow/issues/issues.jsonl` -- appended issue rows (`source: "retrospective"`)
73
- - `.workflow/memory/TIP-*.md` -- memory tips (via `manage-memory-capture` skill)
74
- - `.workflow/learning/lessons.jsonl` -- append-only insight log
75
- - `.workflow/learning/learning-index.json` -- updated searchable index
76
-
77
- **Storage read (never modified)** — all resolved via `state.json.artifacts[]`:
78
- ```
79
- related = artifacts.filter(a =>
80
- a.phase === target_phase && a.milestone === current_milestone
81
- ).sort_by(completed_at asc)
82
- ```
83
- Each artifact's type determines its outputs at `.workflow/{a.path}/`:
84
- - **execute** → index.json, plan.json, .task/TASK-*.json, .summaries/TASK-*-summary.md
85
- - **verify** → verification.json
86
- - **review** → review.json (findings, verdict, severity distribution)
87
- - **debug** → understanding.md, evidence.ndjson (root causes, fix directions)
88
- - **test** → uat.md, .tests/ (UAT results, gaps, coverage)
89
- - Also reads: `.workflow/issues/issues.jsonl`, `.workflow/state.json`
90
-
91
- ### Agent Registry
92
-
93
- | Agent | task_name | fork_turns | Responsibility |
94
- |-------|-----------|------------|----------------|
95
- | Context Agent | `ctx` | "none" | Load all phase artifacts: index.json, plan.json, verification.json, review.json, uat.md, issues.jsonl, task summaries |
96
- | Technical Lens | `lens-tech` | "all" | Technical debt, architecture decisions, code quality gaps, performance issues |
97
- | Process Lens | `lens-proc` | "all" | Workflow efficiency, collaboration patterns, planning accuracy, bottlenecks |
98
- | Quality Lens | `lens-qual` | "all" | Test coverage gaps, verification failures, UAT issues, quality gate outcomes |
99
- | Decision Lens | `lens-dec` | "all" | Key decisions made, tradeoffs accepted, ADR candidates, reversibility |
100
- | Synthesizer | `synthesizer` | "none" | Merge lens results, deduplicate insights, classify routing targets |
101
-
102
- ### Fork Turns Strategy
103
-
104
- | Agent | task_name | fork_turns | fork_from | Rationale |
105
- |-------|-----------|------------|-----------|-----------|
106
- | Context Agent | `ctx` | "none" | -- | Independent artifact loader; clean start |
107
- | Technical Lens | `lens-tech` | "all" | `ctx` | Inherits loaded artifacts -- no redundant file reads |
108
- | Process Lens | `lens-proc` | "all" | `ctx` | Inherits loaded artifacts -- no redundant file reads |
109
- | Quality Lens | `lens-qual` | "all" | `ctx` | Inherits loaded artifacts -- no redundant file reads |
110
- | Decision Lens | `lens-dec` | "all" | `ctx` | Inherits loaded artifacts -- no redundant file reads |
111
- | Synthesizer | `synthesizer` | "none" | -- | Clean context; receives lens results via message |
112
-
113
- **Context-Agent Lifecycle**: Spawn `ctx` first -> `wait_agent` -> spawn all lens agents (`fork_turns: "all"`) -> `wait_agent` batch for lenses -> `close_agent` lenses -> `close_agent ctx` LAST.
114
-
115
- > **fork_turns semantics**: `fork_turns: "all"` means the spawned agent inherits the *orchestrator's* current conversation context -- not the ctx agent's own context. When `wait_agent` for ctx returns, the ctx agent's completed artifact summaries are visible in the orchestrator's context. Lens agents forked after that point therefore inherit those summaries. Lens agents do **not** fork directly from `ctx`; the `fork_from: ctx` column above is conceptual shorthand for this sequencing.
116
- </context>
117
-
118
- <invariants>
119
- 1. **Read-only until Stage 6**: Stages 1-5 must not write any files -- only read and analyze
120
- 2. **Context-agent spawns first**: `ctx` must complete before any lens agent is spawned
121
- 3. **Parallel lens dispatch**: All active lens agents spawned in a single batch, then `wait_agent` for all together -- never sequentially
122
- 4. **Context-agent closes last**: Close all lens agents before closing `ctx`
123
- 5. **Synthesizer is isolated**: `fork_turns: "none"` -- receives lens results only via message, not full conversation history
124
- 6. **Stable INS-ids**: `INS-{8hex}` from `hash(phase_num + lens + title)` -- re-runs do not create duplicates
125
- 7. **Archive before overwrite**: Move existing retrospective.{md,json} to `.history/` with timestamp before writing new ones
126
- 8. **Spec learnings.md backward-compat**: Append to it only if it already exists -- never create it
127
- 9. **Route confirmation**: Unless `--auto-yes`, present routing table and ask per-group before writing spec/issue/memory
128
- 10. **Lessons always written**: Append to `lessons.jsonl` regardless of `--no-route` -- routing only controls spec/issue/memory creation
129
- </invariants>
130
-
131
- <execution>
132
-
133
- ### Session Initialization
134
-
135
- ```javascript
136
- functions.update_plan({
137
- explanation: "Starting retrospective",
138
- plan: [
139
- { step: "Stage 1-3: Parse mode and validate artifacts", status: "in_progress" },
140
- { step: "Stage 4: Context-Agent Fork + parallel lens analysis", status: "pending" },
141
- { step: "Stage 5: Synthesize insights", status: "pending" },
142
- { step: "Stage 6: Route outputs", status: "pending" },
143
- { step: "Stage 7: Write artifacts", status: "pending" },
144
- { step: "Stage 8: Report", status: "pending" }
145
- ]
146
- })
147
- ```
148
-
149
- ### Stages 1-3: Parse Mode and Validate Artifacts
150
-
151
- **Stage 1: Parse mode** from `$ARGUMENTS`:
152
-
153
- | First non-flag token | Mode |
154
- |---------------------|------|
155
- | (empty) | scan |
156
- | `<N>` (single digit/number) | single |
157
- | `<N>..<M>` | range |
158
- | `--all` flag present | all |
159
-
160
- Validate `--lens` values. If `--compare <M>` present, require single mode.
161
-
162
- **Stage 2: Validate phase artifacts**. For each target phase:
163
- - Phase directory must exist (resolved via state.json artifact registry to `.workflow/scratch/{YYYYMMDD}-{type}-{slug}/`)
164
- - `index.json` must show `status: "completed"`
165
- - `.task/` directory must exist with at least one `TASK-*.json`
166
- - If existing `retrospective.json` found and not `--all`: emit W002, prompt overwrite
167
-
168
- **Stage 3: Scan mode** -- list all completed phases without retrospective.json. Prompt user to select.
169
-
170
- ```javascript
171
- functions.update_plan({
172
- explanation: "Artifacts validated, spawning analysis agents",
173
- plan: [
174
- { step: "Stage 1-3: Parse mode and validate artifacts", status: "completed" },
175
- { step: "Stage 4: Context-Agent Fork + parallel lens analysis", status: "in_progress" },
176
- { step: "Stage 5: Synthesize insights", status: "pending" },
177
- { step: "Stage 6: Route outputs", status: "pending" },
178
- { step: "Stage 7: Write artifacts", status: "pending" },
179
- { step: "Stage 8: Report", status: "pending" }
180
- ]
181
- })
182
- ```
183
-
184
- ### Stage 4: Context-Agent Fork + Parallel Lens Analysis
185
-
186
- **Archive if overwriting**:
187
- If existing `retrospective.{md,json}` present, move to `{artifact_dir}/.history/` with timestamp suffix before spawning.
188
-
189
- **Step 4a: Spawn context agent**
190
- ```javascript
191
- spawn_agent({
192
- task_name: "ctx",
193
- fork_turns: "none",
194
- message: `## TASK ASSIGNMENT
195
-
196
- ### MANDATORY FIRST STEPS
197
- 1. Read: ~/.codex/agents/cli-explore-agent.md
198
-
199
- ---
200
-
201
- Goal: Load and summarize all phase artifacts for retrospective analysis.
202
- Phase: ${targetPhase}
203
-
204
- TASK:
205
- 1. Read .workflow/state.json -- query artifacts[] for all entries matching phase === ${targetPhase} && milestone === current_milestone
206
- 2. For each artifact, load outputs from .workflow/{artifact.path}/:
207
- - execute artifacts → index.json, plan.json, .task/TASK-*.json, .summaries/TASK-*-summary.md
208
- - verify artifacts verification.json
209
- - review artifacts → review.json (findings, verdict, severity distribution)
210
- - debug artifacts → understanding.md, evidence.ndjson (root causes, fix directions)
211
- - test artifacts → uat.md, .tests/ (UAT results, gaps, coverage)
212
- 3. Read .workflow/issues/issues.jsonl -- filter rows with phase link to this phase
213
- 4. Read .workflow/state.json for project context (milestones, accumulated_context)
214
-
215
- EXPECTED: Comprehensive artifact summary covering:
216
- - Phase goals and outcomes (from plan.json vs verification.json)
217
- - Task completion rates and failed tasks
218
- - Verification results: passed/failed criteria
219
- - Review findings: issues found, severity distribution
220
- - UAT results: scenarios passed/failed
221
- - Related issues: open/resolved counts
222
- - Key metrics: lines changed, test coverage, time taken
223
- `
224
- })
225
- wait_agent({ timeout_ms: 1800000 }) // initial spawn: 30 min
226
- ```
227
-
228
- **Step 4b: Fork 4 lens agents** (only active lenses based on `--lens` flag; default: all 4)
229
- ```javascript
230
- spawn_agent({
231
- task_name: "lens-tech",
232
- fork_turns: "all",
233
- message: `## TECHNICAL LENS ANALYSIS
234
-
235
- Analyze the loaded phase artifacts from a TECHNICAL perspective.
236
-
237
- Focus areas:
238
- - Technical debt introduced or resolved
239
- - Architecture decisions and their rationale
240
- - Code quality issues (from review.json findings)
241
- - Performance gaps or regressions
242
- - Security concerns
243
- - Dependencies added or changed
244
-
245
- EXPECTED: JSON array of insights, each: {
246
- "title": "<80 chars>",
247
- "summary": "<full finding>",
248
- "category": "pattern|antipattern|decision|tool|gotcha|technique",
249
- "routing": "spec|issue|memory|none",
250
- "severity": "critical|high|medium|low",
251
- "evidence": "<file:line or artifact reference>"
252
- }
253
- `
254
- })
255
-
256
- spawn_agent({
257
- task_name: "lens-proc",
258
- fork_turns: "all",
259
- message: `## PROCESS LENS ANALYSIS
260
-
261
- Analyze the loaded phase artifacts from a PROCESS perspective.
262
-
263
- Focus areas:
264
- - Planning accuracy (estimated vs actual from plan.json)
265
- - Collaboration patterns and bottlenecks
266
- - Workflow efficiency (task sequencing, dependencies)
267
- - Communication gaps or coordination issues
268
- - Process improvements that worked or failed
269
-
270
- EXPECTED: Same JSON array schema as technical lens.
271
- `
272
- })
273
-
274
- spawn_agent({
275
- task_name: "lens-qual",
276
- fork_turns: "all",
277
- message: `## QUALITY LENS ANALYSIS
278
-
279
- Analyze the loaded phase artifacts from a QUALITY perspective.
280
-
281
- Focus areas:
282
- - Test coverage gaps (from verification.json, uat.md)
283
- - Quality gate outcomes (passed/failed criteria)
284
- - UAT failure patterns and root causes
285
- - Review blocking issues and their resolution
286
- - Missing test scenarios identified post-execution
287
-
288
- EXPECTED: Same JSON array schema as technical lens.
289
- `
290
- })
291
-
292
- spawn_agent({
293
- task_name: "lens-dec",
294
- fork_turns: "all",
295
- message: `## DECISION LENS ANALYSIS
296
-
297
- Analyze the loaded phase artifacts from a DECISION perspective.
298
-
299
- Focus areas:
300
- - Key architectural or design decisions made (from plan.json, task summaries)
301
- - Tradeoffs accepted and their downstream effects
302
- - ADR candidates (decisions significant enough to document)
303
- - Reversibility of decisions made
304
- - Decisions that should have been made differently
305
-
306
- EXPECTED: Same JSON array schema as technical lens.
307
- `
308
- })
309
-
310
- const lensResults = wait_agent({
311
- timeout_ms: 1800000 // initial spawn: 30 min
312
- })
313
-
314
- // Close lenses first
315
- ;["lens-tech", "lens-proc", "lens-qual", "lens-dec"].forEach(n => close_agent({ target: n }))
316
- // Close context agent LAST
317
- close_agent({ target: "ctx" })
318
- ```
319
-
320
- If `lensResults.timed_out` for any agent: emit W001, continue with partial coverage.
321
-
322
- ### Stage 5: Synthesize Insights
323
-
324
- ```javascript
325
- spawn_agent({
326
- task_name: "synthesizer",
327
- fork_turns: "none",
328
- message: `## SYNTHESIS TASK
329
-
330
- Merge and distill insights from 4 lens analyses.
331
-
332
- Lens results:
333
- ${JSON.stringify(lensResults.status, null, 2)}
334
-
335
- TASK:
336
- 1. Merge all insights across lenses into a single list
337
- 2. Deduplicate: if two lenses identified the same issue, merge into one (keep higher severity, combine evidence)
338
- 3. Generate stable INS-{8hex} id for each: hash(phase_num + lens + title)
339
- 4. Classify routing for each: spec (reusable pattern) | issue (recurring gap -> create issue) | memory (process note) | none
340
- 5. Produce phase-level metrics summary
341
-
342
- EXPECTED: JSON with:
343
- - insights: array of {id, title, summary, category, lens, routing, severity, evidence}
344
- - metrics: {tasks_completed, tasks_failed, test_pass_rate, review_issues_count, uat_scenarios_passed}
345
- - routing_summary: {spec: N, issue: N, memory: N, none: N}
346
- `
347
- })
348
-
349
- const synthResult = wait_agent({ timeout_ms: 1800000 }) // initial spawn: 30 min
350
- close_agent({ target: "synthesizer" })
351
- ```
352
-
353
- ```javascript
354
- functions.update_plan({
355
- explanation: "Synthesis complete, routing outputs",
356
- plan: [
357
- { step: "Stage 1-3: Parse mode and validate artifacts", status: "completed" },
358
- { step: "Stage 4: Context-Agent Fork + parallel lens analysis", status: "completed" },
359
- { step: "Stage 5: Synthesize insights", status: "completed" },
360
- { step: "Stage 6: Route outputs", status: "in_progress" },
361
- { step: "Stage 7: Write artifacts", status: "pending" },
362
- { step: "Stage 8: Report", status: "pending" }
363
- ]
364
- })
365
- ```
366
-
367
- ### Stage 6: Route Outputs
368
-
369
- If `--no-route`: skip this stage.
370
-
371
- For each insight in `synthResult.insights`, route based on `routing` field:
372
-
373
- **Spec routing** (`routing: "spec"`):
374
-
375
- Map insight type to spec category: pattern/convention → `coding`, architecture → `arch`, quality → `quality`.
376
- Append `<spec-entry>` to matching category file:
377
-
378
- ```markdown
379
- <spec-entry category="{category}" keywords="{auto-extracted}" date="{YYYY-MM-DD}" source="retrospective">
380
-
381
- ### <title>
382
-
383
- <summary>
384
-
385
- **Evidence:** <evidence_refs>
386
- **Phase:** <N> | **Lens:** <lens> | **Insight:** <INS-id>
387
-
388
- </spec-entry>
389
- +
390
- +<summary>
391
- +
392
- +**Evidence**: <evidence>
393
- *** End Patch
394
- ```
395
-
396
- **Issue routing** (`routing: "issue"`, severity critical/high):
397
- Append to `.workflow/issues/issues.jsonl`:
398
- ```json
399
- {
400
- "id": "ISS-<date>-<seq>",
401
- "title": "<insight title>",
402
- "status": "open",
403
- "priority": 2,
404
- "severity": "<severity>",
405
- "source": "retrospective",
406
- "description": "<insight summary>",
407
- "context": {"phase": "<N>", "ins_id": "<INS-id>"},
408
- "issue_history": [{"action": "created", "at": "<ISO>", "by": "quality-retrospective"}]
409
- }
410
- ```
411
-
412
- **Memory routing** (`routing: "memory"`):
413
- ```javascript
414
- Skill({ skill: "manage-memory-capture", args: `tip "${insight.title} -- ${insight.summary}" --tag retrospective,phase-${N}` })
415
- ```
416
-
417
- If `!AUTO_YES`: present routing table and ask confirmation before routing each group.
418
-
419
- ### Stage 7: Write Artifacts
420
-
421
- ```javascript
422
- functions.apply_patch:
423
- *** Begin Patch
424
- *** Add File: <target_dir>/retrospective.json
425
- +{
426
- + "phase": <N>,
427
- + "phase_slug": "<slug>",
428
- + "retrospective_at": "<ISO>",
429
- + "lenses_run": ["technical", "process", "quality", "decision"],
430
- + "metrics": <metrics_from_synthesizer>,
431
- + "findings_by_lens": { "technical": [...], "process": [...], "quality": [...], "decision": [...] },
432
- + "distilled_insights": <insights_array>,
433
- + "routing_summary": <routing_summary>
434
- +}
435
- *** Add File: <target_dir>/retrospective.md
436
- +# Retrospective: Phase <N> -- <slug>
437
- +
438
- +> Generated: <ISO> | Lenses: technical, process, quality, decision
439
- +
440
- +## Metrics
441
- +| Metric | Value |
442
- +|--------|-------|
443
- +| Tasks completed | <N>/<total> |
444
- +| Test pass rate | <N>% |
445
- +| Review issues | <N> |
446
- +| UAT scenarios | <N>/<total> |
447
- +
448
- +## Findings by Lens
449
- +...
450
- +
451
- +## Distilled Insights
452
- +...
453
- +
454
- +## Routing Summary
455
- +...
456
- *** End Patch
457
- ```
458
-
459
- Append each insight to `.workflow/learning/lessons.jsonl` and update `learning-index.json`.
460
-
461
- If `.workflow/specs/learnings.md` already exists, append each insight using `<spec-entry>` closed-tag format (category=`learning`, auto-extract keywords, date=today, source=`retrospective`). Never create the file — only append if it exists.
462
-
463
- ```javascript
464
- functions.update_plan({
465
- explanation: "Retrospective complete",
466
- plan: [
467
- { step: "Stage 1-3: Parse mode and validate artifacts", status: "completed" },
468
- { step: "Stage 4: Context-Agent Fork + parallel lens analysis", status: "completed" },
469
- { step: "Stage 5: Synthesize insights", status: "completed" },
470
- { step: "Stage 6: Route outputs", status: "completed" },
471
- { step: "Stage 7: Write artifacts", status: "completed" },
472
- { step: "Stage 8: Report", status: "in_progress" }
473
- ]
474
- })
475
- ```
476
-
477
- ### Stage 8: Report
478
-
479
- ```
480
- === RETROSPECTIVE COMPLETE ===
481
- Phase: <N> (<slug>)
482
- Lenses: technical, process, quality, decision
483
- Insights: <total> (<N> new, <N> duplicates merged)
484
-
485
- ROUTING:
486
- Spec entries: <N> -> .workflow/specs/{category-file}.md
487
- Issues: <N> -> .workflow/issues/issues.jsonl
488
- Memory tips: <N> -> .workflow/memory/TIP-*.md
489
- Lessons: <N> -> .workflow/learning/lessons.jsonl
490
-
491
- METRICS:
492
- Tasks: <N>/<total> completed
493
- Test pass: <N>%
494
- Review: <N> issues
495
-
496
- Next:
497
- $manage-status
498
- $manage-issue "list --source retrospective"
499
- $manage-learn "list --phase <N>"
500
- $manage-wiki health
501
- $wiki-digest "<phase-topic>"
502
- ```
503
- </execution>
504
-
505
- <error_codes>
506
-
507
- | Code | Severity | Description | Stage |
508
- |------|----------|-------------|-------|
509
- | E001 | error | `.workflow/` not initialized | parse_input |
510
- | E002 | error | Unknown `--lens` name | parse_input |
511
- | E003 | error | `--compare` requires single phase mode | parse_input |
512
- | E004 | error | Phase has no execution artifacts (no .task/) | load_artifacts |
513
- | E005 | error | Phase directory not found or phase not completed | scan_unreviewed |
514
- | W001 | warning | One or more lens agents timed out -- partial coverage | multi_lens_analysis |
515
- | W002 | warning | Existing retrospective.json found -- prompted to overwrite | scan_unreviewed |
516
- | W003 | warning | `manage-memory-capture` did not return parseable TIP id; fell back to direct write | route_outputs |
517
- | W004 | warning | `--compare` target phase has no retrospective.json; delta omitted | load_artifacts |
518
- </error_codes>
519
-
520
- <success_criteria>
521
- - [ ] Mode correctly parsed from arguments (scan/single/range/all)
522
- - [ ] Phase artifacts validated before analysis begins
523
- - [ ] Context agent loads all artifacts before lens agents spawn
524
- - [ ] All active lens agents spawned in parallel, waited as batch
525
- - [ ] Context agent closed last (after all lens agents)
526
- - [ ] Synthesizer produces deduplicated insights with stable INS-ids
527
- - [ ] Routing applied per insight (spec/issue/memory/none) with confirmation
528
- - [ ] retrospective.{md,json} written to phase directory
529
- - [ ] Lessons appended to lessons.jsonl regardless of --no-route flag
530
- - [ ] Existing retrospective archived before overwrite
531
- </success_criteria>
1
+ ---
2
+ name: quality-retrospective
3
+ description: Multi-lens 复盘 (retrospective) for completed phases. Context-Agent Fork loads phase artifacts once; four parallel lens agents (technical, process, quality, decision) analyze independently; synthesizer distills insights; outputs are routed to spec stubs, knowhow tips, issues, and lessons.jsonl.
4
+ argument-hint: "[phase|N..M] [--lens technical|process|quality|decision] [--all] [--no-route] [--compare N] [--auto-yes]"
5
+ allowed-tools: Read, Write, Edit, Bash, Glob, Grep
6
+ ---
7
+
8
+ <purpose>
9
+ Multi-lens retrospective for completed phases. Context-Agent Fork loads phase artifacts once;
10
+ four parallel lens agents (technical, process, quality, decision) analyze independently;
11
+ synthesizer distills insights; outputs are routed to spec stubs, knowhow tips, issues, and lessons.jsonl.
12
+
13
+ ```
14
+ +------------------------------------------------------------------+
15
+ | quality-retrospective -- Context-Agent Fork + Parallel Fan-out |
16
+ +------------------------------------------------------------------+
17
+
18
+ Stage 1-3: Read-only resolution (no writes)
19
+ +---------------------------------------------+
20
+ | Parse mode -> Validate artifacts |
21
+ | -> [scan] Find unreviewed phases |
22
+ +----------------------+-----------------------+
23
+ |
24
+ Stage 4: Context-Agent Fork (Pattern 2.10)
25
+ +----------------------------------------------------------------+
26
+ | spawn ctx (fork_turns: "none") |
27
+ | wait ctx |
28
+ | +----------+ +----------+ +----------+ +----------+ |
29
+ | |lens-tech | |lens-proc | |lens-qual | |lens-dec | |
30
+ | |fork=true | |fork=true | |fork=true | |fork=true | |
31
+ | +----------+ +----------+ +----------+ +----------+ |
32
+ | wait_agent([lens-tech, lens-proc, lens-qual, lens-dec]) |
33
+ | close lenses -> close ctx LAST |
34
+ +----------------------+-----------------------------------------+
35
+ | lens results
36
+ Stage 5: Synthesizer
37
+ +------------------------------------------+
38
+ | spawn synthesizer (fork_turns: "none") |
39
+ | -> wait -> close |
40
+ +----------------------+-------------------+
41
+ | distilled_insights
42
+ Stage 6-8: Route -> Write -> Report
43
+ ```
44
+ </purpose>
45
+
46
+ <context>
47
+ ```bash
48
+ $quality-retrospective
49
+ $quality-retrospective "3"
50
+ $quality-retrospective "2..4"
51
+ $quality-retrospective "--all"
52
+ $quality-retrospective "3 --lens technical --no-route"
53
+ $quality-retrospective "3 --compare 2 --auto-yes"
54
+ ```
55
+
56
+ **Flags**:
57
+ - No phase argument -> `scan` mode: report unreviewed completed phases, prompt selection
58
+ - `<N>` -> `single` mode: retrospect phase N
59
+ - `<N>..<M>` -> `range` mode: retrospect phases N through M (inclusive)
60
+ - `--all` -> batch mode: re-run for every completed phase
61
+ - `--lens <name>` -- restrict to one lens (repeatable): `technical|process|quality|decision`
62
+ - `--no-route` -- produce retrospective.{md,json} only; skip auto-creation of spec/note/issue
63
+ - `--compare <M>` -- emit a delta section vs phase M's prior retrospective
64
+ - `--auto-yes` -- accept all routing recommendations without prompting
65
+
66
+ When `--auto-yes`: Accept all routing recommendations without prompting. Route all insights automatically.
67
+
68
+ **Storage written**:
69
+ - `{target_dir}/retrospective.md` -- human-readable record (target_dir resolved via state.json artifact registry to `.workflow/scratch/{YYYYMMDD}-{type}-{slug}/`)
70
+ - `{target_dir}/retrospective.json` -- structured record
71
+ - `.workflow/specs/{category-file}.md` -- `<spec-entry>` entries appended to matching category files (one per spec-routed insight)
72
+ - `.workflow/issues/issues.jsonl` -- appended issue rows (`source: "retrospective"`)
73
+ - `.workflow/knowhow/TIP-*.md` -- knowhow tips (via `manage-knowhow-capture` skill)
74
+ - `.workflow/learning/lessons.jsonl` -- append-only insight log
75
+ - `.workflow/learning/learning-index.json` -- updated searchable index
76
+
77
+ **Storage read (never modified)** — all resolved via `state.json.artifacts[]`:
78
+ ```
79
+ related = artifacts.filter(a =>
80
+ a.phase === target_phase && a.milestone === current_milestone
81
+ ).sort_by(completed_at asc)
82
+ ```
83
+ Each artifact's type determines its outputs at `.workflow/{a.path}/`:
84
+ - **execute** → index.json, plan.json, .task/TASK-*.json, .summaries/TASK-*-summary.md
85
+ - **verify** → verification.json
86
+ - **review** → review.json (findings, verdict, severity distribution)
87
+ - **debug** → understanding.md, evidence.ndjson (root causes, fix directions)
88
+ - **test** → uat.md, .tests/ (UAT results, gaps, coverage)
89
+ - Also reads: `.workflow/issues/issues.jsonl`, `.workflow/state.json`
90
+
91
+ ### Agent Registry
92
+
93
+ | Agent | task_name | fork_turns | Responsibility |
94
+ |-------|-----------|------------|----------------|
95
+ | Context Agent | `ctx` | "none" | Load all phase artifacts: index.json, plan.json, verification.json, review.json, uat.md, issues.jsonl, task summaries |
96
+ | Technical Lens | `lens-tech` | "all" | Technical debt, architecture decisions, code quality gaps, performance issues |
97
+ | Process Lens | `lens-proc` | "all" | Workflow efficiency, collaboration patterns, planning accuracy, bottlenecks |
98
+ | Quality Lens | `lens-qual` | "all" | Test coverage gaps, verification failures, UAT issues, quality gate outcomes |
99
+ | Decision Lens | `lens-dec` | "all" | Key decisions made, tradeoffs accepted, ADR candidates, reversibility |
100
+ | Synthesizer | `synthesizer` | "none" | Merge lens results, deduplicate insights, classify routing targets |
101
+
102
+ ### Fork Turns Strategy
103
+
104
+ | Agent | task_name | fork_turns | fork_from | Rationale |
105
+ |-------|-----------|------------|-----------|-----------|
106
+ | Context Agent | `ctx` | "none" | -- | Independent artifact loader; clean start |
107
+ | Technical Lens | `lens-tech` | "all" | `ctx` | Inherits loaded artifacts -- no redundant file reads |
108
+ | Process Lens | `lens-proc` | "all" | `ctx` | Inherits loaded artifacts -- no redundant file reads |
109
+ | Quality Lens | `lens-qual` | "all" | `ctx` | Inherits loaded artifacts -- no redundant file reads |
110
+ | Decision Lens | `lens-dec` | "all" | `ctx` | Inherits loaded artifacts -- no redundant file reads |
111
+ | Synthesizer | `synthesizer` | "none" | -- | Clean context; receives lens results via message |
112
+
113
+ **Context-Agent Lifecycle**: Spawn `ctx` first -> `wait_agent` -> spawn all lens agents (`fork_turns: "all"`) -> `wait_agent` batch for lenses -> `close_agent` lenses -> `close_agent ctx` LAST.
114
+
115
+ > **fork_turns semantics**: `fork_turns: "all"` means the spawned agent inherits the *orchestrator's* current conversation context -- not the ctx agent's own context. When `wait_agent` for ctx returns, the ctx agent's completed artifact summaries are visible in the orchestrator's context. Lens agents forked after that point therefore inherit those summaries. Lens agents do **not** fork directly from `ctx`; the `fork_from: ctx` column above is conceptual shorthand for this sequencing.
116
+ </context>
117
+
118
+ <invariants>
119
+ 1. **Read-only until Stage 6**: Stages 1-5 must not write any files -- only read and analyze
120
+ 2. **Context-agent spawns first**: `ctx` must complete before any lens agent is spawned
121
+ 3. **Parallel lens dispatch**: All active lens agents spawned in a single batch, then `wait_agent` for all together -- never sequentially
122
+ 4. **Context-agent closes last**: Close all lens agents before closing `ctx`
123
+ 5. **Synthesizer is isolated**: `fork_turns: "none"` -- receives lens results only via message, not full conversation history
124
+ 6. **Stable INS-ids**: `INS-{8hex}` from `hash(phase_num + lens + title)` -- re-runs do not create duplicates
125
+ 7. **Archive before overwrite**: Move existing retrospective.{md,json} to `.history/` with timestamp before writing new ones
126
+ 8. **Spec learnings.md backward-compat**: Append to it only if it already exists -- never create it
127
+ 9. **Route confirmation**: Unless `--auto-yes`, present routing table and ask per-group before writing spec/issue/knowhow
128
+ 10. **Lessons always written**: Append to `lessons.jsonl` regardless of `--no-route` -- routing only controls spec/issue/knowhow creation
129
+ </invariants>
130
+
131
+ <execution>
132
+
133
+ ### Session Initialization
134
+
135
+ Update plan: Stages 1-3 → in_progress; Stages 4-8 → pending.
136
+
137
+ ### Stages 1-3: Parse Mode and Validate Artifacts
138
+
139
+ **Stage 1: Parse mode** from `$ARGUMENTS`:
140
+
141
+ | First non-flag token | Mode |
142
+ |---------------------|------|
143
+ | (empty) | scan |
144
+ | `<N>` (single digit/number) | single |
145
+ | `<N>..<M>` | range |
146
+ | `--all` flag present | all |
147
+
148
+ Validate `--lens` values. If `--compare <M>` present, require single mode.
149
+
150
+ **Stage 2: Validate phase artifacts**. For each target phase:
151
+ - Phase directory must exist (resolved via state.json artifact registry to `.workflow/scratch/{YYYYMMDD}-{type}-{slug}/`)
152
+ - `index.json` must show `status: "completed"`
153
+ - `.task/` directory must exist with at least one `TASK-*.json`
154
+ - If existing `retrospective.json` found and not `--all`: emit W002, prompt overwrite
155
+
156
+ **Stage 3: Scan mode** -- list all completed phases without retrospective.json. Prompt user to select.
157
+
158
+ Update plan: Stages 1-3 completed; Stage 4 → in_progress.
159
+
160
+ ### Stage 4: Context-Agent Fork + Parallel Lens Analysis
161
+
162
+ **Archive if overwriting**:
163
+ If existing `retrospective.{md,json}` present, move to `{artifact_dir}/.history/` with timestamp suffix before spawning.
164
+
165
+ **Step 4a: Spawn context agent**
166
+ ```javascript
167
+ spawn_agent({
168
+ task_name: "ctx",
169
+ fork_turns: "none",
170
+ message: `Load and summarize all phase ${targetPhase} artifacts for retrospective.
171
+ 1. Query state.json artifacts[] for phase === ${targetPhase} && milestone === current_milestone
172
+ 2. Load per-artifact outputs (execute→index/plan/tasks/summaries, verify→verification.json, review→review.json, debug→understanding/evidence, test→uat/tests)
173
+ 3. Filter issues.jsonl for this phase; read state.json for project context
174
+ EXPECTED: Goals vs outcomes, completion rates, verification/review/UAT results, issue counts, key metrics`
175
+ })
176
+ wait_agent({ timeout_ms: 1800000 })
177
+ ```
178
+
179
+ **Step 4b: Fork 4 lens agents** (only active lenses based on `--lens` flag; default: all 4)
180
+
181
+ All lenses use `fork_turns: "all"` and return the same JSON array schema:
182
+ ```json
183
+ [{ "title": "<80 chars>", "summary": "...", "category": "pattern|antipattern|decision|tool|gotcha|technique",
184
+ "routing": "spec|issue|knowhow|none", "severity": "critical|high|medium|low", "evidence": "<file:line>" }]
185
+ ```
186
+
187
+ | Agent | task_name | Focus |
188
+ |-------|-----------|-------|
189
+ | Technical | `lens-tech` | Tech debt, architecture decisions, code quality, performance, security, dependencies |
190
+ | Process | `lens-proc` | Planning accuracy, collaboration, workflow efficiency, communication, process improvements |
191
+ | Quality | `lens-qual` | Test coverage gaps, quality gates, UAT failures, review blockers, missing scenarios |
192
+ | Decision | `lens-dec` | Key decisions, tradeoffs, ADR candidates, reversibility, retrospective judgment |
193
+
194
+ ```javascript
195
+ // Spawn all 4 lenses in parallel
196
+ ["lens-tech", "lens-proc", "lens-qual", "lens-dec"].forEach(name =>
197
+ spawn_agent({ task_name: name, fork_turns: "all", message: `<lens-specific prompt>` })
198
+ )
199
+ const lensResults = wait_agent({ timeout_ms: 1800000 })
200
+
201
+ // Close lenses first, then context agent LAST
202
+ ["lens-tech", "lens-proc", "lens-qual", "lens-dec"].forEach(n => close_agent({ target: n }))
203
+ close_agent({ target: "ctx" })
204
+ ```
205
+
206
+ If `lensResults.timed_out` for any agent: emit W001, continue with partial coverage.
207
+
208
+ ### Stage 5: Synthesize Insights
209
+
210
+ ```javascript
211
+ spawn_agent({
212
+ task_name: "synthesizer",
213
+ fork_turns: "none",
214
+ message: `Merge and distill insights from 4 lens analyses.
215
+ Input: ${JSON.stringify(lensResults.status)}
216
+ 1. Merge all insights, deduplicate (same issue across lenses → keep higher severity, combine evidence)
217
+ 2. Generate stable INS-{8hex} id: hash(phase_num + lens + title)
218
+ 3. Classify routing: spec | issue | knowhow | none
219
+ 4. Produce phase-level metrics summary
220
+ EXPECTED JSON: { insights: [{id,title,summary,category,lens,routing,severity,evidence}],
221
+ metrics: {tasks_completed,tasks_failed,test_pass_rate,review_issues_count,uat_scenarios_passed},
222
+ routing_summary: {spec:N, issue:N, knowhow:N, none:N} }`
223
+ })
224
+ const synthResult = wait_agent({ timeout_ms: 1800000 })
225
+ close_agent({ target: "synthesizer" })
226
+ ```
227
+
228
+ Update plan: Stages 1-5 completed; Stage 6 in_progress.
229
+
230
+ ### Stage 6: Route Outputs
231
+
232
+ If `--no-route`: skip this stage.
233
+
234
+ For each insight in `synthResult.insights`, route based on `routing` field:
235
+
236
+ **Spec routing** (`routing: "spec"`):
237
+ Map category (pattern/convention → `coding`, architecture → `arch`, quality → `quality`). Append `<spec-entry>` with category, auto-extracted keywords, date, source="retrospective", title, summary, evidence, phase/lens/INS-id.
238
+
239
+ **Issue routing** (`routing: "issue"`, severity critical/high):
240
+ Append to `.workflow/issues/issues.jsonl` with `ISS-<date>-<seq>` id, source="retrospective", phase/INS-id context, and history entry.
241
+
242
+ **Memory routing** (`routing: "knowhow"`):
243
+ Invoke `manage-knowhow-capture` skill with tip content and `--tag retrospective,phase-{N}`.
244
+
245
+ If `!AUTO_YES`: present routing table and ask confirmation before routing each group.
246
+
247
+ ### Stage 7: Write Artifacts
248
+
249
+ Write two files to `{target_dir}/`:
250
+ - **retrospective.json**: phase, slug, timestamp, lenses_run, metrics, findings_by_lens, distilled_insights, routing_summary
251
+ - **retrospective.md**: Header with phase/slug/timestamp, metrics table (tasks completed, test pass rate, review issues, UAT scenarios), findings by lens, distilled insights, routing summary
252
+
253
+ Append each insight to `.workflow/learning/lessons.jsonl` and update `learning-index.json`.
254
+
255
+ If `.workflow/specs/learnings.md` already exists, append each insight as `<spec-entry>` (category=`learning`, auto-extract keywords, date=today, source=`retrospective`). Never create the file -- only append if it exists.
256
+
257
+ Update plan: Stages 1-7 → completed; Stage 8 → in_progress.
258
+
259
+ ### Stage 8: Report
260
+
261
+ Display summary: phase, lenses run, insight counts (new vs merged duplicates), routing breakdown (spec/issue/knowhow/lesson counts with target paths), key metrics (task completion, test pass rate, review issues).
262
+
263
+ Next steps: `$manage-status`, `$manage-issue "list --source retrospective"`, `$manage-learn "list --phase <N>"`, `$manage-wiki health`, `$wiki-digest "<phase-topic>"`.
264
+ </execution>
265
+
266
+ <error_codes>
267
+
268
+ | Code | Severity | Description | Stage |
269
+ |------|----------|-------------|-------|
270
+ | E001 | error | `.workflow/` not initialized | parse_input |
271
+ | E002 | error | Unknown `--lens` name | parse_input |
272
+ | E003 | error | `--compare` requires single phase mode | parse_input |
273
+ | E004 | error | Phase has no execution artifacts (no .task/) | load_artifacts |
274
+ | E005 | error | Phase directory not found or phase not completed | scan_unreviewed |
275
+ | W001 | warning | One or more lens agents timed out -- partial coverage | multi_lens_analysis |
276
+ | W002 | warning | Existing retrospective.json found -- prompted to overwrite | scan_unreviewed |
277
+ | W003 | warning | `manage-knowhow-capture` did not return parseable TIP id; fell back to direct write | route_outputs |
278
+ | W004 | warning | `--compare` target phase has no retrospective.json; delta omitted | load_artifacts |
279
+ </error_codes>
280
+
281
+ <success_criteria>
282
+ - [ ] Mode correctly parsed from arguments (scan/single/range/all)
283
+ - [ ] Phase artifacts validated before analysis begins
284
+ - [ ] Context agent loads all artifacts before lens agents spawn
285
+ - [ ] All active lens agents spawned in parallel, waited as batch
286
+ - [ ] Context agent closed last (after all lens agents)
287
+ - [ ] Synthesizer produces deduplicated insights with stable INS-ids
288
+ - [ ] Routing applied per insight (spec/issue/knowhow/none) with confirmation
289
+ - [ ] retrospective.{md,json} written to phase directory
290
+ - [ ] Lessons appended to lessons.jsonl regardless of --no-route flag
291
+ - [ ] Existing retrospective archived before overwrite
292
+ </success_criteria>