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
@@ -49,7 +49,7 @@ Arguments: $ARGUMENTS
49
49
 
50
50
  **Storage:**
51
51
  - `.workflow/learning/lessons.jsonl` — append-only JSONL row per insight (shared with `quality-retrospective` output)
52
- - `.workflow/learning/learning-index.json` — searchable index (mirrors `memory-index.json` schema)
52
+ - `.workflow/learning/learning-index.json` — searchable index
53
53
 
54
54
  **Shared store rationale:** Manual captures (`source: "manual"`), tips (`source: "tip"`), retrospective-distilled insights (`source: "retrospective"`, `lens: <name>` from `quality-retrospective`), and learn-retro insights (`source: "retro-git"` or `source: "retro-decision"` from `learn-retro`) all live in the same store so search and list see the entire knowledge corpus. The `source` field disambiguates origin.
55
55
  </context>
@@ -58,8 +58,8 @@ Arguments: $ARGUMENTS
58
58
  Follow `~/.maestro/workflows/learn.md` Stages 1–5 in order. Key invariants:
59
59
 
60
60
  1. **No agent or CLI calls** — this is a pure file operation: parse → infer → append → confirm. Category inference is keyword-based, not LLM-based.
61
- 2. **Auto-link phase** — read `.workflow/state.json` for `current_phase` and resolve the matching directory slug. `--phase 0` forces no link.
62
- 3. **Match memory-index pattern** — `learning-index.json` schema mirrors `memory-index.json` from `workflows/memory.md` (entries[] with id, type, timestamp, file, summary, tags, plus learn-specific fields: lens, category, phase, phase_slug, confidence, routed_to, routed_id).
61
+ 2. **Auto-link phase** — read `.workflow/state.json` for `current_phase` and derive phase context from artifact registry (`state.json.artifacts[]`). `--phase 0` forces no link.
62
+ 3. **Index schema** — `learning-index.json` entries[] with id, type, timestamp, file, summary, tags, plus learn-specific fields: lens, category, confidence, routed_to, routed_id.
63
63
  4. **Stable INS ids** — `INS-{8 lowercase hex}` from `hash(insight_text + category + phase)`. Deterministic: same content in same context always produces the same ID.
64
64
  5. **Append-only lessons.jsonl** — never rewrite existing rows; duplicate detection is the user's job at search time.
65
65
  6. **Bootstrap on demand** — create `.workflow/learning/`, `lessons.jsonl`, `learning-index.json` on first use; do not require them to exist upfront.
@@ -73,7 +73,7 @@ Follow `~/.maestro/workflows/learn.md` Stages 1–5 in order. Key invariants:
73
73
  | E002 | error | Unknown `--category` value (allowed: pattern, antipattern, decision, tool, gotcha, technique, tip) | parse_input |
74
74
  | E003 | error | `show` mode requires an INS-id argument | show |
75
75
  | E004 | error | Insight id not found in lessons.jsonl | show |
76
- | W001 | warning | Auto-phase detection found a current_phase but no matching directory; phase set to null | capture |
76
+ | W001 | warning | Auto-phase detection found a current_phase but no matching artifact in registry; phase set to null | capture |
77
77
  | W002 | warning | learning-index.json out of sync with lessons.jsonl (different row count); offer to rebuild | list/search |
78
78
  </error_codes>
79
79
 
@@ -81,7 +81,7 @@ Follow `~/.maestro/workflows/learn.md` Stages 1–5 in order. Key invariants:
81
81
  - [ ] Mode correctly routed (capture / list / search / show)
82
82
  - [ ] Capture: `lessons.jsonl` row appended with valid JSON and all required fields
83
83
  - [ ] Capture: `learning-index.json` updated with matching entry
84
- - [ ] Capture: phase auto-link resolves correctly when `state.json` has `current_phase`
84
+ - [ ] Capture: phase auto-link resolves correctly via artifact registry when `state.json` has `current_phase`
85
85
  - [ ] Capture: category inference produces a sensible default when `--category` absent
86
86
  - [ ] List: filters apply, output sorted newest-first, default limit 20
87
87
  - [ ] Search: results ranked by title (3) > tags (2) > summary (1) match
@@ -12,7 +12,7 @@ allowed-tools:
12
12
  - AskUserQuestion
13
13
  ---
14
14
  <purpose>
15
- Capture session working memory into `.workflow/memory/` for cross-session recovery. Compact mode only: full session compression for recovery. Maintains a `memory-index.json` for search and retrieval. Invoked when saving session state before context loss.
15
+ Capture session working memory into `.workflow/memory/` for cross-session recovery. Compact mode only: full session compression for recovery. Entries are created via `maestro wiki create --type memory` and automatically indexed in `.workflow/wiki-index.json`. Invoked when saving session state before context loss.
16
16
 
17
17
  **Note:** Quick tips/notes have been moved to `manage-learn tip <text>`. Use that command for atomic knowledge capture.
18
18
  </purpose>
@@ -29,8 +29,8 @@ Arguments: $ARGUMENTS
29
29
  - No arguments — Defaults to compact mode
30
30
 
