maestro-flow 0.3.12 → 0.3.14

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 (251) hide show
  1. package/.claude/CLAUDE.md +7 -0
  2. package/.claude/agents/workflow-analyzer.md +0 -1
  3. package/.claude/agents/workflow-collab-planner.md +0 -1
  4. package/.claude/agents/workflow-debugger.md +0 -1
  5. package/.claude/agents/workflow-integration-checker.md +2 -2
  6. package/.claude/agents/workflow-nyquist-auditor.md +0 -1
  7. package/.claude/agents/workflow-phase-researcher.md +2 -2
  8. package/.claude/agents/workflow-plan-checker.md +1 -1
  9. package/.claude/agents/workflow-planner.md +1 -2
  10. package/.claude/agents/workflow-roadmapper.md +1 -1
  11. package/.claude/agents/workflow-verifier.md +0 -1
  12. package/.claude/commands/learn-retro.md +2 -2
  13. package/.claude/commands/learn-second-opinion.md +2 -2
  14. package/.claude/commands/maestro-analyze.md +10 -2
  15. package/.claude/commands/maestro-brainstorm.md +1 -1
  16. package/.claude/commands/maestro-execute.md +21 -4
  17. package/.claude/commands/maestro-milestone-complete.md +14 -0
  18. package/.claude/commands/maestro-plan.md +12 -6
  19. package/.claude/commands/maestro-roadmap.md +1 -1
  20. package/.claude/commands/maestro-ui-design.md +7 -7
  21. package/.claude/commands/maestro-update.md +176 -0
  22. package/.claude/commands/maestro-verify.md +18 -3
  23. package/.claude/commands/manage-codebase-rebuild.md +0 -1
  24. package/.claude/commands/manage-harvest.md +1 -1
  25. package/.claude/commands/manage-learn.md +5 -5
  26. package/.claude/commands/manage-memory-capture.md +4 -4
  27. package/.claude/commands/manage-memory.md +1 -1
  28. package/.claude/commands/manage-wiki.md +62 -0
  29. package/.claude/commands/quality-business-test.md +2 -2
  30. package/.claude/commands/quality-debug.md +53 -7
  31. package/.claude/commands/quality-retrospective.md +5 -5
  32. package/.claude/commands/quality-review.md +39 -7
  33. package/.claude/commands/quality-sync.md +1 -1
  34. package/.claude/commands/quality-test-gen.md +1 -1
  35. package/.claude/commands/quality-test.md +45 -12
  36. package/.claude/commands/spec-remove.md +51 -0
  37. package/.claude/commands/spec-setup.md +1 -3
  38. package/.claude/commands/wiki-connect.md +9 -5
  39. package/.claude/commands/wiki-digest.md +6 -3
  40. package/.codex/skills/maestro/SKILL.md +2 -2
  41. package/.codex/skills/maestro-analyze/SKILL.md +4 -4
  42. package/.codex/skills/maestro-brainstorm/SKILL.md +4 -4
  43. package/.codex/skills/maestro-coordinate/SKILL.md +2 -2
  44. package/.codex/skills/maestro-execute/SKILL.md +15 -5
  45. package/.codex/skills/maestro-init/SKILL.md +1 -1
  46. package/.codex/skills/maestro-link-coordinate/SKILL.md +430 -224
  47. package/.codex/skills/maestro-milestone-complete/SKILL.md +18 -1
  48. package/.codex/skills/maestro-plan/SKILL.md +6 -6
  49. package/.codex/skills/maestro-roadmap/SKILL.md +3 -4
  50. package/.codex/skills/maestro-spec-generate/SKILL.md +2 -2
  51. package/.codex/skills/maestro-ui-design/SKILL.md +6 -6
  52. package/.codex/skills/maestro-verify/SKILL.md +20 -11
  53. package/.codex/skills/manage-codebase-rebuild/SKILL.md +4 -4
  54. package/.codex/skills/manage-harvest/SKILL.md +10 -1
  55. package/.codex/skills/manage-issue-discover/SKILL.md +3 -3
  56. package/.codex/skills/manage-learn/SKILL.md +3 -2
  57. package/.codex/skills/manage-memory/SKILL.md +3 -3
  58. package/.codex/skills/manage-memory-capture/SKILL.md +8 -14
  59. package/.codex/skills/manage-status/SKILL.md +9 -4
  60. package/.codex/skills/manage-wiki/SKILL.md +55 -0
  61. package/.codex/skills/quality-business-test/SKILL.md +8 -6
  62. package/.codex/skills/quality-debug/SKILL.md +22 -9
  63. package/.codex/skills/quality-integration-test/SKILL.md +11 -7
  64. package/.codex/skills/quality-retrospective/SKILL.md +45 -26
  65. package/.codex/skills/quality-review/SKILL.md +10 -7
  66. package/.codex/skills/quality-test/SKILL.md +9 -4
  67. package/.codex/skills/quality-test-gen/SKILL.md +13 -9
  68. package/.codex/skills/spec-add/SKILL.md +11 -3
  69. package/.codex/skills/spec-load/SKILL.md +7 -0
  70. package/.codex/skills/spec-map/SKILL.md +2 -2
  71. package/.codex/skills/spec-remove/SKILL.md +101 -0
  72. package/.codex/skills/spec-setup/SKILL.md +4 -8
  73. package/.codex/skills/wiki-connect/SKILL.md +6 -5
  74. package/.codex/skills/wiki-digest/SKILL.md +2 -2
  75. package/chains/milestone-fork-merge.json +6 -6
  76. package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.d.ts +9 -0
  77. package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.js +109 -9
  78. package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.js.map +1 -1
  79. package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.test.js +49 -0
  80. package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.test.js.map +1 -1
  81. package/dashboard/dist-server/dashboard/src/server/routes/index.js +5 -4
  82. package/dashboard/dist-server/dashboard/src/server/routes/index.js.map +1 -1
  83. package/dashboard/dist-server/dashboard/src/server/routes/specs.d.ts +5 -13
  84. package/dashboard/dist-server/dashboard/src/server/routes/specs.js +97 -155
  85. package/dashboard/dist-server/dashboard/src/server/routes/specs.js.map +1 -1
  86. package/dashboard/dist-server/dashboard/src/server/routes/wiki.d.ts +11 -1
  87. package/dashboard/dist-server/dashboard/src/server/routes/wiki.integration.test.js +27 -6
  88. package/dashboard/dist-server/dashboard/src/server/routes/wiki.integration.test.js.map +1 -1
  89. package/dashboard/dist-server/dashboard/src/server/routes/wiki.js +25 -7
  90. package/dashboard/dist-server/dashboard/src/server/routes/wiki.js.map +1 -1
  91. package/dashboard/dist-server/dashboard/src/server/wiki/graph-analysis.js +8 -0
  92. package/dashboard/dist-server/dashboard/src/server/wiki/graph-analysis.js.map +1 -1
  93. package/dashboard/dist-server/dashboard/src/server/wiki/search.js +1 -0
  94. package/dashboard/dist-server/dashboard/src/server/wiki/search.js.map +1 -1
  95. package/dashboard/dist-server/dashboard/src/server/wiki/spec-entry-parser.d.ts +29 -0
  96. package/dashboard/dist-server/dashboard/src/server/wiki/spec-entry-parser.js +148 -0
  97. package/dashboard/dist-server/dashboard/src/server/wiki/spec-entry-parser.js.map +1 -0
  98. package/dashboard/dist-server/dashboard/src/server/wiki/stress.test.js +4 -2
  99. package/dashboard/dist-server/dashboard/src/server/wiki/stress.test.js.map +1 -1
  100. package/dashboard/dist-server/dashboard/src/server/wiki/virtual-wiki-adapters.js +8 -2
  101. package/dashboard/dist-server/dashboard/src/server/wiki/virtual-wiki-adapters.js.map +1 -1
  102. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.d.ts +5 -0
  103. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js +80 -38
  104. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js.map +1 -1
  105. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.test.js +8 -6
  106. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.test.js.map +1 -1
  107. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-types.d.ts +40 -5
  108. package/dashboard/dist-server/dashboard/src/server/wiki/writer-stress.test.js +21 -23
  109. package/dashboard/dist-server/dashboard/src/server/wiki/writer-stress.test.js.map +1 -1
  110. package/dashboard/dist-server/dashboard/src/server/wiki/writer.d.ts +33 -3
  111. package/dashboard/dist-server/dashboard/src/server/wiki/writer.js +184 -12
  112. package/dashboard/dist-server/dashboard/src/server/wiki/writer.js.map +1 -1
  113. package/dashboard/dist-server/src/commands/delegate.js +26 -0
  114. package/dashboard/dist-server/src/commands/delegate.js.map +1 -1
  115. package/dashboard/dist-server/src/coordinator/graph-types.d.ts +11 -1
  116. package/dashboard/dist-server/src/coordinator/graph-walker.js +29 -2
  117. package/dashboard/dist-server/src/coordinator/graph-walker.js.map +1 -1
  118. package/dashboard/dist-server/src/coordinator/prompt-assembler.js +3 -2
  119. package/dashboard/dist-server/src/coordinator/prompt-assembler.js.map +1 -1
  120. package/dashboard/dist-server/src/hooks/constants.d.ts +29 -60
  121. package/dashboard/dist-server/src/hooks/constants.js +105 -82
  122. package/dashboard/dist-server/src/hooks/constants.js.map +1 -1
  123. package/dashboard/dist-server/src/types/index.d.ts +2 -1
  124. package/dist/src/commands/delegate.d.ts.map +1 -1
  125. package/dist/src/commands/delegate.js +26 -0
  126. package/dist/src/commands/delegate.js.map +1 -1
  127. package/dist/src/commands/hooks.d.ts +2 -4
  128. package/dist/src/commands/hooks.d.ts.map +1 -1
  129. package/dist/src/commands/hooks.js +4 -7
  130. package/dist/src/commands/hooks.js.map +1 -1
  131. package/dist/src/commands/install-ui/InstallConfirm.d.ts +2 -3
  132. package/dist/src/commands/install-ui/InstallConfirm.d.ts.map +1 -1
  133. package/dist/src/commands/install-ui/InstallConfirm.js +1 -1
  134. package/dist/src/commands/install-ui/InstallConfirm.js.map +1 -1
  135. package/dist/src/commands/install-ui/InstallExecution.d.ts.map +1 -1
  136. package/dist/src/commands/install-ui/InstallExecution.js +1 -2
  137. package/dist/src/commands/install-ui/InstallExecution.js.map +1 -1
  138. package/dist/src/commands/install-ui/InstallFlow.d.ts.map +1 -1
  139. package/dist/src/commands/install-ui/InstallFlow.js +5 -7
  140. package/dist/src/commands/install-ui/InstallFlow.js.map +1 -1
  141. package/dist/src/commands/install-ui/StatuslineConfig.d.ts +3 -6
  142. package/dist/src/commands/install-ui/StatuslineConfig.d.ts.map +1 -1
  143. package/dist/src/commands/install-ui/StatuslineConfig.js +21 -17
  144. package/dist/src/commands/install-ui/StatuslineConfig.js.map +1 -1
  145. package/dist/src/commands/update.d.ts.map +1 -1
  146. package/dist/src/commands/update.js +95 -0
  147. package/dist/src/commands/update.js.map +1 -1
  148. package/dist/src/commands/wiki.d.ts.map +1 -1
  149. package/dist/src/commands/wiki.js +75 -11
  150. package/dist/src/commands/wiki.js.map +1 -1
  151. package/dist/src/coordinator/graph-types.d.ts +11 -1
  152. package/dist/src/coordinator/graph-types.d.ts.map +1 -1
  153. package/dist/src/coordinator/graph-walker.d.ts.map +1 -1
  154. package/dist/src/coordinator/graph-walker.js +29 -2
  155. package/dist/src/coordinator/graph-walker.js.map +1 -1
  156. package/dist/src/coordinator/prompt-assembler.d.ts.map +1 -1
  157. package/dist/src/coordinator/prompt-assembler.js +3 -2
  158. package/dist/src/coordinator/prompt-assembler.js.map +1 -1
  159. package/dist/src/hooks/__tests__/statusline-visual-test.d.ts +4 -1
  160. package/dist/src/hooks/__tests__/statusline-visual-test.d.ts.map +1 -1
  161. package/dist/src/hooks/__tests__/statusline-visual-test.js +55 -174
  162. package/dist/src/hooks/__tests__/statusline-visual-test.js.map +1 -1
  163. package/dist/src/hooks/auto-mode.d.ts +18 -0
  164. package/dist/src/hooks/auto-mode.d.ts.map +1 -0
  165. package/dist/src/hooks/auto-mode.js +28 -0
  166. package/dist/src/hooks/auto-mode.js.map +1 -0
  167. package/dist/src/hooks/constants.d.ts +29 -60
  168. package/dist/src/hooks/constants.d.ts.map +1 -1
  169. package/dist/src/hooks/constants.js +105 -82
  170. package/dist/src/hooks/constants.js.map +1 -1
  171. package/dist/src/hooks/context-monitor.d.ts.map +1 -1
  172. package/dist/src/hooks/context-monitor.js +14 -3
  173. package/dist/src/hooks/context-monitor.js.map +1 -1
  174. package/dist/src/hooks/coordinator-tracker.d.ts +1 -0
  175. package/dist/src/hooks/coordinator-tracker.d.ts.map +1 -1
  176. package/dist/src/hooks/coordinator-tracker.js +19 -9
  177. package/dist/src/hooks/coordinator-tracker.js.map +1 -1
  178. package/dist/src/hooks/skill-context.d.ts.map +1 -1
  179. package/dist/src/hooks/skill-context.js +54 -6
  180. package/dist/src/hooks/skill-context.js.map +1 -1
  181. package/dist/src/hooks/statusline.d.ts +11 -8
  182. package/dist/src/hooks/statusline.d.ts.map +1 -1
  183. package/dist/src/hooks/statusline.js +284 -182
  184. package/dist/src/hooks/statusline.js.map +1 -1
  185. package/dist/src/hooks/workspace.d.ts.map +1 -1
  186. package/dist/src/hooks/workspace.js +2 -1
  187. package/dist/src/hooks/workspace.js.map +1 -1
  188. package/dist/src/migrations/_template.d.ts +12 -0
  189. package/dist/src/migrations/_template.d.ts.map +1 -0
  190. package/dist/src/migrations/_template.js +55 -0
  191. package/dist/src/migrations/_template.js.map +1 -0
  192. package/dist/src/migrations/index.d.ts +14 -0
  193. package/dist/src/migrations/index.d.ts.map +1 -0
  194. package/dist/src/migrations/index.js +20 -0
  195. package/dist/src/migrations/index.js.map +1 -0
  196. package/dist/src/migrations/run.d.ts +12 -0
  197. package/dist/src/migrations/run.d.ts.map +1 -0
  198. package/dist/src/migrations/run.js +119 -0
  199. package/dist/src/migrations/run.js.map +1 -0
  200. package/dist/src/migrations/v1-to-v2.d.ts +10 -0
  201. package/dist/src/migrations/v1-to-v2.d.ts.map +1 -0
  202. package/dist/src/migrations/v1-to-v2.js +71 -0
  203. package/dist/src/migrations/v1-to-v2.js.map +1 -0
  204. package/dist/src/tools/team-activity.d.ts.map +1 -1
  205. package/dist/src/tools/team-activity.js +22 -0
  206. package/dist/src/tools/team-activity.js.map +1 -1
  207. package/dist/src/tools/transition-recorder.d.ts +2 -17
  208. package/dist/src/tools/transition-recorder.d.ts.map +1 -1
  209. package/dist/src/tools/transition-recorder.js +6 -3
  210. package/dist/src/tools/transition-recorder.js.map +1 -1
  211. package/dist/src/types/index.d.ts +2 -1
  212. package/dist/src/types/index.d.ts.map +1 -1
  213. package/dist/src/utils/migration-registry.d.ts +65 -0
  214. package/dist/src/utils/migration-registry.d.ts.map +1 -0
  215. package/dist/src/utils/migration-registry.js +117 -0
  216. package/dist/src/utils/migration-registry.js.map +1 -0
  217. package/dist/src/utils/state-schema.d.ts +153 -0
  218. package/dist/src/utils/state-schema.d.ts.map +1 -0
  219. package/dist/src/utils/state-schema.js +329 -0
  220. package/dist/src/utils/state-schema.js.map +1 -0
  221. package/package.json +1 -1
  222. package/templates/state.json +17 -39
  223. package/workflows/brainstorm.md +3 -3
  224. package/workflows/codebase-rebuild.md +2 -12
  225. package/workflows/debug.md +7 -8
  226. package/workflows/execute.md +18 -4
  227. package/workflows/fork.md +37 -86
  228. package/workflows/init.md +1 -4
  229. package/workflows/integration-test.md +4 -5
  230. package/workflows/issue.md +3 -9
  231. package/workflows/learn.md +20 -19
  232. package/workflows/maestro-coordinate.codex.md +9 -9
  233. package/workflows/maestro-coordinate.md +9 -9
  234. package/workflows/maestro.codex.md +8 -1
  235. package/workflows/maestro.md +14 -5
  236. package/workflows/memory.md +26 -71
  237. package/workflows/merge.md +45 -107
  238. package/workflows/milestone-complete.md +24 -7
  239. package/workflows/retrospective.md +77 -109
  240. package/workflows/review.md +5 -12
  241. package/workflows/specs-remove.md +115 -0
  242. package/workflows/specs-setup.md +10 -32
  243. package/workflows/status.md +291 -290
  244. package/workflows/sync.md +5 -5
  245. package/workflows/test.md +4 -5
  246. package/workflows/ui-style.md +3 -4
  247. package/workflows/verify.md +2 -2
  248. package/workflows/wiki-connect.md +188 -0
  249. package/workflows/wiki-digest.md +221 -0
  250. package/workflows/wiki-manage.md +204 -0
  251. package/.codex/skills/maestro-chain/SKILL.md +0 -233
