maestro-flow-one 0.1.3 → 0.2.1
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/.ace-tool/index.json +108 -0
- package/README.md +10 -10
- package/bin/maestro-flow.js +30 -0
- package/claude/maestro-flow/SKILL.md +28 -94
- package/claude/maestro-flow/agents/cli-explore-agent.md +187 -0
- package/claude/maestro-flow/agents/conceptual-planning-agent.md +245 -0
- package/claude/maestro-flow/agents/team-supervisor.md +143 -0
- package/claude/maestro-flow/agents/team-worker.md +237 -0
- package/claude/maestro-flow/agents/ui-design-agent.md +286 -0
- package/claude/maestro-flow/agents/workflow-analyzer.md +115 -0
- package/claude/maestro-flow/agents/workflow-codebase-mapper.md +77 -0
- package/claude/maestro-flow/agents/workflow-collab-planner.md +143 -0
- package/claude/maestro-flow/agents/workflow-debugger.md +103 -0
- package/claude/maestro-flow/agents/workflow-executor.md +129 -0
- package/claude/maestro-flow/agents/workflow-external-researcher.md +86 -0
- package/claude/maestro-flow/agents/workflow-integration-checker.md +83 -0
- package/claude/maestro-flow/agents/workflow-nyquist-auditor.md +85 -0
- package/claude/maestro-flow/agents/workflow-phase-researcher.md +85 -0
- package/claude/maestro-flow/agents/workflow-plan-checker.md +90 -0
- package/claude/maestro-flow/agents/workflow-planner.md +195 -0
- package/claude/maestro-flow/agents/workflow-project-researcher.md +74 -0
- package/claude/maestro-flow/agents/workflow-research-synthesizer.md +70 -0
- package/claude/maestro-flow/agents/workflow-reviewer.md +82 -0
- package/claude/maestro-flow/agents/workflow-roadmapper.md +81 -0
- package/claude/maestro-flow/agents/workflow-verifier.md +120 -0
- package/claude/maestro-flow/executor.md +328 -0
- package/codex/maestro-flow/SKILL.md +18 -0
- package/codex/maestro-flow/agents/team-supervisor.toml +40 -0
- package/codex/maestro-flow/agents/team-worker.toml +63 -0
- package/maestro-flow/agents/cli-explore-agent.md +187 -0
- package/maestro-flow/agents/conceptual-planning-agent.md +245 -0
- package/maestro-flow/agents/team-supervisor.md +143 -0
- package/maestro-flow/agents/team-worker.md +237 -0
- package/maestro-flow/agents/ui-design-agent.md +286 -0
- package/maestro-flow/agents/workflow-analyzer.md +115 -0
- package/maestro-flow/agents/workflow-codebase-mapper.md +77 -0
- package/maestro-flow/agents/workflow-collab-planner.md +143 -0
- package/maestro-flow/agents/workflow-debugger.md +103 -0
- package/maestro-flow/agents/workflow-executor.md +129 -0
- package/maestro-flow/agents/workflow-external-researcher.md +86 -0
- package/maestro-flow/agents/workflow-integration-checker.md +83 -0
- package/maestro-flow/agents/workflow-nyquist-auditor.md +85 -0
- package/maestro-flow/agents/workflow-phase-researcher.md +85 -0
- package/maestro-flow/agents/workflow-plan-checker.md +90 -0
- package/maestro-flow/agents/workflow-planner.md +195 -0
- package/maestro-flow/agents/workflow-project-researcher.md +74 -0
- package/maestro-flow/agents/workflow-research-synthesizer.md +70 -0
- package/maestro-flow/agents/workflow-reviewer.md +82 -0
- package/maestro-flow/agents/workflow-roadmapper.md +81 -0
- package/maestro-flow/agents/workflow-verifier.md +120 -0
- package/maestro-flow/commands/learn/decompose.md +176 -0
- package/maestro-flow/commands/learn/follow.md +167 -0
- package/maestro-flow/commands/learn/investigate.md +221 -0
- package/maestro-flow/commands/learn/retro.md +303 -0
- package/maestro-flow/commands/learn/second-opinion.md +167 -0
- package/maestro-flow/commands/lifecycle/amend.md +300 -0
- package/maestro-flow/commands/lifecycle/analyze.md +130 -0
- package/maestro-flow/commands/lifecycle/brainstorm.md +104 -0
- package/maestro-flow/commands/lifecycle/composer.md +354 -0
- package/maestro-flow/commands/lifecycle/execute.md +120 -0
- package/maestro-flow/commands/lifecycle/fork.md +86 -0
- package/maestro-flow/commands/lifecycle/init.md +78 -0
- package/maestro-flow/commands/lifecycle/learn.md +140 -0
- package/maestro-flow/commands/lifecycle/link-coordinate.md +71 -0
- package/maestro-flow/commands/lifecycle/merge.md +61 -0
- package/maestro-flow/commands/lifecycle/overlay.md +178 -0
- package/maestro-flow/commands/lifecycle/plan.md +154 -0
- package/maestro-flow/commands/lifecycle/player.md +404 -0
- package/maestro-flow/commands/lifecycle/quick.md +56 -0
- package/maestro-flow/commands/lifecycle/roadmap.md +164 -0
- package/maestro-flow/commands/lifecycle/ui-design.md +93 -0
- package/maestro-flow/commands/lifecycle/update.md +176 -0
- package/maestro-flow/commands/lifecycle/verify.md +96 -0
- package/maestro-flow/commands/manage/codebase-rebuild.md +75 -0
- package/maestro-flow/commands/manage/codebase-refresh.md +57 -0
- package/maestro-flow/commands/manage/harvest.md +94 -0
- package/maestro-flow/commands/manage/issue-discover.md +77 -0
- package/maestro-flow/commands/manage/issue.md +73 -0
- package/maestro-flow/commands/manage/knowhow-capture.md +193 -0
- package/maestro-flow/commands/manage/knowhow.md +77 -0
- package/maestro-flow/commands/manage/learn.md +67 -0
- package/maestro-flow/commands/manage/status.md +51 -0
- package/maestro-flow/commands/manage/wiki.md +62 -0
- package/maestro-flow/commands/milestone/audit.md +68 -0
- package/maestro-flow/commands/milestone/complete.md +75 -0
- package/maestro-flow/commands/milestone/release.md +96 -0
- package/maestro-flow/commands/quality/auto-test.md +128 -0
- package/maestro-flow/commands/quality/debug.md +125 -0
- package/maestro-flow/commands/quality/refactor.md +55 -0
- package/maestro-flow/commands/quality/retrospective.md +78 -0
- package/maestro-flow/commands/quality/review.md +114 -0
- package/maestro-flow/commands/quality/sync.md +51 -0
- package/maestro-flow/commands/quality/test.md +107 -0
- package/maestro-flow/commands/spec/add.md +49 -0
- package/maestro-flow/commands/spec/load.md +51 -0
- package/maestro-flow/commands/spec/remove.md +51 -0
- package/maestro-flow/commands/spec/setup.md +51 -0
- package/maestro-flow/commands/wiki/connect.md +62 -0
- package/maestro-flow/commands/wiki/digest.md +69 -0
- package/package.json +1 -1
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: learn-retro
|
|
3
|
+
description: Retrospective of git activity and decision quality
|
|
4
|
+
argument-hint: "[--lens git|decision|all] [--days N] [--author <name>] [--area <path>] [--phase N] [--tag <tag>] [--id <id>] [--compare]"
|
|
5
|
+
allowed-tools:
|
|
6
|
+
- Read
|
|
7
|
+
- Write
|
|
8
|
+
- Bash
|
|
9
|
+
- Glob
|
|
10
|
+
- Grep
|
|
11
|
+
- Agent
|
|
12
|
+
- AskUserQuestion
|
|
13
|
+
---
|
|
14
|
+
<purpose>
|
|
15
|
+
Unified retrospective that combines git activity analysis and decision quality evaluation into a single command with lens-based selection. Works on raw git history and wiki/spec data — does not require completed phase artifacts (unlike `quality-retrospective`).
|
|
16
|
+
|
|
17
|
+
Two lenses, usable independently or together:
|
|
18
|
+
- **git**: Commit metrics, session detection, per-author breakdown, file hotspots, trend tracking
|
|
19
|
+
- **decision**: Decision tracing across wiki/specs/git, multi-perspective evaluation, lifecycle classification
|
|
20
|
+
|
|
21
|
+
All insights persist to `.workflow/learning/lessons.jsonl` for cross-session queryability via `manage-learn`.
|
|
22
|
+
</purpose>
|
|
23
|
+
|
|
24
|
+
<context>
|
|
25
|
+
Arguments: $ARGUMENTS
|
|
26
|
+
|
|
27
|
+
**Lens selection:**
|
|
28
|
+
- `--lens git` — Git activity retrospective only
|
|
29
|
+
- `--lens decision` — Decision evaluation only
|
|
30
|
+
- `--lens all` — Both lenses (default)
|
|
31
|
+
|
|
32
|
+
**Git lens flags:**
|
|
33
|
+
- `--days N` — Time window in days (default: 7)
|
|
34
|
+
- `--author <name>` — Filter commits by author name (substring match)
|
|
35
|
+
- `--area <path>` — Scope to files under a specific directory
|
|
36
|
+
- `--compare` — Compare against the previous retro report if one exists
|
|
37
|
+
|
|
38
|
+
**Decision lens flags:**
|
|
39
|
+
- `--phase N` — Decisions from phase N's context and related specs
|
|
40
|
+
- `--tag <tag>` — Decisions tagged with specific tag in wiki/specs
|
|
41
|
+
- `--id <id>` — Single decision by wiki ID or lessons.jsonl INS-id
|
|
42
|
+
|
|
43
|
+
**Storage written:**
|
|
44
|
+
- `.workflow/learning/retro-{YYYY-MM-DD}.md` — Unified human-readable report
|
|
45
|
+
- `.workflow/learning/retro-{YYYY-MM-DD}.json` — Structured metrics (machine-readable)
|
|
46
|
+
- `.workflow/learning/lessons.jsonl` — Appended insights (source: "retro-git" or "retro-decision")
|
|
47
|
+
- `.workflow/learning/learning-index.json` — Updated index
|
|
48
|
+
|
|
49
|
+
**Storage read:**
|
|
50
|
+
- `.workflow/state.json` — Current phase context (optional)
|
|
51
|
+
- `.workflow/learning/retro-*.json` — Prior retro for trend comparison
|
|
52
|
+
- `.workflow/learning/lessons.jsonl` — Existing insights for dedup
|
|
53
|
+
- `maestro wiki list --type spec --json` — Spec entries (decision lens)
|
|
54
|
+
- `.workflow/specs/architecture-constraints.md` — Documented architectural decisions (decision lens)
|
|
55
|
+
- Phase context with Locked/Free/Deferred decisions (decision lens) — resolve via `state.json.artifacts[]` scratch paths
|
|
56
|
+
</context>
|
|
57
|
+
|
|
58
|
+
<execution>
|
|
59
|
+
|
|
60
|
+
### Stage 1: Parse Arguments & Select Lenses
|
|
61
|
+
- Parse `--lens` flag: `git`, `decision`, or `all` (default: `all`)
|
|
62
|
+
- Extract lens-specific flags
|
|
63
|
+
- Check `.workflow/learning/` exists; bootstrap if missing
|
|
64
|
+
|
|
65
|
+
Display banner:
|
|
66
|
+
```
|
|
67
|
+
============================================================
|
|
68
|
+
LEARN RETRO
|
|
69
|
+
============================================================
|
|
70
|
+
Lens: {git | decision | all}
|
|
71
|
+
Scope: {days/author/area for git} {phase/tag/id for decision}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
### Stage 2: Git Lens (skip if --lens decision)
|
|
77
|
+
|
|
78
|
+
#### 2a: Gather Raw Data (parallel git commands)
|
|
79
|
+
Run ALL these git commands in parallel:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
# Commit stats with author, timestamp, subject, files changed
|
|
83
|
+
git log --since="<start-date>T00:00:00" --format="%H|%aN|%ae|%ai|%s" --shortstat
|
|
84
|
+
|
|
85
|
+
# Per-commit numstat for test vs production LOC split
|
|
86
|
+
git log --since="<start-date>T00:00:00" --format="COMMIT:%H|%aN" --numstat
|
|
87
|
+
|
|
88
|
+
# Timestamps for session detection (sorted)
|
|
89
|
+
git log --since="<start-date>T00:00:00" --format="%at|%aN|%ai|%s" | sort -n
|
|
90
|
+
|
|
91
|
+
# File hotspots (most frequently changed files)
|
|
92
|
+
git log --since="<start-date>T00:00:00" --format="" --name-only | grep -v '^$' | sort | uniq -c | sort -rn | head -20
|
|
93
|
+
|
|
94
|
+
# Per-author commit counts
|
|
95
|
+
git shortlog --since="<start-date>T00:00:00" -sn --no-merges
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Apply `--author` and `--area` filters if provided.
|
|
99
|
+
|
|
100
|
+
#### 2b: Compute Metrics
|
|
101
|
+
| Metric | Computation |
|
|
102
|
+
|--------|-------------|
|
|
103
|
+
| Commits | Count of non-merge commits |
|
|
104
|
+
| Contributors | Unique author count |
|
|
105
|
+
| Total insertions / deletions | Sum from shortstat |
|
|
106
|
+
| Net LOC | insertions - deletions |
|
|
107
|
+
| Test LOC (insertions) | Sum insertions for test files from numstat |
|
|
108
|
+
| Test ratio | test_insertions / total_insertions x 100% |
|
|
109
|
+
| Churn rate | Files changed >2 times / total unique files |
|
|
110
|
+
| Active days | Distinct dates with commits |
|
|
111
|
+
|
|
112
|
+
#### 2c: Detect Work Sessions
|
|
113
|
+
Cluster commits by >2hr gaps in timestamps:
|
|
114
|
+
- Per session: start time, end time, duration, commit count, primary focus area
|
|
115
|
+
- Compute: total sessions, avg session duration, avg LOC/session-hour
|
|
116
|
+
|
|
117
|
+
#### 2d: Per-Author Breakdown
|
|
118
|
+
For each author:
|
|
119
|
+
- Commit count, LOC added/removed, top 3 file areas
|
|
120
|
+
- Test ratio (their test LOC / their total LOC)
|
|
121
|
+
- Session count and patterns
|
|
122
|
+
|
|
123
|
+
#### 2e: Trend Comparison (if --compare or prior report exists)
|
|
124
|
+
- Find most recent `.workflow/learning/retro-*.json`
|
|
125
|
+
- Compute deltas: commits, LOC, test ratio, churn rate, session count
|
|
126
|
+
- Flag significant changes (>20% delta) as trend highlights
|
|
127
|
+
|
|
128
|
+
#### 2f: Distill Git Insights
|
|
129
|
+
- **High churn files** (changed >3 times): instability signal
|
|
130
|
+
- **Low test ratio areas** (<20%): testing gap
|
|
131
|
+
- **Session patterns**: scattered vs deep sessions
|
|
132
|
+
- **Area drift**: commits not aligned with current roadmap phase
|
|
133
|
+
|
|
134
|
+
Each insight: title, description, category (pattern/antipattern/technique), tags, confidence.
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
### Stage 3: Decision Lens (skip if --lens git)
|
|
139
|
+
|
|
140
|
+
#### 3a: Collect Decisions (parallel)
|
|
141
|
+
```bash
|
|
142
|
+
maestro wiki search "decision" --json
|
|
143
|
+
maestro wiki list --type spec --json
|
|
144
|
+
git log --oneline --all --grep="decision\|chose\|decided\|architecture" -20
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
Also read:
|
|
148
|
+
- `.workflow/specs/architecture-constraints.md` — grep for `<spec-entry category="arch"` blocks
|
|
149
|
+
- Phase context files — resolve via `state.json.artifacts[]` scratch paths — scan for "Locked:", "Deferred:" sections
|
|
150
|
+
- `.workflow/learning/lessons.jsonl` — filter `category == "decision"`
|
|
151
|
+
|
|
152
|
+
Apply scope filter (--phase, --tag, --id).
|
|
153
|
+
|
|
154
|
+
#### 3b: Build Decision Registry
|
|
155
|
+
Per decision:
|
|
156
|
+
```json
|
|
157
|
+
{
|
|
158
|
+
"id": "source id",
|
|
159
|
+
"title": "what was decided",
|
|
160
|
+
"source": "wiki|spec|phase-context|lesson|git",
|
|
161
|
+
"date": "when decided",
|
|
162
|
+
"rationale": "why",
|
|
163
|
+
"alternatives": "what was considered",
|
|
164
|
+
"phase": "which phase",
|
|
165
|
+
"implementation_evidence": ["file paths from git"]
|
|
166
|
+
}
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
#### 3c: Multi-Perspective Evaluation
|
|
170
|
+
Spawn 3 Agents in a single message:
|
|
171
|
+
|
|
172
|
+
**Agent 1 — Technical Soundness:**
|
|
173
|
+
- Does implementation match stated intent?
|
|
174
|
+
- Has technical context changed since decision was made?
|
|
175
|
+
- Grade: sound / degraded / violated
|
|
176
|
+
|
|
177
|
+
**Agent 2 — Cost Assessment:**
|
|
178
|
+
- What complexity did this decision add?
|
|
179
|
+
- Is it creating coupling or tech debt?
|
|
180
|
+
- Grade: low-cost / acceptable / expensive / debt-creating
|
|
181
|
+
|
|
182
|
+
**Agent 3 — Alternative Hindsight:**
|
|
183
|
+
- With what we know now, was this the right call?
|
|
184
|
+
- Would reversing be feasible?
|
|
185
|
+
- Grade: confirmed / questionable / should-revisit
|
|
186
|
+
|
|
187
|
+
#### 3d: Classify Decision Lifecycle
|
|
188
|
+
| Status | Criteria |
|
|
189
|
+
|--------|---------|
|
|
190
|
+
| **Validated** | Sound + Low/Acceptable cost + Confirmed |
|
|
191
|
+
| **Aging** | Sound but Expensive + Confirmed |
|
|
192
|
+
| **Questionable** | Degraded or Violated + Questionable |
|
|
193
|
+
| **Stale** | Any + Should-revisit |
|
|
194
|
+
| **Reversed** | Code contradicts the decision |
|
|
195
|
+
|
|
196
|
+
#### 3e: Generate Recommendations
|
|
197
|
+
- **Aging**: flag for tech debt review
|
|
198
|
+
- **Questionable**: create issue for investigation
|
|
199
|
+
- **Stale**: suggest decision refresh
|
|
200
|
+
- **Reversed**: suggest documenting the reversal
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
### Stage 4: Unified Report
|
|
205
|
+
|
|
206
|
+
Write `.workflow/learning/retro-{date}.md`:
|
|
207
|
+
|
|
208
|
+
```markdown
|
|
209
|
+
# Retrospective: {date}
|
|
210
|
+
**Lenses:** {active lenses} | **Period:** {days}d
|
|
211
|
+
|
|
212
|
+
## Git Activity (if git lens active)
|
|
213
|
+
### Metrics
|
|
214
|
+
| Metric | Value | Trend |
|
|
215
|
+
|--------|-------|-------|
|
|
216
|
+
| Commits | N | +/-% |
|
|
217
|
+
| ...
|
|
218
|
+
|
|
219
|
+
### Work Sessions
|
|
220
|
+
{session timeline}
|
|
221
|
+
|
|
222
|
+
### File Hotspots
|
|
223
|
+
{top 10 most-changed files}
|
|
224
|
+
|
|
225
|
+
### Per-Author
|
|
226
|
+
{author breakdown table}
|
|
227
|
+
|
|
228
|
+
## Decision Health (if decision lens active)
|
|
229
|
+
### Dashboard
|
|
230
|
+
| Status | Count | Decisions |
|
|
231
|
+
|--------|-------|-----------|
|
|
232
|
+
| Validated | N | {list} |
|
|
233
|
+
| Aging | N | {list} |
|
|
234
|
+
| ...
|
|
235
|
+
|
|
236
|
+
### Per-Decision Evaluation
|
|
237
|
+
{detailed evaluations}
|
|
238
|
+
|
|
239
|
+
## Combined Insights
|
|
240
|
+
{merged insights from both lenses, deduplicated}
|
|
241
|
+
|
|
242
|
+
## Recommended Actions
|
|
243
|
+
1. {action}: {reason}
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
Write `.workflow/learning/retro-{date}.json` with structured data.
|
|
247
|
+
|
|
248
|
+
---
|
|
249
|
+
|
|
250
|
+
### Stage 5: Persist
|
|
251
|
+
1. Write report files
|
|
252
|
+
2. Append insights to `lessons.jsonl`:
|
|
253
|
+
- Git insights: `source: "retro-git"`, `category` per insight type
|
|
254
|
+
- Decision insights: `source: "retro-decision"`, `category: "decision"`
|
|
255
|
+
- Stable INS-id from `hash(lens + metric_or_decision + date)`
|
|
256
|
+
3. Update `learning-index.json`
|
|
257
|
+
4. Display summary
|
|
258
|
+
|
|
259
|
+
**Next-step routing:**
|
|
260
|
+
- Browse insights → `/manage-learn list --tag retro`
|
|
261
|
+
- Deep dive on high-churn file → `/learn-follow <path>`
|
|
262
|
+
- Fix test gaps → `/quality-auto-test <area>`
|
|
263
|
+
- Create issue for questionable decision → `/manage-issue create ...`
|
|
264
|
+
- Investigate stale decision → `/learn-investigate <question>`
|
|
265
|
+
- Full phase retrospective → `/quality-retrospective`
|
|
266
|
+
</execution>
|
|
267
|
+
|
|
268
|
+
<error_codes>
|
|
269
|
+
| Code | Severity | Condition | Recovery |
|
|
270
|
+
|------|----------|-----------|----------|
|
|
271
|
+
| E001 | error | Not inside a git repository (git lens) | Navigate to a git repo directory |
|
|
272
|
+
| E002 | error | No commits found in time window (git lens) | Increase --days or check filters |
|
|
273
|
+
| E003 | error | No decisions found in any source (decision lens) | Check wiki/specs content, or provide --id |
|
|
274
|
+
| E004 | error | --id not found in wiki or lessons (decision lens) | Verify the decision ID exists |
|
|
275
|
+
| W001 | warning | `.workflow/learning/` not found, bootstrapping | Auto-created; proceed normally |
|
|
276
|
+
| W002 | warning | No prior retro report for comparison | Skip trend section; first retro establishes baseline |
|
|
277
|
+
| W003 | warning | One perspective agent failed — partial evaluation (decision lens) | Proceed with available perspectives |
|
|
278
|
+
| W004 | warning | No git implementation evidence for a decision | Evaluation is theoretical only |
|
|
279
|
+
| W005 | warning | Phase context files not found (decision lens) | Skip phase-context decisions |
|
|
280
|
+
</error_codes>
|
|
281
|
+
|
|
282
|
+
<success_criteria>
|
|
283
|
+
- [ ] Lens selection parsed correctly (git / decision / all)
|
|
284
|
+
- [ ] Git lens (if active):
|
|
285
|
+
- [ ] All git commands executed successfully
|
|
286
|
+
- [ ] Metrics computed: commits, LOC, test ratio, churn rate, sessions
|
|
287
|
+
- [ ] Sessions detected with >2hr gap clustering
|
|
288
|
+
- [ ] Per-author breakdown generated
|
|
289
|
+
- [ ] Trend comparison computed if prior report exists
|
|
290
|
+
- [ ] At least 1 actionable insight distilled
|
|
291
|
+
- [ ] Decision lens (if active):
|
|
292
|
+
- [ ] Decisions collected from available sources
|
|
293
|
+
- [ ] Scope filter applied correctly
|
|
294
|
+
- [ ] 3 perspective agents spawned in parallel
|
|
295
|
+
- [ ] Each decision classified by lifecycle status
|
|
296
|
+
- [ ] Recommendations generated for non-Validated decisions
|
|
297
|
+
- [ ] Unified report written to `retro-{date}.md`
|
|
298
|
+
- [ ] Structured data written to `retro-{date}.json`
|
|
299
|
+
- [ ] `lessons.jsonl` appended with insights (stable INS-ids)
|
|
300
|
+
- [ ] `learning-index.json` updated
|
|
301
|
+
- [ ] No files modified outside `.workflow/learning/`
|
|
302
|
+
- [ ] Summary displayed with next-step routing
|
|
303
|
+
</success_criteria>
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: learn-second-opinion
|
|
3
|
+
description: Get alternative perspectives — review, challenge, or consult
|
|
4
|
+
argument-hint: "<target> [--mode review|challenge|consult]"
|
|
5
|
+
allowed-tools:
|
|
6
|
+
- Read
|
|
7
|
+
- Write
|
|
8
|
+
- Bash
|
|
9
|
+
- Glob
|
|
10
|
+
- Grep
|
|
11
|
+
- Agent
|
|
12
|
+
- AskUserQuestion
|
|
13
|
+
---
|
|
14
|
+
<purpose>
|
|
15
|
+
Structured second-opinion workflow for code, decisions, or plans. Three modes inspired by gstack `/codex`:
|
|
16
|
+
|
|
17
|
+
- **review** (default): 3 parallel agents with distinct personas (pragmatist, purist, strategist) independently assess the target
|
|
18
|
+
- **challenge**: single adversarial agent that tries to break the approach, find hidden assumptions, and propose alternatives
|
|
19
|
+
- **consult**: interactive Q&A mode where the agent studies the target and answers your questions
|
|
20
|
+
|
|
21
|
+
Decoupled from the phase/execution lifecycle — can be invoked on any piece of code or knowledge at any time. Findings persist to `lessons.jsonl`.
|
|
22
|
+
</purpose>
|
|
23
|
+
|
|
24
|
+
<context>
|
|
25
|
+
Arguments: $ARGUMENTS
|
|
26
|
+
|
|
27
|
+
**Target resolution (auto-detected):**
|
|
28
|
+
- File path → analyze that file's content
|
|
29
|
+
- Wiki ID (`<type>-<slug>`) → fetch via `maestro wiki get`
|
|
30
|
+
- `HEAD` or `staged` → analyze current git diff (`git diff HEAD` or `git diff --staged`)
|
|
31
|
+
- Phase number (e.g., `3`) → resolve via `state.json.artifacts[]` to find plan in scratch dir
|
|
32
|
+
|
|
33
|
+
**Flags:**
|
|
34
|
+
- `--mode review` — 3-persona parallel review (default)
|
|
35
|
+
- `--mode challenge` — Adversarial single-agent analysis
|
|
36
|
+
- `--mode consult` — Interactive Q&A session
|
|
37
|
+
|
|
38
|
+
**Storage written:**
|
|
39
|
+
- `.workflow/learning/opinion-{slug}-{YYYY-MM-DD}.md` — Opinion report
|
|
40
|
+
- `.workflow/learning/lessons.jsonl` — New insights from analysis (source: "second-opinion")
|
|
41
|
+
- `.workflow/learning/learning-index.json` — Updated index
|
|
42
|
+
|
|
43
|
+
**Storage read:**
|
|
44
|
+
- Target content (file, wiki entry, diff, or plan)
|
|
45
|
+
- `.workflow/specs/` — Project conventions for context
|
|
46
|
+
- `maestro wiki search` — Related knowledge entries
|
|
47
|
+
- `.workflow/learning/lessons.jsonl` — Prior insights about the topic
|
|
48
|
+
</context>
|
|
49
|
+
|
|
50
|
+
<execution>
|
|
51
|
+
|
|
52
|
+
### Stage 1: Resolve Target
|
|
53
|
+
- File path: Read the file
|
|
54
|
+
- Wiki ID: `maestro wiki get <id>`
|
|
55
|
+
- `HEAD`: `git diff HEAD` (unstaged + staged changes)
|
|
56
|
+
- `staged`: `git diff --staged`
|
|
57
|
+
- Phase N: Resolve via `state.json.artifacts.find(a => a.type === 'plan' && a.phase === N)` → read `.workflow/{artifact.path}/plan.json`
|
|
58
|
+
- If unresolvable, AskUserQuestion for clarification
|
|
59
|
+
|
|
60
|
+
### Stage 2: Load Context
|
|
61
|
+
- Read relevant specs: `Skill({ skill: "spec-load" })` silently to get project conventions
|
|
62
|
+
- Search wiki: `maestro wiki search "<target topic>"` for related entries (top 5)
|
|
63
|
+
- Search lessons: grep `lessons.jsonl` for entries related to the target area
|
|
64
|
+
- Build context brief: target content + conventions + related knowledge
|
|
65
|
+
|
|
66
|
+
### Stage 3: Execute Mode
|
|
67
|
+
|
|
68
|
+
#### Mode: review (default)
|
|
69
|
+
Spawn 3 Agents in a single message with distinct personas:
|
|
70
|
+
|
|
71
|
+
**Agent 1 — Pragmatist:**
|
|
72
|
+
- Focus: simplicity, YAGNI, maintenance cost, readability
|
|
73
|
+
- Question: "Is this the simplest thing that could work? What's the maintenance burden?"
|
|
74
|
+
- Evaluates: complexity score, abstraction depth, dependency count
|
|
75
|
+
|
|
76
|
+
**Agent 2 — Purist:**
|
|
77
|
+
- Focus: correctness, type safety, edge cases, error handling
|
|
78
|
+
- Question: "What assumptions can be violated? Where are the edge cases?"
|
|
79
|
+
- Evaluates: error paths covered, type completeness, invariant preservation
|
|
80
|
+
|
|
81
|
+
**Agent 3 — Strategist:**
|
|
82
|
+
- Focus: scalability, extensibility, architecture alignment
|
|
83
|
+
- Question: "Does this support future growth? Does it fit the overall architecture?"
|
|
84
|
+
- Evaluates: coupling, cohesion, architecture constraint compliance
|
|
85
|
+
|
|
86
|
+
Each agent returns:
|
|
87
|
+
```json
|
|
88
|
+
{
|
|
89
|
+
"persona": "pragmatist|purist|strategist",
|
|
90
|
+
"verdict": "approve|concern|reject",
|
|
91
|
+
"confidence": "high|medium|low",
|
|
92
|
+
"findings": [{ "severity": "high|medium|low", "description": "...", "location": "file:line", "suggestion": "..." }],
|
|
93
|
+
"summary": "one paragraph assessment"
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
#### Mode: challenge
|
|
98
|
+
Spawn 1 Agent as an adversarial reviewer:
|
|
99
|
+
|
|
100
|
+
- Try to find the weakest assumption in the approach
|
|
101
|
+
- Propose a concrete scenario that breaks the current implementation
|
|
102
|
+
- Identify the single biggest risk
|
|
103
|
+
- Suggest an alternative approach and argue why it might be better
|
|
104
|
+
- Apply forcing questions:
|
|
105
|
+
- "What assumption would invalidate this entire approach?"
|
|
106
|
+
- "What's the simplest thing that breaks this?"
|
|
107
|
+
- "If you had to rewrite this in 6 months, what would you regret?"
|
|
108
|
+
- "What's the implicit contract that isn't enforced?"
|
|
109
|
+
|
|
110
|
+
#### Mode: consult
|
|
111
|
+
Interactive loop:
|
|
112
|
+
1. Agent studies the target content thoroughly
|
|
113
|
+
2. Display: "Target loaded. What would you like to know?"
|
|
114
|
+
3. AskUserQuestion for the first question
|
|
115
|
+
4. Agent answers with code references and evidence
|
|
116
|
+
5. Loop: AskUserQuestion for follow-up or "done" to exit
|
|
117
|
+
6. On exit, compile all Q&A into the report
|
|
118
|
+
|
|
119
|
+
### Stage 4: Synthesize
|
|
120
|
+
Across all perspectives (or from single agent in challenge/consult):
|
|
121
|
+
- **Points of agreement**: findings all personas share
|
|
122
|
+
- **Points of disagreement**: where personas diverge (with reasoning)
|
|
123
|
+
- **Verdict**: combined assessment with confidence level
|
|
124
|
+
- **Top 3 recommendations**: prioritized by impact
|
|
125
|
+
|
|
126
|
+
### Stage 5: Persist & Report
|
|
127
|
+
1. Write `.workflow/learning/opinion-{slug}-{date}.md`:
|
|
128
|
+
- Target summary
|
|
129
|
+
- Per-persona findings (review) / adversarial analysis (challenge) / Q&A transcript (consult)
|
|
130
|
+
- Synthesis: agreements, disagreements, verdict
|
|
131
|
+
- Recommendations
|
|
132
|
+
2. Append non-trivial findings to `lessons.jsonl`:
|
|
133
|
+
- `source: "second-opinion"`, `category: "pattern"` or `"antipattern"` or `"decision"`
|
|
134
|
+
- Tags: `["second-opinion", "{mode}", "{target-slug}"]`
|
|
135
|
+
3. Update `learning-index.json`
|
|
136
|
+
4. Display summary with verdict and recommendations
|
|
137
|
+
|
|
138
|
+
**Next-step routing:**
|
|
139
|
+
- Create issue for a finding → `/manage-issue create <description>`
|
|
140
|
+
- Decompose patterns found → `/learn-decompose <path>`
|
|
141
|
+
- Follow-along on the code → `/learn-follow <path>`
|
|
142
|
+
</execution>
|
|
143
|
+
|
|
144
|
+
<error_codes>
|
|
145
|
+
| Code | Severity | Condition | Recovery |
|
|
146
|
+
|------|----------|-----------|----------|
|
|
147
|
+
| E001 | error | Target not resolvable (file/wiki/diff/plan not found) | Verify target argument, provide correct path or ID |
|
|
148
|
+
| E002 | error | Unknown --mode value | Use: review, challenge, or consult |
|
|
149
|
+
| W001 | warning | One review agent failed — partial perspectives | Proceed with available agents, note incomplete coverage |
|
|
150
|
+
| W002 | warning | No related wiki entries found for context | Proceed without wiki context |
|
|
151
|
+
| W003 | warning | Git diff empty (no changes) for HEAD/staged target | Nothing to review; suggest using a file path instead |
|
|
152
|
+
</error_codes>
|
|
153
|
+
|
|
154
|
+
<success_criteria>
|
|
155
|
+
- [ ] Target resolved and content loaded
|
|
156
|
+
- [ ] Context gathered (specs, wiki, lessons)
|
|
157
|
+
- [ ] Mode executed correctly:
|
|
158
|
+
- review: 3 agents spawned in parallel, all returned findings
|
|
159
|
+
- challenge: adversarial analysis completed with forcing questions
|
|
160
|
+
- consult: interactive Q&A loop completed
|
|
161
|
+
- [ ] Synthesis produced with agreements, disagreements, verdict
|
|
162
|
+
- [ ] Report written to `opinion-{slug}-{date}.md`
|
|
163
|
+
- [ ] Non-trivial findings appended to `lessons.jsonl`
|
|
164
|
+
- [ ] `learning-index.json` updated
|
|
165
|
+
- [ ] No files modified outside `.workflow/learning/`
|
|
166
|
+
- [ ] Summary displayed with verdict and next-step routing
|
|
167
|
+
</success_criteria>
|