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.
- package/.claude/commands/learn-decompose.md +3 -3
- package/.claude/commands/learn-follow.md +5 -5
- package/.claude/commands/learn-investigate.md +3 -3
- package/.claude/commands/learn-retro.md +303 -0
- package/.claude/commands/learn-second-opinion.md +3 -3
- package/.claude/commands/maestro-analyze.md +123 -99
- package/.claude/commands/maestro-brainstorm.md +2 -2
- package/.claude/commands/maestro-execute.md +137 -96
- package/.claude/commands/maestro-fork.md +111 -0
- package/.claude/commands/maestro-init.md +6 -6
- package/.claude/commands/maestro-learn.md +74 -298
- package/.claude/commands/maestro-merge.md +77 -0
- package/.claude/commands/maestro-milestone-audit.md +72 -60
- package/.claude/commands/maestro-milestone-complete.md +67 -59
- package/.claude/commands/maestro-milestone-release.md +6 -6
- package/.claude/commands/maestro-plan.md +151 -130
- package/.claude/commands/maestro-quick.md +4 -4
- package/.claude/commands/maestro-roadmap.md +5 -5
- package/.claude/commands/maestro-spec-generate.md +5 -5
- package/.claude/commands/maestro-ui-design.md +3 -3
- package/.claude/commands/maestro-verify.md +106 -87
- package/.claude/commands/maestro.md +10 -4
- package/.claude/commands/manage-codebase-rebuild.md +4 -4
- package/.claude/commands/manage-codebase-refresh.md +1 -1
- package/.claude/commands/manage-harvest.md +5 -5
- package/.claude/commands/manage-issue-discover.md +1 -1
- package/.claude/commands/manage-issue-execute.md +6 -6
- package/.claude/commands/manage-issue.md +6 -6
- package/.claude/commands/manage-learn.md +23 -17
- package/.claude/commands/manage-memory-capture.md +15 -17
- package/.claude/commands/manage-memory.md +3 -3
- package/.claude/commands/manage-status.md +24 -24
- package/.claude/commands/quality-business-test.md +5 -5
- package/.claude/commands/quality-debug.md +4 -4
- package/.claude/commands/quality-integration-test.md +4 -4
- package/.claude/commands/quality-refactor.md +3 -3
- package/.claude/commands/quality-retrospective.md +7 -7
- package/.claude/commands/quality-review.md +4 -4
- package/.claude/commands/quality-sync.md +3 -3
- package/.claude/commands/quality-test-gen.md +4 -4
- package/.claude/commands/quality-test.md +9 -9
- package/.claude/commands/spec-add.md +2 -2
- package/.claude/commands/spec-load.md +8 -3
- package/.claude/commands/spec-setup.md +5 -5
- package/.claude/commands/wiki-connect.md +3 -3
- package/.claude/commands/wiki-digest.md +30 -5
- package/.codex/skills/maestro-analyze/SKILL.md +52 -14
- package/.codex/skills/maestro-execute/SKILL.md +27 -26
- package/.codex/skills/maestro-milestone-audit/SKILL.md +103 -209
- package/.codex/skills/maestro-milestone-complete/SKILL.md +149 -158
- package/.codex/skills/maestro-plan/SKILL.md +47 -17
- package/.codex/skills/maestro-roadmap/SKILL.md +3 -2
- package/.codex/skills/team-coordinate/roles/coordinator/commands/monitor.md +2 -2
- package/.codex/skills/team-executor/roles/executor/commands/monitor.md +1 -1
- package/.codex/skills/team-lifecycle-v4/roles/coordinator/commands/monitor.md +2 -2
- package/.codex/skills/team-lifecycle-v4/specs/knowledge-transfer.md +2 -2
- package/.codex/skills/team-quality-assurance/roles/coordinator/commands/monitor.md +1 -1
- package/.codex/skills/team-review/roles/coordinator/commands/monitor.md +1 -1
- package/.codex/skills/team-tech-debt/roles/coordinator/commands/monitor.md +1 -1
- package/.codex/skills/team-testing/roles/coordinator/commands/monitor.md +1 -1
- package/README.md +115 -227
- package/README.zh-CN.md +169 -187
- package/bin/maestro-mcp.js +1 -1
- package/chains/_intent-map.json +21 -9
- package/chains/_router.json +30 -77
- package/chains/brainstorm-driven.json +17 -6
- package/chains/full-lifecycle.json +22 -23
- package/chains/milestone-close.json +20 -7
- package/chains/milestone-fork-merge.json +50 -0
- package/chains/roadmap-driven.json +17 -6
- package/chains/spec-driven.json +17 -6
- package/dashboard/dist/assets/{ArtifactsPage-A9yzYtpj.js → ArtifactsPage-DZNCi6tn.js} +12 -7
- package/dashboard/dist/assets/ChatInput-Bvr-FeEq.js +49 -0
- package/dashboard/dist/assets/ChatPage-D9zTkJZo.js +22 -0
- package/dashboard/dist/assets/CollabPage-B4NAHXS2.js +1 -0
- package/dashboard/dist/assets/ExecutionPanel-CFt4LJyq.js +1 -0
- package/dashboard/dist/assets/KanbanPage-C8USth6H.js +21 -0
- package/dashboard/dist/assets/{MarkdownRenderer-CCXHaut3.js → MarkdownRenderer-X4af_WNb.js} +1 -1
- package/dashboard/dist/assets/McpPage-BKfCVIyU.js +21 -0
- package/dashboard/dist/assets/OutputPanel-BlBQFJSW.js +1 -0
- package/dashboard/dist/assets/ProblemsPanel-De3DLvoI.js +1 -0
- package/dashboard/dist/assets/{RequirementBoardPage-CEOvppGn.js → RequirementBoardPage-Bf1trzqs.js} +2 -2
- package/dashboard/dist/assets/{RequirementPage-DpnbTEqY.js → RequirementPage-Bllxe2XI.js} +10 -5
- package/dashboard/dist/assets/{SpecsPage-CYqOfFkB.js → SpecsPage-9lwxKT27.js} +2 -2
- package/dashboard/dist/assets/{SupervisorPage-B2sZwkq8.js → SupervisorPage-SusdfHFq.js} +1 -1
- package/dashboard/dist/assets/{TeamsPage-CkZdCAVZ.js → TeamsPage-DsuM6OwC.js} +2 -2
- package/dashboard/dist/assets/TreeBrowser-Q12qobZs.js +6 -0
- package/dashboard/dist/assets/WorkflowPage-D_Fzdy3_.js +6 -0
- package/dashboard/dist/assets/{arrow-left-6fktHyjN.js → arrow-left-Bqtb2hle.js} +1 -1
- package/dashboard/dist/assets/{check-Cbxq2l1-.js → check-u6fGOwQO.js} +1 -1
- package/dashboard/dist/assets/{chevron-right-Yts3bi8p.js → chevron-right-Csu22t58.js} +1 -1
- package/dashboard/dist/assets/{circle-4Ci4Xolf.js → circle-CMrkbRNg.js} +1 -1
- package/dashboard/dist/assets/{circle-alert-B25g9BTL.js → circle-alert-c3tH1P4z.js} +1 -1
- package/dashboard/dist/assets/{circle-check-big-DzO2BlL7.js → circle-check-big-TDSeWstm.js} +1 -1
- package/dashboard/dist/assets/{circle-check-BA5_XqeV.js → circle-check-gYxxSYuH.js} +1 -1
- package/dashboard/dist/assets/{code-zxwuybO8.js → code-CFN2uX9V.js} +1 -1
- package/dashboard/dist/assets/{columns-3-DV4oeCfU.js → columns-3-38xIDlzy.js} +1 -1
- package/dashboard/dist/assets/{download-CXCyQw8M.js → download-DC7KkKyP.js} +1 -1
- package/dashboard/dist/assets/{folder-Bvjj8Vn9.js → folder-CWq_lAnf.js} +1 -1
- package/dashboard/dist/assets/index-DWG-WrzT.js +231 -0
- package/dashboard/dist/assets/{index-BvScJmJM.js → index-Do71weNR.js} +1 -1
- package/dashboard/dist/assets/index-GUNJodSR.css +1 -0
- package/dashboard/dist/assets/{list-Dj4i9N75.js → list-CgIP_2A-.js} +1 -1
- package/dashboard/dist/assets/{minus-DwlFabsT.js → minus-DYoN5UGk.js} +1 -1
- package/dashboard/dist/assets/{pen-line-D7UzECt6.js → pen-line-Bh_WKYHm.js} +1 -1
- package/dashboard/dist/assets/{proxy-B9XRqHD9.js → proxy-BKxDAKTj.js} +1 -1
- package/dashboard/dist/assets/{search-BQbBTIYl.js → search-SieXnOgr.js} +1 -1
- package/dashboard/dist/assets/{shallow-Clb1Lyd_.js → shallow-Bme1JY57.js} +1 -1
- package/dashboard/dist/assets/{table-BqxCXid2.js → table-llyEtj-7.js} +1 -1
- package/dashboard/dist/assets/terminal-BB3Xfuv5.js +6 -0
- package/dashboard/dist/assets/{trash-2-6rN9B-EQ.js → trash-2-C8f4vFFM.js} +1 -1
- package/dashboard/dist/assets/{zap-DxUhG-gk.js → zap-4uwlzVm0.js} +1 -1
- package/dashboard/dist/index.html +2 -2
- package/dashboard/dist-server/dashboard/src/server/agents/agent-sdk-adapter.d.ts +1 -1
- package/dashboard/dist-server/dashboard/src/server/agents/agent-sdk-adapter.js +5 -4
- package/dashboard/dist-server/dashboard/src/server/agents/agent-sdk-adapter.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.js +8 -4
- package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/agents/entry-normalizer.d.ts +1 -0
- package/dashboard/dist-server/dashboard/src/server/agents/entry-normalizer.js +2 -1
- package/dashboard/dist-server/dashboard/src/server/agents/entry-normalizer.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/agents/stream-json-adapter.js +20 -10
- package/dashboard/dist-server/dashboard/src/server/agents/stream-json-adapter.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/agents/tools/issue-mcp-server.d.ts +1 -1
- package/dashboard/dist-server/dashboard/src/server/agents/tools/issue-mcp-server.js +3 -4
- package/dashboard/dist-server/dashboard/src/server/agents/tools/issue-mcp-server.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/agents/tools/issue-mcp-server.test.js +4 -4
- package/dashboard/dist-server/dashboard/src/server/agents/tools/issue-mcp-server.test.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/commander/commander-agent.js +4 -3
- package/dashboard/dist-server/dashboard/src/server/commander/commander-agent.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/commander/commander-agent.test.js +20 -7
- package/dashboard/dist-server/dashboard/src/server/commander/commander-agent.test.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/execution/wave-executor.d.ts +1 -1
- package/dashboard/dist-server/dashboard/src/server/execution/wave-executor.js +4 -4
- package/dashboard/dist-server/dashboard/src/server/execution/wave-executor.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/index.js +2 -1
- package/dashboard/dist-server/dashboard/src/server/index.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/routes/git.d.ts +2 -0
- package/dashboard/dist-server/dashboard/src/server/routes/git.js +79 -0
- package/dashboard/dist-server/dashboard/src/server/routes/git.js.map +1 -0
- package/dashboard/dist-server/dashboard/src/server/routes/index.js +3 -0
- package/dashboard/dist-server/dashboard/src/server/routes/index.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/routes/issues.js +14 -14
- package/dashboard/dist-server/dashboard/src/server/routes/issues.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/routes/linear.js +7 -5
- package/dashboard/dist-server/dashboard/src/server/routes/linear.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/routes/workspace.js +43 -0
- package/dashboard/dist-server/dashboard/src/server/routes/workspace.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/state/state-manager.js +186 -25
- package/dashboard/dist-server/dashboard/src/server/state/state-manager.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/utils/issue-store.d.ts +6 -0
- package/dashboard/dist-server/dashboard/src/server/utils/issue-store.js +24 -2
- package/dashboard/dist-server/dashboard/src/server/utils/issue-store.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/ws/handlers/execution-handler.js +4 -7
- package/dashboard/dist-server/dashboard/src/server/ws/handlers/execution-handler.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/shared/constants.js +2 -1
- package/dashboard/dist-server/dashboard/src/shared/constants.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/shared/constants.test.js +5 -5
- package/dashboard/dist-server/dashboard/src/shared/constants.test.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/shared/issue-types.test.js +4 -4
- package/dashboard/dist-server/dashboard/src/shared/issue-types.test.js.map +1 -1
- package/dashboard/dist-server/src/commands/delegate.js +7 -1
- package/dashboard/dist-server/src/commands/delegate.js.map +1 -1
- package/dashboard/package.json +59 -59
- package/dist/src/cli.js +3 -1
- package/dist/src/cli.js.map +1 -1
- package/dist/src/commands/{team.d.ts → collab.d.ts} +2 -2
- package/dist/src/commands/collab.d.ts.map +1 -0
- package/dist/src/commands/{team.js → collab.js} +391 -24
- package/dist/src/commands/collab.js.map +1 -0
- package/dist/src/commands/delegate.d.ts.map +1 -1
- package/dist/src/commands/delegate.js +7 -1
- package/dist/src/commands/delegate.js.map +1 -1
- package/dist/src/commands/msg.d.ts.map +1 -1
- package/dist/src/commands/msg.js +4 -3
- package/dist/src/commands/msg.js.map +1 -1
- package/dist/src/hooks/team-monitor.d.ts.map +1 -1
- package/dist/src/hooks/team-monitor.js +16 -0
- package/dist/src/hooks/team-monitor.js.map +1 -1
- package/dist/src/tools/collab-adapter.d.ts +85 -0
- package/dist/src/tools/collab-adapter.d.ts.map +1 -0
- package/dist/src/tools/collab-adapter.js +320 -0
- package/dist/src/tools/collab-adapter.js.map +1 -0
- package/dist/src/tools/namespace-guard.d.ts +2 -0
- package/dist/src/tools/namespace-guard.d.ts.map +1 -1
- package/dist/src/tools/namespace-guard.js +12 -0
- package/dist/src/tools/namespace-guard.js.map +1 -1
- package/dist/src/tools/phase-gate-evaluator.d.ts +45 -0
- package/dist/src/tools/phase-gate-evaluator.d.ts.map +1 -0
- package/dist/src/tools/phase-gate-evaluator.js +42 -0
- package/dist/src/tools/phase-gate-evaluator.js.map +1 -0
- package/dist/src/tools/team-members.d.ts +18 -0
- package/dist/src/tools/team-members.d.ts.map +1 -1
- package/dist/src/tools/team-members.js +50 -0
- package/dist/src/tools/team-members.js.map +1 -1
- package/dist/src/tools/team-tasks.d.ts +120 -0
- package/dist/src/tools/team-tasks.d.ts.map +1 -0
- package/dist/src/tools/team-tasks.js +365 -0
- package/dist/src/tools/team-tasks.js.map +1 -0
- package/dist/src/tools/transition-recorder.d.ts +3 -0
- package/dist/src/tools/transition-recorder.d.ts.map +1 -1
- package/dist/src/tools/transition-recorder.js +52 -1
- package/dist/src/tools/transition-recorder.js.map +1 -1
- package/dist/src/utils/get-version.d.ts.map +1 -1
- package/dist/src/utils/get-version.js +15 -4
- package/dist/src/utils/get-version.js.map +1 -1
- package/package.json +1 -1
- package/templates/config.json +7 -0
- package/templates/worktree-scope.json +10 -0
- package/templates/worktrees.json +27 -0
- package/workflows/analyze.md +86 -36
- package/workflows/brainstorm.md +17 -37
- package/workflows/delegate-usage.md +39 -41
- package/workflows/execute.md +247 -61
- package/workflows/fork.md +309 -0
- package/workflows/init.md +11 -2
- package/workflows/issue.md +66 -7
- package/workflows/maestro-coordinate.codex.md +1 -1
- package/workflows/maestro-coordinate.md +24 -17
- package/workflows/maestro.md +54 -37
- package/workflows/memory.md +2 -1
- package/workflows/merge.md +285 -0
- package/workflows/milestone-audit.md +89 -70
- package/workflows/milestone-complete.md +89 -156
- package/workflows/plan.md +131 -19
- package/workflows/retrospective.md +5 -5
- package/workflows/roadmap.md +12 -4
- package/workflows/spec-generate.md +9 -0
- package/workflows/status.md +76 -27
- package/workflows/ui-design.md +14 -12
- package/workflows/verify.md +44 -8
- package/.claude/commands/learn-retro-decision.md +0 -198
- package/.claude/commands/learn-retro-git.md +0 -160
- package/.claude/commands/maestro-phase-add.md +0 -63
- package/.claude/commands/maestro-phase-transition.md +0 -75
- package/.codex/skills/maestro-phase-add/SKILL.md +0 -154
- package/.codex/skills/maestro-phase-transition/SKILL.md +0 -173
- package/chains/singles/phase-add.json +0 -31
- package/chains/singles/phase-transition.json +0 -23
- package/dashboard/dist/assets/ChatInput-PuCvZZ3y.js +0 -67
- package/dashboard/dist/assets/ChatPage-v19GURYH.js +0 -8
- package/dashboard/dist/assets/CollabPage-I5k_mCbG.js +0 -1
- package/dashboard/dist/assets/KanbanPage-PDDBv5-9.js +0 -16
- package/dashboard/dist/assets/McpPage-CiqXpCHg.js +0 -16
- package/dashboard/dist/assets/TreeBrowser-0VIMWclo.js +0 -11
- package/dashboard/dist/assets/WorkflowPage-Csm23wUS.js +0 -6
- package/dashboard/dist/assets/git-branch-DL8p9kVC.js +0 -6
- package/dashboard/dist/assets/index-11DuhKhc.js +0 -231
- package/dashboard/dist/assets/index-D2Mtyw7I.css +0 -1
- package/dashboard/dist/assets/wrench-BScEJFqC.js +0 -11
- package/dist/src/commands/team.d.ts.map +0 -1
- package/dist/src/commands/team.js.map +0 -1
- package/workflows/phase-add.md +0 -252
- 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
|