maestro-flow 0.3.7 → 0.3.9

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 (254) hide show
  1. package/.claude/commands/learn-decompose.md +3 -3
  2. package/.claude/commands/learn-follow.md +5 -5
  3. package/.claude/commands/learn-investigate.md +3 -3
  4. package/.claude/commands/learn-retro.md +303 -0
  5. package/.claude/commands/learn-second-opinion.md +3 -3
  6. package/.claude/commands/maestro-analyze.md +123 -99
  7. package/.claude/commands/maestro-brainstorm.md +2 -2
  8. package/.claude/commands/maestro-execute.md +137 -96
  9. package/.claude/commands/maestro-fork.md +111 -0
  10. package/.claude/commands/maestro-init.md +6 -6
  11. package/.claude/commands/maestro-learn.md +74 -298
  12. package/.claude/commands/maestro-merge.md +77 -0
  13. package/.claude/commands/maestro-milestone-audit.md +72 -60
  14. package/.claude/commands/maestro-milestone-complete.md +67 -59
  15. package/.claude/commands/maestro-milestone-release.md +6 -6
  16. package/.claude/commands/maestro-plan.md +151 -130
  17. package/.claude/commands/maestro-quick.md +4 -4
  18. package/.claude/commands/maestro-roadmap.md +5 -5
  19. package/.claude/commands/maestro-spec-generate.md +5 -5
  20. package/.claude/commands/maestro-ui-design.md +3 -3
  21. package/.claude/commands/maestro-verify.md +106 -87
  22. package/.claude/commands/maestro.md +10 -4
  23. package/.claude/commands/manage-codebase-rebuild.md +4 -4
  24. package/.claude/commands/manage-codebase-refresh.md +1 -1
  25. package/.claude/commands/manage-harvest.md +5 -5
  26. package/.claude/commands/manage-issue-discover.md +1 -1
  27. package/.claude/commands/manage-issue-execute.md +6 -6
  28. package/.claude/commands/manage-issue.md +6 -6
  29. package/.claude/commands/manage-learn.md +23 -17
  30. package/.claude/commands/manage-memory-capture.md +15 -17
  31. package/.claude/commands/manage-memory.md +3 -3
  32. package/.claude/commands/manage-status.md +24 -24
  33. package/.claude/commands/quality-business-test.md +5 -5
  34. package/.claude/commands/quality-debug.md +4 -4
  35. package/.claude/commands/quality-integration-test.md +4 -4
  36. package/.claude/commands/quality-refactor.md +3 -3
  37. package/.claude/commands/quality-retrospective.md +7 -7
  38. package/.claude/commands/quality-review.md +4 -4
  39. package/.claude/commands/quality-sync.md +3 -3
  40. package/.claude/commands/quality-test-gen.md +4 -4
  41. package/.claude/commands/quality-test.md +9 -9
  42. package/.claude/commands/spec-add.md +2 -2
  43. package/.claude/commands/spec-load.md +8 -3
  44. package/.claude/commands/spec-setup.md +5 -5
  45. package/.claude/commands/wiki-connect.md +3 -3
  46. package/.claude/commands/wiki-digest.md +30 -5
  47. package/.codex/skills/maestro-analyze/SKILL.md +52 -14
  48. package/.codex/skills/maestro-execute/SKILL.md +27 -26
  49. package/.codex/skills/maestro-milestone-audit/SKILL.md +103 -209
  50. package/.codex/skills/maestro-milestone-complete/SKILL.md +149 -158
  51. package/.codex/skills/maestro-plan/SKILL.md +47 -17
  52. package/.codex/skills/maestro-roadmap/SKILL.md +3 -2
  53. package/.codex/skills/team-coordinate/roles/coordinator/commands/monitor.md +2 -2
  54. package/.codex/skills/team-executor/roles/executor/commands/monitor.md +1 -1
  55. package/.codex/skills/team-lifecycle-v4/roles/coordinator/commands/monitor.md +2 -2
  56. package/.codex/skills/team-lifecycle-v4/specs/knowledge-transfer.md +2 -2
  57. package/.codex/skills/team-quality-assurance/roles/coordinator/commands/monitor.md +1 -1
  58. package/.codex/skills/team-review/roles/coordinator/commands/monitor.md +1 -1
  59. package/.codex/skills/team-tech-debt/roles/coordinator/commands/monitor.md +1 -1
  60. package/.codex/skills/team-testing/roles/coordinator/commands/monitor.md +1 -1
  61. package/README.md +115 -227
  62. package/README.zh-CN.md +169 -187
  63. package/bin/maestro-mcp.js +1 -1
  64. package/chains/_intent-map.json +21 -9
  65. package/chains/_router.json +30 -77
  66. package/chains/brainstorm-driven.json +17 -6
  67. package/chains/full-lifecycle.json +22 -23
  68. package/chains/milestone-close.json +20 -7
  69. package/chains/milestone-fork-merge.json +50 -0
  70. package/chains/roadmap-driven.json +17 -6
  71. package/chains/spec-driven.json +17 -6
  72. package/dashboard/dist/assets/{ArtifactsPage-A9yzYtpj.js → ArtifactsPage-DZNCi6tn.js} +12 -7
  73. package/dashboard/dist/assets/ChatInput-Bvr-FeEq.js +49 -0
  74. package/dashboard/dist/assets/ChatPage-D9zTkJZo.js +22 -0
  75. package/dashboard/dist/assets/CollabPage-B4NAHXS2.js +1 -0
  76. package/dashboard/dist/assets/ExecutionPanel-CFt4LJyq.js +1 -0
  77. package/dashboard/dist/assets/KanbanPage-C8USth6H.js +21 -0
  78. package/dashboard/dist/assets/{MarkdownRenderer-CCXHaut3.js → MarkdownRenderer-X4af_WNb.js} +1 -1
  79. package/dashboard/dist/assets/McpPage-BKfCVIyU.js +21 -0
  80. package/dashboard/dist/assets/OutputPanel-BlBQFJSW.js +1 -0
  81. package/dashboard/dist/assets/ProblemsPanel-De3DLvoI.js +1 -0
  82. package/dashboard/dist/assets/{RequirementBoardPage-CEOvppGn.js → RequirementBoardPage-Bf1trzqs.js} +2 -2
  83. package/dashboard/dist/assets/{RequirementPage-DpnbTEqY.js → RequirementPage-Bllxe2XI.js} +10 -5
  84. package/dashboard/dist/assets/{SpecsPage-CYqOfFkB.js → SpecsPage-9lwxKT27.js} +2 -2
  85. package/dashboard/dist/assets/{SupervisorPage-B2sZwkq8.js → SupervisorPage-SusdfHFq.js} +1 -1
  86. package/dashboard/dist/assets/{TeamsPage-CkZdCAVZ.js → TeamsPage-DsuM6OwC.js} +2 -2
  87. package/dashboard/dist/assets/TreeBrowser-Q12qobZs.js +6 -0
  88. package/dashboard/dist/assets/WorkflowPage-D_Fzdy3_.js +6 -0
  89. package/dashboard/dist/assets/{arrow-left-6fktHyjN.js → arrow-left-Bqtb2hle.js} +1 -1
  90. package/dashboard/dist/assets/{check-Cbxq2l1-.js → check-u6fGOwQO.js} +1 -1
  91. package/dashboard/dist/assets/{chevron-right-Yts3bi8p.js → chevron-right-Csu22t58.js} +1 -1
  92. package/dashboard/dist/assets/{circle-4Ci4Xolf.js → circle-CMrkbRNg.js} +1 -1
  93. package/dashboard/dist/assets/{circle-alert-B25g9BTL.js → circle-alert-c3tH1P4z.js} +1 -1
  94. package/dashboard/dist/assets/{circle-check-big-DzO2BlL7.js → circle-check-big-TDSeWstm.js} +1 -1
  95. package/dashboard/dist/assets/{circle-check-BA5_XqeV.js → circle-check-gYxxSYuH.js} +1 -1
  96. package/dashboard/dist/assets/{code-zxwuybO8.js → code-CFN2uX9V.js} +1 -1
  97. package/dashboard/dist/assets/{columns-3-DV4oeCfU.js → columns-3-38xIDlzy.js} +1 -1
  98. package/dashboard/dist/assets/{download-CXCyQw8M.js → download-DC7KkKyP.js} +1 -1
  99. package/dashboard/dist/assets/{folder-Bvjj8Vn9.js → folder-CWq_lAnf.js} +1 -1
  100. package/dashboard/dist/assets/index-DWG-WrzT.js +231 -0
  101. package/dashboard/dist/assets/{index-BvScJmJM.js → index-Do71weNR.js} +1 -1
  102. package/dashboard/dist/assets/index-GUNJodSR.css +1 -0
  103. package/dashboard/dist/assets/{list-Dj4i9N75.js → list-CgIP_2A-.js} +1 -1
  104. package/dashboard/dist/assets/{minus-DwlFabsT.js → minus-DYoN5UGk.js} +1 -1
  105. package/dashboard/dist/assets/{pen-line-D7UzECt6.js → pen-line-Bh_WKYHm.js} +1 -1
  106. package/dashboard/dist/assets/{proxy-B9XRqHD9.js → proxy-BKxDAKTj.js} +1 -1
  107. package/dashboard/dist/assets/{search-BQbBTIYl.js → search-SieXnOgr.js} +1 -1
  108. package/dashboard/dist/assets/{shallow-Clb1Lyd_.js → shallow-Bme1JY57.js} +1 -1
  109. package/dashboard/dist/assets/{table-BqxCXid2.js → table-llyEtj-7.js} +1 -1
  110. package/dashboard/dist/assets/terminal-BB3Xfuv5.js +6 -0
  111. package/dashboard/dist/assets/{trash-2-6rN9B-EQ.js → trash-2-C8f4vFFM.js} +1 -1
  112. package/dashboard/dist/assets/{zap-DxUhG-gk.js → zap-4uwlzVm0.js} +1 -1
  113. package/dashboard/dist/index.html +2 -2
  114. package/dashboard/dist-server/dashboard/src/server/agents/agent-sdk-adapter.d.ts +1 -1
  115. package/dashboard/dist-server/dashboard/src/server/agents/agent-sdk-adapter.js +5 -4
  116. package/dashboard/dist-server/dashboard/src/server/agents/agent-sdk-adapter.js.map +1 -1
  117. package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.js +8 -4
  118. package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.js.map +1 -1
  119. package/dashboard/dist-server/dashboard/src/server/agents/entry-normalizer.d.ts +1 -0
  120. package/dashboard/dist-server/dashboard/src/server/agents/entry-normalizer.js +2 -1
  121. package/dashboard/dist-server/dashboard/src/server/agents/entry-normalizer.js.map +1 -1
  122. package/dashboard/dist-server/dashboard/src/server/agents/stream-json-adapter.js +20 -10
  123. package/dashboard/dist-server/dashboard/src/server/agents/stream-json-adapter.js.map +1 -1
  124. package/dashboard/dist-server/dashboard/src/server/agents/tools/issue-mcp-server.d.ts +1 -1
  125. package/dashboard/dist-server/dashboard/src/server/agents/tools/issue-mcp-server.js +3 -4
  126. package/dashboard/dist-server/dashboard/src/server/agents/tools/issue-mcp-server.js.map +1 -1
  127. package/dashboard/dist-server/dashboard/src/server/agents/tools/issue-mcp-server.test.js +4 -4
  128. package/dashboard/dist-server/dashboard/src/server/agents/tools/issue-mcp-server.test.js.map +1 -1
  129. package/dashboard/dist-server/dashboard/src/server/commander/commander-agent.js +4 -3
  130. package/dashboard/dist-server/dashboard/src/server/commander/commander-agent.js.map +1 -1
  131. package/dashboard/dist-server/dashboard/src/server/commander/commander-agent.test.js +20 -7
  132. package/dashboard/dist-server/dashboard/src/server/commander/commander-agent.test.js.map +1 -1
  133. package/dashboard/dist-server/dashboard/src/server/execution/wave-executor.d.ts +1 -1
  134. package/dashboard/dist-server/dashboard/src/server/execution/wave-executor.js +4 -4
  135. package/dashboard/dist-server/dashboard/src/server/execution/wave-executor.js.map +1 -1
  136. package/dashboard/dist-server/dashboard/src/server/index.js +2 -1
  137. package/dashboard/dist-server/dashboard/src/server/index.js.map +1 -1
  138. package/dashboard/dist-server/dashboard/src/server/routes/git.d.ts +2 -0
  139. package/dashboard/dist-server/dashboard/src/server/routes/git.js +79 -0
  140. package/dashboard/dist-server/dashboard/src/server/routes/git.js.map +1 -0
  141. package/dashboard/dist-server/dashboard/src/server/routes/index.js +3 -0
  142. package/dashboard/dist-server/dashboard/src/server/routes/index.js.map +1 -1
  143. package/dashboard/dist-server/dashboard/src/server/routes/issues.js +14 -14
  144. package/dashboard/dist-server/dashboard/src/server/routes/issues.js.map +1 -1
  145. package/dashboard/dist-server/dashboard/src/server/routes/linear.js +7 -5
  146. package/dashboard/dist-server/dashboard/src/server/routes/linear.js.map +1 -1
  147. package/dashboard/dist-server/dashboard/src/server/routes/workspace.js +43 -0
  148. package/dashboard/dist-server/dashboard/src/server/routes/workspace.js.map +1 -1
  149. package/dashboard/dist-server/dashboard/src/server/state/state-manager.js +186 -25
  150. package/dashboard/dist-server/dashboard/src/server/state/state-manager.js.map +1 -1
  151. package/dashboard/dist-server/dashboard/src/server/utils/issue-store.d.ts +6 -0
  152. package/dashboard/dist-server/dashboard/src/server/utils/issue-store.js +24 -2
  153. package/dashboard/dist-server/dashboard/src/server/utils/issue-store.js.map +1 -1
  154. package/dashboard/dist-server/dashboard/src/server/ws/handlers/execution-handler.js +4 -7
  155. package/dashboard/dist-server/dashboard/src/server/ws/handlers/execution-handler.js.map +1 -1
  156. package/dashboard/dist-server/dashboard/src/shared/constants.js +2 -1
  157. package/dashboard/dist-server/dashboard/src/shared/constants.js.map +1 -1
  158. package/dashboard/dist-server/dashboard/src/shared/constants.test.js +5 -5
  159. package/dashboard/dist-server/dashboard/src/shared/constants.test.js.map +1 -1
  160. package/dashboard/dist-server/dashboard/src/shared/issue-types.test.js +4 -4
  161. package/dashboard/dist-server/dashboard/src/shared/issue-types.test.js.map +1 -1
  162. package/dashboard/dist-server/src/commands/delegate.js +7 -1
  163. package/dashboard/dist-server/src/commands/delegate.js.map +1 -1
  164. package/dashboard/package.json +59 -59
  165. package/dist/src/cli.js +3 -1
  166. package/dist/src/cli.js.map +1 -1
  167. package/dist/src/commands/{team.d.ts → collab.d.ts} +2 -2
  168. package/dist/src/commands/collab.d.ts.map +1 -0
  169. package/dist/src/commands/{team.js → collab.js} +391 -24
  170. package/dist/src/commands/collab.js.map +1 -0
  171. package/dist/src/commands/delegate.d.ts.map +1 -1
  172. package/dist/src/commands/delegate.js +7 -1
  173. package/dist/src/commands/delegate.js.map +1 -1
  174. package/dist/src/commands/msg.d.ts.map +1 -1
  175. package/dist/src/commands/msg.js +4 -3
  176. package/dist/src/commands/msg.js.map +1 -1
  177. package/dist/src/hooks/team-monitor.d.ts.map +1 -1
  178. package/dist/src/hooks/team-monitor.js +16 -0
  179. package/dist/src/hooks/team-monitor.js.map +1 -1
  180. package/dist/src/tools/collab-adapter.d.ts +85 -0
  181. package/dist/src/tools/collab-adapter.d.ts.map +1 -0
  182. package/dist/src/tools/collab-adapter.js +320 -0
  183. package/dist/src/tools/collab-adapter.js.map +1 -0
  184. package/dist/src/tools/namespace-guard.d.ts +2 -0
  185. package/dist/src/tools/namespace-guard.d.ts.map +1 -1
  186. package/dist/src/tools/namespace-guard.js +12 -0
  187. package/dist/src/tools/namespace-guard.js.map +1 -1
  188. package/dist/src/tools/phase-gate-evaluator.d.ts +45 -0
  189. package/dist/src/tools/phase-gate-evaluator.d.ts.map +1 -0
  190. package/dist/src/tools/phase-gate-evaluator.js +42 -0
  191. package/dist/src/tools/phase-gate-evaluator.js.map +1 -0
  192. package/dist/src/tools/team-members.d.ts +18 -0
  193. package/dist/src/tools/team-members.d.ts.map +1 -1
  194. package/dist/src/tools/team-members.js +50 -0
  195. package/dist/src/tools/team-members.js.map +1 -1
  196. package/dist/src/tools/team-tasks.d.ts +120 -0
  197. package/dist/src/tools/team-tasks.d.ts.map +1 -0
  198. package/dist/src/tools/team-tasks.js +365 -0
  199. package/dist/src/tools/team-tasks.js.map +1 -0
  200. package/dist/src/tools/transition-recorder.d.ts +3 -0
  201. package/dist/src/tools/transition-recorder.d.ts.map +1 -1
  202. package/dist/src/tools/transition-recorder.js +52 -1
  203. package/dist/src/tools/transition-recorder.js.map +1 -1
  204. package/dist/src/utils/get-version.d.ts.map +1 -1
  205. package/dist/src/utils/get-version.js +15 -4
  206. package/dist/src/utils/get-version.js.map +1 -1
  207. package/package.json +1 -1
  208. package/templates/config.json +7 -0
  209. package/templates/worktree-scope.json +10 -0
  210. package/templates/worktrees.json +27 -0
  211. package/workflows/analyze.md +86 -36
  212. package/workflows/brainstorm.md +17 -37
  213. package/workflows/delegate-usage.md +39 -41
  214. package/workflows/execute.md +247 -61
  215. package/workflows/fork.md +309 -0
  216. package/workflows/init.md +11 -2
  217. package/workflows/issue.md +66 -7
  218. package/workflows/maestro-coordinate.codex.md +1 -1
  219. package/workflows/maestro-coordinate.md +24 -17
  220. package/workflows/maestro.md +54 -37
  221. package/workflows/memory.md +2 -1
  222. package/workflows/merge.md +285 -0
  223. package/workflows/milestone-audit.md +89 -70
  224. package/workflows/milestone-complete.md +89 -156
  225. package/workflows/plan.md +131 -19
  226. package/workflows/retrospective.md +5 -5
  227. package/workflows/roadmap.md +12 -4
  228. package/workflows/spec-generate.md +9 -0
  229. package/workflows/status.md +76 -27
  230. package/workflows/ui-design.md +14 -12
  231. package/workflows/verify.md +44 -8
  232. package/.claude/commands/learn-retro-decision.md +0 -198
  233. package/.claude/commands/learn-retro-git.md +0 -160
  234. package/.claude/commands/maestro-phase-add.md +0 -63
  235. package/.claude/commands/maestro-phase-transition.md +0 -75
  236. package/.codex/skills/maestro-phase-add/SKILL.md +0 -154
  237. package/.codex/skills/maestro-phase-transition/SKILL.md +0 -173
  238. package/chains/singles/phase-add.json +0 -31
  239. package/chains/singles/phase-transition.json +0 -23
  240. package/dashboard/dist/assets/ChatInput-PuCvZZ3y.js +0 -67
  241. package/dashboard/dist/assets/ChatPage-v19GURYH.js +0 -8
  242. package/dashboard/dist/assets/CollabPage-I5k_mCbG.js +0 -1
  243. package/dashboard/dist/assets/KanbanPage-PDDBv5-9.js +0 -16
  244. package/dashboard/dist/assets/McpPage-CiqXpCHg.js +0 -16
  245. package/dashboard/dist/assets/TreeBrowser-0VIMWclo.js +0 -11
  246. package/dashboard/dist/assets/WorkflowPage-Csm23wUS.js +0 -6
  247. package/dashboard/dist/assets/git-branch-DL8p9kVC.js +0 -6
  248. package/dashboard/dist/assets/index-11DuhKhc.js +0 -231
  249. package/dashboard/dist/assets/index-D2Mtyw7I.css +0 -1
  250. package/dashboard/dist/assets/wrench-BScEJFqC.js +0 -11
  251. package/dist/src/commands/team.d.ts.map +0 -1
  252. package/dist/src/commands/team.js.map +0 -1
  253. package/workflows/phase-add.md +0 -252
  254. package/workflows/phase-transition.md +0 -399