@@ -62,7 +62,7 @@ Linear pipeline test execution using `spawn_agents_on_csv`. Progressive L0 -> L1
62
62
  $quality-integration-test "3"
63
63
  $quality-integration-test -c 4 "3 --max-iterations 8"
64
64
  $quality-integration-test -y "3 --target-coverage 90"
65
- $quality-integration-test --continue "integration-test-phase3-20260318"
65
+ $quality-integration-test --continue "20260318-integration-test-P3-auth"
66
66
  ```
67
67
 
68
68
  **Flags**:
@@ -129,7 +129,7 @@ Each wave generates `wave-{N}.csv` with extra `prev_context` column populated fr
129
129
  ### Session Structure
130
130
 
131
131
  ```
132
- .workflow/.csv-wave/integration-test-{phase}-{date}/
132
+ .workflow/.csv-wave/{YYYYMMDD}-integration-test-P{N}-{slug}/
133
133
  +-- tasks.csv
134
134
  +-- results.csv
135
135
  +-- discoveries.ndjson
@@ -183,7 +183,7 @@ const phaseArg = $ARGUMENTS
183
183
  .trim()
184
184
 
185
185
  const dateStr = getUtc8ISOString().substring(0, 10).replace(/-/g, '')
186
- const sessionId = `integration-test-phase${phaseArg}-${dateStr}`
186
+ const sessionId = `${dateStr}-integration-test-P${phaseArg}-${phaseSlug}` // phaseSlug from index.json or roadmap
187
187
  const sessionFolder = `.workflow/.csv-wave/${sessionId}`
