maestro-flow 0.3.12 → 0.3.13

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 (235) 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-milestone-complete/SKILL.md +18 -1
  47. package/.codex/skills/maestro-plan/SKILL.md +6 -6
  48. package/.codex/skills/maestro-roadmap/SKILL.md +3 -4
  49. package/.codex/skills/maestro-spec-generate/SKILL.md +2 -2
  50. package/.codex/skills/maestro-ui-design/SKILL.md +6 -6
  51. package/.codex/skills/maestro-verify/SKILL.md +20 -11
  52. package/.codex/skills/manage-codebase-rebuild/SKILL.md +4 -4
  53. package/.codex/skills/manage-harvest/SKILL.md +10 -1
  54. package/.codex/skills/manage-issue-discover/SKILL.md +3 -3
  55. package/.codex/skills/manage-learn/SKILL.md +3 -2
  56. package/.codex/skills/manage-memory/SKILL.md +3 -3
  57. package/.codex/skills/manage-memory-capture/SKILL.md +8 -14
  58. package/.codex/skills/manage-status/SKILL.md +9 -4
  59. package/.codex/skills/manage-wiki/SKILL.md +55 -0
  60. package/.codex/skills/quality-business-test/SKILL.md +8 -6
  61. package/.codex/skills/quality-debug/SKILL.md +22 -9
  62. package/.codex/skills/quality-integration-test/SKILL.md +11 -7
  63. package/.codex/skills/quality-retrospective/SKILL.md +45 -26
  64. package/.codex/skills/quality-review/SKILL.md +10 -7
  65. package/.codex/skills/quality-test/SKILL.md +9 -4
  66. package/.codex/skills/quality-test-gen/SKILL.md +13 -9
  67. package/.codex/skills/spec-add/SKILL.md +11 -3
  68. package/.codex/skills/spec-load/SKILL.md +7 -0
  69. package/.codex/skills/spec-map/SKILL.md +2 -2
  70. package/.codex/skills/spec-remove/SKILL.md +101 -0
  71. package/.codex/skills/spec-setup/SKILL.md +4 -8
  72. package/.codex/skills/wiki-connect/SKILL.md +6 -5
  73. package/.codex/skills/wiki-digest/SKILL.md +2 -2
  74. package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.d.ts +9 -0
  75. package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.js +109 -9
  76. package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.js.map +1 -1
  77. package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.test.js +49 -0
  78. package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.test.js.map +1 -1
  79. package/dashboard/dist-server/dashboard/src/server/routes/index.js +5 -4
  80. package/dashboard/dist-server/dashboard/src/server/routes/index.js.map +1 -1
  81. package/dashboard/dist-server/dashboard/src/server/routes/specs.d.ts +5 -13
  82. package/dashboard/dist-server/dashboard/src/server/routes/specs.js +97 -155
  83. package/dashboard/dist-server/dashboard/src/server/routes/specs.js.map +1 -1
  84. package/dashboard/dist-server/dashboard/src/server/routes/wiki.d.ts +11 -1
  85. package/dashboard/dist-server/dashboard/src/server/routes/wiki.integration.test.js +27 -6
  86. package/dashboard/dist-server/dashboard/src/server/routes/wiki.integration.test.js.map +1 -1
  87. package/dashboard/dist-server/dashboard/src/server/routes/wiki.js +25 -7
  88. package/dashboard/dist-server/dashboard/src/server/routes/wiki.js.map +1 -1
  89. package/dashboard/dist-server/dashboard/src/server/wiki/graph-analysis.js +8 -0
  90. package/dashboard/dist-server/dashboard/src/server/wiki/graph-analysis.js.map +1 -1
  91. package/dashboard/dist-server/dashboard/src/server/wiki/search.js +1 -0
  92. package/dashboard/dist-server/dashboard/src/server/wiki/search.js.map +1 -1
  93. package/dashboard/dist-server/dashboard/src/server/wiki/spec-entry-parser.d.ts +29 -0
  94. package/dashboard/dist-server/dashboard/src/server/wiki/spec-entry-parser.js +148 -0
  95. package/dashboard/dist-server/dashboard/src/server/wiki/spec-entry-parser.js.map +1 -0
  96. package/dashboard/dist-server/dashboard/src/server/wiki/stress.test.js +4 -2
  97. package/dashboard/dist-server/dashboard/src/server/wiki/stress.test.js.map +1 -1
  98. package/dashboard/dist-server/dashboard/src/server/wiki/virtual-wiki-adapters.js +8 -2
  99. package/dashboard/dist-server/dashboard/src/server/wiki/virtual-wiki-adapters.js.map +1 -1
  100. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.d.ts +5 -0
  101. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js +80 -38
  102. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js.map +1 -1
  103. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.test.js +8 -6
  104. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.test.js.map +1 -1
  105. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-types.d.ts +40 -5
  106. package/dashboard/dist-server/dashboard/src/server/wiki/writer-stress.test.js +21 -23
  107. package/dashboard/dist-server/dashboard/src/server/wiki/writer-stress.test.js.map +1 -1
  108. package/dashboard/dist-server/dashboard/src/server/wiki/writer.d.ts +33 -3
  109. package/dashboard/dist-server/dashboard/src/server/wiki/writer.js +184 -12
  110. package/dashboard/dist-server/dashboard/src/server/wiki/writer.js.map +1 -1
  111. package/dashboard/dist-server/src/commands/delegate.js +26 -0
  112. package/dashboard/dist-server/src/commands/delegate.js.map +1 -1
  113. package/dashboard/dist-server/src/coordinator/graph-types.d.ts +11 -1
  114. package/dashboard/dist-server/src/coordinator/graph-walker.js +29 -2
  115. package/dashboard/dist-server/src/coordinator/graph-walker.js.map +1 -1
  116. package/dashboard/dist-server/src/coordinator/prompt-assembler.js +3 -2
  117. package/dashboard/dist-server/src/coordinator/prompt-assembler.js.map +1 -1
  118. package/dashboard/dist-server/src/hooks/constants.d.ts +29 -60
  119. package/dashboard/dist-server/src/hooks/constants.js +105 -82
  120. package/dashboard/dist-server/src/hooks/constants.js.map +1 -1
  121. package/dashboard/dist-server/src/types/index.d.ts +2 -1
  122. package/dist/src/commands/delegate.d.ts.map +1 -1
  123. package/dist/src/commands/delegate.js +26 -0
  124. package/dist/src/commands/delegate.js.map +1 -1
  125. package/dist/src/commands/hooks.d.ts +2 -4
  126. package/dist/src/commands/hooks.d.ts.map +1 -1
  127. package/dist/src/commands/hooks.js +4 -7
  128. package/dist/src/commands/hooks.js.map +1 -1
  129. package/dist/src/commands/install-ui/InstallConfirm.d.ts +2 -3
  130. package/dist/src/commands/install-ui/InstallConfirm.d.ts.map +1 -1
  131. package/dist/src/commands/install-ui/InstallConfirm.js +1 -1
  132. package/dist/src/commands/install-ui/InstallConfirm.js.map +1 -1
  133. package/dist/src/commands/install-ui/InstallExecution.d.ts.map +1 -1
  134. package/dist/src/commands/install-ui/InstallExecution.js +1 -2
  135. package/dist/src/commands/install-ui/InstallExecution.js.map +1 -1
  136. package/dist/src/commands/install-ui/InstallFlow.d.ts.map +1 -1
  137. package/dist/src/commands/install-ui/InstallFlow.js +5 -7
  138. package/dist/src/commands/install-ui/InstallFlow.js.map +1 -1
  139. package/dist/src/commands/install-ui/StatuslineConfig.d.ts +3 -6
  140. package/dist/src/commands/install-ui/StatuslineConfig.d.ts.map +1 -1
  141. package/dist/src/commands/install-ui/StatuslineConfig.js +21 -17
  142. package/dist/src/commands/install-ui/StatuslineConfig.js.map +1 -1
  143. package/dist/src/commands/update.d.ts.map +1 -1
  144. package/dist/src/commands/update.js +95 -0
  145. package/dist/src/commands/update.js.map +1 -1
  146. package/dist/src/commands/wiki.d.ts.map +1 -1
  147. package/dist/src/commands/wiki.js +75 -11
  148. package/dist/src/commands/wiki.js.map +1 -1
  149. package/dist/src/coordinator/graph-types.d.ts +11 -1
  150. package/dist/src/coordinator/graph-types.d.ts.map +1 -1
  151. package/dist/src/coordinator/graph-walker.d.ts.map +1 -1
  152. package/dist/src/coordinator/graph-walker.js +29 -2
  153. package/dist/src/coordinator/graph-walker.js.map +1 -1
  154. package/dist/src/coordinator/prompt-assembler.d.ts.map +1 -1
  155. package/dist/src/coordinator/prompt-assembler.js +3 -2
  156. package/dist/src/coordinator/prompt-assembler.js.map +1 -1
  157. package/dist/src/hooks/__tests__/statusline-visual-test.d.ts +4 -1
  158. package/dist/src/hooks/__tests__/statusline-visual-test.d.ts.map +1 -1
  159. package/dist/src/hooks/__tests__/statusline-visual-test.js +55 -174
  160. package/dist/src/hooks/__tests__/statusline-visual-test.js.map +1 -1
  161. package/dist/src/hooks/constants.d.ts +29 -60
  162. package/dist/src/hooks/constants.d.ts.map +1 -1
  163. package/dist/src/hooks/constants.js +105 -82
  164. package/dist/src/hooks/constants.js.map +1 -1
  165. package/dist/src/hooks/skill-context.d.ts.map +1 -1
  166. package/dist/src/hooks/skill-context.js +54 -6
  167. package/dist/src/hooks/skill-context.js.map +1 -1
  168. package/dist/src/hooks/statusline.d.ts +11 -8
  169. package/dist/src/hooks/statusline.d.ts.map +1 -1
  170. package/dist/src/hooks/statusline.js +284 -182
  171. package/dist/src/hooks/statusline.js.map +1 -1
  172. package/dist/src/hooks/workspace.d.ts.map +1 -1
  173. package/dist/src/hooks/workspace.js +2 -1
  174. package/dist/src/hooks/workspace.js.map +1 -1
  175. package/dist/src/migrations/_template.d.ts +12 -0
  176. package/dist/src/migrations/_template.d.ts.map +1 -0
  177. package/dist/src/migrations/_template.js +55 -0
  178. package/dist/src/migrations/_template.js.map +1 -0
  179. package/dist/src/migrations/index.d.ts +14 -0
  180. package/dist/src/migrations/index.d.ts.map +1 -0
  181. package/dist/src/migrations/index.js +20 -0
  182. package/dist/src/migrations/index.js.map +1 -0
  183. package/dist/src/migrations/run.d.ts +12 -0
  184. package/dist/src/migrations/run.d.ts.map +1 -0
  185. package/dist/src/migrations/run.js +119 -0
  186. package/dist/src/migrations/run.js.map +1 -0
  187. package/dist/src/migrations/v1-to-v2.d.ts +10 -0
  188. package/dist/src/migrations/v1-to-v2.d.ts.map +1 -0
  189. package/dist/src/migrations/v1-to-v2.js +71 -0
  190. package/dist/src/migrations/v1-to-v2.js.map +1 -0
  191. package/dist/src/tools/team-activity.d.ts.map +1 -1
  192. package/dist/src/tools/team-activity.js +22 -0
  193. package/dist/src/tools/team-activity.js.map +1 -1
  194. package/dist/src/tools/transition-recorder.d.ts +2 -17
  195. package/dist/src/tools/transition-recorder.d.ts.map +1 -1
  196. package/dist/src/tools/transition-recorder.js +6 -3
  197. package/dist/src/tools/transition-recorder.js.map +1 -1
  198. package/dist/src/types/index.d.ts +2 -1
  199. package/dist/src/types/index.d.ts.map +1 -1
  200. package/dist/src/utils/migration-registry.d.ts +65 -0
  201. package/dist/src/utils/migration-registry.d.ts.map +1 -0
  202. package/dist/src/utils/migration-registry.js +117 -0
  203. package/dist/src/utils/migration-registry.js.map +1 -0
  204. package/dist/src/utils/state-schema.d.ts +153 -0
  205. package/dist/src/utils/state-schema.d.ts.map +1 -0
  206. package/dist/src/utils/state-schema.js +329 -0
  207. package/dist/src/utils/state-schema.js.map +1 -0
  208. package/package.json +1 -1
  209. package/templates/state.json +17 -39
  210. package/workflows/brainstorm.md +3 -3
  211. package/workflows/codebase-rebuild.md +2 -12
  212. package/workflows/debug.md +7 -8
  213. package/workflows/execute.md +18 -4
  214. package/workflows/fork.md +37 -86
  215. package/workflows/init.md +1 -4
  216. package/workflows/integration-test.md +4 -5
  217. package/workflows/issue.md +3 -9
  218. package/workflows/learn.md +20 -19
  219. package/workflows/maestro.codex.md +8 -1
  220. package/workflows/maestro.md +12 -3
  221. package/workflows/memory.md +26 -71
  222. package/workflows/merge.md +45 -107
  223. package/workflows/milestone-complete.md +24 -7
  224. package/workflows/retrospective.md +77 -109
  225. package/workflows/review.md +5 -12
  226. package/workflows/specs-remove.md +115 -0
  227. package/workflows/specs-setup.md +10 -32
  228. package/workflows/status.md +291 -290
  229. package/workflows/sync.md +5 -5
  230. package/workflows/test.md +4 -5
  231. package/workflows/ui-style.md +3 -4
  232. package/workflows/verify.md +2 -2
  233. package/workflows/wiki-connect.md +188 -0
  234. package/workflows/wiki-digest.md +221 -0
  235. package/workflows/wiki-manage.md +204 -0