@@ -1,198 +0,0 @@
1
- ---
2
- name: learn-retro-decision
3
- description: Decision trace and evaluation with multi-perspective analysis and lifecycle classification
4
- argument-hint: "[--phase N] [--tag <tag>] [--id <decision-id>]"
5
- allowed-tools:
6
- - Read
7
- - Write
8
- - Bash
9
- - Glob
10
- - Grep
11
- - Agent
12
- - AskUserQuestion
13
- ---
14
- <purpose>
15
- Decision retrospective that traces architectural and design decisions across wiki, specs, phase contexts, and git history. Evaluates each decision from 3 perspectives (technical soundness, cost assessment, alternative hindsight) and classifies its lifecycle status.
16
-
17
- Inspired by gstack's cross-functional review pipeline (CEO/Eng/Design perspectives). Unlike `quality-retrospective` which reviews completed phases holistically, this command focuses specifically on decision quality and evolution.
18
- </purpose>
19
-
20
- <context>
21
- Arguments: $ARGUMENTS
22
-
23
- **Scope:**
24
- - No arguments → scan all sources for decisions, prompt for selection
25
- - `--phase N` → decisions from phase N's context and related specs
26
- - `--tag <tag>` → decisions tagged with specific tag in wiki/specs
27
- - `--id <id>` → single decision by wiki ID or lessons.jsonl INS-id
28
-
29
- **Storage written:**
30
- - `.workflow/learning/retro-decision-{YYYY-MM-DD}.md` — Decision evaluation report
31
- - `.workflow/learning/lessons.jsonl` — Decision evaluation insights (source: "retro-decision")
32
- - `.workflow/learning/learning-index.json` — Updated index
33
-
34
- **Storage read:**
35
- - `maestro wiki list --type spec --json` — Spec entries (many contain decisions)
36
- - `maestro wiki search "decision"` — Decision-tagged entries
37
- - `.workflow/specs/architecture-constraints.md` — Documented architectural decisions
38
- - `.workflow/phases/*/context.md` — Phase context with Locked/Free/Deferred decisions (if exists)
39
- - `.workflow/learning/lessons.jsonl` — Entries with `category: "decision"`
40
- - Git log — Implementation evidence for decision tracing
41
- </context>
42
-
43
- <execution>
44
-
45
- ### Stage 1: Collect Decisions
46
- Gather decisions from all sources in parallel:
47
-
48
- ```bash
49
- # Wiki decisions
50
- maestro wiki search "decision" --json
51
- maestro wiki list --type spec --json # specs often contain decision entries
52
-
53
- # Git evidence
54
- git log --oneline --all --grep="decision\|chose\|decided\|architecture" -20
55
- ```
56
-
57
- Also read:
58
- - `.workflow/specs/architecture-constraints.md` — grep for `### [decision]` heading blocks
59
- - `.workflow/phases/*/context.md` — scan for "Locked:", "Deferred:" sections
60
- - `.workflow/learning/lessons.jsonl` — filter entries where `category == "decision"`
61
-
62
- Apply scope filter (--phase, --tag, --id) to reduce the set.
63
-
64
- If no decisions found, AskUserQuestion: "No decisions found in wiki/specs. Would you like to: A) Scan git commit messages for implicit decisions, B) Provide a specific decision to evaluate"
65
-
66
- ### Stage 2: Build Decision Registry
67
- For each decision, build a structured record:
68
-
69
- ```json
70
- {
71
- "id": "decision source id",
72
- "title": "what was decided",
73
- "source": "wiki|spec|phase-context|lesson|git",
74
- "date": "when decided",
75
- "rationale": "why (if documented)",
76
- "alternatives": "what was considered (if documented)",
77
- "phase": "which phase",
78
- "tags": ["related tags"],
79
- "implementation_evidence": ["file paths from git that implement this"]
80
- }
81
- ```
82
-
83
- For implementation evidence: search git log for commits that reference the decision topic, and grep source files for patterns consistent with the decision.
84
-
85
- ### Stage 3: Multi-Perspective Evaluation
86
- Spawn 3 Agents in a single message, each evaluating all decisions from one perspective:
87
-
88
- **Agent 1 — Technical Soundness:**
89
- - Does the implementation match the stated intent?
90
- - Are there code-level violations of the decision?
91
- - Has the technical context changed since the decision was made?
92
- - Grade: sound / degraded / violated
93
-
94
- **Agent 2 — Cost Assessment:**
95
- - What complexity did this decision add?
96
- - How many files/modules are affected?
97
- - Is the decision creating coupling or technical debt?
98
- - Grade: low-cost / acceptable / expensive / debt-creating
99
-
100
- **Agent 3 — Alternative Hindsight:**
101
- - With what we know now, was this the right call?
102
- - What alternative would we choose today?
103
- - Would reversing this decision be feasible?
104
- - Grade: confirmed / questionable / should-revisit
105
-
106
- Each agent receives the full decision registry and returns evaluations per decision.
107
-
108
- ### Stage 4: Classify Decision Lifecycle
109
- Based on the 3 perspectives, classify each decision:
110
-
111
- | Status | Criteria |
112
- |--------|---------|
113
- | **Validated** | Sound + Low/Acceptable cost + Confirmed |
114
- | **Aging** | Sound but Expensive + Confirmed (still right but costly) |
115
- | **Questionable** | Degraded or Violated + Any cost + Questionable |
116
- | **Stale** | Any soundness + Any cost + Should-revisit |
117
- | **Reversed** | Evidence in code contradicts the decision |
118
-
119
- ### Stage 5: Generate Recommendations
120
- For each non-Validated decision:
121
- - **Aging**: flag for tech debt review, suggest cost reduction
122
- - **Questionable**: create issue for investigation, suggest brainstorm
123
- - **Stale**: suggest decision refresh (re-evaluate with current context)
124
- - **Reversed**: suggest documenting the reversal and updating specs/wiki
125
-
126
- ### Stage 6: Write Report
127
- `.workflow/learning/retro-decision-{date}.md`:
128
-
129
- ```markdown
130
- # Decision Retrospective: {scope}
131
- **Date:** {date} | **Decisions evaluated:** {count}
132
-
133
- ## Decision Health Dashboard
134
- | Status | Count | Decisions |
135
- |--------|-------|-----------|
136
- | Validated | N | {list} |
137
- | Aging | N | {list} |
138
- | Questionable | N | {list} |
139
- | Stale | N | {list} |
140
-
141
- ## Per-Decision Evaluation
142
-
143
- ### {Decision Title}
144
- **Source:** {wiki/spec/phase} | **Date:** {when} | **Status:** {lifecycle}
145
-
146
- | Perspective | Grade | Assessment |
147
- |------------|-------|-----------|
148
- | Technical | sound/degraded/violated | {one-line} |
149
- | Cost | low/acceptable/expensive | {one-line} |
150
- | Hindsight | confirmed/questionable/revisit | {one-line} |
151
-
152
- **Implementation evidence:** {file references}
153
- **Recommendation:** {action if non-validated}
154
-
155
- ## Recommended Actions
156
- 1. {action}: {reason}
157
- ```
158
-
159
- ### Stage 7: Persist
160
- 1. Write report file
161
- 2. Append decision evaluation insights to `lessons.jsonl`:
162
- - `source: "retro-decision"`, `category: "decision"`
163
- - Tags: `["retro-decision", "{lifecycle-status}"]`
164
- - One insight per non-Validated decision with the recommendation
165
- 3. Update `learning-index.json`
166
- 4. Optionally: update wiki entries with evaluation metadata via `maestro wiki update`
167
- 5. Display health dashboard summary
168
-
169
- **Next-step routing:**
170
- - Create issue for questionable decision → `Skill({ skill: "manage-issue", args: "create ..." })`
171
- - Brainstorm alternatives → `Skill({ skill: "maestro-brainstorm", args: "<decision topic>" })`
172
- - Investigate stale decision → `Skill({ skill: "learn-investigate", args: "<question>" })`
173
- - Update spec → `Skill({ skill: "spec-add", args: "decision <updated rationale>" })`
174
- </execution>
175
-
176
- <error_codes>
177
- | Code | Severity | Condition | Recovery |
178
- |------|----------|-----------|----------|
179
- | E001 | error | No decisions found in any source | Check wiki/specs content, or provide --id |
180
- | E002 | error | --id not found in wiki or lessons | Verify the decision ID exists |
181
- | W001 | warning | One perspective agent failed — partial evaluation | Proceed with available perspectives, note gap |
182
- | W002 | warning | No git implementation evidence found for a decision | Decision evaluation is theoretical only |
183
- | W003 | warning | Phase context files not found | Skip phase-context decisions, proceed with wiki/spec sources |
184
- </error_codes>
185
-
186
- <success_criteria>
187
- - [ ] Decisions collected from all available sources (wiki, specs, phase-context, lessons, git)
188
- - [ ] Scope filter applied correctly (--phase, --tag, or --id)
189
- - [ ] Decision registry built with structured records
190
- - [ ] 3 perspective agents spawned in parallel
191
- - [ ] Each decision classified: Validated / Aging / Questionable / Stale / Reversed
192
- - [ ] Recommendations generated for non-Validated decisions
193
- - [ ] Report written to `retro-decision-{date}.md` with health dashboard
194
- - [ ] Insights appended to `lessons.jsonl` (source: "retro-decision")
195
- - [ ] `learning-index.json` updated
196
- - [ ] No files modified outside `.workflow/learning/`
197
- - [ ] Health dashboard displayed with next-step routing
198
- </success_criteria>
@@ -1,160 +0,0 @@
1
- ---
2
- name: learn-retro-git
3
- description: Git activity retrospective with metrics, session detection, per-author breakdown, and trend tracking
4
- argument-hint: "[--days N] [--author <name>] [--area <path>] [--compare]"
5
- allowed-tools:
6
- - Read
7
- - Write
8
- - Bash
9
- - Glob
10
- - Grep
11
- - Agent
12
- - AskUserQuestion
13
- ---
14
- <purpose>
15
- Git-activity retrospective that works on raw git history regardless of workflow phase state. Complements `quality-retrospective` (which requires completed phase artifacts) by analyzing commit metrics, detecting work sessions, computing test ratios, and tracking trends over time.
16
-
17
- Inspired by gstack `/retro`: per-author breakdown, session clustering, LOC metrics, file hotspot detection, and comparison against prior retrospectives.
18
-
19
- All insights are persisted to `.workflow/learning/lessons.jsonl` (source: "git-retro") so they're queryable via `manage-learn search/list`.
20
- </purpose>
21
-
22
- <context>
23
- Arguments: $ARGUMENTS
24
-
25
- **Flags:**
26
- - `--days N` — Time window in days (default: 7)
27
- - `--author <name>` — Filter commits by author name (substring match)
28
- - `--area <path>` — Scope to files under a specific directory
29
- - `--compare` — Compare against the previous retro-git report if one exists
30
-
31
- **Storage written:**
32
- - `.workflow/learning/retro-git-{YYYY-MM-DD}.json` — Structured metrics (machine-readable)
33
- - `.workflow/learning/retro-git-{YYYY-MM-DD}.md` — Human-readable retrospective report
34
- - `.workflow/learning/lessons.jsonl` — Appended insights (source: "git-retro")
35
- - `.workflow/learning/learning-index.json` — Updated index
36
-
37
- **Storage read:**
38
- - `.workflow/state.json` — Current phase context (optional)
39
- - `.workflow/learning/retro-git-*.json` — Prior retro for trend comparison
40
- - `.workflow/learning/lessons.jsonl` — Existing insights for dedup
41
- </context>
42
-
43
- <execution>
44
-
45
- ### Stage 1: Parse Arguments
46
- - Resolve date range: `--days N` or default 7. Compute absolute start date at midnight.
47
- - Extract `--author`, `--area`, `--compare` flags.
48
- - Check `.workflow/learning/` exists; bootstrap if missing.
49
-
50
- ### Stage 2: Gather Raw Data (parallel git commands)
51
- Run ALL these git commands in parallel (they are independent):
52
-
53
- ```bash
54
- # 1. Commit stats with author, timestamp, subject, files changed
55
- git log --since="<start-date>T00:00:00" --format="%H|%aN|%ae|%ai|%s" --shortstat
56
-
57
- # 2. Per-commit numstat for test vs production LOC split
58
- # Test files: match test/|spec/|__tests__/|*.test.*|*.spec.*
59
- git log --since="<start-date>T00:00:00" --format="COMMIT:%H|%aN" --numstat
60
-
61
- # 3. Timestamps for session detection (sorted)
62
- git log --since="<start-date>T00:00:00" --format="%at|%aN|%ai|%s" | sort -n
63
-
64
- # 4. File hotspots (most frequently changed files)
65
- git log --since="<start-date>T00:00:00" --format="" --name-only | grep -v '^$' | sort | uniq -c | sort -rn | head -20
66
-
67
- # 5. Per-author commit counts
68
- git shortlog --since="<start-date>T00:00:00" -sn --no-merges
69
-
70
- # 6. Per-author file hotspots
71
- git log --since="<start-date>T00:00:00" --format="AUTHOR:%aN" --name-only
72
- ```
73
-
74
- Apply `--author` filter and `--area` path filter to all commands if provided.
75
-
76
- ### Stage 3: Compute Metrics
77
- Calculate and build a metrics object:
78
-
79
- | Metric | Computation |
80
- |--------|-------------|
81
- | Commits | Count of non-merge commits |
82
- | Contributors | Unique author count |
83
- | Total insertions / deletions | Sum from shortstat |
84
- | Net LOC | insertions - deletions |
85
- | Test LOC (insertions) | Sum insertions for test files from numstat |
86
- | Test ratio | test_insertions / total_insertions × 100% |
87
- | Churn rate | Files changed >2 times / total unique files |
88
- | Active days | Distinct dates with commits |
89
- | Area concentration | Top directory % of total commits (Herfindahl) |
90
-
91
- ### Stage 4: Detect Work Sessions
92
- Cluster commits by >2hr gaps in timestamps:
93
- - Group consecutive commits within 2-hour windows into sessions
94
- - Per session: start time, end time, duration, commit count, primary focus area (most-touched directory)
95
- - Compute: total sessions, avg session duration, avg LOC/session-hour
96
-
97
- ### Stage 5: Per-Author Breakdown
98
- For each author:
99
- - Commit count, LOC added/removed, top 3 file areas
100
- - Test ratio (their test LOC / their total LOC)
101
- - Session count and patterns
102
-
103
- ### Stage 6: Trend Comparison (if --compare or prior report exists)
104
- - Find most recent `.workflow/learning/retro-git-*.json`
105
- - If found, compute deltas: commits Δ, LOC Δ, test ratio Δ, churn rate Δ, session count Δ
106
- - Flag significant changes (>20% delta) as trend highlights
107
-
108
- ### Stage 7: Distill Insights
109
- Identify actionable insights from metrics:
110
- - **High churn files** (changed >3 times): instability signal → suggest refactor or test coverage
111
- - **Low test ratio areas** (<20%): testing gap → suggest test generation
112
- - **Session patterns**: scattered sessions (many short) vs deep sessions (few long)
113
- - **Area drift**: if commits don't align with current roadmap phase
114
-
115
- Each insight: title, description, category (pattern/antipattern/technique), tags, confidence.
116
-
117
- ### Stage 8: Persist & Report
118
- 1. Write `.workflow/learning/retro-git-{date}.json` with full metrics structure
119
- 2. Write `.workflow/learning/retro-git-{date}.md` with formatted report:
120
- - Summary metrics table
121
- - Per-author leaderboard
122
- - Session timeline
123
- - File hotspots
124
- - Insights with recommendations
125
- - Trend deltas (if comparing)
126
- 3. Append each insight to `lessons.jsonl` with `source: "git-retro"`, `lens: null`, using stable INS-id from `hash(metric_name + date)`
127
- 4. Update `learning-index.json`
128
- 5. Display summary and next-step suggestions
129
-
130
- **Next-step routing:**
131
- - Browse insights → `Skill({ skill: "manage-learn", args: "list --tag git-retro" })`
132
- - Deep dive on high-churn file → `Skill({ skill: "learn-follow", args: "<path>" })`
133
- - Fix test gaps → `Skill({ skill: "quality-test-gen", args: "<area>" })`
134
- </execution>
135
-
136
- <error_codes>
137
- | Code | Severity | Condition | Recovery |
138
- |------|----------|-----------|----------|
139
- | E001 | error | Not inside a git repository | Navigate to a git repo directory |
140
- | E002 | error | No commits found in the specified time window | Increase --days or check --author/--area filters |
141
- | W001 | warning | `.workflow/learning/` not found, bootstrapping | Auto-created; proceed normally |
142
- | W002 | warning | No prior retro-git report for comparison | Skip trend section; first retro establishes baseline |
143
- | W003 | warning | Author filter matched 0 commits | Show available authors and re-prompt |
144
- </error_codes>
145
-
146
- <success_criteria>
147
- - [ ] Date range parsed correctly (absolute midnight-aligned start date)
148
- - [ ] All 6 git commands executed successfully
149
- - [ ] Metrics computed: commits, LOC, test ratio, churn rate, sessions, area concentration
150
- - [ ] Sessions detected with >2hr gap clustering
151
- - [ ] Per-author breakdown generated for all contributors
152
- - [ ] Trend comparison computed if prior report exists and --compare used
153
- - [ ] At least 1 actionable insight distilled from metrics
154
- - [ ] `retro-git-{date}.json` written with valid JSON
155
- - [ ] `retro-git-{date}.md` written and human-readable
156
- - [ ] `lessons.jsonl` appended with insights (source: "git-retro", stable INS-ids)
157
- - [ ] `learning-index.json` updated
158
- - [ ] No files modified outside `.workflow/learning/`
159
- - [ ] Summary displayed with next-step routing
160
- </success_criteria>
@@ -1,63 +0,0 @@
1
- ---
2
- name: maestro-phase-add
3
- description: Add or insert a new phase into the project roadmap with automatic renumbering
4
- argument-hint: "<slug> <title> [--after N]"
5
- allowed-tools:
6
- - Read
7
- - Write
8
- - Edit
9
- - Bash
10
- - Glob
11
- - Grep
12
- - Agent
13
- - AskUserQuestion
14
- ---
15
-
16
- <purpose>
17
- Add a new phase to the project roadmap, either appending it at the end or inserting it after a specified phase number. Handles automatic renumbering of subsequent phase directories, updates roadmap.md with the new entry, and initializes the phase directory with an index.json so it is ready for planning.
18
- </purpose>
19
-
20
- <required_reading>
21
- @~/.maestro/workflows/phase-add.md
22
- </required_reading>
23
-
24
- <deferred_reading>
25
- - [index.json](~/.maestro/templates/index.json) — read when creating new phase index
26
- </deferred_reading>
27
-
28
- <context>
29
- $ARGUMENTS -- phase slug and title (required), optional --after N flag.
30
-
31
- **Flags:**
32
- - `--after N` -- Insert after phase N (renumbers subsequent phases). If omitted, appends at end.
33
-
34
- **State files:**
35
- - `.workflow/roadmap.md` -- milestone and phase structure
36
- - `.workflow/state.json` -- project-level state
37
- - `.workflow/phases/` -- existing phase directories
38
- </context>
39
-
40
- <execution>
41
- Follow '~/.maestro/workflows/phase-add.md' completely.
42
-
43
- **Next-step routing on completion:**
44
- - Plan the new phase → Skill({ skill: "maestro-plan", args: "{new_phase_number}" })
45
- - Analyze before planning → Skill({ skill: "maestro-analyze", args: "{new_phase_number}" })
46
- - View updated roadmap → Skill({ skill: "manage-status" })
47
- </execution>
48
-
49
- <error_codes>
50
- | Code | Meaning |
51
- |------|----------------------------------|
52
- | E001 | Phase name/slug required |
53
- | E002 | roadmap.md not found |
54
- | E003 | Duplicate phase name/slug exists |
55
- </error_codes>
56
-
57
- <success_criteria>
58
- - [ ] Phase directory created with NN-slug format
59
- - [ ] roadmap.md updated with new phase entry at correct position
60
- - [ ] index.json initialized in new phase directory with status = "pending"
61
- - [ ] Subsequent phases renumbered correctly (if --after N used)
62
- - [ ] state.json updated if renumbering affected tracked phases
63
- </success_criteria>
@@ -1,75 +0,0 @@
1
- ---
2
- name: maestro-phase-transition
3
- description: Mark current or specified phase as complete, extract learnings, advance to next phase
4
- argument-hint: "[phase-number] [--force]"
5
- allowed-tools:
6
- - Read
7
- - Write
8
- - Edit
9
- - Bash
10
- - Glob
11
- - Grep
12
- - Agent
13
- - AskUserQuestion
14
- ---
15
-
16
- <purpose>
17
- Transition from one phase to the next after verification passes. Validates that the current phase meets all completion criteria (tasks done, verification passed, no unresolved gaps), marks it complete in the phase index, and advances the project state to the next phase. If the next phase directory does not exist, it is created and initialized.
18
- </purpose>
19
-
20
- <required_reading>
21
- @~/.maestro/workflows/phase-transition.md
22
- </required_reading>
23
-
24
- <deferred_reading>
25
- - [state.json](~/.maestro/templates/state.json) — read when updating project state
26
- - [index.json](~/.maestro/templates/index.json) — read when updating phase index
27
- </deferred_reading>
28
-
29
- <context>
30
- $ARGUMENTS -- phase number to transition from (optional, defaults to current_phase from state.json).
31
-
32
- **Flags:**
33
- - `--force` -- Skip gap check and force transition even with warnings
34
-
35
- **State files:**
36
- - `.workflow/state.json` -- project-level state (current_phase, milestones)
37
- - `.workflow/phases/{NN}-{slug}/index.json` -- phase metadata and status
38
- - `.workflow/phases/{NN}-{slug}/verification.json` -- verification results
39
- - `.workflow/phases/{NN}-{slug}/review.json` -- code review results (if exists)
40
- </context>
41
-
42
- <execution>
43
- Follow '~/.maestro/workflows/phase-transition.md' completely.
44
-
45
- **Next-step routing on completion:**
46
- - Next phase exists, ready to plan → Skill({ skill: "maestro-plan", args: "{next_phase}" })
47
- - Next phase needs analysis first → Skill({ skill: "maestro-analyze", args: "{next_phase}" })
48
- - Next phase needs UI design → Skill({ skill: "maestro-ui-design", args: "{next_phase}" })
49
- - All phases in milestone complete → Skill({ skill: "maestro-milestone-audit" })
50
- - View updated dashboard → Skill({ skill: "manage-status" })
51
- </execution>
52
-
53
- <error_codes>
54
- | Code | Meaning |
55
- |------|--------------------------------------------|
56
- | E001 | Phase number required (could not determine) |
57
- | E002 | Phase has not passed verification |
58
- | E003 | Phase has unresolved critical gaps |
59
- | W001 | Phase has warnings but no blockers |
60
- | W002 | UAT test failures exist (quality-test) — review recommended before transition |
61
- | W003 | Code review verdict is BLOCK — Skill({ skill: "quality-review" }) findings should be fixed first |
62
- | W004 | Code review not yet run — Skill({ skill: "quality-review" }) recommended before transition |
63
- | W005 | Orphan specs found in wiki — consider linking or removing before transition |
64
- </error_codes>
65
-
66
- <success_criteria>
67
- - [ ] Current phase index.json marked status = "complete" with completed_at timestamp
68
- - [ ] Next phase directory created (if not already existing)
69
- - [ ] Next phase index.json initialized with status = "pending"
70
- - [ ] state.json current_phase updated to next phase number
71
- - [ ] Wiki health score reported — warnings emitted if orphan specs found
72
- - [ ] Learnings extracted and appended to specs/learnings.md
73
- - [ ] project.md requirements moved Active → Validated for completed phase
74
- - [ ] roadmap.md phase marked as ✅ COMPLETED
75
- </success_criteria>
@@ -1,154 +0,0 @@
1
- ---
2
- name: maestro-phase-add
3
- description: Add or insert a new phase into the project roadmap with automatic renumbering
4
- argument-hint: "\"phase name\" [--after N] [--before N]"
5
- allowed-tools: Read, Write, Edit, Bash, Glob, Grep, AskUserQuestion
6
- ---
7
-
8
- # Maestro Phase Add (Single Agent)
9
-
10
- ## Usage
11
-
12
- ```bash
13
- $maestro-phase-add "authentication"
14
- $maestro-phase-add "caching-layer" --after 2
15
- $maestro-phase-add "security-hardening" --before 5
16
- ```
17
-
18
- **Flags**:
19
- - `"phase name"`: Required. Used as both slug and title (slug = lowercase, hyphens)
20
- - `--after N`: Insert after phase N (renumbers subsequent phases)
21
- - `--before N`: Insert before phase N (renumbers from N onward)
22
- - If neither: append at end
23
-
24
- **Output**: New phase directory, updated roadmap.md, updated state.json
25
-
26
- ---
27
-
28
- ## Overview
29
-
30
- Single mutation operation on the project roadmap. Creates a new phase directory with initialized index.json, inserts the phase entry into roadmap.md at the correct position, and handles automatic renumbering of all affected phase directories and references.
31
-
32
- ---
33
-
34
- ## Implementation
35
-
36
- ### Step 1: Parse Arguments
37
-
38
- Extract:
39
- - Phase name/slug (required — E001 if missing)
40
- - `--after N` or `--before N` flag (mutually exclusive)
41
- - Generate slug: lowercase, replace spaces with hyphens, strip special chars
42
-
43
- ### Step 2: Load Roadmap State
44
-
45
- ```bash
46
- cat .workflow/roadmap.md
47
- cat .workflow/state.json
48
- ls -d .workflow/phases/*/
49
- ```
50
-
51
- - Parse existing phases from roadmap.md
52
- - List existing phase directories
53
- - Check for duplicate slug (E003 if exists)
54
- - Verify roadmap.md exists (E002 if not)
55
-
56
- ### Step 3: Calculate Position
57
-
58
- - If `--after N`: new phase number = N + 1
59
- - If `--before N`: new phase number = N
60
- - If neither: new phase number = max_existing + 1
61
-
62
- ### Step 4: Renumber Existing Phases (if inserting)
63
-
64
- **Only when `--after N` or `--before N` is used.**
65
-
66
- For each phase with number >= new phase number (process in reverse order to avoid collisions):
67
-
68
- 1. Rename directory: `.workflow/phases/{NN}-{slug}` → `.workflow/phases/{NN+1}-{slug}`
69
- 2. Update index.json inside renamed directory: `"phase": N+1`
70
-
71
- ```bash
72
- # Rename in reverse order to prevent collisions
73
- for dir in $(ls -rd .workflow/phases/*/); do
74
- # Extract number, if >= insertion point, rename to number+1
75
- done
76
- ```
77
-
78
- ### Step 5: Create Phase Directory
79
-
80
- ```bash
81
- mkdir -p .workflow/phases/{NN}-{slug}
82
- ```
83
-
84
- Format NN as zero-padded 2-digit number (e.g., 03).
85
-
86
- ### Step 6: Initialize Phase index.json
87
-
88
- Read template from `~/.maestro/templates/index.json` if available, otherwise create:
89
-
90
- ```json
91
- {
92
- "phase": <N>,
93
- "slug": "<slug>",
94
- "title": "<phase name>",
95
- "status": "pending",
96
- "created_at": "<ISO timestamp>",
97
- "tasks": []
98
- }
99
- ```
100
-
101
- Write to `.workflow/phases/{NN}-{slug}/index.json`.
102
-
103
- ### Step 7: Update roadmap.md
104
-
105
- Insert new phase entry at the correct position in roadmap.md:
106
- - Match the existing phase entry format
107
- - If inserting, update all subsequent phase numbers in the document
108
-
109
- ### Step 8: Update state.json
110
-
111
- If renumbering affected `current_phase` or `phases_completed`:
112
- - Adjust `current_phase` number if it was shifted
113
- - Adjust all entries in `phases_completed` that were shifted
114
-
115
- ### Step 9: Completion Report
116
-
117
- ```
118
- === PHASE ADDED ===
119
- Phase: {NN} - {phase name}
120
- Location: .workflow/phases/{NN}-{slug}/
121
-
122
- {if renumbered}
123
- Renumbered: Phases {start}-{end} shifted by +1
124
- {endif}
125
-
126
- Updated:
127
- .workflow/roadmap.md
128
- .workflow/phases/{NN}-{slug}/index.json
129
- {if renumbered}.workflow/state.json{endif}
130
-
131
- Next steps:
132
- $maestro-plan "" -- Plan tasks for the new phase
133
- $manage-status -- View updated roadmap
134
- ```
135
-
136
- ---
137
-
138
- ## Error Handling
139
-
140
- | Code | Severity | Description | Recovery |
141
- |------|----------|-------------|----------|
142
- | E001 | error | Phase name/slug required | Provide phase name as argument |
143
- | E002 | error | roadmap.md not found | Run maestro-init first |
144
- | E003 | error | Duplicate phase name/slug exists | Choose a different name |
145
-
146
- ---
147
-
148
- ## Core Rules
149
-
150
- 1. **Reverse-order renumbering** — always rename directories from highest to lowest to prevent collisions
151
- 2. **State consistency** — state.json phase references must be adjusted after renumbering
152
- 3. **Match existing format** — new roadmap.md entries must match the style of existing entries
153
- 4. **Zero-padded numbers** — always use 2-digit format (01, 02, ... 99)
154
- 5. **Slug normalization** — lowercase, hyphens only, no special characters