31
31
  **Storage:**
32
- - `.workflow/memory/` — Memory entries directory
33
- - `.workflow/memory/memory-index.json` — Searchable index of all entries
32
+ - `.workflow/memory/` — Memory entries directory (via `maestro wiki create --type memory`)
33
+ - `.workflow/wiki-index.json` — Unified wiki index (auto-updated on create)
34
34
  </context>
35
35
 
36
36
  <execution>
@@ -49,7 +49,7 @@ Follow '~/.maestro/workflows/memory.md' Part B (Memory Capture) completely.
49
49
  <success_criteria>
50
50
  - [ ] Compact mode executed
51
51
  - [ ] Entry markdown file written to `.workflow/memory/`
52
- - [ ] `memory-index.json` updated with new entry metadata
52
+ - [ ] `wiki-index.json` auto-updated via wiki create
53
53
  - [ ] All session fields populated (objective, files, decisions, plan)
54
54
  - [ ] Execution plan preserved VERBATIM (not summarized)
55
55
  - [ ] All file paths are ABSOLUTE
@@ -30,7 +30,7 @@ Arguments: $ARGUMENTS
30
30
 
31
31
  | Store | Path | Format | Index |
32
32
  |-------|------|--------|-------|
33
- | `workflow` | `.workflow/memory/` | `MEM-*.md`, `TIP-*.md` (legacy only — new tips go to `manage-learn tip`) | `memory-index.json` |
33
+ | `workflow` | `.workflow/memory/` | `MEM-*.md`, `TIP-*.md` (legacy only — new tips go to `manage-learn tip`) | `.workflow/wiki-index.json` (unified) |
34
34
  | `system` | `~/.claude/projects/{project}/memory/` | `MEMORY.md` + topic `.md` files | None (flat files) |
35
35
 
36
36
  **System memory path detection:**
@@ -0,0 +1,62 @@
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:
6
+ - Read
7
+ - Write
8
+ - Edit
9
+ - Bash
10
+ - Glob
11
+ - Grep
12
+ - AskUserQuestion
13
+ ---
14
+ <purpose>
15
+ Unified wiki graph management command. Provides interactive access to wiki health monitoring, entry search, orphan cleanup, and graph statistics — the day-to-day operations that keep the knowledge graph healthy.
16
+
17
+ Complements `/wiki-connect` (link discovery) and `/wiki-digest` (synthesis) with operational tooling.
18
+ </purpose>
19
+
20
+ <required_reading>
21
+ @~/.maestro/workflows/wiki-manage.md
22
+ </required_reading>
23
+
24
+ <context>
25
+ $ARGUMENTS — subcommand and optional flags.
26
+
27
+ **Subcommands:**
28
+ | Subcommand | Description |
29
+ |-----------|-------------|
30
+ | `health` | Health dashboard — score, broken links, orphans, hubs (default) |
31
+ | `search <query>` | Interactive BM25 search with follow-up actions |
32
+ | `cleanup` | Find and resolve orphans, broken links, stale entries |
33
+ | `stats` | Graph statistics — type distribution, tag frequency, growth trends |
34
+ | No args | Same as `health` |
35
+
36
+ **Flags:**
37
+ - `--type <type>` — Filter by wiki type: spec, memory, note, lesson, issue
38
+ - `--fix` — Auto-fix issues found during cleanup (remove broken links, suggest connections)
39
+ - `--json` — Output in JSON format
40
+ </context>
41
+
42
+ <execution>
43
+ Follow '~/.maestro/workflows/wiki-manage.md' completely.
44
+ </execution>
45
+
46
+ <error_codes>
47
+ | Code | Severity | Description | Stage |
48
+ |------|----------|-------------|-------|
49
+ | E001 | fatal | `.workflow/` not initialized — run `/maestro-init` first | validate |
50
+ | E002 | fatal | No wiki entries found — create content first | load |
51
+ | E003 | error | Invalid subcommand | parse_input |
52
+ | W001 | warning | Health score below 50 — graph needs attention | health |
53
+ | W002 | warning | Orphan cleanup had partial failures | cleanup |
54
+ </error_codes>
55
+
56
+ <success_criteria>
57
+ - [ ] Subcommand parsed (health/search/cleanup/stats)
58
+ - [ ] Wiki data loaded via `maestro wiki` CLI
59
+ - [ ] Results displayed in formatted output
60
+ - [ ] If cleanup --fix: issues resolved and delta reported
61
+ - [ ] Next-step suggestions provided
62
+ </success_criteria>
@@ -60,7 +60,7 @@ Context files:
60
60
  - `.workflow/.spec/SPEC-xxx/requirements/NFR-*.md` -- Non-functional requirements
61
61
  - `.workflow/.spec/SPEC-xxx/architecture/_index.md` -- API endpoints, data model, state machines
62
62
  - `.workflow/.spec/SPEC-xxx/epics/EPIC-*.md` -- User stories for E2E scenarios