@@ -60,7 +60,7 @@ Wave-based multi-role brainstorming using `spawn_agents_on_csv`. Diamond topolog
60
60
  $maestro-brainstorm "Build real-time collaboration platform"
61
61
  $maestro-brainstorm -y "Build real-time collaboration platform"
62
62
  $maestro-brainstorm -c 6 "Build real-time collaboration platform --count 5"
63
- $maestro-brainstorm --continue "brainstorm-collab-20260318"
63
+ $maestro-brainstorm --continue "20260318-brainstorm-collab"
64
64
  ```
65
65
 
66
66
  **Flags**:
@@ -125,7 +125,7 @@ Each wave generates `wave-{N}.csv` with extra `prev_context` column.
125
125
  ### Session Structure
126
126
 
127
127
  ```
128
- .workflow/.csv-wave/brainstorm-{slug}-{date}/
128
+ .workflow/.csv-wave/{YYYYMMDD}-brainstorm-{slug}/
129
129
  +-- tasks.csv
130
130
  +-- results.csv
131
131
  +-- discoveries.ndjson
@@ -184,7 +184,7 @@ const topicArg = $ARGUMENTS
184
184
 
185
185
  const slug = topicArg.toLowerCase().replace(/[^a-z0-9]+/g, '-').substring(0, 40)
