maestro-flow 0.3.6 → 0.3.8
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-retro.md +303 -0
- package/.claude/commands/maestro-execute.md +3 -2
- package/.claude/commands/maestro-learn.md +74 -298
- package/.claude/commands/manage-learn.md +21 -15
- package/.claude/commands/manage-memory-capture.md +13 -15
- package/.claude/commands/manage-memory.md +1 -1
- package/.claude/commands/quality-retrospective.md +5 -5
- package/.claude/commands/spec-load.md +7 -2
- package/.claude/commands/wiki-digest.md +27 -2
- package/README.md +103 -220
- package/README.zh-CN.md +159 -181
- package/dashboard/dist/assets/{ArtifactsPage-A9yzYtpj.js → ArtifactsPage-BmPOu8sO.js} +1 -1
- package/dashboard/dist/assets/{ChatInput-PuCvZZ3y.js → ChatInput-CL8YDfOU.js} +1 -1
- package/dashboard/dist/assets/ChatPage-CT-ozBK2.js +8 -0
- package/dashboard/dist/assets/{CollabPage-I5k_mCbG.js → CollabPage-C0rWMden.js} +1 -1
- package/dashboard/dist/assets/{KanbanPage-PDDBv5-9.js → KanbanPage-C6WbAlwI.js} +1 -1
- package/dashboard/dist/assets/{MarkdownRenderer-CCXHaut3.js → MarkdownRenderer-BjZ43aSa.js} +1 -1
- package/dashboard/dist/assets/{McpPage-CiqXpCHg.js → McpPage-BPIXADQi.js} +1 -1
- package/dashboard/dist/assets/{RequirementBoardPage-CEOvppGn.js → RequirementBoardPage-B7yRL0s_.js} +1 -1
- package/dashboard/dist/assets/{RequirementPage-DpnbTEqY.js → RequirementPage-D8J_-b6O.js} +1 -1
- package/dashboard/dist/assets/{SpecsPage-CYqOfFkB.js → SpecsPage-6lO8v8_C.js} +1 -1
- package/dashboard/dist/assets/{SupervisorPage-B2sZwkq8.js → SupervisorPage-Ds5N378a.js} +1 -1
- package/dashboard/dist/assets/{TeamsPage-CkZdCAVZ.js → TeamsPage-DrkKr17T.js} +1 -1
- package/dashboard/dist/assets/{TreeBrowser-0VIMWclo.js → TreeBrowser-g_QUKemL.js} +1 -1
- package/dashboard/dist/assets/WorkflowPage-X8aNkDEr.js +6 -0
- package/dashboard/dist/assets/{arrow-left-6fktHyjN.js → arrow-left-CadP5YgU.js} +1 -1
- package/dashboard/dist/assets/{check-Cbxq2l1-.js → check-5xufDzS8.js} +1 -1
- package/dashboard/dist/assets/{chevron-right-Yts3bi8p.js → chevron-right-CYbpR4ev.js} +1 -1
- package/dashboard/dist/assets/{circle-4Ci4Xolf.js → circle-Bm-5Q-Yh.js} +1 -1
- package/dashboard/dist/assets/{circle-alert-B25g9BTL.js → circle-alert-BqcYuT7x.js} +1 -1
- package/dashboard/dist/assets/{circle-check-BA5_XqeV.js → circle-check-DEVzW_lm.js} +1 -1
- package/dashboard/dist/assets/{circle-check-big-DzO2BlL7.js → circle-check-big-yyzAFysU.js} +1 -1
- package/dashboard/dist/assets/{code-zxwuybO8.js → code-BBdC8Wmw.js} +1 -1
- package/dashboard/dist/assets/{columns-3-DV4oeCfU.js → columns-3-CQ9Trztr.js} +1 -1
- package/dashboard/dist/assets/{download-CXCyQw8M.js → download-DayuF-sn.js} +1 -1
- package/dashboard/dist/assets/{folder-Bvjj8Vn9.js → folder-CqXeSKeC.js} +1 -1
- package/dashboard/dist/assets/{git-branch-DL8p9kVC.js → git-branch-SqFf4Ru5.js} +1 -1
- package/dashboard/dist/assets/{index-BvScJmJM.js → index-Dru5HYy0.js} +1 -1
- package/dashboard/dist/assets/{index-11DuhKhc.js → index-nufWop4p.js} +18 -18
- package/dashboard/dist/assets/{list-Dj4i9N75.js → list-DBOD6IUt.js} +1 -1
- package/dashboard/dist/assets/{minus-DwlFabsT.js → minus-fQI1Syn2.js} +1 -1
- package/dashboard/dist/assets/{pen-line-D7UzECt6.js → pen-line-Bkbbngl5.js} +1 -1
- package/dashboard/dist/assets/{proxy-B9XRqHD9.js → proxy-teW12DdZ.js} +1 -1
- package/dashboard/dist/assets/{search-BQbBTIYl.js → search-Bq3ygFUW.js} +1 -1
- package/dashboard/dist/assets/{shallow-Clb1Lyd_.js → shallow-22ZN8sFt.js} +1 -1
- package/dashboard/dist/assets/{table-BqxCXid2.js → table-BEYtdWc4.js} +1 -1
- package/dashboard/dist/assets/{trash-2-6rN9B-EQ.js → trash-2-DMqGBgcF.js} +1 -1
- package/dashboard/dist/assets/{wrench-BScEJFqC.js → wrench-B84-zdLI.js} +1 -1
- package/dashboard/dist/assets/{zap-DxUhG-gk.js → zap-9DVkGVtt.js} +1 -1
- package/dashboard/dist/index.html +1 -1
- 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/codex-cli-adapter.js +1 -1
- package/dashboard/dist-server/dashboard/src/server/agents/codex-cli-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/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/state/state-manager.js +144 -23
- 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/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/package.json +1 -1
- package/workflows/delegate-usage.md +39 -41
- package/workflows/execute.md +154 -34
- package/workflows/init.md +1 -1
- package/workflows/maestro-coordinate.codex.md +1 -1
- package/workflows/maestro-coordinate.md +1 -1
- package/workflows/maestro.md +2 -2
- package/workflows/memory.md +2 -1
- package/workflows/plan.md +9 -2
- package/workflows/retrospective.md +2 -2
- package/workflows/roadmap.md +1 -1
- package/.claude/commands/learn-retro-decision.md +0 -198
- package/.claude/commands/learn-retro-git.md +0 -160
- package/dashboard/dist/assets/ChatPage-v19GURYH.js +0 -8
- package/dashboard/dist/assets/WorkflowPage-Csm23wUS.js +0 -6
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: maestro-learn
|
|
3
|
-
description: Learning coordinator
|
|
3
|
+
description: Learning coordinator — route intent to learn commands, execute single or multi-step chains
|
|
4
4
|
argument-hint: "\"intent text\" [-y] [--dry-run] [--chain <name>]"
|
|
5
5
|
allowed-tools:
|
|
6
6
|
- Read
|
|
@@ -12,23 +12,18 @@ allowed-tools:
|
|
|
12
12
|
- AskUserQuestion
|
|
13
13
|
---
|
|
14
14
|
<purpose>
|
|
15
|
-
|
|
15
|
+
Route learning requests to the optimal learn command or multi-step chain. Supports direct chain selection via `--chain` or intent-based routing via keyword matching.
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
1. **Intent-based**: User describes a learning goal → classify → select command/chain → confirm → execute
|
|
19
|
-
2. **Direct**: User specifies a known chain name via `--chain`
|
|
20
|
-
|
|
21
|
-
Produces session directory at `.workflow/learning/.maestro-learn/{session_id}/` with status.json tracking chain progress.
|
|
22
|
-
Executes commands sequentially via Skill() with artifact propagation between steps.
|
|
17
|
+
Executes commands sequentially via Skill() with session tracking.
|
|
23
18
|
</purpose>
|
|
24
19
|
|
|
25
20
|
<context>
|
|
26
21
|
$ARGUMENTS — user learning intent text, or flags.
|
|
27
22
|
|
|
28
23
|
**Flags:**
|
|
29
|
-
- `-y` / `--yes` — Auto mode: skip
|
|
24
|
+
- `-y` / `--yes` — Auto mode: skip confirmation
|
|
30
25
|
- `--dry-run` — Show planned chain without executing
|
|
31
|
-
- `--chain <name>` — Force a specific chain (bypass intent detection)
|
|
26
|
+
- `--chain <name>` — Force a specific chain (bypass intent detection)
|
|
32
27
|
|
|
33
28
|
**Available learn commands:**
|
|
34
29
|
| Command | Purpose |
|
|
@@ -37,8 +32,18 @@ $ARGUMENTS — user learning intent text, or flags.
|
|
|
37
32
|
| `learn-investigate` | Hypothesis-driven question investigation |
|
|
38
33
|
| `learn-decompose` | 4-dimension parallel pattern extraction |
|
|
39
34
|
| `learn-second-opinion` | Multi-perspective review/challenge/consult |
|
|
40
|
-
| `learn-retro
|
|
41
|
-
|
|
35
|
+
| `learn-retro` | Unified retrospective (git metrics + decision evaluation) |
|
|
36
|
+
|
|
37
|
+
**Available chains:**
|
|
38
|
+
| Chain | Steps | Use when |
|
|
39
|
+
|-------|-------|----------|
|
|
40
|
+
| `follow` | learn-follow | Read/understand code or docs |
|
|
41
|
+
| `investigate` | learn-investigate | Answer a "how/why" question |
|
|
42
|
+
| `decompose` | learn-decompose | Catalog patterns in a module |
|
|
43
|
+
| `second-opinion` | learn-second-opinion | Get review/challenge on code |
|
|
44
|
+
| `retro` | learn-retro --lens all | Full retrospective (git + decisions) |
|
|
45
|
+
| `deep-understand` | follow → decompose → second-opinion | Thorough module analysis |
|
|
46
|
+
| `pattern-catalog` | decompose --save-spec --save-wiki → second-opinion --mode review | Full pattern extraction + review |
|
|
42
47
|
|
|
43
48
|
**Storage:**
|
|
44
49
|
- `.workflow/learning/.maestro-learn/{session_id}/status.json` — Session tracking
|
|
@@ -47,318 +52,89 @@ $ARGUMENTS — user learning intent text, or flags.
|
|
|
47
52
|
|
|
48
53
|
<execution>
|
|
49
54
|
|
|
50
|
-
### Step 1: Parse
|
|
51
|
-
|
|
52
|
-
```javascript
|
|
53
|
-
const autoYes = /\b(-y|--yes)\b/.test($ARGUMENTS)
|
|
54
|
-
const dryRun = /\b--dry-run\b/.test($ARGUMENTS)
|
|
55
|
-
const forcedChain = $ARGUMENTS.match(/--chain\s+(\S+)/)?.[1] || null
|
|
56
|
-
const intent = $ARGUMENTS
|
|
57
|
-
.replace(/\b(-y|--yes|--dry-run)\b/g, '')
|
|
58
|
-
.replace(/--chain\s+\S+/g, '')
|
|
59
|
-
.trim()
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
**Display banner:**
|
|
63
|
-
```
|
|
64
|
-
============================================================
|
|
65
|
-
MAESTRO LEARN COORDINATOR
|
|
66
|
-
============================================================
|
|
67
|
-
Mode: {intent-based | forced-chain}
|
|
68
|
-
Auto: {yes | no}
|
|
69
|
-
Input: {intent}
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
---
|
|
73
|
-
|
|
74
|
-
### Step 2: Analyze Intent
|
|
75
|
-
|
|
76
|
-
**If `$FORCED_CHAIN` is set:**
|
|
77
|
-
- Validate against known chains: `follow`, `investigate`, `decompose`, `second-opinion`, `retro-git`, `retro-decision`, `deep-understand`, `pattern-catalog`, `full-retro`
|
|
78
|
-
- If valid: skip intent analysis, jump to **Step 4**
|
|
79
|
-
- If invalid: **Error E005** — display valid chains
|
|
80
|
-
|
|
81
|
-
**Extract structured intent:**
|
|
82
|
-
|
|
83
|
-
```json
|
|
84
|
-
{
|
|
85
|
-
"action": "<from enum>",
|
|
86
|
-
"target": "<file path | module | topic | wiki-id | null>",
|
|
87
|
-
"mode": "<review | challenge | consult | null>",
|
|
88
|
-
"scope": "<path filter | null>",
|
|
89
|
-
"flags": "<--depth, --days, --save-wiki, etc.>"
|
|
90
|
-
}
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
**Action enum:**
|
|
94
|
-
|
|
95
|
-
| action | Triggered by (semantic) |
|
|
96
|
-
|--------|------------------------|
|
|
97
|
-
| `read` | Read code, follow along, walk through, understand file, 阅读, 跟读 |
|
|
98
|
-
| `question` | Why does X, how does Y work, what happens if, investigate, 为什么, 怎么 |
|
|
99
|
-
| `patterns` | Find patterns, decompose, catalog, extract conventions, 分解, 模式 |
|
|
100
|
-
| `opinion` | Second opinion, review, challenge, critique, consult, 评审, 挑战 |
|
|
101
|
-
| `retro-git` | Git activity, commit history, retro, work sessions, 提交回顾 |
|
|
102
|
-
| `retro-decision` | Decision review, architecture decisions, decision quality, 决策回顾 |
|
|
103
|
-
| `learn` | Generic learn, capture insight, remember — route to best fit |
|
|
104
|
-
|
|
105
|
-
**Target resolution:**
|
|
106
|
-
- Contains `/` or `\` or file extension → file path
|
|
107
|
-
- Matches `<type>-<slug>` → wiki ID
|
|
108
|
-
- Matches `--days`, `--author` → retro-git flags
|
|
109
|
-
- Matches `--phase`, `--tag`, `--id` → retro-decision flags
|
|
110
|
-
- Otherwise → topic string (passed as quoted argument)
|
|
111
|
-
|
|
112
|
-
---
|
|
113
|
-
|
|
114
|
-
### Step 3: Route via action → command
|
|
115
|
-
|
|
116
|
-
```javascript
|
|
117
|
-
const routeMap = {
|
|
118
|
-
'read': 'follow',
|
|
119
|
-
'question': 'investigate',
|
|
120
|
-
'patterns': 'decompose',
|
|
121
|
-
'opinion': 'second-opinion',
|
|
122
|
-
'retro-git': 'retro-git',
|
|
123
|
-
'retro-decision': 'retro-decision',
|
|
124
|
-
'learn': null, // needs disambiguation
|
|
125
|
-
};
|
|
126
|
-
|
|
127
|
-
function routeLearnIntent(action, target, intent) {
|
|
128
|
-
// Direct mapping
|
|
129
|
-
if (routeMap[action]) return routeMap[action];
|
|
130
|
-
|
|
131
|
-
// Disambiguate generic 'learn' based on target and context
|
|
132
|
-
if (target && isFilePath(target)) return 'follow';
|
|
133
|
-
if (target && isWikiId(target)) return 'follow';
|
|
134
|
-
if (/retro|commit|git|session/i.test(intent)) return 'retro-git';
|
|
135
|
-
if (/decision|architect/i.test(intent)) return 'retro-decision';
|
|
136
|
-
if (/pattern|decompose|catalog/i.test(intent)) return 'decompose';
|
|
137
|
-
if (/opinion|review|challenge/i.test(intent)) return 'second-opinion';
|
|
138
|
-
if (/why|how|what if/i.test(intent)) return 'investigate';
|
|
139
|
-
|
|
140
|
-
// Fallback: ask user
|
|
141
|
-
return null;
|
|
142
|
-
}
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
**Compute clarity score:**
|
|
146
|
-
- 3: `action` recognized + `target` present + specific flags
|
|
147
|
-
- 2: `action` recognized + `target` present
|
|
148
|
-
- 1: `action` recognized but no `target`
|
|
149
|
-
- 0: Cannot determine action
|
|
150
|
-
|
|
151
|
-
**If clarity < 2 and not autoYes:**
|
|
152
|
-
|
|
153
|
-
```
|
|
154
|
-
AskUserQuestion:
|
|
155
|
-
header: "What would you like to learn?"
|
|
156
|
-
question: |
|
|
157
|
-
I need a bit more detail. What are you trying to do?
|
|
158
|
-
options:
|
|
159
|
-
- "Read through code/docs" → follow
|
|
160
|
-
- "Investigate a question" → investigate
|
|
161
|
-
- "Find patterns in code" → decompose
|
|
162
|
-
- "Get a second opinion" → second-opinion
|
|
163
|
-
- "Review git activity" → retro-git
|
|
164
|
-
- "Evaluate decisions" → retro-decision
|
|
165
|
-
- "Let me rephrase" → re-parse
|
|
166
|
-
```
|
|
167
|
-
|
|
168
|
-
Max 2 clarification rounds. If still unclear: **Error E002**.
|
|
55
|
+
### Step 1: Parse & Route
|
|
169
56
|
|
|
170
|
-
|
|
57
|
+
Parse flags (`-y`, `--dry-run`, `--chain`). Extract intent text.
|
|
171
58
|
|
|
172
|
-
|
|
59
|
+
**If `--chain` specified:** validate against known chains, jump to Step 2.
|
|
173
60
|
|
|
174
|
-
|
|
61
|
+
**Intent routing table** (match first token or keywords):
|
|
175
62
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
63
|
+
| Keywords | Route |
|
|
64
|
+
|----------|-------|
|
|
65
|
+
| File path (contains `/` or `\`) | `follow` |
|
|
66
|
+
| Wiki ID (`type-slug` pattern) | `follow` |
|
|
67
|
+
| read, follow, walk through, understand, 阅读, 跟读 | `follow` |
|
|
68
|
+
| why, how, what if, investigate, 为什么, 怎么 | `investigate` |
|
|
69
|
+
| pattern, decompose, catalog, 分解, 模式 | `decompose` |
|
|
70
|
+
| opinion, review, challenge, consult, 评审, 挑战 | `second-opinion` |
|
|
71
|
+
| retro, git, commit, decision, 回顾 | `retro` |
|
|
72
|
+
| thorough, deep, 全面, 深入 | `deep-understand` |
|
|
185
73
|
|
|
186
|
-
|
|
187
|
-
'deep-understand': [
|
|
188
|
-
{ cmd: 'learn-follow', args: '{target} --depth deep' },
|
|
189
|
-
{ cmd: 'learn-decompose', args: '{target} --save-spec' },
|
|
190
|
-
{ cmd: 'learn-second-opinion', args: '{target} --mode challenge' }
|
|
191
|
-
],
|
|
192
|
-
'pattern-catalog': [
|
|
193
|
-
{ cmd: 'learn-decompose', args: '{target} --save-spec --save-wiki' },
|
|
194
|
-
{ cmd: 'learn-second-opinion', args: '{target} --mode review' }
|
|
195
|
-
],
|
|
196
|
-
'full-retro': [
|
|
197
|
-
{ cmd: 'learn-retro-git', args: '{flags}' },
|
|
198
|
-
{ cmd: 'learn-retro-decision', args: '{flags}' }
|
|
199
|
-
]
|
|
200
|
-
};
|
|
74
|
+
**If no match:** present menu via AskUserQuestion:
|
|
201
75
|
```
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
#### 4b: Assemble arguments
|
|
209
|
-
|
|
210
|
-
- Replace `{target}` with resolved target path/topic/wiki-id
|
|
211
|
-
- Replace `{flags}` with extracted flags (--depth, --days, --mode, --scope, etc.)
|
|
212
|
-
- Clean empty placeholders
|
|
213
|
-
|
|
214
|
-
#### 4c: Confirm (skip if autoYes)
|
|
215
|
-
|
|
216
|
-
**If `$DRY_RUN`:**
|
|
76
|
+
What would you like to do?
|
|
77
|
+
1. Read through code/docs → follow
|
|
78
|
+
2. Investigate a question → investigate
|
|
79
|
+
3. Find patterns in code → decompose
|
|
80
|
+
4. Get a second opinion → second-opinion
|
|
81
|
+
5. Retrospective → retro
|
|
217
82
|
```
|
|
218
|
-
============================================================
|
|
219
|
-
MAESTRO LEARN: {chain_name} (dry run)
|
|
220
|
-
============================================================
|
|
221
|
-
Intent: {original_intent}
|
|
222
|
-
Target: {resolved_target}
|
|
223
83
|
|
|
224
|
-
|
|
225
|
-
1. [{command}] args: {assembled_args}
|
|
226
|
-
...
|
|
84
|
+
Max 1 clarification round. If still unclear: error.
|
|
227
85
|
|
|
228
|
-
|
|
229
|
-
============================================================
|
|
230
|
-
```
|
|
231
|
-
Exit after display.
|
|
86
|
+
### Step 2: Resolve Target & Build Args
|
|
232
87
|
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
question: |
|
|
238
|
-
Execute this learning chain?
|
|
239
|
-
|
|
240
|
-
Pipeline:
|
|
241
|
-
1. {command} — {description}
|
|
242
|
-
...
|
|
88
|
+
- File path → pass directly
|
|
89
|
+
- Wiki ID → pass directly
|
|
90
|
+
- Topic string → pass as quoted argument
|
|
91
|
+
- Extract any flags (--depth, --days, --lens, --mode, --scope, etc.)
|
|
243
92
|
|
|
244
|
-
|
|
245
|
-
- "Execute" → proceed
|
|
246
|
-
- "Cancel" → exit
|
|
93
|
+
**Chain → command mapping:**
|
|
247
94
|
```
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
SESSION_DIR=".workflow/learning/.maestro-learn/${SESSION_ID}"
|
|
256
|
-
mkdir -p "${SESSION_DIR}"
|
|
95
|
+
follow → Skill("learn-follow", "{target} {flags}")
|
|
96
|
+
investigate → Skill("learn-investigate", "\"{target}\" {flags}")
|
|
97
|
+
decompose → Skill("learn-decompose", "{target} {flags}")
|
|
98
|
+
second-opinion → Skill("learn-second-opinion", "{target} {flags}")
|
|
99
|
+
retro → Skill("learn-retro", "{flags}")
|
|
100
|
+
deep-understand → [learn-follow --depth deep, learn-decompose --save-spec, learn-second-opinion --mode challenge]
|
|
101
|
+
pattern-catalog → [learn-decompose --save-spec --save-wiki, learn-second-opinion --mode review]
|
|
257
102
|
```
|
|
258
103
|
|
|
259
|
-
|
|
260
|
-
```json
|
|
261
|
-
{
|
|
262
|
-
"session_id": "{SESSION_ID}",
|
|
263
|
-
"created_at": "{ISO timestamp}",
|
|
264
|
-
"intent": "{original_intent}",
|
|
265
|
-
"chain": "{chain_name}",
|
|
266
|
-
"steps": [
|
|
267
|
-
{ "index": 0, "cmd": "{command}", "args": "{args}", "status": "pending" }
|
|
268
|
-
],
|
|
269
|
-
"current_step": 0,
|
|
270
|
-
"auto_mode": false
|
|
271
|
-
}
|
|
272
|
-
```
|
|
104
|
+
### Step 3: Confirm & Execute
|
|
273
105
|
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
### Step 6: Execute Chain
|
|
277
|
-
|
|
278
|
-
For each step in the chain (starting from `$STEP_INDEX` or 0):
|
|
279
|
-
|
|
280
|
-
1. Update `status.json`: set step status to `"running"`
|
|
281
|
-
2. Display step header:
|
|
282
|
-
```
|
|
283
|
-
── Step {N}/{total}: {command} ──────────────────────────
|
|
284
|
-
```
|
|
285
|
-
3. Execute: `Skill({ skill: "{command}", args: "{assembled_args}" })`
|
|
286
|
-
4. On success:
|
|
287
|
-
- Update step status to `"completed"`
|
|
288
|
-
- Record duration
|
|
289
|
-
- Continue to next step
|
|
290
|
-
5. On failure:
|
|
291
|
-
- Update step status to `"failed"`, record error
|
|
292
|
-
- **If autoYes**: skip and continue (log warning)
|
|
293
|
-
- **If interactive**:
|
|
294
|
-
```
|
|
295
|
-
AskUserQuestion:
|
|
296
|
-
header: "Step {N} failed"
|
|
297
|
-
question: "{error summary}"
|
|
298
|
-
options:
|
|
299
|
-
- "Retry" → re-execute same step
|
|
300
|
-
- "Skip" → continue to next step
|
|
301
|
-
- "Abort" → exit chain
|
|
302
|
-
```
|
|
303
|
-
|
|
304
|
-
---
|
|
305
|
-
|
|
306
|
-
### Step 7: Session Summary
|
|
307
|
-
|
|
308
|
-
After all steps complete (or chain aborted):
|
|
309
|
-
|
|
310
|
-
```
|
|
311
|
-
=== MAESTRO LEARN SESSION COMPLETE ===
|
|
312
|
-
Session: {session_id}
|
|
313
|
-
Chain: {chain_name} ({steps_completed}/{steps_total} steps)
|
|
314
|
-
Mode: {auto | interactive}
|
|
315
|
-
|
|
316
|
-
Steps:
|
|
317
|
-
[{status_icon}] {N}. {command_name} — {duration}
|
|
318
|
-
|
|
319
|
-
Artifacts:
|
|
320
|
-
- {list of files written to .workflow/learning/}
|
|
321
|
-
|
|
322
|
-
Next:
|
|
323
|
-
{suggested_next_action based on chain type}
|
|
324
|
-
```
|
|
106
|
+
**If `--dry-run`:** display chain plan and exit.
|
|
325
107
|
|
|
326
|
-
**
|
|
108
|
+
**If not `-y`:** show plan, ask for confirmation.
|
|
327
109
|
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
| `deep-understand` | "Browse insights → `/manage-learn list`" |
|
|
337
|
-
| `pattern-catalog` | "Load specs → `/spec-load`" |
|
|
338
|
-
| `full-retro` | "Browse all insights → `/manage-learn list --tag retro`" |
|
|
110
|
+
**Execute:**
|
|
111
|
+
1. Create session dir: `.workflow/learning/.maestro-learn/learn-{timestamp}/`
|
|
112
|
+
2. Write `status.json` with chain steps
|
|
113
|
+
3. Execute each step via `Skill()`:
|
|
114
|
+
- On success: mark completed, continue
|
|
115
|
+
- On failure (interactive): ask retry/skip/abort
|
|
116
|
+
- On failure (auto): skip and continue
|
|
117
|
+
4. Display session summary with artifact list and next-step suggestion
|
|
339
118
|
|
|
340
119
|
</execution>
|
|
341
120
|
|
|
342
121
|
<error_codes>
|
|
343
122
|
| Code | Severity | Description | Recovery |
|
|
344
123
|
|------|----------|-------------|----------|
|
|
345
|
-
| E001 | error | No intent provided
|
|
346
|
-
| E002 | error |
|
|
347
|
-
| E003 | error | Chain step failed + user chose abort |
|
|
348
|
-
| E005 | error | Invalid chain name
|
|
349
|
-
| W001 | warning | Intent ambiguous between
|
|
124
|
+
| E001 | error | No intent provided | Provide a learning goal or use --chain |
|
|
125
|
+
| E002 | error | Cannot determine intent after clarification | Rephrase or use --chain directly |
|
|
126
|
+
| E003 | error | Chain step failed + user chose abort | Partial progress saved in status.json |
|
|
127
|
+
| E005 | error | Invalid --chain name | Show valid chains |
|
|
128
|
+
| W001 | warning | Intent ambiguous between commands | Present options |
|
|
350
129
|
| W002 | warning | Chain step completed with warnings | Log and continue |
|
|
351
|
-
| W003 | warning | `.workflow/learning/` not found | Auto-create and proceed |
|
|
352
130
|
</error_codes>
|
|
353
131
|
|
|
354
132
|
<success_criteria>
|
|
355
|
-
- [ ] Intent
|
|
356
|
-
- [ ]
|
|
357
|
-
- [ ] Session directory created
|
|
358
|
-
- [ ]
|
|
359
|
-
- [ ]
|
|
360
|
-
- [ ]
|
|
361
|
-
- [ ] Error handling: retry/skip/abort per step (auto-skip in -y mode)
|
|
362
|
-
- [ ] Session summary displayed on completion with next-step routing
|
|
133
|
+
- [ ] Intent routed to correct chain (or --chain validated)
|
|
134
|
+
- [ ] Target resolved and arguments assembled
|
|
135
|
+
- [ ] Session directory created with status.json
|
|
136
|
+
- [ ] All chain steps executed via Skill()
|
|
137
|
+
- [ ] Error handling: retry/skip/abort per step
|
|
138
|
+
- [ ] Session summary displayed with next-step routing
|
|
363
139
|
- [ ] No files modified outside `.workflow/learning/`
|
|
364
140
|
</success_criteria>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: manage-learn
|
|
3
|
-
description: Capture, search, and review atomic learning insights into .workflow/learning/lessons.jsonl
|
|
4
|
-
argument-hint: "[<text>|list|search|show <id>] [--category ...] [--tag t1,t2] [--phase N] [--confidence ...]"
|
|
3
|
+
description: Capture, search, and review atomic learning insights and tips into .workflow/learning/lessons.jsonl
|
|
4
|
+
argument-hint: "[<text>|tip <text>|list|search|show <id>] [--category ...] [--tag t1,t2] [--phase N] [--confidence ...]"
|
|
5
5
|
allowed-tools:
|
|
6
6
|
- Read
|
|
7
7
|
- Write
|
|
@@ -12,7 +12,11 @@ allowed-tools:
|
|
|
12
12
|
- AskUserQuestion
|
|
13
13
|
---
|
|
14
14
|
<purpose>
|
|
15
|
-
|
|
15
|
+
Unified atomic knowledge capture for the workflow learning library. Captures two types of knowledge:
|
|
16
|
+
- **Insights**: Timeless "eureka moment" entries (patterns, gotchas, techniques) — the default mode
|
|
17
|
+
- **Tips**: Quick contextual notes for cross-session recovery (formerly in `manage-memory-capture tip`)
|
|
18
|
+
|
|
19
|
+
Both types are stored in `.workflow/learning/lessons.jsonl` with auto-detected phase linkage and keyword-based category inference. Tips are distinguished by `source: "tip"` and implicitly tagged `tip`. Same store as retrospective output, so search and list see the entire knowledge corpus.
|
|
16
20
|
</purpose>
|
|
17
21
|
|
|
18
22
|
<required_reading>
|
|
@@ -23,30 +27,31 @@ Atomic insight capture for the workflow learning library. Lightweight gstack-sty
|
|
|
23
27
|
Arguments: $ARGUMENTS
|
|
24
28
|
|
|
25
29
|
**Modes (auto-detected from first token):**
|
|
26
|
-
- `"<insight text>"` (or any non-keyword text) → capture mode
|
|
27
|
-
- `
|
|
30
|
+
- `"<insight text>"` (or any non-keyword text) → insight capture mode
|
|
31
|
+
- `tip <text>` → tip capture mode (quick contextual note, auto-tagged `tip`)
|
|
32
|
+
- `list` → list recent entries (default 20)
|
|
28
33
|
- `search <query>` → text search across lessons.jsonl
|
|
29
|
-
- `show <INS-id>` → full
|
|
30
|
-
- empty → AskUserQuestion to prompt for
|
|
34
|
+
- `show <INS-id>` → full detail with phase context
|
|
35
|
+
- empty → AskUserQuestion to prompt for text
|
|
31
36
|
|
|
32
|
-
**Capture flags:**
|
|
33
|
-
- `--category <name>` — pattern | antipattern | decision | tool | gotcha | technique. Default: inferred from text via keyword heuristics.
|
|
34
|
-
- `--tag t1,t2` — comma-separated tags.
|
|
37
|
+
**Capture flags (both insight and tip modes):**
|
|
38
|
+
- `--category <name>` — pattern | antipattern | decision | tool | gotcha | technique | tip. Default: inferred from text via keyword heuristics. Tip mode defaults to `tip`.
|
|
39
|
+
- `--tag t1,t2` — comma-separated tags. Insight mode implicitly adds `manual`, tip mode implicitly adds `tip`.
|
|
35
40
|
- `--phase <N>` — override auto-detected current phase. Use `--phase 0` to force "no phase".
|
|
36
|
-
- `--confidence <level>` — high | medium | low. Default: medium.
|
|
41
|
+
- `--confidence <level>` — high | medium | low. Default: medium (insight), low (tip).
|
|
37
42
|
|
|
38
43
|
**List/search flags:**
|
|
39
44
|
- `--tag t1,t2` — filter by tag
|
|
40
45
|
- `--category <name>` — filter by category
|
|
41
46
|
- `--phase <N>` — filter by phase
|
|
42
|
-
- `--lens <name>` — filter by retrospective lens (technical | process | quality | decision)
|
|
47
|
+
- `--lens <name>` — filter by retrospective lens (technical | process | quality | decision | git). Note: `git` matches `source: "retro-git"` from learn-retro; others match `lens` field from quality-retrospective.
|
|
43
48
|
- `--limit <N>` — list mode row limit (default 20)
|
|
44
49
|
|
|
45
50
|
**Storage:**
|
|
46
51
|
- `.workflow/learning/lessons.jsonl` — append-only JSONL row per insight (shared with `quality-retrospective` output)
|
|
47
52
|
- `.workflow/learning/learning-index.json` — searchable index (mirrors `memory-index.json` schema)
|
|
48
53
|
|
|
49
|
-
**Shared store rationale:** Manual captures (`source: "manual"
|
|
54
|
+
**Shared store rationale:** Manual captures (`source: "manual"`), tips (`source: "tip"`), retrospective-distilled insights (`source: "retrospective"`, `lens: <name>` from `quality-retrospective`), and learn-retro insights (`source: "retro-git"` or `source: "retro-decision"` from `learn-retro`) all live in the same store so search and list see the entire knowledge corpus. The `source` field disambiguates origin.
|
|
50
55
|
</context>
|
|
51
56
|
|
|
52
57
|
<execution>
|
|
@@ -55,16 +60,17 @@ Follow `~/.maestro/workflows/learn.md` Stages 1–5 in order. Key invariants:
|
|
|
55
60
|
1. **No agent or CLI calls** — this is a pure file operation: parse → infer → append → confirm. Category inference is keyword-based, not LLM-based.
|
|
56
61
|
2. **Auto-link phase** — read `.workflow/state.json` for `current_phase` and resolve the matching directory slug. `--phase 0` forces no link.
|
|
57
62
|
3. **Match memory-index pattern** — `learning-index.json` schema mirrors `memory-index.json` from `workflows/memory.md` (entries[] with id, type, timestamp, file, summary, tags, plus learn-specific fields: lens, category, phase, phase_slug, confidence, routed_to, routed_id).
|
|
58
|
-
4. **Stable INS ids** — `INS-{8 lowercase hex}` from `hash(insight_text +
|
|
63
|
+
4. **Stable INS ids** — `INS-{8 lowercase hex}` from `hash(insight_text + category + phase)`. Deterministic: same content in same context always produces the same ID.
|
|
59
64
|
5. **Append-only lessons.jsonl** — never rewrite existing rows; duplicate detection is the user's job at search time.
|
|
60
65
|
6. **Bootstrap on demand** — create `.workflow/learning/`, `lessons.jsonl`, `learning-index.json` on first use; do not require them to exist upfront.
|
|
66
|
+
7. **Tip mode** — when first token is `tip`, set `source: "tip"`, `category: "tip"`, `confidence: "low"`, and implicitly add `tip` tag. Everything else follows the same pipeline as insight capture. This replaces the former `manage-memory-capture tip` mode.
|
|
61
67
|
</execution>
|
|
62
68
|
|
|
63
69
|
<error_codes>
|
|
64
70
|
| Code | Severity | Description | Stage |
|
|
65
71
|
|------|----------|-------------|-------|
|
|
66
72
|
| E001 | error | `.workflow/` not initialized — run `Skill({ skill: "maestro-init" })` first | parse_input |
|
|
67
|
-
| E002 | error | Unknown `--category` value (allowed: pattern, antipattern, decision, tool, gotcha, technique) | parse_input |
|
|
73
|
+
| E002 | error | Unknown `--category` value (allowed: pattern, antipattern, decision, tool, gotcha, technique, tip) | parse_input |
|
|
68
74
|
| E003 | error | `show` mode requires an INS-id argument | show |
|
|
69
75
|
| E004 | error | Insight id not found in lessons.jsonl | show |
|
|
70
76
|
| W001 | warning | Auto-phase detection found a current_phase but no matching directory; phase set to null | capture |
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: manage-memory-capture
|
|
3
|
-
description: Capture session memory (compact
|
|
4
|
-
argument-hint: "[compact
|
|
3
|
+
description: Capture session memory (compact mode) into .workflow/memory/ with JSON index
|
|
4
|
+
argument-hint: "[compact] [description]"
|
|
5
5
|
allowed-tools:
|
|
6
6
|
- Read
|
|
7
7
|
- Write
|
|
@@ -12,7 +12,9 @@ allowed-tools:
|
|
|
12
12
|
- AskUserQuestion
|
|
13
13
|
---
|
|
14
14
|
<purpose>
|
|
15
|
-
Capture session working memory into `.workflow/memory/` for cross-session recovery.
|
|
15
|
+
Capture session working memory into `.workflow/memory/` for cross-session recovery. Compact mode only: full session compression for recovery. Maintains a `memory-index.json` for search and retrieval. Invoked when saving session state before context loss.
|
|
16
|
+
|
|
17
|
+
**Note:** Quick tips/notes have been moved to `manage-learn tip <text>`. Use that command for atomic knowledge capture.
|
|
16
18
|
</purpose>
|
|
17
19
|
|
|
18
20
|
<required_reading>
|
|
@@ -22,13 +24,9 @@ Capture session working memory into `.workflow/memory/` for cross-session recove
|
|
|
22
24
|
<context>
|
|
23
25
|
Arguments: $ARGUMENTS
|
|
24
26
|
|
|
25
|
-
**
|
|
27
|
+
**Mode:**
|
|
26
28
|
- `compact` — Full session memory compression (files, decisions, plan state, pending work)
|
|
27
|
-
-
|
|
28
|
-
- No arguments — Auto-detect or ask user
|
|
29
|
-
|
|
30
|
-
**Flags:**
|
|
31
|
-
- `--tag tag1,tag2` — Categorization tags (tip mode)
|
|
29
|
+
- No arguments — Defaults to compact mode
|
|
32
30
|
|
|
33
31
|
**Storage:**
|
|
34
32
|
- `.workflow/memory/` — Memory entries directory
|
|
@@ -43,19 +41,19 @@ Follow '~/.maestro/workflows/memory.md' Part B (Memory Capture) completely.
|
|
|
43
41
|
| Code | Severity | Description | Stage |
|
|
44
42
|
|------|----------|-------------|-------|
|
|
45
43
|
| E001 | error | `.workflow/` not initialized — run Skill({ skill: "maestro-init" }) first | parse_input |
|
|
46
|
-
| E002 | error |
|
|
44
|
+
| E002 | error | Tip mode removed — use `Skill({ skill: "manage-learn", args: "tip <text>" })` instead | parse_input |
|
|
47
45
|
| W001 | warning | No active workflow session found — compact will capture conversation only | analyze_session |
|
|
48
46
|
| W002 | warning | Plan detection found no explicit plan — using inferred plan | analyze_session |
|
|
49
47
|
</error_codes>
|
|
50
48
|
|
|
51
49
|
<success_criteria>
|
|
52
|
-
- [ ]
|
|
50
|
+
- [ ] Compact mode executed
|
|
53
51
|
- [ ] Entry markdown file written to `.workflow/memory/`
|
|
54
52
|
- [ ] `memory-index.json` updated with new entry metadata
|
|
55
|
-
- [ ]
|
|
56
|
-
- [ ]
|
|
57
|
-
- [ ]
|
|
58
|
-
- [ ] Tip: content, tags, and context captured
|
|
53
|
+
- [ ] All session fields populated (objective, files, decisions, plan)
|
|
54
|
+
- [ ] Execution plan preserved VERBATIM (not summarized)
|
|
55
|
+
- [ ] All file paths are ABSOLUTE
|
|
59
56
|
- [ ] Confirmation banner displayed with entry ID
|
|
60
57
|
- [ ] Next step: Skill({ skill: "manage-status" }) to resume workflow, or Skill({ skill: "manage-memory", args: "view <entry_id>" }) to verify captured memory
|
|
58
|
+
- [ ] For tips: redirect user to `Skill({ skill: "manage-learn", args: "tip <text>" })`
|
|
61
59
|
</success_criteria>
|
|
@@ -30,7 +30,7 @@ Arguments: $ARGUMENTS
|
|
|
30
30
|
|
|
31
31
|
| Store | Path | Format | Index |
|
|
32
32
|
|-------|------|--------|-------|
|
|
33
|
-
| `workflow` | `.workflow/memory/` | `MEM-*.md`, `TIP-*.md` | `memory-index.json` |
|
|
33
|
+
| `workflow` | `.workflow/memory/` | `MEM-*.md`, `TIP-*.md` (legacy only — new tips go to `manage-learn tip`) | `memory-index.json` |
|
|
34
34
|
| `system` | `~/.claude/projects/{project}/memory/` | `MEMORY.md` + topic `.md` files | None (flat files) |
|
|
35
35
|
|
|
36
36
|
**System memory path detection:**
|
|
@@ -22,7 +22,7 @@ Post-execution multi-perspective retrospective (复盘) for completed phases. Co
|
|
|
22
22
|
|
|
23
23
|
<deferred_reading>
|
|
24
24
|
- @~/.maestro/workflows/issue.md (issues.jsonl schema for auto-creation)
|
|
25
|
-
- @~/.maestro/workflows/
|
|
25
|
+
- @~/.maestro/workflows/learn.md (tip routing via manage-learn tip)
|
|
26
26
|
- @~/.maestro/workflows/verify.md (verification.json schema for quality lens parsing)
|
|
27
27
|
- @~/.maestro/workflows/review.md (review.json schema for quality lens parsing)
|
|
28
28
|
</deferred_reading>
|
|
@@ -47,7 +47,7 @@ Arguments: $ARGUMENTS
|
|
|
47
47
|
- `.workflow/phases/{NN}-{slug}/retrospective.json` — structured record
|
|
48
48
|
- `.workflow/specs/SPEC-retro-*.md` — spec stubs (one per spec-routed insight)
|
|
49
49
|
- `.workflow/issues/issues.jsonl` — appended issue rows (`source: "retrospective"`)
|
|
50
|
-
- `.workflow/
|
|
50
|
+
- `.workflow/learning/lessons.jsonl` — tips routed via `manage-learn tip` (formerly manage-memory-capture)
|
|
51
51
|
- `.workflow/learning/lessons.jsonl` — append-only insight log
|
|
52
52
|
- `.workflow/learning/learning-index.json` — searchable index
|
|
53
53
|
|
|
@@ -64,7 +64,7 @@ Follow `~/.maestro/workflows/retrospective.md` Stages 1–8 in order. Key invari
|
|
|
64
64
|
1. **Read-only until Stage 6** — Stages 1–5 must not write anything except the in-memory retrospective record.
|
|
65
65
|
2. **Parallel lens dispatch** — Stage 4 spawns one Agent per active lens in a single message (multiple Agent tool calls). All agents use `subagent_type: "general-purpose"` and `run_in_background: false`.
|
|
66
66
|
3. **Match canonical issues schema** — Stage 6 issue routing must produce rows that pass `jq` parsing and match the schema in `workflows/issue.md` Step 4 exactly (status `"open"`, full `issue_history` entry, all required fields).
|
|
67
|
-
4. **Reuse `manage-
|
|
67
|
+
4. **Reuse `manage-learn tip` for note routing** — do not duplicate the learning pipeline; invoke via `Skill({ skill: "manage-learn", args: "tip ..." })`.
|
|
68
68
|
5. **Backward-compat with phase-transition** — append a one-line summary per insight to `.workflow/specs/learnings.md` if and only if that file already exists. Never create it.
|
|
69
69
|
6. **Stable insight IDs** — `INS-{8 hex}` from `hash(phase_num + lens + title)` so re-runs do not duplicate.
|
|
70
70
|
7. **Archive before overwrite** — if existing `retrospective.{md,json}` are being replaced, move them to `{phase_dir}/.history/` with a timestamp suffix first.
|
|
@@ -80,7 +80,7 @@ Follow `~/.maestro/workflows/retrospective.md` Stages 1–8 in order. Key invari
|
|
|
80
80
|
| E005 | error | Phase argument out of range / phase directory not found | scan_unreviewed |
|
|
81
81
|
| W001 | warning | One or more lens agents failed — proceeding with partial coverage | multi_lens_analysis |
|
|
82
82
|
| W002 | warning | Existing retrospective.json found and not `--all` — prompted user to overwrite | scan_unreviewed |
|
|
83
|
-
| W003 | warning | `manage-
|
|
83
|
+
| W003 | warning | `manage-learn tip` did not return parseable INS id; fell back to direct write | route_outputs |
|
|
84
84
|
| W004 | warning | `--compare` target phase has no retrospective.json; delta omitted | load_artifacts |
|
|
85
85
|
</error_codes>
|
|
86
86
|
|
|
@@ -94,7 +94,7 @@ Follow `~/.maestro/workflows/retrospective.md` Stages 1–8 in order. Key invari
|
|
|
94
94
|
- [ ] If routing enabled (default): every recommendation either created an artifact or was explicitly skipped by user
|
|
95
95
|
- [ ] Spec stubs (if any) written to `.workflow/specs/SPEC-retro-*.md` with proper frontmatter
|
|
96
96
|
- [ ] Issue rows (if any) match canonical issues.jsonl schema (status "open", full issue_history, all required fields)
|
|
97
|
-
- [ ] Note tips (if any) created via `Skill({ skill: "manage-
|
|
97
|
+
- [ ] Note tips (if any) created via `Skill({ skill: "manage-learn", args: "tip ..." })`
|
|
98
98
|
- [ ] `lessons.jsonl` appended with one row per insight regardless of routing target
|
|
99
99
|
- [ ] `learning-index.json` updated and parseable
|
|
100
100
|
- [ ] No existing phase artifacts modified (verification.json, review.json, plan.json untouched)
|