188
188
 
189
189
  Bash(`mkdir -p ${sessionFolder}`)
@@ -213,9 +213,11 @@ Write(`${sessionFolder}/reflection-log.md`,
213
213
 
214
214
  **Decomposition Rules**:
215
215
 
216
- 1. **Phase resolution**: Resolve `{phaseArg}` via artifact registry in `state.json` to `.workflow/scratch/{type}-{slug}-{date}/`; legacy fallback to `.workflow/phases/{NN}-{slug}/`
216
+ 1. **Phase resolution**: Resolve `{phaseArg}` via artifact registry in `state.json` to `.workflow/scratch/{YYYYMMDD}-{type}-{slug}/`
217
217
 
218
- 2. **Codebase exploration**:
218
+ 2. **Related session discovery**: Query `state.json.artifacts[]` for all artifacts matching `phase === target_phase && milestone === current_milestone`. Each artifact's type determines its outputs: review → review.json (critical findings inform integration test focus), debug → understanding.md (root causes guide regression test layers), test → uat.md/.tests/ (prior results inform layer priorities). Extract conclusions that may affect integration test strategy.
219
+
220
+ 3. **Codebase exploration**:
219
221
  - Cross-module imports and dependencies
220
222
  - API endpoints and route definitions
221
223
  - Database interactions and queries
@@ -228,7 +230,7 @@ Write(`${sessionFolder}/reflection-log.md`,
228
230
  - Identify test utilities, fixtures, DB seed scripts
229
231
 
230
232
  4. **Pre-generated test loading**:
231
- Check `{phase_dir}/.tests/test-gen-report.json` for tests from `quality-test-gen`. Merge integration/e2e tests into plan (execute but don't re-generate).
233
+ Check `{artifact_dir}/.tests/test-gen-report.json` for tests from `quality-test-gen`. Merge integration/e2e tests into plan (execute but don't re-generate).
232
234
 
233
235
  5. **Layer design**:
234
236
 
@@ -455,7 +457,9 @@ Update `state.json` with new strategy and iteration count.
455
457
 
456
458
  6. Update `index.json` with integration test status.
457
459
 
458
- 7. Display summary.
460
+ 7. **Register artifact**: Append to `state.json.artifacts[]` with `type: "test"`, `id: TST-NNN`, `path: "scratch/{YYYYMMDD}-integration-test-P{N}-{slug}"`, `depends_on: exec_art.id`. Output directory is independent scratch.
461
+
462
+ 8. Display summary.
459
463
 
460
464
  **Next step routing**:
461
465
 
@@ -66,18 +66,27 @@ $quality-retrospective "3 --compare 2 --auto-yes"
66
66
  When `--auto-yes`: Accept all routing recommendations without prompting. Route all insights automatically.
67
67
 
68
68
  **Storage written**:
69
- - `{target_dir}/retrospective.md` -- human-readable record (target_dir resolved via state.json artifact registry to `.workflow/scratch/{type}-{slug}-{date}/`; legacy fallback to `.workflow/phases/{NN}-{slug}/`)
69
+ - `{target_dir}/retrospective.md` -- human-readable record (target_dir resolved via state.json artifact registry to `.workflow/scratch/{YYYYMMDD}-{type}-{slug}/`)
70
70
  - `{target_dir}/retrospective.json` -- structured record
71
- - `.workflow/specs/SPEC-retro-*.md` -- spec stubs (one per spec-routed insight)
71
+ - `.workflow/specs/{category-file}.md` -- `<spec-entry>` entries appended to matching category files (one per spec-routed insight)
72
72
  - `.workflow/issues/issues.jsonl` -- appended issue rows (`source: "retrospective"`)
73
73
  - `.workflow/memory/TIP-*.md` -- memory tips (via `manage-memory-capture` skill)
74
74
  - `.workflow/learning/lessons.jsonl` -- append-only insight log
75
75
  - `.workflow/learning/learning-index.json` -- updated searchable index
76
76
 
77
- **Storage read (never modified)**:
78
- - `{target_dir}/index.json`, `plan.json`, `verification.json`, `review.json`, `uat.md`
79
- - `{target_dir}/.task/TASK-*.json`, `.summaries/TASK-*-summary.md`
80
- - `.workflow/issues/issues.jsonl`, `.workflow/state.json`
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`
81
90
 
82
91
  ### Agent Registry
83
92
 
@@ -151,7 +160,7 @@ functions.update_plan({
151
160
  Validate `--lens` values. If `--compare <M>` present, require single mode.
152
161
 
153
162
  **Stage 2: Validate phase artifacts**. For each target phase:
154
- - Phase directory must exist (resolved via state.json artifact registry to `.workflow/scratch/{type}-{slug}-{date}/`; legacy fallback to `.workflow/phases/{NN}-{slug}/`)
163
+ - Phase directory must exist (resolved via state.json artifact registry to `.workflow/scratch/{YYYYMMDD}-{type}-{slug}/`)
155
164
  - `index.json` must show `status: "completed"`
156
165
  - `.task/` directory must exist with at least one `TASK-*.json`
157
166
  - If existing `retrospective.json` found and not `--all`: emit W002, prompt overwrite
@@ -175,7 +184,7 @@ functions.update_plan({
175
184
  ### Stage 4: Context-Agent Fork + Parallel Lens Analysis
176
185
 
177
186
  **Archive if overwriting**:
178
- If existing `retrospective.{md,json}` present, move to `{phase_dir}/.history/` with timestamp suffix before spawning.
187
+ If existing `retrospective.{md,json}` present, move to `{artifact_dir}/.history/` with timestamp suffix before spawning.
179
188
 
180
189
  **Step 4a: Spawn context agent**
181
190
  ```javascript
@@ -190,13 +199,18 @@ spawn_agent({
190
199
  ---
191
200
 
192
201
  Goal: Load and summarize all phase artifacts for retrospective analysis.
193
- Phase: ${phaseDir}
202
+ Phase: ${targetPhase}
194
203
 
195
204
  TASK:
196
- 1. Read ${phaseDir}/index.json, plan.json, verification.json, review.json, uat.md
197
- 2. Read all .task/TASK-*.json and .summaries/TASK-*-summary.md
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)
198
212
  3. Read .workflow/issues/issues.jsonl -- filter rows with phase link to this phase
199
- 4. Read .workflow/state.json for project context
213
+ 4. Read .workflow/state.json for project context (milestones, accumulated_context)
200
214
 
201
215
  EXPECTED: Comprehensive artifact summary covering:
202
216
  - Phase goals and outcomes (from plan.json vs verification.json)
@@ -357,18 +371,21 @@ If `--no-route`: skip this stage.
357
371
  For each insight in `synthResult.insights`, route based on `routing` field:
358
372
 
359
373
  **Spec routing** (`routing: "spec"`):
360
- ```javascript
361
- functions.apply_patch:
362
- *** Begin Patch
363
- *** Add File: .workflow/specs/SPEC-retro-<INS-id>.md
364
- +---
365
- +id: <INS-id>
366
- +source: retrospective
367
- +phase: <N>
368
- +category: <category>
369
- +---
370
- +
371
- +# <title>
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>
372
389
  +
373
390
  +<summary>
374
391
  +
@@ -441,7 +458,7 @@ functions.apply_patch:
441
458
 
442
459
  Append each insight to `.workflow/learning/lessons.jsonl` and update `learning-index.json`.
443
460
 
444
- If `.workflow/specs/learnings.md` already exists, append a one-line summary per insight (never create it).
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.
445
462
 
446
463
  ```javascript
447
464
  functions.update_plan({
@@ -466,7 +483,7 @@ Lenses: technical, process, quality, decision
466
483
  Insights: <total> (<N> new, <N> duplicates merged)
467
484
 
468
485
  ROUTING:
469
- Spec stubs: <N> -> .workflow/specs/SPEC-retro-*.md
486
+ Spec entries: <N> -> .workflow/specs/{category-file}.md
470
487
  Issues: <N> -> .workflow/issues/issues.jsonl
471
488
  Memory tips: <N> -> .workflow/memory/TIP-*.md
472
489
  Lessons: <N> -> .workflow/learning/lessons.jsonl
@@ -480,6 +497,8 @@ Next:
480
497
  $manage-status
481
498
  $manage-issue "list --source retrospective"
482
499
  $manage-learn "list --phase <N>"
500
+ $manage-wiki health
501
+ $wiki-digest "<phase-topic>"
483
502
  ```
484
503
  </execution>
485
504
 
@@ -52,7 +52,7 @@ Wave-based multi-dimensional code review using `spawn_agents_on_csv`. Decomposes
52
52
  $quality-review "3"
53
53
  $quality-review -c 6 "3 --level deep"
54
54
  $quality-review -y "3 --dimensions security,performance"
55
- $quality-review --continue "review-phase3-20260318"
55
+ $quality-review --continue "20260318-review-P3-auth"
56
56
  ```
57
57
 
58
58
  **Flags**:
@@ -119,7 +119,7 @@ Each wave generates `wave-{N}.csv` with extra `prev_context` column.
119
119
  ### Session Structure
120
120
 
121
121
  ```
122
- .workflow/.csv-wave/review-{phase}-{date}/
122
+ .workflow/.csv-wave/{YYYYMMDD}-review-P{N}-{slug}/
123
123
  +-- tasks.csv
124
124
  +-- results.csv
125
125
  +-- discoveries.ndjson
@@ -163,7 +163,7 @@ const phaseArg = $ARGUMENTS
163
163
  .trim()
164
164
 
165
165
  const dateStr = getUtc8ISOString().substring(0, 10).replace(/-/g, '')
166
- const sessionId = `review-phase${phaseArg}-${dateStr}`
166
+ const sessionId = `${dateStr}-review-P${phaseArg}-${phaseSlug}` // phaseSlug from index.json or roadmap
167
167
  const sessionFolder = `.workflow/.csv-wave/${sessionId}`
168
168
 
169
169
  Bash(`mkdir -p ${sessionFolder}`)
@@ -175,8 +175,9 @@ Bash(`mkdir -p ${sessionFolder}`)
175
175
 
176
176
  **Decomposition Rules**:
177
177
 
178
- 1. **Phase resolution**: Resolve `{phaseArg}` via artifact registry in `state.json` to `.workflow/scratch/{type}-{slug}-{date}/`; legacy fallback to `.workflow/phases/{NN}-{slug}/`
179
- 2. **File collection**: Read `.task/TASK-*.json` -> collect all `files[].path` where action != "read"
178
+ 1. **Phase resolution**: Resolve `{phaseArg}` via artifact registry in `state.json` to `.workflow/scratch/{YYYYMMDD}-{type}-{slug}/`
179
+ 2. **Related session discovery**: Query `state.json.artifacts[]` for all artifacts matching `phase === target_phase && milestone === current_milestone`. Each artifact's type determines its outputs: execute → .summaries/.task/, review review.json, debug → understanding.md, test → uat.md. Extract conclusions that may affect this review (prior verdicts, root causes, UAT gaps) and pass as prior quality context to reviewer agents.
180
+ 3. **File collection**: Read `.task/TASK-*.json` -> collect all `files[].path` where action != "read"
180
181
  3. **Level detection**:
181
182
 
182
183
  | Condition | Level |
@@ -332,9 +333,11 @@ spawn_agents_on_csv({
332
333
  | standard | critical + high |
333
334
  | deep | critical + high + medium |
334
335
 
335
- 7. **Phase index update**: Update `{phase_dir}/index.json` with review status.
336
+ 7. **Phase index update**: Update `{artifact_dir}/index.json` with review status.
336
337
 
337
- 8. Display summary.
338
+ 8. **Register artifact**: Append to `state.json.artifacts[]` with `type: "review"`, `id: REV-NNN`, `path: "scratch/{YYYYMMDD}-review-P{N}-{slug}"`, `depends_on: exec_art.id`. Output directory is independent scratch, not shared with plan.
339
+
340
+ 9. Display summary.
338
341
 
339
342
  ### Shared Discovery Board Protocol
340
343
 
@@ -49,7 +49,7 @@ No auto mode -- UAT is inherently interactive. `--auto-fix` only automates gap c
49
49
  ### Step 1: Resolve Target
50
50
 
51
51
  1. Parse `$ARGUMENTS` for phase number, scratch task ID, or flags
52
- 2. **Phase mode**: resolve `PHASE_DIR` via artifact registry in `state.json` to `.workflow/scratch/{type}-{slug}-{date}/`; legacy fallback to `.workflow/phases/{NN}-{slug}/`
52
+ 2. **Phase mode**: resolve `PHASE_DIR` via artifact registry in `state.json` to `.workflow/scratch/{YYYYMMDD}-{type}-{slug}/`
53
53
  3. **Scratch mode**: set `SCRATCH_DIR = .workflow/scratch/{id}/`
54
54
  4. Validate target exists and has `verification.json` -- if missing: **E002**
55
55
 
@@ -71,7 +71,11 @@ If any smoke fails: **E003** -- abort, suggest Skill({ skill: "quality-debug" })
71
71
 
72
72
  ### Step 4: Load Verification Context
73
73
 
74
- Read from target directory: verification.json, validation.json, index.json, plan.json, `.summaries/TASK-*.md`. Build testable list from user-observable outcomes.
74
+ Read from target directory (resolved via artifact registry): verification.json, validation.json, index.json, plan.json, `.summaries/TASK-*.md`. Build testable list from user-observable outcomes.
75
+
76
+ ### Step 4.5: Load Quality Context
77
+
78
+ Query `state.json.artifacts[]` for all artifacts matching `phase === target_phase && milestone === current_milestone`. Each artifact's type determines its outputs: review → review.json (findings become additional test scenarios), debug → understanding.md (confirmed root causes become regression tests). Extract conclusions that may affect test scenario design.
75
79
 
76
80
  ### Step 5: Design Test Scenarios
77
81
 
@@ -132,8 +136,9 @@ Read `uat.md`, find first `result: [pending]` test, announce progress, continue
132
136
  2. Archive previous result artifacts to `.history/`
133
137
  3. Write `.tests/test-results.json` and `.tests/coverage-report.json`
134
138
  4. Update `index.json` with UAT results
135
- 5. If no issues: go to Step 13
136
- 6. If issues found: go to Step 11
139
+ 5. **Register artifact**: Append to `state.json.artifacts[]` with `type: "test"`, `id: TST-NNN`, `path: "scratch/{YYYYMMDD}-test-P{N}-{slug}"`, `depends_on: exec_art.id`. Output directory is independent scratch.
140
+ 6. If no issues: go to Step 13
141
+ 7. If issues found: go to Step 11
137
142
 
138
143
  ### Step 11: Auto-Diagnose
139
144
 
@@ -49,7 +49,7 @@ Wave-based test generation using `spawn_agents_on_csv`. Each source file/module
49
49
  $quality-test-gen "3"
50
50
  $quality-test-gen -c 4 "3 --type unit"
51
51
  $quality-test-gen -y "3 --type e2e --framework vitest"
52
- $quality-test-gen --continue "test-gen-phase3-20260318"
52
+ $quality-test-gen --continue "20260318-testgen-P3-auth"
53
53
  ```
54
54
 
55
55
  **Flags**:
@@ -113,7 +113,7 @@ Each wave generates `wave-{N}.csv` with extra `prev_context` column (empty for w
113
113
  ### Session Structure
114
114
 
115
115
  ```
116
- .workflow/.csv-wave/test-gen-{phase}-{date}/
116
+ .workflow/.csv-wave/{YYYYMMDD}-testgen-P{N}-{slug}/
117
117
  +-- tasks.csv
118
118
  +-- results.csv
119
119
  +-- discoveries.ndjson
@@ -158,7 +158,7 @@ const phaseArg = $ARGUMENTS
158
158
  .trim()
159
159
 
160
160
  const dateStr = getUtc8ISOString().substring(0, 10).replace(/-/g, '')
161
- const sessionId = `test-gen-phase${phaseArg}-${dateStr}`
161
+ const sessionId = `${dateStr}-testgen-P${phaseArg}-${phaseSlug}` // phaseSlug from index.json or roadmap
162
162
  const sessionFolder = `.workflow/.csv-wave/${sessionId}`
163
163
 
164
164
  Bash(`mkdir -p ${sessionFolder}`)
@@ -170,9 +170,11 @@ Bash(`mkdir -p ${sessionFolder}`)
170
170
 
171
171
  **Decomposition Rules**:
172
172
 
173
- 1. **Phase resolution**: Resolve `{phaseArg}` via artifact registry in `state.json` to `.workflow/scratch/{type}-{slug}-{date}/`; legacy fallback to `.workflow/phases/{NN}-{slug}/`
173
+ 1. **Phase resolution**: Resolve `{phaseArg}` via artifact registry in `state.json` to `.workflow/scratch/{YYYYMMDD}-{type}-{slug}/`
174
174
 
175
- 2. **Test infrastructure discovery**:
175
+ 2. **Related session discovery**: Query `state.json.artifacts[]` for all artifacts matching `phase === target_phase && milestone === current_milestone`. Each artifact's type determines its outputs: review → review.json (critical findings become focused test targets), debug → understanding.md (confirmed root causes become regression test targets), test → uat.md (UAT gaps inform which behaviors need tests). Extract conclusions that may affect test generation priorities.
176
+
177
+ 3. **Test infrastructure discovery**:
176
178
  - Find config files: `jest.config.*`, `vitest.config.*`, `pytest.ini`, `.mocharc.*`
177
179
  - Find existing test files: `*.test.*`, `*.spec.*`, `test_*`
178
180
  - Find test utilities: `test-utils.*`, `testHelper*`, `conftest.py`
@@ -277,9 +279,9 @@ Each agent receives:
277
279
 
278
280
  4. **Archive previous artifacts** before writing:
279
281
  ```
280
- IF file exists "{phase_dir}/.tests/test-gen-report.json":
281
- mkdir -p "{phase_dir}/.history"
282
- mv to "{phase_dir}/.history/test-gen-report-{TIMESTAMP}.json"
282
+ IF file exists "{artifact_dir}/.tests/test-gen-report.json":
283
+ mkdir -p "{artifact_dir}/.history"
284
+ mv to "{artifact_dir}/.history/test-gen-report-{TIMESTAMP}.json"
283
285
  ```
284
286
 
285
287
  5. Build `test-gen-report.json`:
@@ -362,7 +364,9 @@ Each agent receives:
362
364
 
363
365
  8. Copy `test-gen-report.json` to phase `.tests/` directory.
364
366
 
365
- 9. Display summary.
367
+ 9. **Register artifact**: Append to `state.json.artifacts[]` with `type: "test"`, `id: TST-NNN`, `path: "scratch/{YYYYMMDD}-testgen-P{N}-{slug}"`, `depends_on: exec_art.id`. Output directory is independent scratch.
368
+
369
+ 10. Display summary.
366
370
 
367
371
  **Next step routing**:
368
372
 
@@ -15,7 +15,7 @@ $spec-add "arch Use Zod for runtime validation over io-ts"
15
15
  $spec-add "quality All API endpoints must return structured error objects"
16
16
  ```
17
17
 
18
- **Valid categories**: coding, arch, quality, debug, test, review, learning.
18
+ **Valid categories**: coding, arch, quality, debug, test, review, learning, bug, pattern, decision, rule, validation.
19
19
  </purpose>
20
20
 
21
21
  <context>
@@ -31,6 +31,13 @@ $ARGUMENTS — `<category> <content>` where category selects the target file.
31
31
  | `test` | `test-conventions.md` |
32
32
  | `review` | `review-standards.md` |
33
33
  | `learning` | `learnings.md` |
34
+ | `bug` | `learnings.md` |
35
+ | `pattern` | `coding-conventions.md` |
36
+ | `decision` | `architecture-constraints.md` |
37
+ | `rule` | `quality-rules.md` |
38
+ | `validation` | `quality-rules.md` |
39
+
40
+ Extended types (`bug`, `pattern`, `decision`, `rule`, `validation`) are stored in the file of their closest core category but retain their specific category in the `<spec-entry>` tag.
34
41
  </context>
35
42
 
36
43
  <execution>
@@ -38,7 +45,7 @@ $ARGUMENTS — `<category> <content>` where category selects the target file.
38
45
  ### Step 1: Parse Input
39
46
 
40
47
  Extract category (first token) and content (remainder) from arguments.
41
- - Validate category is one of: coding, arch, quality, debug, test, review, learning (E003 if invalid)
48
+ - Validate category is one of: coding, arch, quality, debug, test, review, learning, bug, pattern, decision, rule, validation (E003 if invalid)
42
49
  - Validate content is non-empty (E001 if missing)
43
50
 
44
51
  ### Step 2: Validate Specs Directory
@@ -78,6 +85,7 @@ Append `<spec-entry>` closed-tag block to target file:
78
85
  Added [{category}] to {target_file}
79
86
  Keywords: {kw1}, {kw2}, {kw3}
80
87
  Verify: /spec-load --keyword {kw1}
88
+ Remove: /spec-remove <entry-id>
81
89
  ```
82
90
  </execution>
83
91
 
@@ -86,7 +94,7 @@ Verify: /spec-load --keyword {kw1}
86
94
  |------|----------|-------------|
87
95
  | E001 | fatal | Category and content are both required |
88
96
  | E002 | fatal | `.workflow/specs/` not initialized -- run `Skill({ skill: "spec-setup" })` first |
89
- | E003 | fatal | Invalid category -- must be one of: coding, arch, quality, debug, test, review, learning |
97
+ | E003 | fatal | Invalid category -- must be one of: coding, arch, quality, debug, test, review, learning, bug, pattern, decision, rule, validation |
90
98
  </error_codes>
91
99
 
92
100
  <success_criteria>
@@ -30,8 +30,15 @@ $spec-load "--category coding --keyword naming"
30
30
  | `test` | `test-conventions.md` |
31
31
  | `review` | `review-standards.md` |
32
32
  | `learning` | `learnings.md` |
33
+ | `bug` | `learnings.md` |
34
+ | `pattern` | `coding-conventions.md` |
35
+ | `decision` | `architecture-constraints.md` |
36
+ | `rule` | `quality-rules.md` |
37
+ | `validation` | `quality-rules.md` |
33
38
  | `all` (default) | All spec files |
34
39
 
40
+ Extended types (`bug`, `pattern`, `decision`, `rule`, `validation`) are stored in their closest core category's file but retain their specific category in the `<spec-entry>` tag.
41
+
35
42
  **Keyword filtering**: When `--keyword` is provided, only entries with matching keyword in their `<spec-entry keywords="...">` attribute are returned. Legacy entries (heading format) are filtered by text grep.
36
43
  </context>
37
44
 
@@ -43,7 +43,7 @@ Single-wave parallel execution — 4 independent mapper agents each analyze a di
43
43
  $spec-map ""
44
44
  $spec-map "auth"
45
45
  $spec-map -c 4 "api layer"
46
- $spec-map --continue "map-auth-20260318"
46
+ $spec-map --continue "20260318-map-auth"
47
47
  ```
48
48
 
49
49
  **Flags**:
@@ -102,7 +102,7 @@ id,title,description,focus_area,output_file,deps,context_from,wave,status,findin
102
102
  const AUTO_YES = $ARGUMENTS.includes('--yes') || $ARGUMENTS.includes('-y')
103
103
  const focusArea = $ARGUMENTS.replace(/--yes|-y|--continue|--concurrency\s+\d+|-c\s+\d+/g, '').trim() || 'full'
104
104
  const dateStr = new Date(Date.now() + 8*60*60*1000).toISOString().substring(0,10).replace(/-/g,'')
105
- const sessionId = `map-${focusArea.substring(0,20)}-${dateStr}`
105
+ const sessionId = `${dateStr}-map-${focusArea.substring(0,20)}`
106
106
  const sessionFolder = `.workflow/.csv-wave/${sessionId}`
107
107
 
108
108
  Bash(`mkdir -p ${sessionFolder}`)
@@ -0,0 +1,101 @@
1
+ ---
2
+ name: spec-remove
3
+ description: Remove a spec entry from a specs file by entry ID using maestro wiki remove-entry
4
+ argument-hint: "<entry-id>"
5
+ allowed-tools: Read, Write, Edit, Bash, Glob, Grep, AskUserQuestion
6
+ ---
7
+
8
+ <purpose>
9
+ Remove a `<spec-entry>` block from a specs container file. Symmetric with `spec-add`.
10
+ Uses `maestro wiki remove-entry` for atomic removal with automatic index update.
11
+ </purpose>
12
+
13
+ <required_reading>
14
+ @~/.maestro/workflows/specs-remove.md
15
+ </required_reading>
16
+
17
+ <context>
18
+ $ARGUMENTS — entry ID to remove (e.g., `spec-learnings-003`)
19
+
20
+ **Entry ID format**: `spec-{file-stem}-{NNN}` — sub-node ID from WikiIndexer atomic indexing.
21
+
22
+ **Discovery**:
23
+ - `maestro wiki list --type spec --json` — list all spec entries
24
+ - `/spec-load --keyword <term>` — find by keyword
25
+ - `maestro wiki search "<query>"` — BM25 search
26
+ </context>
27
+
28
+ <execution>
29
+
30
+ ### Step 1: Parse Input
31
+
32
+ Extract entry ID from arguments.
33
+ - Validate non-empty (E001 if missing)
34
+ - Validate `.workflow/specs/` exists (E002 if not)
35
+
36
+ ### Step 2: Lookup Entry
37
+
38
+ ```bash
39
+ maestro wiki get <entry-id> --json
40
+ ```
41
+
42
+ - Validate entry exists (E003 if not found)
43
+ - Validate entry is spec sub-node: `type` = "spec" and `parent` field set (E004 if not)
44
+ - Extract: title, category, keywords, container path, body preview
45
+
46
+ ### Step 3: Confirm
47
+
48
+ Display entry details. Ask user to confirm unless `-y` flag present.
49
+
50
+ ```
51
+ == Spec Entry to Remove ==
52
+ ID: {entry-id}
53
+ Title: {title}
54
+ Category: {category}
55
+ Keywords: {keywords}
56
+ Container: .workflow/specs/{filename}
57
+
58
+ Remove this entry? [y/N]
59
+ ```
60
+
61
+ ### Step 4: Remove
62
+
63
+ ```bash
64
+ maestro wiki remove-entry <entry-id>
65
+ ```
66
+
67
+ WikiIndexer auto-updates `.workflow/wiki-index.json`.
68
+
69
+ ### Step 5: Verify & Report
70
+
71
+ ```bash
72
+ maestro wiki get <entry-id> # should return not-found
73
+ ```
74
+
75
+ ```
76
+ == Entry Removed ==
77
+ ID: {entry-id}
78
+ From: .workflow/specs/{filename}
79
+
80
+ To verify: maestro wiki list --type spec --category {category}
81
+ To re-add: /spec-add {category} {content}
82
+ ```
83
+ </execution>
84
+
85
+ <error_codes>
86
+ | Code | Severity | Description |
87
+ |------|----------|-------------|
88
+ | E001 | fatal | Entry ID is required -- usage: `/spec-remove <entry-id>` |
89
+ | E002 | fatal | `.workflow/specs/` not initialized -- run `/spec-setup` first |
90
+ | E003 | fatal | Entry ID not found in wiki index |
91
+ | E004 | fatal | Entry is not a spec sub-node (wrong type or no parent) |
92
+ </error_codes>
93
+
94
+ <success_criteria>
95
+ - [ ] Entry ID parsed and validated
96
+ - [ ] Entry found in wiki index (type=spec, has parent)
97
+ - [ ] User confirmed removal
98
+ - [ ] Entry removed via `maestro wiki remove-entry`
99
+ - [ ] Wiki index auto-updated
100
+ - [ ] Confirmation displayed
101
+ </success_criteria>
@@ -53,12 +53,7 @@ Create `.workflow/specs/` directory and write:
53
53
  | `debug-notes.md` | Skipped — created on demand via `spec-add debug` |
54
54
  | `review-standards.md` | Skipped — created on demand via `spec-add review` |
55
55
 
56
- ### Step 5: Generate Tech Profile
57
-
58
- Read template from `~/.maestro/templates/project-tech.json` if available.
59
- Write `.workflow/project-tech.json` with detected tech stack.
60
-
61
- ### Step 6: Display Report
56
+ ### Step 5: Display Report
62
57
 
63
58
  ```
64
59
  === SPEC SETUP COMPLETE ===
@@ -67,10 +62,12 @@ Created:
67
62
  - .workflow/specs/architecture-constraints.md (category: arch)
68
63
  - .workflow/specs/learnings.md (category: learning)
69
64
  {optional files if created}
70
- - .workflow/project-tech.json
71
65
 
72
66
  Next: Run Skill({ skill: "spec-add", args: "<category> <content>" }) to add entries
73
67
  Categories: coding, arch, quality, debug, test, review, learning
68
+ Extended: bug, pattern, decision, rule, validation (stored in closest core category file)
69
+ Remove: /spec-remove <entry-id>
70
+ Wiki: maestro wiki list --type spec (entries auto-indexed in wiki graph)
74
71
  ```
75
72
 
76
73
  </execution>
@@ -89,6 +86,5 @@ Categories: coding, arch, quality, debug, test, review, learning
89
86
  - [ ] `.workflow/specs/` directory created
90
87
  - [ ] 3 core spec files always created (coding, arch, learning)
91
88
  - [ ] Optional files created only when relevant signals detected
92
- - [ ] `.workflow/project-tech.json` written with detected tech stack
93
89
  - [ ] Completion report displayed with category labels
94
90
  </success_criteria>
@@ -15,7 +15,7 @@ optionally auto-applies new `related` links to improve graph connectivity.
15
15
  $ARGUMENTS — optional flags.
16
16
 
17
17
  **Flags:**
18
- - `--scope <type>` — Limit to wiki type (spec, phase, memory, note, lesson, issue). Default: all.
18
+ - `--scope <type>` — Limit to wiki type (spec, memory, note, lesson, issue). Default: all.
19
19
  - `--min-similarity N` — Threshold 0.0-1.0 (default: 0.3)
20
20
  - `--fix` — Auto-apply top suggestions
21
21
  - `--max N` — Max suggestions (default: 20)
@@ -29,14 +29,15 @@ $ARGUMENTS — optional flags.
29
29
  Parallel `maestro wiki` commands: `list --json`, `health`, `orphans`, `hubs --top 10`.
30
30
 
31
31
  ### Stage 2: Identify Connection Candidates
32
- - **Orphan rescue**: BM25 search by title, tag overlap, same phase
32
+ - **Orphan rescue**: BM25 search by title, tag overlap, same category/parent
33
33
  - **Missing bidirectional**: A→B exists but B→A missing
34
- - **Transitive closure**: A→B and B→C but no A→C (with shared tags/phase)
34
+ - **Transitive closure**: A→B and B→C but no A→C (with shared tags/category)
35
35
  - **Type bridge**: Different types referencing same concept but unlinked
36
+ - **Parent cluster**: Entries sharing the same parent but not linked to each other
36
37
 
37
38
  ### Stage 3: Score Candidates
38
39
  ```
39
- score = 0.4 × tag_overlap + 0.3 × title_bm25 + 0.2 × same_phase + 0.1 × type_bridge
40
+ score = 0.4 × tag_overlap + 0.3 × title_bm25 + 0.2 × same_category + 0.1 × type_bridge
40
41
  ```
41
42
  Filter by `--min-similarity`, rank desc, limit by `--max`.
42
43
 
@@ -51,7 +52,7 @@ Re-run `maestro wiki health` for delta.
51
52
  ### Stage 6: Persist
52
53
  Write `wiki-connections-{date}.md`. Append graph insights to `lessons.jsonl` (source: "wiki-connect").
53
54
 
54
- **Next steps:** `/wiki-digest <topic>`, `/learn-follow <wiki-id>`, `maestro wiki graph`
55
+ **Next steps:** `/wiki-digest <topic>`, `/manage-wiki health`, `/learn-follow <wiki-id>`, `maestro wiki graph`
55
56
  </execution>
56
57
 
57
58
  <error_codes>
@@ -48,7 +48,7 @@ Type × theme matrix showing knowledge density:
48
48
  ```
49
49
  Theme 1 Theme 2 Theme 3
50
50
  spec ███░░ ░░░░░ █████
51
- phase ████░ ███░░ ░░░░░
51
+ memory ████░ ███░░ ░░░░░
52
52
  lesson █░░░░ ██░░░ ████░
53
53
  ```
54
54
  Empty cells = knowledge gaps.
@@ -62,7 +62,7 @@ For each gap: dedup against issues.jsonl, append with `type: "knowledge-gap"`, `
62
62
  ### Stage 8: Persist
63
63
  Append meta-insights to `lessons.jsonl` (source: "wiki-digest"). Display summary.
64
64
 
65
- **Next steps:** `/learn-follow <wiki-id>`, `/wiki-connect --fix`, `/learn-decompose <path>`
65
+ **Next steps:** `/learn-follow <wiki-id>`, `/wiki-connect --fix`, `/manage-wiki cleanup`, `/learn-decompose <path>`
66
66
  </execution>
67
67
 
68
68
  <error_codes>
@@ -27,12 +27,12 @@
27
27
  },
28
28
  "merge_decision": {
29
29
  "type": "decision",
30
- "description": "Check if all milestone phases are completed",
31
- "condition": "all_phases_completed",
32
- "branches": {
33
- "true": "merge",
34
- "false": "lifecycle_in_worktree"
35
- }
30
+ "strategy": "expr",
31
+ "eval": "all_phases_completed",
32
+ "edges": [
33
+ { "value": true, "target": "merge", "description": "All phases completed — merge back" },
34
+ { "value": false, "target": "lifecycle_in_worktree", "default": true, "description": "Phases remaining — continue lifecycle" }
35
+ ]
36
36
  },
37
37
  "merge": {
38
38
  "type": "command",