186
186
  const dateStr = getUtc8ISOString().substring(0, 10).replace(/-/g, '')
187
- const sessionId = `brainstorm-${slug}-${dateStr}`
187
+ const sessionId = `${dateStr}-brainstorm-${slug}`
188
188
  const sessionFolder = `.workflow/.csv-wave/${sessionId}`
189
189
 
190
190
  Bash(`mkdir -p ${sessionFolder}/.brainstorming`)
@@ -196,7 +196,7 @@ Bash(`mkdir -p ${sessionFolder}/.brainstorming`)
196
196
 
197
197
  **Decomposition Rules**:
198
198
 
199
- 1. **Mode detection**: Number = phase mode (resolve via state.json artifact registry to `.workflow/scratch/{type}-{slug}-{date}/`; legacy fallback to `.workflow/phases/{NN}-{slug}/`), text = scratch mode
199
+ 1. **Mode detection**: Number = phase mode (resolve via state.json artifact registry to `.workflow/scratch/{YYYYMMDD}-{type}-{slug}/`), text = scratch mode
200
200
  2. **Project specs loading**: Read `.workflow/specs/` for architecture-aware analysis context
201
201
  3. **Role selection**:
202
202
 
@@ -106,7 +106,7 @@ const AUTO_FLAG_MAP = {
106
106
 
107
107
  function assembleArgs(step) {
108
108
  let a = (step.args || '')
109
- .replace(/\{phase\}/g, context.current_phase || '')
109
+ .replace(/\{phase\}/g, context.phase || '')
110
110
  .replace(/\{description\}/g, context.user_intent || '')
111
111
  .replace(/\{issue_id\}/g, context.issue_id || '')
112
112
  .replace(/\{spec_session_id\}/g, context.spec_session_id || '')
@@ -145,7 +145,7 @@ Bash({
145
145
  ```javascript
146
146
  // Context propagation from output
147
147
  const phaseMatch = output.match(/PHASE:\s*(\d+)/m);
148
- if (phaseMatch) context.current_phase = phaseMatch[1];
148
+ if (phaseMatch) context.phase = phaseMatch[1]; // derived from output, not stored in state
149
149
  const specMatch = output.match(/SPEC-[\w-]+/);
150
150
  if (specMatch) context.spec_session_id = specMatch[0];
151
151
  const scratchMatch = output.match(/scratch_dir:\s*(.+)/m);
@@ -60,7 +60,7 @@ $maestro-execute "3"
60
60
  $maestro-execute -c 4 "3 --auto-commit"
61
61
  $maestro-execute -y "3 --method cli"
62
62
  $maestro-execute "3 --dir .workflow/scratch/quick-fix"
63
- $maestro-execute --continue "execute-phase3-20260318"
63
+ $maestro-execute --continue "20260318-execute-P3-phase3"
64
64
  ```
65
65
 
66
66
  **Flags**:
@@ -130,7 +130,7 @@ Each wave generates `wave-{N}.csv` with extra `prev_context` column populated fr
130
130
  ### Session Structure
131
131
 
132
132
  ```
133
- .workflow/.csv-wave/execute-{phase}-{date}/
133
+ .workflow/.csv-wave/{YYYYMMDD}-execute-P{N}-{slug}/
134
134
  +-- tasks.csv
135
135
  +-- results.csv
136
136
  +-- discoveries.ndjson
@@ -181,8 +181,8 @@ const phaseArg = $ARGUMENTS
181
181
 
182
182
  const dateStr = getUtc8ISOString().substring(0, 10).replace(/-/g, '')
183
183
  const sessionId = scratchDir
184
- ? `execute-scratch-${dateStr}`
185
- : `execute-phase${phaseArg}-${dateStr}`
184
+ ? `${dateStr}-execute-scratch`
185
+ : `${dateStr}-execute-P${phaseArg}-${phaseSlug}`
186
186
  const sessionFolder = `.workflow/.csv-wave/${sessionId}`
187
187
 
188
188
  Bash(`mkdir -p ${sessionFolder}`)
@@ -325,9 +325,19 @@ If a task is blocked/failed and other tasks in later waves depend on it:
325
325
  5. **Extract incremental learnings**:
326
326
  - Read all `.summaries/` from PLAN_DIR
327
327
  - Extract strategy adjustments, patterns, pitfalls
328
- - Append to `.workflow/specs/learnings.md`
328
+ - Check existing entries via `maestro spec load --category learning` (dedup)
329
+ - Append to `.workflow/specs/learnings.md` using `<spec-entry>` closed-tag format (category=`learning`, auto-extract keywords, date=today, source=`execute`)
329
330
  - Mark artifact `harvested: true` in state.json
330
331
 
332
+ 5b. **Post-task Knowledge Inquiry** (after each task completes):
333
+ - **Execution deviation**: If task summary mentions approach change, dependency swap, or plan deviation:
334
+ → Ask: "TASK-{NNN} deviated from the plan. Should this decision be recorded as an architecture constraint? (`/spec-add arch`)"
335
+ - **Retry success**: If task required ≥2 retries before completion:
336
+ → Ask: "TASK-{NNN} succeeded after {N} retries. Should this fix pattern be documented? (`/spec-add debug`)"
337
+ - **Implicit knowledge**: If task summary contains design rationale ("chose X because", "rejected Y due to"):
338
+ → Ask: "Design decision detected. Should it be recorded as a learning? (`/spec-add learning`)"
339
+ - If user confirms, append `<spec-entry>` to matching category file via `spec-add` mechanism
340
+
331
341
  6. **Generate context.md**:
332
342
 
333
343
  ```markdown
@@ -16,7 +16,7 @@ When `--auto`: After config questions, run research without further interaction.
16
16
  ```bash
17
17
  $maestro-init ""
18
18
  $maestro-init "--auto"
19
- $maestro-init "--from-brainstorm brainstorm-auth-20260318"
19
+ $maestro-init "--from-brainstorm 20260318-brainstorm-auth"
20
20
  ```
21
21
 
22
22
  **Flags**:
@@ -65,9 +65,24 @@ cp .workflow/roadmap.md .workflow/milestones/{milestone}/roadmap-snapshot.md
65
65
  - Read `.summaries/` from each execute artifact's plan dir
66
66
  - Read `reflection-log.md` if exists
67
67
  - Extract patterns, pitfalls, strategy adjustments
68
- - Append to `.workflow/specs/learnings.md`
68
+ - Check existing entries via `maestro spec load --category learning` (dedup)
69
+ - Append to `.workflow/specs/learnings.md` using `<spec-entry>` closed-tag format (category=`learning`, auto-extract keywords, date=today, source=`milestone-complete`)
69
70
  - Avoid duplicates (check existing entries)
70
71
 
72
+ ### Step 3b: Knowledge Promotion Inquiry
73
+
74
+ After learning extraction, scan `learnings.md` for promotion candidates:
75
+
76
+ 1. **High-frequency pattern detection**: Scan all `<spec-entry category="learning">` entries for keyword overlap (≥2 entries sharing keywords):
77
+ → Ask: "Keyword '{keyword}' appears in {N} learning entries. Should this be promoted to a formal coding convention? (`/spec-add coding`)"
78
+
79
+ 2. **Convention drift detection**: Compare executed task summaries against `coding-conventions.md` and `architecture-constraints.md`:
80
+ → Ask: "Were any established conventions bypassed during this milestone? Should conventions be updated?"
81
+
82
+ 3. **Wiki island check**: Auto-trigger `wiki-connect --fix` to link newly extracted knowledge.
83
+
84
+ If user confirms, append promoted `<spec-entry>` to target category file, preserving original date and source traceability.
85
+
71
86
  ### Step 4: Archive Artifact Entries
72
87
 
73
88
  Move artifact entries from `state.json.artifacts[]` to `milestone_history`:
@@ -130,6 +145,8 @@ Next steps:
130
145
  $maestro-milestone-release -- Cut release
131
146
  $maestro-analyze -- Start next milestone
132
147
  $manage-status -- View state
148
+ $manage-wiki health -- Check wiki graph health
149
+ $wiki-digest -- Generate knowledge digest
133
150
  ```
134
151
 
135
152
  </execution>
@@ -55,7 +55,7 @@ $maestro-plan -y "3 --auto"
55
55
  $maestro-plan -c 4 "3 --spec SPEC-001"
56
56
  $maestro-plan "3 --gaps"
57
57
  $maestro-plan "3 --dir .workflow/scratch/quick-nav-fix"
58
- $maestro-plan --continue "plan-phase3-20260318"
58
+ $maestro-plan --continue "20260318-plan-P3-auth"
59
59
  ```
60
60
 
61
61
  **Flags**:
@@ -116,7 +116,7 @@ Each wave generates `wave-{N}.csv` with extra `prev_context` column.
116
116
  ### Session Structure
117
117
 
118
118
  ```
119
- .workflow/.csv-wave/plan-{phase}-{date}/
119
+ .workflow/.csv-wave/{YYYYMMDD}-plan-P{N}-{slug}/
120
120
  +-- tasks.csv
121
121
  +-- results.csv
122
122
  +-- discoveries.ndjson
@@ -197,9 +197,9 @@ if (dirMatch) {
197
197
  }
198
198
 
199
199
  const dateStr = getUtc8ISOString().substring(0, 10).replace(/-/g, '')
200
- const sessionId = `plan-${phaseSlug}-${dateStr}`
200
+ const sessionId = `${dateStr}-plan-P${phaseArg}-${phaseSlug}`
201
201
  const sessionFolder = `.workflow/.csv-wave/${sessionId}`
202
- const scratchDir = `.workflow/scratch/plan-${phaseSlug}-${dateStr}`
202
+ const scratchDir = `.workflow/scratch/${dateStr}-plan-P${phaseArg}-${phaseSlug}`
203
203
 
204
204
  Bash(`mkdir -p ${sessionFolder}`)
205
205
  Bash(`mkdir -p ${scratchDir}/.task/`)
@@ -413,8 +413,8 @@ spawn_agents_on_csv({
413
413
  Tasks: {task_count} tasks in {wave_count} waves
414
414
  Check: {checker_status}
415
415
 
416
- Plan: {phase_dir}/plan.json
417
- Tasks: {phase_dir}/.task/TASK-*.json
416
+ Plan: {scratch_dir}/plan.json
417
+ Tasks: {scratch_dir}/.task/TASK-*.json
418
418
 
419
419
  Next steps:
420
420
  Skill({ skill: "maestro-execute", args: "{phase}" }) -- Execute the plan
@@ -135,7 +135,7 @@ Each wave generates `wave-{N}.csv` with extra `prev_context` column.
135
135
  ### Session Structure
136
136
 
137
137
  ```
138
- .workflow/.csv-wave/roadmap-{slug}-{date}/
138
+ .workflow/.csv-wave/{YYYYMMDD}-roadmap-{slug}/
139
139
  +-- tasks.csv
140
140
  +-- results.csv
141
141
  +-- discoveries.ndjson
@@ -164,7 +164,7 @@ const slug = requirementArg.toLowerCase()
164
164
  .replace(/[^a-z0-9]+/g, '-')
165
165
  .substring(0, 40)
166
166
  const dateStr = getUtc8ISOString().substring(0, 10).replace(/-/g, '')
167
- const sessionId = `roadmap-${slug}-${dateStr}`
167
+ const sessionId = `${dateStr}-roadmap-${slug}`
168
168
  const sessionFolder = `.workflow/.csv-wave/${sessionId}`
169
169
 
170
170
  Bash(`mkdir -p ${sessionFolder}`)
@@ -301,7 +301,6 @@ spawn_agents_on_csv({
301
301
  - Write `.workflow/roadmap.md` using standard roadmap template structure
302
302
  - Ensure `.workflow/scratch/` directory exists (phases are labels, not directories)
303
303
  - Update `state.json` milestones array and set `current_milestone`
304
- - Update `.workflow/state.json` (if exists): set `current_phase: 1`
305
304
 
306
305
  6. Display summary:
307
306
 
@@ -372,7 +371,7 @@ echo '{"ts":"<ISO>","worker":"{id}","type":"risk_factor","data":{"name":"OAuth p
372
371
  - [ ] Wave 2 assembly agent produced roadmap.md
373
372
  - [ ] Interactive refinement offered (or skipped with -y)
374
373
  - [ ] .workflow/roadmap.md written with phases, milestones, success criteria
375
- - [ ] state.json updated with milestones and current_phase
374
+ - [ ] state.json updated with milestones
376
375
  - [ ] context.md generated with analysis summary
377
376
  - [ ] Completion report displayed with next steps
378
377
  </success_criteria>
@@ -139,7 +139,7 @@ Each wave generates `wave-{N}.csv` with extra `prev_context` column.
139
139
  ### Session Structure
140
140
 
141
141
  ```
142
- .workflow/.csv-wave/spec-generate-{slug}-{date}/
142
+ .workflow/.csv-wave/{YYYYMMDD}-spec-generate-{slug}/
143
143
  +-- tasks.csv
144
144
  +-- results.csv
145
145
  +-- discoveries.ndjson
@@ -189,7 +189,7 @@ const slug = topicArg.toLowerCase()
189
189
  .replace(/[^a-z0-9]+/g, '-')
190
190
  .substring(0, 40)
191
191
  const dateStr = getUtc8ISOString().substring(0, 10).replace(/-/g, '')
192
- const sessionId = `spec-generate-${slug}-${dateStr}`
192
+ const sessionId = `${dateStr}-spec-generate-${slug}`
193
193
  const sessionFolder = `.workflow/.csv-wave/${sessionId}`
194
194
 
195
195
  Bash(`mkdir -p ${sessionFolder}`)
@@ -37,7 +37,7 @@ $maestro-ui-design "3 --style-skill PKG --stack react"
37
37
 
38
38
  When `--yes` or `-y`: Skip interactive selection, auto-pick top-scored variant, skip brief review.
39
39
 
40
- **Output**: `{phase_dir}/design-ref/` with MASTER.md, design-tokens.json, animation-tokens.json, selection.json, prototypes/
40
+ **Output**: `{scratch_dir}/design-ref/` with MASTER.md, design-tokens.json, animation-tokens.json, selection.json, prototypes/
41
41
  </context>
42
42
 
43
43
  <invariants>
@@ -54,7 +54,7 @@ When `--yes` or `-y`: Skip interactive selection, auto-pick top-scored variant,
54
54
  ### Step 1: Parse Input and Resolve Target
55
55
 
56
56
  1. Parse flags from `$ARGUMENTS`: `--styles N`, `--stack`, `--targets`, `--persist`, `--full`, `-y`
57
- 2. **Phase mode** (number): resolve via state.json artifact registry to `.workflow/scratch/{type}-{slug}-{date}/`; legacy fallback to `.workflow/phases/{NN}-*/`
57
+ 2. **Phase mode** (number): resolve via state.json artifact registry to `.workflow/scratch/{YYYYMMDD}-{type}-{slug}/`
58
58
  3. **Scratch mode** (text): create `.workflow/scratch/ui-design-{slug}-{date}/` with minimal index.json
59
59
  4. Create output directories:
60
60
  ```bash
@@ -148,10 +148,10 @@ Agent({
148
148
  Targets: {target_list}
149
149
 
150
150
  Design System:
151
- MASTER.md: {phase_dir}/design-ref/MASTER.md
152
- Tokens: {phase_dir}/design-ref/design-tokens.json
153
- Animation: {phase_dir}/design-ref/animation-tokens.json
154
- Prototypes: {phase_dir}/design-ref/prototypes/
151
+ MASTER.md: {scratch_dir}/design-ref/MASTER.md
152
+ Tokens: {scratch_dir}/design-ref/design-tokens.json
153
+ Animation: {scratch_dir}/design-ref/animation-tokens.json
154
+ Prototypes: {scratch_dir}/design-ref/prototypes/
155
155
 
156
156
  Next steps:
157
157
  Skill({ skill: "maestro-plan", args: "{phase}" })
@@ -63,7 +63,7 @@ Wave-based 3-layer Goal-Backward verification using `spawn_agents_on_csv`. Decom
63
63
  $maestro-verify "3"
64
64
  $maestro-verify -c 4 "3 --skip-tests"
65
65
  $maestro-verify -y "3 --skip-antipattern"
66
- $maestro-verify --continue "verify-phase3-20260318"
66
+ $maestro-verify --continue "20260318-verify-P3-auth"
67
67
  ```
68
68
 
69
69
  **Flags**:
@@ -102,7 +102,7 @@ id,title,description,layer,phase_dir,check_type,deps,context_from,wave,status,fi
102
102
  | `title` | Input | Short check title |
103
103
  | `description` | Input | Detailed verification instructions for this check |
104
104
  | `layer` | Input | Verification layer: truth/artifact/wiring/antipattern/nyquist |
105
- | `phase_dir` | Input | Target directory path (e.g., `.workflow/scratch/plan-chat-2026/`; legacy: `.workflow/phases/03-chat/`) |
105
+ | `phase_dir` | Input | Target directory path (e.g., `.workflow/scratch/plan-chat-2026/`) |
106
106
  | `check_type` | Input | Specific check type: observable_behavior/exists/substance/import_usage/pattern_scan/test_coverage |
107
107
  | `deps` | Input | Semicolon-separated dependency task IDs |
108
108
  | `context_from` | Input | Semicolon-separated task IDs whose findings this task needs |
@@ -132,7 +132,7 @@ Each wave generates `wave-{N}.csv` with extra `prev_context` column.
132
132
  ### Session Structure
133
133
 
134
134
  ```
135
- .workflow/.csv-wave/verify-{phase}-{date}/
135
+ .workflow/.csv-wave/{YYYYMMDD}-verify-P{N}-{slug}/
136
136
  +-- tasks.csv
137
137
  +-- results.csv
138
138
  +-- discoveries.ndjson
@@ -179,7 +179,7 @@ const phaseArg = $ARGUMENTS
179
179
  .trim()
180
180
 
181
181
  const dateStr = getUtc8ISOString().substring(0, 10).replace(/-/g, '')
182
- const sessionId = `verify-phase${phaseArg}-${dateStr}`
182
+ const sessionId = `${dateStr}-verify-P${phaseArg}-${phaseSlug}`
183
183
  const sessionFolder = `.workflow/.csv-wave/${sessionId}`
184
184
 
185
185
  Bash(`mkdir -p ${sessionFolder}`)
@@ -191,7 +191,7 @@ Bash(`mkdir -p ${sessionFolder}`)
191
191
 
192
192
  **Decomposition Rules**:
193
193
 
194
- 1. **Phase resolution**: Resolve `{phaseArg}` via artifact registry in `state.json` to `.workflow/scratch/{type}-{slug}-{date}/`; legacy fallback to `.workflow/phases/{NN}-{slug}/`
194
+ 1. **Phase resolution**: Resolve `{phaseArg}` via artifact registry in `state.json` to `.workflow/scratch/{YYYYMMDD}-{type}-{slug}/`
195
195
  2. **Artifact loading**: Read from phase directory:
196
196
  - `index.json` -- success_criteria (ground truth for verification)
197
197
  - `plan.json` -- original plan with task_ids
@@ -445,8 +445,8 @@ Issue Refs: {issue_ids}
445
445
  - If `verification.json` or `validation.json` exists in phase dir, move to `.history/`
446
446
 
447
447
  12. **Copy output files** to phase directory:
448
- - `verification.json` -> `{phase_dir}/verification.json`
449
- - `validation.json` -> `{phase_dir}/validation.json` (if generated)
448
+ - `verification.json` -> `{artifact_dir}/verification.json`
449
+ - `validation.json` -> `{artifact_dir}/validation.json` (if generated)
450
450
 
451
451
  13. **Update phase index.json** with verification status and timestamps.
452
452
 
@@ -475,11 +475,20 @@ Human Verification: {human_items} items
475
475
  Files:
476
476
  {session_folder}/verification.json
477
477
  {session_folder}/validation.json (if generated)
478
- {phase_dir}/verification.json
479
- {phase_dir}/validation.json (if generated)
478
+ {artifact_dir}/verification.json
479
+ {artifact_dir}/validation.json (if generated)
480
480
  ```
481
481
 
482
- 15. **Next step routing**:
482
+ 15. **Post-verify Knowledge Inquiry** (before next step routing):
483
+ - **Anti-pattern detection**: If anti-pattern scan found blockers:
484
+ → Ask: "Verification found {N} anti-patterns. Should `quality-rules.md` be updated to enforce these checks? (`/spec-add quality`)"
485
+ - **Constraint violation**: If Goal-Backward check found constraint violations or missing wiring:
486
+ → Ask: "Verification found architecture constraint violations. Should `architecture-constraints.md` be updated? (`/spec-add arch`)"
487
+ - **Test coverage gaps**: If Nyquist gaps found with recurring pattern:
488
+ → Ask: "Persistent test coverage gap detected in {module}. Should it be added to `test-conventions.md` as a required test area? (`/spec-add test`)"
489
+ - If user confirms, append `<spec-entry>` to matching category file via `spec-add` mechanism
490
+
491
+ 16. **Next step routing**:
483
492
 
484
493
  | Result | Suggestion |
485
494
  |--------|------------|
@@ -528,7 +537,7 @@ echo '{"ts":"<ISO>","worker":"{id}","type":"verification_gap","data":{"gap_id":"
528
537
 
529
538
  | Error | Resolution |
530
539
  |-------|------------|
531
- | Phase directory not found | Resolve via state.json artifact registry; legacy fallback to `.workflow/phases/`; abort if neither found |
540
+ | Phase directory not found | Resolve via state.json artifact registry; abort if not found |
532
541
  | No execution results found | Abort with error: "No completed tasks found -- run execute first" |
533
542
  | No summaries found | Warn, proceed with task file analysis only |
534
543
  | No success_criteria in index.json | Derive must-haves from phase goal (fallback) |
@@ -55,7 +55,7 @@ $ARGUMENTS -- optional flags for rebuild control.
55
55
  $manage-codebase-rebuild ""
56
56
  $manage-codebase-rebuild -y "--force"
57
57
  $manage-codebase-rebuild -c 5 "--force --skip-commit"
58
- $manage-codebase-rebuild --continue "rebuild-full-20260318"
58
+ $manage-codebase-rebuild --continue "20260318-rebuild-full"
59
59
  ```
60
60
 
61
61
  **Flags**:
@@ -145,7 +145,7 @@ Single wave generates `wave-1.csv`. No `prev_context` needed (all tasks independ
145
145
  ### Session Structure
146
146
 
147
147
  ```
148
- .workflow/.csv-wave/rebuild-{scope}-{date}/
148
+ .workflow/.csv-wave/{YYYYMMDD}-rebuild-{scope}/
149
149
  +-- tasks.csv
150
150
  +-- results.csv
151
151
  +-- discoveries.ndjson
@@ -171,7 +171,7 @@ const forceMode = $ARGUMENTS.includes('--force') || AUTO_YES
171
171
  const skipCommit = $ARGUMENTS.includes('--skip-commit')
172
172
 
173
173
  const dateStr = getUtc8ISOString().substring(0, 10).replace(/-/g, '')
174
- const sessionId = `rebuild-full-${dateStr}`
174
+ const sessionId = `${dateStr}-rebuild-full`
175
175
  const sessionFolder = `.workflow/.csv-wave/${sessionId}`
176
176
 
177
177
  Bash(`mkdir -p ${sessionFolder}`)
@@ -204,7 +204,7 @@ Bash(`mkdir -p ${sessionFolder}`)
204
204
 
205
205
  4. **Detect source directories**:
206
206
  - Check for: `src/`, `lib/`, `app/`, `packages/`
207
- - Read `project-tech.json` if available for `source_dirs`
207
+ - Read `project.md` Tech Stack section if available for context
208
208
  - If no source directories found: abort with "No source files in project"
209
209
 
210
210
  5. **Load project specs** (if available):
@@ -54,8 +54,17 @@ Follow '~/.maestro/workflows/harvest.md' Stages 1–8.
54
54
  3. **Stable fragment IDs** — `HRV-{8 hex}` from `hash(source_id + content_hash)`
55
55
  4. **Never modify source artifacts** — purely extractive
56
56
  5. **Confidence filtering** — below threshold logged but not routed
57
+ 6. **Spec format enforcement** — all spec routing must use `<spec-entry>` closed-tag format with `category`, `keywords`, `date`, `source="harvest"` attributes
57
58
 
58
- **Next steps:** `maestro wiki list --type note`, `/wiki-connect --fix`, `/manage-issue list --source harvest`
59
+ **Routing rules:**
60
+ - Universal design patterns → `coding` or `arch` category
61
+ - Component-level pitfalls → `learning` category
62
+ - Quality enforcement rules → `quality` category
63
+ - Wiki: `maestro wiki create --type <type> --slug harvest-<source_type>-<short_id>`
64
+ - Spec: `maestro wiki append spec-<file> --category <category> --body "<content>" --keywords "<kws>"` (unified write path) or `Skill({ skill: "spec-add", args: "<category> <content>" })`
65
+ - Issue: append to `issues.jsonl` matching canonical schema
66
+
67
+ **Next steps:** `/manage-wiki health`, `maestro wiki list --type note`, `/wiki-connect --fix`, `/wiki-digest`, `/manage-issue list --source harvest`
59
68
  </execution>
60
69
 
61
70
  <error_codes>
@@ -60,7 +60,7 @@ Wave-based multi-perspective issue discovery using `spawn_agents_on_csv`. In def
60
60
  $manage-issue-discover
61
61
  $manage-issue-discover -c 8 ""
62
62
  $manage-issue-discover -y "by-prompt 'error handling gaps in auth module'"
63
- $manage-issue-discover --continue "discover-multi-20260318"
63
+ $manage-issue-discover --continue "20260318-discover-multi"
64
64
  ```
65
65
 
66
66
  **Flags**:
@@ -127,7 +127,7 @@ Each wave generates `wave-{N}.csv` with extra `prev_context` column.
127
127
  ### Session Structure
128
128
 
129
129
  ```
130
- .workflow/.csv-wave/discover-{mode}-{date}/
130
+ .workflow/.csv-wave/{YYYYMMDD}-discover-{mode}/
131
131
  +-- tasks.csv
132
132
  +-- results.csv
133
133
  +-- discoveries.ndjson
@@ -185,7 +185,7 @@ const mode = isByPrompt ? 'by-prompt' : 'multi'
185
185
  const dateStr = getUtc8ISOString().substring(0, 10).replace(/-/g, '')
186
186
  const timeStr = getUtc8ISOString().substring(11, 19).replace(/:/g, '')
187
187
  const sessionId = `DBP-${dateStr}-${timeStr}`
188
- const csvSessionId = `discover-${mode}-${dateStr}`
188
+ const csvSessionId = `${dateStr}-discover-${mode}`
189
189
  const sessionFolder = `.workflow/.csv-wave/${csvSessionId}`
190
190
  const discoveryDir = `.workflow/issues/discoveries/${sessionId}`
191
191
 
@@ -98,7 +98,7 @@ Verify `.workflow/` exists (E001 if not).
98
98
  | gotcha, surprising, unexpected, watch out | gotcha |
99
99
  | technique, approach, method, pattern for | technique |
100
100
 
101
- 2. **Auto-link phase**: Read `.workflow/state.json` for `current_phase`. Resolve matching directory slug via artifact registry in `state.json` to `.workflow/scratch/{type}-{slug}-{date}/`; legacy fallback to `.workflow/phases/`. `--phase 0` forces null.
101
+ 2. **Auto-link phase**: Read `.workflow/state.json` for current phase (derived from artifact registry). Resolve matching directory slug via artifact registry in `state.json` to `.workflow/scratch/{YYYYMMDD}-{type}-{slug}/`. `--phase 0` forces null.
102
102
 
103
103
  3. **Generate stable INS-id**: `INS-{8 lowercase hex}` from `hash(insightText + timestamp)`.
104
104
 
@@ -164,6 +164,7 @@ Confidence: medium
164
164
  Tags: manual, zod, typescript
165
165
 
166
166
  Next: $manage-learn "list" or $manage-learn "search zod"
167
+ Wiki: maestro wiki list --type lesson (lessons auto-indexed in wiki graph)
167
168
  ```
168
169
  </execution>
169
170
 
@@ -174,7 +175,7 @@ Next: $manage-learn "list" or $manage-learn "search zod"
174
175
  | E002 | error | Unknown `--category` value | parse_input |
175
176
  | E003 | error | `show` mode requires INS-id argument | show |
176
177
  | E004 | error | INS-id not found in lessons.jsonl | show |
177
- | W001 | warning | Auto-phase detection: current_phase found but no matching directory; phase set to null | capture |
178
+ | W001 | warning | Auto-phase detection: no matching artifact directory found; phase set to null | capture |
178
179
  | W002 | warning | `learning-index.json` row count differs from `lessons.jsonl`; offer to rebuild index | list/search |
179
180
  </error_codes>
180
181
 
@@ -37,7 +37,7 @@ $manage-memory "prune --before 2026-01-01 --type tip --dry-run"
37
37
 
38
38
  ### Step 1: Resolve Store Paths
39
39
 
40
- - **Workflow store**: `.workflow/memory/` (entries: `MEM-*.md`, `TIP-*.md`, index: `memory-index.json`)
40
+ - **Workflow store**: `.workflow/memory/` (entries: `MEM-*.md`, `TIP-*.md`, indexed in unified `.workflow/wiki-index.json`)
41
41
  - **System store**: `~/.claude/projects/{project}/memory/` (files: `MEMORY.md` + topic `.md` files)
42
42
 
43
43
  Derive system path from project root (replace path separators with `--`, prefix drive letter).
@@ -49,7 +49,7 @@ Default to `list` if no arguments. Parse first token as subcommand.
49
49
  ### Step 3: Execute Subcommand
50
50
 
51
51
  **list**: Show entries from both stores (or filtered by `--store`, `--tag`, `--type`).
52
- - Workflow: read `memory-index.json`, display ID, type, date, tags, title
52
+ - Workflow: use `maestro wiki list --type memory --json` or read `.workflow/wiki-index.json`, display ID, type, date, tags, title
53
53
  - System: list `.md` files in system memory directory
54
54
 
55
55
  **search `<query>`**: Full-text grep across both stores. Rank by match count.
@@ -58,7 +58,7 @@ Default to `list` if no arguments. Parse first token as subcommand.
58
58
 
59
59
  **edit `<file>`**: Edit a system memory file. Read current content, apply changes. Warn if MEMORY.md exceeds 200 lines (W003).
60
60
 
61
- **delete `<id|file>`**: Require confirmation (or `--confirm` flag). MEMORY.md cannot be deleted (E004). Remove entry file and update `memory-index.json`.
61
+ **delete `<id|file>`**: Require confirmation (or `--confirm` flag). MEMORY.md cannot be deleted (E004). Remove entry file (WikiIndexer auto-updates `.workflow/wiki-index.json` on next access).
62
62
 
63
63
  **prune**: Requires at least one filter (`--tag`, `--type`, `--before`, `--after`). Workflow store only. `--dry-run` previews without deleting.
64
64
 
@@ -54,20 +54,14 @@ If absent or ambiguous, ask user via AskUserQuestion.
54
54
  2. Generate entry ID: `TIP-{YYYYMMDD}-{NNN}`
55
55
  3. Write `.workflow/memory/TIP-{id}.md` with: content, tags, timestamp, context
56
56
 
57
- ### Step 4: Update Index
58
-
59
- Read or create `.workflow/memory/memory-index.json`.
60
- Append new entry metadata:
61
-
62
- ```json
63
- {
64
- "id": "{entry_id}",
65
- "type": "compact|tip",
66
- "date": "{ISO}",
67
- "title": "{short title}",
68
- "tags": ["tag1", "tag2"],
69
- "file": "{filename}"
70
- }
57
+ ### Step 4: Wiki Index Invalidation
58
+
59
+ Memory files are automatically indexed by WikiIndexer. No manual index update needed — the persistent `wiki-index.json` at `.workflow/` root is regenerated on next `maestro wiki` access.
60
+
61
+ For immediate visibility, use:
62
+ ```bash
63
+ maestro wiki get memory-{slug} # verify entry exists in wiki
64
+ maestro wiki list --type memory # list all memory entries
71
65
  ```
72
66
 
73
67
  ### Step 5: Confirm
@@ -19,8 +19,9 @@ $manage-status
19
19
  Reads from:
20
20
  - `.workflow/state.json` — project-level state machine
21
21
  - `.workflow/roadmap.md` — milestone and phase structure
22
- - `.workflow/scratch/*/index.json` — per-phase metadata and progress (resolved via state.json artifact registry; legacy fallback: `.workflow/phases/*/index.json`)
23
- - `.workflow/scratch/*/.task/TASK-*.json` — individual task statuses (legacy fallback: `.workflow/phases/*/.task/TASK-*.json`)
22
+ - `.workflow/scratch/*/index.json` — per-phase metadata and progress (resolved via state.json artifact registry)
23
+ - `.workflow/scratch/*/.task/TASK-*.json` — individual task statuses (resolved via state.json artifact registry)
24
+ - `.workflow/wiki-index.json` — unified wiki graph index (entry counts, health)
24
25
  </context>
25
26
 
26
27
  <execution>
@@ -38,8 +39,8 @@ test -f .workflow/state.json || exit 1 # E002: state missing
38
39
  Read all state sources:
39
40
  - `.workflow/state.json` -- project-level state machine
40
41
  - `.workflow/roadmap.md` -- milestone and phase structure
41
- - `.workflow/scratch/*/index.json` -- per-phase metadata and progress (resolved via state.json artifact registry; legacy fallback: `.workflow/phases/*/index.json`)
42
- - `.workflow/scratch/*/.task/TASK-*.json` -- individual task statuses (legacy fallback: `.workflow/phases/*/.task/TASK-*.json`)
42
+ - `.workflow/scratch/*/index.json` -- per-phase metadata and progress (resolved via state.json artifact registry)
43
+ - `.workflow/scratch/*/.task/TASK-*.json` -- individual task statuses (resolved via state.json artifact registry)
43
44
 
44
45
  ### Step 3: Calculate Progress
45
46
 
@@ -67,6 +68,10 @@ Phase {N}: {title}
67
68
  In-progress: {list}
68
69
  Blocked: {list}
69
70
 
71
+ --- Knowledge Graph ---
72
+ Wiki entries: {total} (spec: {N}, memory: {N}, note: {N}, lesson: {N}, issue: {N})
73
+ Health: {score}/100 | Orphans: {N}
74
+
70
75
  --- Next Steps ---
71
76
  Based on current state: {suggestion with Skill() reference}
72
77
  ```
@@ -0,0 +1,55 @@
1
+ ---
2
+ name: manage-wiki
3
+ description: Wiki knowledge graph management — health dashboard, orphan cleanup, entry search, and graph statistics
4
+ argument-hint: "[health|search|cleanup|stats] [options]"
5
+ allowed-tools: Read, Write, Edit, Bash, Glob, Grep, AskUserQuestion
6
+ ---
7
+
8
+ <purpose>
9
+ Unified wiki graph management. Health monitoring, interactive search, orphan cleanup, and graph statistics. Day-to-day operations to keep the knowledge graph healthy.
10
+
11
+ Complements `wiki-connect` (link discovery) and `wiki-digest` (synthesis) with operational tooling.
12
+ </purpose>
13
+
14
+ <required_reading>
15
+ @~/.maestro/workflows/wiki-manage.md
16
+ </required_reading>
17
+
18
+ <context>
19
+ $ARGUMENTS — subcommand and optional flags.
20
+
21
+ **Subcommands:**
22
+ | Subcommand | Description |
23
+ |-----------|-------------|
24
+ | `health` | Health dashboard — score, broken links, orphans, hubs (default) |
25
+ | `search <query>` | Interactive BM25 search with follow-up actions |
26
+ | `cleanup` | Find and resolve orphans, broken links, stale entries |
27
+ | `stats` | Graph statistics — type distribution, tag frequency, growth |
28
+
29
+ **Flags:**
30
+ - `--type <type>` — Filter: spec, memory, note, lesson, issue
31
+ - `--fix` — Auto-fix issues during cleanup
32
+ - `--json` — JSON output
33
+ </context>
34
+
35
+ <execution>
36
+ Follow '~/.maestro/workflows/wiki-manage.md' completely.
37
+ </execution>
38
+
39
+ <error_codes>
40
+ | Code | Severity | Description |
41
+ |------|----------|-------------|
42
+ | E001 | fatal | `.workflow/` not initialized |
43
+ | E002 | fatal | No wiki entries found |
44
+ | E003 | error | Invalid subcommand |
45
+ | W001 | warning | Health score below 50 |
46
+ | W002 | warning | Cleanup had partial failures |
47
+ </error_codes>
48
+
49
+ <success_criteria>
50
+ - [ ] Subcommand parsed (health/search/cleanup/stats)
51
+ - [ ] Wiki data loaded via `maestro wiki` CLI
52
+ - [ ] Results displayed in formatted output
53
+ - [ ] If cleanup --fix: issues resolved and delta reported
54
+ - [ ] Next-step suggestions provided
55
+ </success_criteria>