63
- - Phase artifacts (resolve via `state.json.artifacts[]` → `.workflow/scratch/` paths; fallback to `.workflow/phases/{NN}-{slug}/`):
63
+ - Phase artifacts (resolve via `state.json.artifacts[]` → `.workflow/scratch/` paths):
64
64
  - plan.json -- Task overview (degraded mode)
65
65
  - verification.json -- Cross-reference for must_haves
66
66
  - .tests/business/ -- Previous business test artifacts
@@ -81,7 +81,7 @@ Follow '~/.maestro/workflows/business-test.md' completely.
81
81
  | Code | Severity | Condition | Recovery |
82
82
  |------|----------|-----------|----------|
83
83
  | E001 | error | Phase number required | Prompt user for phase number |
84
- | E002 | error | Phase artifacts not found | Verify phase has artifacts in state.json or .workflow/phases/ |
84
+ | E002 | error | Phase artifacts not found | Verify phase has artifacts in state.json |
85
85
  | E003 | error | No spec package AND no success_criteria (can't extract scenarios) | Run maestro-spec-generate or maestro-plan first |
86
86
  | E004 | error | L1 critical failures block L2/L3 progression | Fix blockers first via quality-debug |
87
87
  | W001 | warning | Degraded mode (no spec package, using success_criteria) | Consider running maestro-spec-generate for full coverage |
@@ -39,23 +39,69 @@ User's issue: $ARGUMENTS
39
39
  - `--from-uat <phase>` -- Read gaps from phase's uat.md as pre-filled symptoms
40
40
  - `--parallel` -- Spawn parallel debug agents (one per gap cluster)
41
41
 
42
- **State files:**
43
- - Phase UAT/debug artifacts (resolve via `state.json.artifacts[]` → scratch paths; fallback to `.workflow/phases/{NN}-{slug}/`):
44
- - uat.md -- UAT gaps (if --from-uat)
45
- - .debug/ -- Phase-scoped debug sessions
46
- - `.workflow/scratch/debug-*/` -- Standalone debug sessions
42
+ **All context via state.json.artifacts[]:**
43
+
44
+ ```
45
+ related = artifacts.filter(a =>
46
+ a.phase === target_phase && a.milestone === current_milestone
47
+ ).sort_by(completed_at asc)
48
+ ```
49
+
50
+ Each artifact's type determines its outputs at `.workflow/{a.path}/`:
51
+ - **execute** → .summaries/, .task/ (source of code changes)
52
+ - **review** → review.json (findings guide hypothesis formation)
53
+ - **debug** → understanding.md, evidence.ndjson (prior investigations, avoid re-investigation)
54
+ - **test** → uat.md (--from-uat gap source), .tests/
55
+
56
+ Extract conclusions from related artifacts that may affect this debug session — review findings guide investigation direction, prior debug avoids redundant work.
57
+
58
+ **Output**: `DEBUG_DIR = .workflow/scratch/{YYYYMMDD}-debug-P{N}-{slug}/` (P{N} = phase number when phase-scoped; omit for standalone)
47
59
  </context>
48
60
 
49
61
  <execution>
50
62
  Follow '~/.maestro/workflows/debug.md' completely.
51
63
 
64
+ **Output writes to DEBUG_DIR** (`scratch/{YYYYMMDD}-debug-P{N}-{slug}/`):
65
+ - understanding.md, evidence.ndjson, diagnosis-summary.json
66
+
67
+ **Register artifact on completion (phase-scoped only):**
68
+ ```
69
+ Append to state.json.artifacts[]:
70
+ {
71
+ id: nextArtifactId(artifacts, "debug"), // DBG-001
72
+ type: "debug",
73
+ milestone: current_milestone,
74
+ phase: target_phase,
75
+ scope: "phase",
76
+ path: "scratch/{YYYYMMDD}-debug-P{N}-{slug}", // or {YYYYMMDD}-debug-{slug} for standalone
77
+ status: all_diagnosed ? "completed" : "failed",
78
+ depends_on: triggering_review_id || exec_art.id,
79
+ harvested: false,
80
+ created_at: start_time,
81
+ completed_at: now()
82
+ }
83
+ ```
84
+
85
+ ### Post-debug Knowledge Inquiry
86
+
87
+ After root cause is confirmed, evaluate inquiry triggers:
88
+
89
+ 1. **Recurring pattern**: If root cause matches a recurring pattern (similar to prior debug sessions):
90
+ → Ask: "This root cause pattern has appeared before. Should it be documented in `debug-notes.md` to prevent recurrence? (`/spec-add debug`)"
91
+
92
+ 2. **Non-obvious fix**: If fix involved a non-obvious approach or workaround:
93
+ → Ask: "This fix used a non-obvious strategy. Should it be recorded as a learning? (`/spec-add learning`)"
94
+
95
+ 3. **Architectural gap**: If root cause traces to architectural boundary violation or missing constraint:
96
+ → Ask: "Root cause points to an architectural gap. Should `architecture-constraints.md` be updated? (`/spec-add arch`)"
97
+
98
+ If user confirms, invoke `Skill({ skill: "spec-add", args: "<category> <content>" })`.
99
+
52
100
  **Next-step routing on completion:**
53
101
  - Root cause found, fix needed → `/maestro-plan {phase} --gaps`
54
102
  - Root cause found (from UAT), auto-fix → `/quality-test {phase} --auto-fix`
55
103
  - Inconclusive, need more info → `/quality-debug {issue} -c` (resume session)
56
104
  - Standalone fix already applied → `/maestro-verify {phase}`
57
-
58
- Note: Debug output (.debug/) is auto-loaded by maestro-plan --gaps.
59
105
  </execution>
60
106
 
61
107
  <error_codes>
@@ -43,17 +43,17 @@ Arguments: $ARGUMENTS
43
43
  - `--auto-yes` — accept all routing recommendations without prompting
44
44
 
45
45
  **Storage written:**
46
- - Retrospective output (resolve via `state.json.artifacts[]` → `.workflow/scratch/` path; fallback to `.workflow/phases/{NN}-{slug}/`):
46
+ - Retrospective output (resolve via `state.json.artifacts[]` → `.workflow/scratch/` path):
47
47
  - retrospective.md — human-readable record
48
48
  - retrospective.json — structured record
49
- - `.workflow/specs/SPEC-retro-*.md` — spec stubs (one per spec-routed insight)
49
+ - `.workflow/specs/{category-file}.md` — `<spec-entry>` entries appended to matching category files (one per spec-routed insight)
50
50
  - `.workflow/issues/issues.jsonl` — appended issue rows (`source: "retrospective"`)
51
51
  - `.workflow/learning/lessons.jsonl` — tips routed via `manage-learn tip` (formerly manage-memory-capture)
52
52
  - `.workflow/learning/lessons.jsonl` — append-only insight log
53
53
  - `.workflow/learning/learning-index.json` — searchable index
54
54
 
55
55
  **Storage read (never modified):**
56
- - Phase artifacts (resolve via `state.json.artifacts[]` → scratch paths; fallback to `.workflow/phases/{NN}-{slug}/`):
56
+ - Phase artifacts (resolve via `state.json.artifacts[]` → scratch paths):
57
57
  - index.json, plan.json, verification.json, review.json, uat.md
58
58
  - .task/TASK-*.json, .summaries/TASK-*-summary.md
59
59
  - `.workflow/issues/issues.jsonl`, `.workflow/issues/issue-history.jsonl`
@@ -69,7 +69,7 @@ Follow `~/.maestro/workflows/retrospective.md` Stages 1–8 in order. Key invari
69
69
  4. **Reuse `manage-learn tip` for note routing** — do not duplicate the learning pipeline; invoke via `Skill({ skill: "manage-learn", args: "tip ..." })`.
70
70
  5. **Backward-compat with phase-transition** — append a one-line summary per insight to `.workflow/specs/learnings.md` if and only if that file already exists. Never create it.
71
71
  6. **Stable insight IDs** — `INS-{8 hex}` from `hash(phase_num + lens + title)` so re-runs do not duplicate.
72
- 7. **Archive before overwrite** — if existing `retrospective.{md,json}` are being replaced, move them to `{phase_dir}/.history/` with a timestamp suffix first.
72
+ 7. **Archive before overwrite** — if existing `retrospective.{md,json}` are being replaced, move them to `{artifact_dir}/.history/` with a timestamp suffix first.
73
73
  </execution>
74
74
 
75
75
  <error_codes>
@@ -94,7 +94,7 @@ Follow `~/.maestro/workflows/retrospective.md` Stages 1–8 in order. Key invari
94
94
  - [ ] `retrospective.md` written and human-readable (tweetable, metrics table, per-lens findings, insights, routing table)
95
95
  - [ ] Each insight has a stable `INS-{8hex}` id
96
96
  - [ ] If routing enabled (default): every recommendation either created an artifact or was explicitly skipped by user
97
- - [ ] Spec stubs (if any) written to `.workflow/specs/SPEC-retro-*.md` with proper frontmatter
97
+ - [ ] Spec entries (if any) appended as `<spec-entry>` to matching `.workflow/specs/{category-file}.md`
98
98
  - [ ] Issue rows (if any) match canonical issues.jsonl schema (status "open", full issue_history, all required fields)
99
99
  - [ ] Note tips (if any) created via `Skill({ skill: "manage-learn", args: "tip ..." })`
100
100
  - [ ] `lessons.jsonl` appended with one row per insight regardless of routing target
@@ -53,17 +53,49 @@ Phase: $ARGUMENTS (required — phase number or slug)
53
53
  - `--dimensions <list>` — Comma-separated subset of dimensions to review (overrides level defaults)
54
54
  - `--skip-specs` — Skip loading project specs as review context
55
55
 
56
- Context files resolved via `state.json.artifacts[]` → scratch path (fallback: `.workflow/phases/{NN}-{slug}/`):
57
- - index.json (phase metadata, execution results)
58
- - plan.json (task overview)
59
- - .task/TASK-{NNN}.json (task definitions with file lists)
60
- - .summaries/TASK-{NNN}-summary.md (execution results)
61
- - verification.json (if exists — incorporate verification gaps as review context)
56
+ **All context via state.json.artifacts[]:**
57
+
58
+ ```
59
+ related = artifacts.filter(a =>
60
+ a.phase === target_phase && a.milestone === current_milestone
61
+ ).sort_by(completed_at asc)
62
+ ```
63
+
64
+ Each artifact's type determines its outputs at `.workflow/{a.path}/`:
65
+ - **execute** → .summaries/, .task/, verification.json, plan.json (source of files to review)
66
+ - **review** → review.json (prior verdict, findings — for delta comparison)
67
+ - **debug** → understanding.md, evidence.ndjson (confirmed root causes)
68
+ - **test** → uat.md, .tests/ (user-observable gaps)
69
+
70
+ Extract conclusions from related artifacts that may affect this review. Pass as prior quality context to reviewer agents — avoid redundant work, focus on gaps and regressions.
71
+
72
+ **Output**: `REVIEW_DIR = .workflow/scratch/{YYYYMMDD}-review-P{N}-{slug}/` (P{N} = phase number, enables directory-level identification as state.json fallback)
62
73
  </context>
63
74
 
64
75
  <execution>
65
76
  Follow '~/.maestro/workflows/review.md' completely.
66
77
 
78
+ **Output writes to REVIEW_DIR** (not EXEC_DIR):
79
+ - `REVIEW_DIR/review.json` — findings, severity distribution, verdict
80
+
81
+ **Register artifact on completion:**
82
+ ```
83
+ Append to state.json.artifacts[]:
84
+ {
85
+ id: nextArtifactId(artifacts, "review"), // REV-001
86
+ type: "review",
87
+ milestone: current_milestone,
88
+ phase: target_phase,
89
+ scope: "phase",
90
+ path: "scratch/{YYYYMMDD}-review-P{N}-{slug}", // relative to .workflow/
91
+ status: "completed",
92
+ depends_on: exec_art.id, // or prior debug/review if re-review
93
+ harvested: false,
94
+ created_at: start_time,
95
+ completed_at: now()
96
+ }
97
+ ```
98
+
67
99
  **Report format on completion:**
68
100
 
69
101
  ```
@@ -87,7 +119,7 @@ Verdict: {PASS | WARN | BLOCK}
87
119
  Issues Created: {issue_count}
88
120
 
89
121
  Files:
90
- {phase_dir}/review.json
122
+ {REVIEW_DIR}/review.json
91
123
 
92
124
  Next steps:
93
125
  {verdict_based_routing}
@@ -47,5 +47,5 @@ Follow '~/.maestro/workflows/sync.md' completely.
47
47
  - [ ] Codebase docs refreshed for all affected components
48
48
  - [ ] doc-index.json reflects current file state
49
49
  - [ ] Changes tracked and logged
50
- - [ ] project-tech.json refreshed if dependency manifests changed
50
+ - [ ] project.md Tech Stack section refreshed if dependency manifests changed
51
51
  </success_criteria>
@@ -36,7 +36,7 @@ Phase: $ARGUMENTS (required -- phase number)
36
36
  - `--layer <unit|e2e|all>` -- Generate only specific test layer (default: all)
37
37
 
38
38
  Context files:
39
- - Phase artifacts (resolve via `state.json.artifacts[]` → scratch paths; fallback to `.workflow/phases/{NN}-{slug}/`):
39
+ - Phase artifacts (resolve via `state.json.artifacts[]` → scratch paths):
40
40
  - verification.json -- Nyquist gaps (MISSING/PARTIAL)
41
41
  - validation.json -- requirement-to-test mapping
42
42
  - .tests/coverage-report.json -- UAT coverage gaps
@@ -36,23 +36,56 @@ Phase or task: $ARGUMENTS (optional)
36
36
  - `--smoke` -- Run cold-start smoke tests before UAT (basic sanity: app starts, routes respond, no crash)
37
37
  - `--auto-fix` -- After diagnosis, auto-trigger gap-fix loop instead of asking user
38
38
 
39
- Context files resolved from target directory:
40
- - verification.json (must_haves, gaps from maestro-verify)
41
- - validation.json (coverage, requirement mapping)
42
- - review.json (findings from quality-review, if exists)
43
- - index.json (success_criteria, execution results)
44
- - plan.json (task overview)
45
- - .summaries/TASK-*.md (execution summaries)
46
- - uat.md (existing session, if resuming)
39
+ **All context via state.json.artifacts[]:**
40
+
41
+ ```
42
+ related = artifacts.filter(a =>
43
+ a.phase === target_phase && a.milestone === current_milestone
44
+ ).sort_by(completed_at asc)
45
+ ```
46
+
47
+ Each artifact's type determines its outputs at `.workflow/{a.path}/`:
48
+ - **execute** → .summaries/, .task/, verification.json, plan.json (test target source)
49
+ - **verify** → verification.json (must_haves, gaps)
50
+ - **review** → review.json (findings become additional test scenarios)
51
+ - **debug** → understanding.md (confirmed root causes become regression tests)
52
+ - **test** → uat.md (existing session, resumable)
53
+
54
+ Extract conclusions from related artifacts that may affect this test session — review findings generate additional scenarios, debug root causes generate regression tests.
55
+
56
+ **Output**: `TEST_DIR = .workflow/scratch/{YYYYMMDD}-test-P{N}-{slug}/` (P{N} = phase number, enables directory-level identification as state.json fallback)
47
57
  </context>
48
58
 
49
59
  <execution>
50
60
  Follow '~/.maestro/workflows/test.md' completely.
51
61
 
52
- **Review findings integration (when review.json exists):**
53
- - Extract critical/high findings from review.json.findings_by_dimension as additional test scenarios
54
- - These review-derived scenarios are prioritized and marked `source: "review_finding"`
55
- - When review.json verdict is "BLOCK" and review-finding tests fail, auto-enter gap-fix loop without user confirmation (Step 12 auto-fix condition)
62
+ **Output writes to TEST_DIR** (`scratch/{YYYYMMDD}-test-P{N}-{slug}/`):
63
+ - uat.md, test-plan.json, .tests/test-results.json, .tests/coverage-report.json
64
+
65
+ **Review findings integration** (from related review artifacts):
66
+ - Extract critical/high findings as additional test scenarios, marked `source: "review_finding"`
67
+ - When review verdict is "BLOCK" and review-finding tests fail, auto-enter gap-fix loop
68
+
69
+ **Debug root cause integration** (from related debug artifacts):
70
+ - Generate regression test scenarios from confirmed root causes, marked `source: "debug_root_cause"`
71
+
72
+ **Register artifact on completion:**
73
+ ```
74
+ Append to state.json.artifacts[]:
75
+ {
76
+ id: nextArtifactId(artifacts, "test"), // TST-001
77
+ type: "test",
78
+ milestone: current_milestone,
79
+ phase: target_phase,
80
+ scope: "phase",
81
+ path: "scratch/{YYYYMMDD}-test-P{N}-{slug}",
82
+ status: issues == 0 ? "completed" : "failed",
83
+ depends_on: exec_art.id,
84
+ harvested: false,
85
+ created_at: start_time,
86
+ completed_at: now()
87
+ }
88
+ ```
56
89
 
57
90
  **Next-step routing on completion:**
58
91
  - All tests pass → `/maestro-phase-transition {phase}`
@@ -0,0 +1,51 @@
1
+ ---
2
+ name: spec-remove
3
+ description: Remove a spec entry from a specs file by entry ID
4
+ argument-hint: "<entry-id>"
5
+ allowed-tools:
6
+ - Read
7
+ - Write
8
+ - Edit
9
+ - Bash
10
+ - Glob
11
+ - Grep
12
+ - AskUserQuestion
13
+ ---
14
+ <purpose>
15
+ Remove a `<spec-entry>` from a specs file. Symmetric with `/spec-add`.
16
+ Uses `maestro wiki remove-entry` for atomic removal with index auto-update.
17
+ </purpose>
18
+
19
+ <required_reading>
20
+ @~/.maestro/workflows/specs-remove.md
21
+ </required_reading>
22
+
23
+ <context>
24
+ $ARGUMENTS -- expects `<entry-id>` (e.g., `spec-learnings-003`, `spec-coding-conventions-001`)
25
+
26
+ **Entry ID format**: `spec-{file-stem}-{NNN}` — the sub-node ID assigned by WikiIndexer when indexing `<spec-entry>` blocks.
27
+
28
+ **Discovery**: Use `maestro wiki list --type spec --json` or `/spec-load --keyword <term>` to find entry IDs.
29
+ </context>
30
+
31
+ <execution>
32
+ Follow '~/.maestro/workflows/specs-remove.md' completely.
33
+ </execution>
34
+
35
+ <error_codes>
36
+ | Code | Severity | Description | Stage |
37
+ |------|----------|-------------|-------|
38
+ | E001 | fatal | Entry ID is required -- usage: `/spec-remove <entry-id>` | parse_input |
39
+ | E002 | fatal | `.workflow/specs/` not initialized -- run `/spec-setup` first | validate |
40
+ | E003 | fatal | Entry ID not found in wiki index | lookup |
41
+ | E004 | fatal | Entry is not a spec sub-node (wrong type) | validate |
42
+ </error_codes>
43
+
44
+ <success_criteria>
45
+ - [ ] Entry ID parsed and validated
46
+ - [ ] Entry found in wiki index (type=spec, is sub-node)
47
+ - [ ] User confirmed removal (unless -y flag)
48
+ - [ ] Entry removed from container file via `maestro wiki remove-entry`
49
+ - [ ] Wiki index auto-updated
50
+ - [ ] Confirmation displayed with removed entry details
51
+ </success_criteria>
@@ -12,7 +12,7 @@ allowed-tools:
12
12
  <purpose>
13
13
  Initialize the project-level specs directory by scanning the codebase for conventions, patterns, and tech stack.
14
14
  Core files (coding, arch, learning) are always created. Optional files (quality, debug, test, review) are created only when relevant signals are detected.
15
- All output lands in `.workflow/specs/` and `.workflow/project-tech.json`.
15
+ All output lands in `.workflow/specs/`.
16
16
  </purpose>
17
17
 
18
18
  <required_reading>
@@ -20,7 +20,6 @@ All output lands in `.workflow/specs/` and `.workflow/project-tech.json`.
20
20
  </required_reading>
21
21
 
22
22
  <deferred_reading>
23
- - [project-tech.json](~/.maestro/templates/project-tech.json) — read when generating project-tech configuration
24
23
  </deferred_reading>
25
24
 
26
25
  <context>
@@ -47,7 +46,6 @@ Follow '~/.maestro/workflows/specs-setup.md' completely.
47
46
  - [ ] `.workflow/specs/` directory created
48
47
  - [ ] Core files always created: `coding-conventions.md`, `architecture-constraints.md`, `learnings.md`
49
48
  - [ ] Optional files created when detected: `quality-rules.md` (linter/CI), `test-conventions.md` (test framework), `debug-notes.md` (on demand), `review-standards.md` (on demand)
50
- - [ ] `project-tech.json` written with detected tech stack
51
49
  - [ ] Report displayed with summary and next steps
52
50
  </success_criteria>
53
51
  </output>
@@ -11,6 +11,10 @@ allowed-tools:
11
11
  - Agent
12
12
  - AskUserQuestion
13
13
  ---
14
+ <required_reading>
15
+ @~/.maestro/workflows/wiki-connect.md
16
+ </required_reading>
17
+
14
18
  <purpose>
15
19
  Knowledge graph link discovery and health improvement. Analyzes the wiki index to find orphaned entries, missing connections, and transitive link gaps, then suggests or auto-applies new `related` links to improve graph connectivity.
16
20
 
@@ -21,7 +25,7 @@ Leverages maestro's unique wiki graph infrastructure (BM25 search, backlinks, he
21
25
  Arguments: $ARGUMENTS
22
26
 
23
27
  **Flags:**
24
- - `--scope <type>` — Limit analysis to a wiki type (spec, phase, memory, note, lesson, issue). Default: all types.
28
+ - `--scope <type>` — Limit analysis to a wiki type (spec, memory, note, lesson, issue). Default: all types.
25
29
  - `--min-similarity N` — Minimum similarity score threshold 0.0-1.0 (default: 0.3)
26
30
  - `--fix` — Auto-apply the top suggestions by updating wiki entries with new `related` links
27
31
  - `--max N` — Maximum number of suggestions to generate (default: 20)
@@ -66,13 +70,13 @@ For each entry, compute potential connections:
66
70
  For each orphan entry, search for related entries using:
67
71
  - `maestro wiki search "<orphan title>"` — BM25 match by title
68
72
  - Tag overlap: entries sharing 2+ tags with the orphan
69
- - Same phase: entries with matching `phaseRef`
73
+ - Same category: entries with matching `category`
70
74
 
71
75
  **2b. Missing Bidirectional Links:**
72
76
  For entries that have forward links but no corresponding backlink (A links to B, but B doesn't link to A), suggest adding the reverse link.
73
77
 
74
78
  **2c. Transitive Closure:**
75
- If A → B and B → C, but A has no link to C, and A and C share tags or are in the same phase, suggest A → C.
79
+ If A → B and B → C, but A has no link to C, and A and C share tags or category, suggest A → C.
76
80
 
77
81
  **2d. Type Bridge:**
78
82
  Entries of different types that reference the same concept (e.g., a `spec-auth` and a `lesson-auth-gotcha`) but aren't linked.
@@ -83,13 +87,13 @@ For each candidate connection (source → target), compute similarity:
83
87
  ```
84
88
  score = 0.4 × tag_overlap_ratio
85
89
  + 0.3 × title_bm25_similarity
86
- + 0.2 × same_phase_bonus
90
+ + 0.2 × same_category_bonus
87
91
  + 0.1 × type_bridge_bonus
88
92
  ```
89
93
 
90
94
  - `tag_overlap_ratio`: shared_tags / max(source_tags, target_tags)
91
95
  - `title_bm25_similarity`: normalized BM25 score from wiki search
92
- - `same_phase_bonus`: 1.0 if same phaseRef, else 0.0
96
+ - `same_category_bonus`: 1.0 if same category, else 0.0
93
97
  - `type_bridge_bonus`: 1.0 if different types, else 0.0
94
98
 
95
99
  Filter by `--min-similarity`, rank descending, limit to `--max`.
@@ -17,6 +17,10 @@ Knowledge synthesis command that generates actionable digests from the wiki know
17
17
  Unlike `maestro wiki list` which shows raw entries, this command synthesizes and interprets the knowledge base, producing a curated summary with gap analysis and recommended next actions.
18
18
  </purpose>
19
19
 
20
+ <required_reading>
21
+ @~/.maestro/workflows/wiki-digest.md
22
+ </required_reading>
23
+
20
24
  <deferred_reading>
21
25
  - @~/.maestro/workflows/issue.md (issues.jsonl canonical schema for `--create-issues` routing)
22
26
  </deferred_reading>
@@ -27,7 +31,7 @@ Arguments: $ARGUMENTS
27
31
  **Scope resolution (auto-detected):**
28
32
  - `<topic>` — Search wiki for entries matching the topic via `maestro wiki search`
29
33
  - `--recent N` — Entries updated in the last N days
30
- - `--type <type>` — Filter by wiki type (spec, phase, memory, note, lesson, issue)
34
+ - `--type <type>` — Filter by wiki type (spec, memory, note, lesson, issue)
31
35
  - No arguments — digest of the entire wiki
32
36
 
33
37
  **Flags:**
@@ -101,7 +105,6 @@ Build a matrix showing knowledge density by type × theme:
101
105
  ```
102
106
  Theme 1 Theme 2 Theme 3 Theme 4 Theme 5
103
107
  spec ███░░ ░░░░░ █████ ██░░░ ░░░░░
104
- phase ████░ ███░░ ░░░░░ █████ ██░░░
105
108
  memory ░░░░░ ████░ ██░░░ ░░░░░ ███░░
106
109
  lesson █░░░░ ██░░░ ████░ █░░░░ ░░░░░
107
110
  issue ██░░░ ░░░░░ █░░░░ ███░░ ░░░░░
@@ -166,7 +169,7 @@ For each knowledge gap identified in Stage 5:
166
169
  1. Write digest file
167
170
  2. Append meta-insights to `lessons.jsonl`:
168
171
  - `source: "wiki-digest"`, `category: "technique"`
169
- - e.g., "Auth knowledge is concentrated in specs but lacks lessons", "Phase 2 has no decision entries"
172
+ - e.g., "Auth knowledge is concentrated in specs but lacks lessons", "Security category has no decision entries"
170
173
  3. Update `learning-index.json`
171
174
  4. Display summary with key findings
172
175
 
@@ -63,7 +63,7 @@ After a barrier skill completes **in its spawned sub-agent**, coordinator reads
63
63
  | Skill | Artifacts to Read | Context Updates |
64
64
  |-------|------------------|-----------------|
65
65
  | `maestro-analyze` | `.workflow/.csv-wave/*/context.md`, `state.json` | `gaps`, `phase`, `analysis_dir` |
66
- | `maestro-plan` | `{phase_dir}/plan.json`, `{phase_dir}/.task/TASK-*.json` | `plan_dir`, `task_count`, `wave_count` |
66
+ | `maestro-plan` | `{artifact_dir}/plan.json`, `{artifact_dir}/.task/TASK-*.json` | `plan_dir`, `task_count`, `wave_count` |
67
67
  | `maestro-brainstorm` | `.workflow/.csv-wave/*/.brainstorming/` | `brainstorm_dir`, `features` |
68
68
  | `maestro-spec-generate` | `.workflow/.csv-wave/*/specs/` | `spec_session_id` |
69
69
  | `maestro-execute` | `.workflow/.csv-wave/*/results.csv` | `exec_status`, `completed_tasks`, `failed_tasks` |
@@ -111,7 +111,7 @@ function analyzeBarrierArtifacts(step, result, ctx) {
111
111
  **`--continue`**: Glob `.workflow/.maestro-coordinate/MCC-*/state.json` sorted desc; load most recent; resume from first pending wave.
112
112
 
113
113
  **Fresh mode**:
114
- 1. Read `.workflow/state.json` for project context (`current_phase`, `workflow_name`)
114
+ 1. Read `.workflow/state.json` for project context (derive current phase from artifact registry, `workflow_name`)
115
115
  2. If `--chain` given, use directly
116
116
  3. Otherwise classify intent via keyword heuristics (see chain_map)
117
117
  4. No match + not AUTO_YES → one clarifying question via `AskUserQuestion`
@@ -61,7 +61,7 @@ Wave-based multi-dimensional analysis using `spawn_agents_on_csv`. Diamond topol
61
61
  $maestro-analyze "3"
62
62
  $maestro-analyze -y "microservices vs monolith"
63
63
  $maestro-analyze -c 6 "3 -q"
64
- $maestro-analyze --continue "analyze-microservices-20260318"
64
+ $maestro-analyze --continue "20260318-analyze-microservices"
65
65
  ```
66
66
 
67
67
  **Flags**:
@@ -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/analyze-{slug}-{date}/
135
+ .workflow/.csv-wave/{YYYYMMDD}-analyze-{slug}/
136
136
  +-- tasks.csv
137
137
  +-- results.csv
138
138
  +-- discoveries.ndjson
@@ -219,9 +219,9 @@ if (GAPS_MODE) {
219
219
  }
220
220
 
221
221
  const dateStr = getUtc8ISOString().substring(0, 10)
222
- const sessionId = `analyze-${slug}-${dateStr}`
222
+ const sessionId = `${dateStr}-analyze-${slug}`
223
223
  const sessionFolder = `.workflow/.csv-wave/${sessionId}`
224
- const scratchDir = `.workflow/scratch/analyze-${slug}-${dateStr}`
224
+ const scratchDir = `.workflow/scratch/${dateStr}-analyze-${slug}`
225
225
 
226
226
  Bash(`mkdir -p ${sessionFolder}`)
227
227
  Bash(`mkdir -p ${scratchDir}`)