maestro-flow 0.5.38 → 0.5.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. package/.agents/skills/odyssey-debug/SKILL.md +90 -269
  2. package/.agents/skills/odyssey-improve/SKILL.md +39 -240
  3. package/.agents/skills/odyssey-planex/SKILL.md +21 -105
  4. package/.agents/skills/odyssey-review-test-fix/SKILL.md +98 -318
  5. package/.agents/skills/odyssey-ui/SKILL.md +82 -265
  6. package/.agy/skills/odyssey-debug/SKILL.md +90 -269
  7. package/.agy/skills/odyssey-improve/SKILL.md +39 -240
  8. package/.agy/skills/odyssey-planex/SKILL.md +21 -105
  9. package/.agy/skills/odyssey-review-test-fix/SKILL.md +98 -318
  10. package/.agy/skills/odyssey-ui/SKILL.md +82 -265
  11. package/.claude/commands/odyssey-debug.md +90 -269
  12. package/.claude/commands/odyssey-improve.md +39 -240
  13. package/.claude/commands/odyssey-planex.md +21 -105
  14. package/.claude/commands/odyssey-review-test-fix.md +98 -318
  15. package/.claude/commands/odyssey-ui.md +82 -265
  16. package/.codex/agents/cli-explore-agent.toml +181 -0
  17. package/.codex/agents/cross-role-reviewer.toml +165 -0
  18. package/.codex/agents/impeccable-agent.toml +89 -0
  19. package/.codex/agents/role-design-author.toml +213 -0
  20. package/.codex/agents/team-worker.toml +4 -7
  21. package/.codex/agents/ui-design-agent.toml +260 -0
  22. package/.codex/agents/workflow-analyzer.toml +106 -0
  23. package/.codex/agents/workflow-codebase-mapper.toml +69 -0
  24. package/.codex/agents/workflow-collab-planner.toml +140 -0
  25. package/.codex/agents/workflow-debugger.toml +95 -0
  26. package/.codex/agents/workflow-executor.toml +124 -0
  27. package/.codex/agents/workflow-external-researcher.toml +80 -0
  28. package/.codex/agents/workflow-integration-checker.toml +76 -0
  29. package/.codex/agents/workflow-nyquist-auditor.toml +77 -0
  30. package/.codex/agents/workflow-phase-researcher.toml +76 -0
  31. package/.codex/agents/workflow-plan-checker.toml +93 -0
  32. package/.codex/agents/workflow-planner.toml +192 -0
  33. package/.codex/agents/workflow-project-researcher.toml +65 -0
  34. package/.codex/agents/workflow-research-synthesizer.toml +65 -0
  35. package/.codex/agents/workflow-reviewer.toml +75 -0
  36. package/.codex/agents/workflow-roadmapper.toml +75 -0
  37. package/.codex/agents/workflow-verifier.toml +113 -0
  38. package/.codex/skills/maestro/SKILL.md +1 -0
  39. package/.codex/skills/maestro-analyze/SKILL.md +33 -15
  40. package/.codex/skills/maestro-brainstorm/SKILL.md +13 -10
  41. package/.codex/skills/maestro-collab/SKILL.md +30 -75
  42. package/.codex/skills/maestro-execute/SKILL.md +19 -12
  43. package/.codex/skills/maestro-grill/SKILL.md +12 -11
  44. package/.codex/skills/maestro-next/SKILL.md +3 -3
  45. package/.codex/skills/maestro-overlay/SKILL.md +1 -1
  46. package/.codex/skills/maestro-plan/SKILL.md +17 -8
  47. package/.codex/skills/maestro-ralph/SKILL.md +3 -0
  48. package/.codex/skills/maestro-ralph-execute/SKILL.md +1 -0
  49. package/.codex/skills/maestro-roadmap/SKILL.md +14 -8
  50. package/.codex/skills/manage-learn/SKILL.md +1 -1
  51. package/.codex/skills/odyssey-debug/SKILL.md +185 -275
  52. package/.codex/skills/odyssey-improve/SKILL.md +216 -308
  53. package/.codex/skills/odyssey-planex/SKILL.md +317 -159
  54. package/.codex/skills/odyssey-review-test-fix/SKILL.md +137 -255
  55. package/.codex/skills/odyssey-ui/SKILL.md +183 -247
  56. package/.codex/skills/quality-review/SKILL.md +17 -10
  57. package/.codex/skills/team-lifecycle-v4/instructions/agent-instruction.md +6 -12
  58. package/.codex/skills/team-lifecycle-v4/roles/analyst/role.md +6 -14
  59. package/.codex/skills/team-lifecycle-v4/roles/executor/commands/implement.md +2 -6
  60. package/.codex/skills/team-lifecycle-v4/roles/planner/role.md +6 -14
  61. package/.codex/skills/team-lifecycle-v4/roles/writer/role.md +3 -7
  62. package/.codex/skills/team-quality-assurance/roles/scout/role.md +2 -5
  63. package/.codex/skills/team-review/roles/reviewer/role.md +2 -5
  64. package/.codex/skills/team-review/roles/scanner/role.md +2 -5
  65. package/.codex/skills/team-tech-debt/roles/executor/role.md +3 -7
  66. package/.codex/skills/team-tech-debt/roles/scanner/role.md +2 -5
  67. package/.codex/skills/team-tech-debt/roles/validator/role.md +3 -7
  68. package/.codex/skills/team-testing/roles/executor/role.md +3 -7
  69. package/.codex/skills/team-testing/roles/generator/role.md +3 -7
  70. package/dashboard/dist-server/dashboard/src/server/wiki/embedding.d.ts +23 -2
  71. package/dashboard/dist-server/dashboard/src/server/wiki/embedding.js +242 -26
  72. package/dashboard/dist-server/dashboard/src/server/wiki/embedding.js.map +1 -1
  73. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.d.ts +2 -0
  74. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js +92 -29
  75. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js.map +1 -1
  76. package/dashboard/dist-server/src/commands/hooks.d.ts +2 -1
  77. package/dashboard/dist-server/src/commands/hooks.js +16 -9
  78. package/dashboard/dist-server/src/commands/hooks.js.map +1 -1
  79. package/dashboard/dist-server/src/commands/install-backend.js +19 -0
  80. package/dashboard/dist-server/src/commands/install-backend.js.map +1 -1
  81. package/dashboard/dist-server/src/core/manifest.d.ts +5 -0
  82. package/dashboard/dist-server/src/core/manifest.js.map +1 -1
  83. package/dashboard/dist-server/src/core/plugin-bridge.d.ts +59 -0
  84. package/dashboard/dist-server/src/core/plugin-bridge.js +355 -0
  85. package/dashboard/dist-server/src/core/plugin-bridge.js.map +1 -0
  86. package/dashboard/dist-server/src/hooks/kg-sync-hook.js +5 -0
  87. package/dashboard/dist-server/src/hooks/kg-sync-hook.js.map +1 -1
  88. package/dashboard/dist-server/src/hooks/session-context.js +276 -3
  89. package/dashboard/dist-server/src/hooks/session-context.js.map +1 -1
  90. package/dashboard/dist-server/src/search/daemon-client.d.ts +8 -3
  91. package/dashboard/dist-server/src/search/daemon-client.js +20 -0
  92. package/dashboard/dist-server/src/search/daemon-client.js.map +1 -1
  93. package/dist/src/cli.js +19 -1
  94. package/dist/src/cli.js.map +1 -1
  95. package/dist/src/commands/domain.d.ts.map +1 -1
  96. package/dist/src/commands/domain.js +12 -3
  97. package/dist/src/commands/domain.js.map +1 -1
  98. package/dist/src/commands/hooks.d.ts +2 -1
  99. package/dist/src/commands/hooks.d.ts.map +1 -1
  100. package/dist/src/commands/hooks.js +16 -9
  101. package/dist/src/commands/hooks.js.map +1 -1
  102. package/dist/src/commands/install-backend.d.ts.map +1 -1
  103. package/dist/src/commands/install-backend.js +19 -0
  104. package/dist/src/commands/install-backend.js.map +1 -1
  105. package/dist/src/commands/install.d.ts.map +1 -1
  106. package/dist/src/commands/install.js +50 -3
  107. package/dist/src/commands/install.js.map +1 -1
  108. package/dist/src/commands/plugin.d.ts +3 -0
  109. package/dist/src/commands/plugin.d.ts.map +1 -0
  110. package/dist/src/commands/plugin.js +137 -0
  111. package/dist/src/commands/plugin.js.map +1 -0
  112. package/dist/src/commands/search.d.ts.map +1 -1
  113. package/dist/src/commands/search.js +59 -6
  114. package/dist/src/commands/search.js.map +1 -1
  115. package/dist/src/commands/spec.d.ts.map +1 -1
  116. package/dist/src/commands/spec.js +15 -0
  117. package/dist/src/commands/spec.js.map +1 -1
  118. package/dist/src/commands/update.d.ts.map +1 -1
  119. package/dist/src/commands/update.js +23 -0
  120. package/dist/src/commands/update.js.map +1 -1
  121. package/dist/src/core/install-executor.d.ts +1 -1
  122. package/dist/src/core/install-executor.d.ts.map +1 -1
  123. package/dist/src/core/install-executor.js +27 -0
  124. package/dist/src/core/install-executor.js.map +1 -1
  125. package/dist/src/core/install-profile.d.ts +5 -0
  126. package/dist/src/core/install-profile.d.ts.map +1 -1
  127. package/dist/src/core/install-profile.js +8 -0
  128. package/dist/src/core/install-profile.js.map +1 -1
  129. package/dist/src/core/manifest.d.ts +5 -0
  130. package/dist/src/core/manifest.d.ts.map +1 -1
  131. package/dist/src/core/manifest.js.map +1 -1
  132. package/dist/src/core/plugin-bridge.d.ts +60 -0
  133. package/dist/src/core/plugin-bridge.d.ts.map +1 -0
  134. package/dist/src/core/plugin-bridge.js +355 -0
  135. package/dist/src/core/plugin-bridge.js.map +1 -0
  136. package/dist/src/hooks/kg-sync-hook.d.ts.map +1 -1
  137. package/dist/src/hooks/kg-sync-hook.js +5 -0
  138. package/dist/src/hooks/kg-sync-hook.js.map +1 -1
  139. package/dist/src/hooks/session-context.d.ts.map +1 -1
  140. package/dist/src/hooks/session-context.js +276 -3
  141. package/dist/src/hooks/session-context.js.map +1 -1
  142. package/dist/src/search/daemon-client.d.ts +8 -3
  143. package/dist/src/search/daemon-client.d.ts.map +1 -1
  144. package/dist/src/search/daemon-client.js +20 -0
  145. package/dist/src/search/daemon-client.js.map +1 -1
  146. package/dist/src/search/daemon.d.ts +3 -3
  147. package/dist/src/search/daemon.d.ts.map +1 -1
  148. package/dist/src/search/daemon.js +9 -3
  149. package/dist/src/search/daemon.js.map +1 -1
  150. package/dist/src/tui/install-ui/InstallFlow.d.ts.map +1 -1
  151. package/dist/src/tui/install-ui/InstallFlow.js +43 -14
  152. package/dist/src/tui/install-ui/InstallFlow.js.map +1 -1
  153. package/dist/src/tui/install-ui/types.d.ts +2 -0
  154. package/dist/src/tui/install-ui/types.d.ts.map +1 -1
  155. package/dist/src/tui/install-ui/types.js.map +1 -1
  156. package/dist/src/tui/install-ui/useInstallFlowState.d.ts.map +1 -1
  157. package/dist/src/tui/install-ui/useInstallFlowState.js +13 -1
  158. package/dist/src/tui/install-ui/useInstallFlowState.js.map +1 -1
  159. package/dist/src/utils/update-notices.js +11 -0
  160. package/dist/src/utils/update-notices.js.map +1 -1
  161. package/package.json +1 -1
  162. package/workflows/odyssey-base.md +258 -0
  163. package/workflows/shell-exec-protocol.md +30 -0
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: odyssey-debug
3
3
  description: Long-running debug cycle — archaeology, diagnosis, fix, confirmation, generalization, discovery, and knowledge persistence
4
- argument-hint: "<issue> [--skip-fix] [--skip-generalize] [--auto] [-y] [-c]"
4
+ argument-hint: "<issue> [--skip-fix] [--skip-generalize] [--auto] [-y] [-c] [--heartbeat]"
5
5
  allowed-tools:
6
6
  - Read
7
7
  - Write
@@ -12,6 +12,8 @@ allowed-tools:
12
12
  - Agent
13
13
  - AskUserQuestion
14
14
  ---
15
+ <base>@~/.maestro/workflows/odyssey-base.md</base>
16
+
15
17
  <purpose>
16
18
  Closed-loop deep debugging: archaeology → explore → diagnose → fix & confirm → generalize → discover siblings → persist.
17
19
  Treats every bug as a learning signal with exhaustive iteration until root cause confirmed or INCONCLUSIVE.
@@ -21,8 +23,8 @@ Treats every bug as a learning signal with exhaustive iteration until root cause
21
23
  **范围内:** 单一 bug/issue 的完整闭环 — 考古 → 探索 → 诊断 → 修复 → 确认 → 泛化同类 → 沉淀
22
24
  **范围外:** 新功能开发 → `/odyssey-planex` | 代码质量审查 → `/odyssey-review-test-fix` | UI 视觉优化 → `/odyssey-ui` | 架构重设计 → `/maestro-plan`
23
25
  **探索自由度:** 边界内自由探索 — 可追踪任意调用链、分析任意历史、测试任意假设。泛化阶段可扫描全项目寻找同类问题。
24
- **Zero-residual principle:** Every finding MUST have a concrete action (fix / issue / decision). "Report and shelve" is not allowed. "Pre-existing issue" is not a valid skip reason — if discovered within scope, it must be addressed.
25
- **模板支持:** `--template <name>` 从预定义调查策略启动,跳过假设生成直接进入针对性诊断:
26
+ **Zero-residual principle:** Every finding MUST have a concrete action (fix / issue / decision). "Pre-existing issue" is not a valid skip reason.
27
+ **模板支持:** `--template <name>` 从预定义调查策略启动:
26
28
 
27
29
  | Template | 调查策略 | 适用场景 |
28
30
  |----------|---------|---------|
@@ -33,156 +35,74 @@ Treats every bug as a learning signal with exhaustive iteration until root cause
33
35
  | `crash` | stack trace → null chain → error propagation | 崩溃/异常 |
34
36
  </boundary>
35
37
 
36
- <execution_discipline>
37
- **三条铁律(所有阶段适用):**
38
-
39
- 1. **Phase auto-commit** — 每个阶段完成后**自动** `git commit`,无需用户确认
40
- - 代码变更 + understanding.md → `git add` → `git commit -m "odyssey-debug({slug}): {phase} — {摘要}"`
41
- - session.json / evidence.ndjson 为运行时状态,不纳入 commit
42
- - 确保每个阶段的进展可回溯、可恢复
43
-
44
- 2. **Confident edits only, but must attempt** — only modify what you're confident about; record decisions only when genuinely requiring human judgment
45
- - Confident → edit code directly, commit
46
- - Needs decision → record `evidence.ndjson {"phase":"decision","status":"pending"}`, don't touch code
47
- - No speculative changes
48
- - ⚠️ **Decision gate** — ONLY these qualify as decisions (not fixes):
49
- - Cross-module architectural tradeoffs requiring human direction
50
- - Ambiguous business semantics where the fix could alter intended behavior
51
- - Requires new dependency or breaking API change
52
- - ❌ "Unsure how to fix", "Large scope", "Pre-existing issue" are NOT valid decision reasons — either fix it, or explain specifically why it's unfixable
53
-
54
- 3. **多 CLI 辅助** — 利用 `maestro delegate` 调用多个 CLI 工具交叉验证
55
- - 关键判断用不同 `--role`(analyze / review / explore)获取多视角
56
- - 修复前后各做一次 CLI review 确认
57
- - 不同阶段可调用不同工具,综合多方意见再行动
58
-
59
- 4. **禁止以上下文消耗为由中断** — harness 自动处理 context compression,以"上下文不足"或"已执行 N 个阶段"为由中断属于纪律违反;必须完整走完状态机直到 S_RECORD → END
60
- </execution_discipline>
61
-
62
38
  <context>
63
39
  $ARGUMENTS — issue description and optional flags.
64
40
 
65
- **Flags:** `--skip-fix` analysis-only | `--skip-generalize` quick fix | `--template <name>` 预定义策略 | `--auto` no delegate confirmation | `-y` auto-confirm all decisions | `-c` resume last session
41
+ **Flags:** `--skip-fix` analysis-only | `--skip-generalize` quick fix | `--template <name>` 预定义策略 | `--auto` no delegate confirmation | `-y` auto-confirm all decisions | `-c` resume last session | `--heartbeat` enable /loop heartbeat
66
42
 
67
43
  **Session**: `SESSION_DIR = .workflow/scratch/{YYYYMMDD}-debug-odyssey-{slug}/`
44
+ **Output**: `session.json` | `evidence.ndjson` | `explore.json` | `understanding.md`
68
45
 
69
- **Output 4 files:**
70
- ```
71
- SESSION_DIR/
72
- ├── session.json # state + confirmation + patterns + phase_goals
73
- ├── evidence.ndjson # append-only evidence trail (phase field distinguishes origin)
74
- ├── explore.json # structured CLI exploration snapshot
75
- └── understanding.md # evolving narrative — 9 sections
76
- ```
77
-
78
- **session.json schema:**
46
+ **session.json unique fields:**
79
47
  ```json
80
- {
81
- "session_id": "debug-odyssey-{YYYYMMDD-HHmmss}", "issue": "",
82
- "flags": { "skip_fix": false, "skip_generalize": false, "auto": false, "auto_confirm": false },
83
- "current_state": "S_INTAKE", "diagnosis_retries": 0,
84
- "root_cause": null, "patterns": [], "confirmation": null,
85
- "phase_goals": [], "phase_goals_all_done": false, "self_iteration_log": [],
86
- "generalization_stats": null,
87
- "cross_phase_loops": 0, "max_loops": 5,
88
- "created_at": "", "updated_at": ""
89
- }
48
+ { "issue": "", "diagnosis_retries": 0, "root_cause": null, "confirmation": null,
49
+ "patterns": [], "generalization_stats": null, "cross_phase_loops": 0, "max_loops": 5 }
90
50
  ```
51
+ 共有字段(`progress_metrics`, `directions_tried` 等)见 base。
91
52
 
92
- **evidence.ndjson unified trail:**
93
- ```json
94
- {"ts":"","phase":"archaeology|explore|diagnosis|discovery|decision|self-iteration","type":"","source":"","content":"","note":""}
95
- ```
96
- Phase-specific fields:
97
- - `archaeology`: `sha`, `author`, `date`, `message`, `relevance` (high|medium|low)
53
+ **evidence.ndjson phases:** `archaeology|explore|diagnosis|discovery|decision|self-iteration`
54
+ - `archaeology`: `sha`, `author`, `date`, `message`, `relevance`
98
55
  - `explore`: `category` (call_chain|recent_change|error_gap|similar_pattern), `detail`
99
56
  - `diagnosis`: `hypothesis`, `result` (confirmed|disproved|inconclusive)
100
57
  - `discovery`: `file`, `line`, `classification` (safe|risk|bug), `action` (fix|issue|decision|skip)
101
- - `decision`: `question`, `options`, `context`, `status` (pending|resolved|deferred), `resolution`
58
+ - `decision`: `question`, `options`, `context`, `status`, `resolution`
102
59
  - `self-iteration`: `stage`, `round`, `assessment`, `expansion`
103
60
 
104
- **explore.json schema:**
105
- ```json
106
- {
107
- "call_chains": [{"entry":"","chain":["file:line"]}],
108
- "recent_changes": [{"file":"","commits":[{"sha":"","message":"","date":""}]}],
109
- "error_gaps": [{"file":"","line":0,"description":""}],
110
- "similar_patterns": [{"file":"","line":0,"description":""}],
111
- "cli_tool": "", "timestamp": ""
112
- }
113
- ```
61
+ **explore.json**: `{call_chains, recent_changes, error_gaps, similar_patterns, cli_tool, timestamp}`
114
62
 
115
- **phase_goals[] — auto-derived from flags:**
63
+ **phase_goals[]:**
116
64
 
117
65
  | ID | Goal | done_when | phase | skip_when |
118
66
  |----|------|-----------|-------|-----------|
119
- | G1 | Root cause identified | evidence.ndjson has phase=diagnosis result=confirmed | S_DIAGNOSE | — |
120
- | G2 | Explore context gathered | explore.json ≥1 category populated | S_EXPLORE | — |
67
+ | G1 | Root cause identified | phase=diagnosis result=confirmed | S_DIAGNOSE | — |
68
+ | G2 | Explore context gathered | explore.json ≥1 category | S_EXPLORE | — |
121
69
  | G3 | Fix applied and confirmed | confirmation.overall == confirmed | S_CONFIRM | skip_fix |
122
70
  | G4 | Pattern generalized | patterns[] ≥1 entry | S_GENERALIZE | skip_generalize |
123
71
  | G5 | Discoveries triaged | all scan hits classified | S_DISCOVER | skip_generalize |
124
- | G6 | Learnings persisted | spec entries created OR no actionable learnings | S_RECORD | — |
125
-
126
- When `flags[skip_when] == true` → auto set `status: "skipped"`, `completion_confirmed: true`.
72
+ | G6 | Learnings persisted | spec entries created OR none actionable | S_RECORD | — |
127
73
 
128
- **understanding.md — 9 sections (written by owning phase):**
129
- 1. Issue & Scope ← S_INTAKE | 2. Archaeology Summary ← S_ARCHAEOLOGY | 3. Exploration ← S_EXPLORE
130
- 4. Hypotheses & Testing ← S_DIAGNOSE | 5. Root Cause ← S_DIAGNOSE | 6. Fix & Confirmation ← S_FIX+S_CONFIRM
131
- 7. Generalization ← S_GENERALIZE | 8. Discoveries & Decisions ← S_DISCOVER | 9. Learnings ← S_RECORD
74
+ **understanding.md — 9 sections:**
75
+ 1. Issue & Scope ← S_INTAKE | 2. Archaeology ← S_ARCHAEOLOGY | 3. Exploration ← S_EXPLORE
76
+ 4. Hypotheses ← S_DIAGNOSE | 5. Root Cause ← S_DIAGNOSE | 6. Fix & Confirmation ← S_FIX+S_CONFIRM
77
+ 7. Generalization ← S_GENERALIZE | 8. Discoveries ← S_DISCOVER | 9. Learnings ← S_RECORD
132
78
 
133
79
  ### Pre-load(可选,缺失不阻塞)
134
80
 
135
- | 层级 | 命令 | 作用 |
136
- |------|------|------|
137
- | Codebase docs | Read `.workflow/codebase/ARCHITECTURE.md` | 模块边界,作为所有分析的上下文 |
138
- | Wiki search | `maestro search "<issue keywords>" --json` | 先前调查、相关决策(取 top 5) |
139
- | Specs + tools | `maestro load --type spec --category debug --keyword "<symptom>"` | 已知 issue/workaround + 可发现的 knowhow 工具 |
140
- | Role knowledge | `maestro search --category debug` 选相关 `maestro load --type knowhow --id <id>` | 累积领域知识 |
141
- | Prior sessions | `Glob(".workflow/scratch/*-debug-odyssey-*")` | 相关 odyssey 会话 |
142
-
143
- ### Knowledge Persistence(S_RECORD 中写入产出文件)
144
-
145
- S_RECORD 阶段将可沉淀知识 **写入 understanding.md §9 Learnings**,按以下分类结构化:
146
-
147
- | 分类 | 写入内容 | 后续建议命令 |
148
- |------|---------|-------------|
149
- | 反复根因模式 | 模式描述 + 触发条件 + 修复模板 | `/spec-add debug "..."` |
150
- | 非显而易见 workaround | 问题场景 + 解决方案 + 适用范围 | `/spec-add learning "..."` |
151
- | 架构边界违反 | 违反描述 + 正确边界 + 检查方法 | `/spec-add arch "..."` |
152
- | 可复用泛化 pattern | pattern 签名 + 风险说明 + fix 模板 | `/spec-add coding "..."` |
153
-
154
- **两步模式:** 执行中写入产出文件(临时记录)→ 任务完成后用户通过 next_step_routing 沉淀为永久知识。执行过程中不调用外部 Skill。
81
+ | 命令 | 作用 |
82
+ |------|------|
83
+ | Read `.workflow/codebase/ARCHITECTURE.md` | 模块边界 |
84
+ | `maestro search "<issue keywords>" --json` | 先前调查(top 5) |
85
+ | `maestro load --type spec --category debug --keyword "<symptom>"` | 已知 issue/workaround |
86
+ | `Glob(".workflow/scratch/*-debug-odyssey-*")` | 相关 odyssey 会话 |
87
+
88
+ ### Knowledge Persistence(S_RECORD → understanding.md §9)
89
+
90
+ | 分类 | 后续建议命令 |
91
+ |------|-------------|
92
+ | 反复根因模式 | `/spec-add debug "..."` |
93
+ | 非显而易见 workaround | `/spec-add learning "..."` |
94
+ | 架构边界违反 | `/spec-add arch "..."` |
95
+ | 可复用泛化 pattern | `/spec-add coding "..."` |
155
96
  </context>
156
97
 
157
98
  <self_iteration>
158
- **Quality Gate (适用: S_ARCHAEOLOGY, S_EXPLORE, S_DIAGNOSE, S_GENERALIZE)**
159
-
160
- | 维度 | sufficient | insufficient |
161
- |------|-----------|-------------|
162
- | Coverage | 已知相关文件/模块均已分析 | 遗漏 grep/git log 可发现的目标 |
163
- | Depth | ≥80% 发现有 file:line 级证据 | 多数仅泛泛描述 |
164
- | Actionability | 每条结论有具体后续动作 | 仅"建议关注"类无操作性结论 |
165
-
166
- **Rules:** phase complete → evaluate 3 dimensions → any insufficient → re-enter (max **3 rounds** per stage).
167
- - Round 1: widen scope — more dirs, git log depth ×2, extra delegate angles
168
- - Round 2: shift perspective — different CLI tool, reverse trace, manual code reading
169
- - Round 3: combine both + targeted deep-dive on remaining gaps
170
-
171
- **Exit:** all sufficient → advance | 3-round cap → log remaining gaps and continue. Record to `evidence.ndjson` + `session.json.self_iteration_log[]`.
99
+ 适用阶段: S_ARCHAEOLOGY, S_EXPLORE, S_DIAGNOSE, S_GENERALIZE
172
100
  </self_iteration>
173
101
 
174
102
  <state_machine>
175
103
 
176
104
  <states>
177
- S_INTAKE 解析问题、加载上下文、检查/恢复 session PERSIST: session.json + understanding.md §1
178
- S_ARCHAEOLOGY — 考古:git history + CLI 分析 PERSIST: evidence.ndjson (archaeology) + understanding.md §2
179
- S_EXPLORE — CLI 探索:调用链、错误间隙、相似模式 PERSIST: explore.json + evidence.ndjson (explore) + understanding.md §3
180
- S_DIAGNOSE — 假设驱动根因分析 PERSIST: evidence.ndjson (diagnosis|decision) + understanding.md §4-5
181
- S_FIX — 实现修复 (skip_fix 时跳过) PERSIST: code changes + evidence.ndjson (decision)
182
- S_CONFIRM — 测试 + CLI review 双重确认 (skip_fix 时跳过) PERSIST: session.json.confirmation + understanding.md §6
183
- S_GENERALIZE — 举一反三:提取 pattern,扫描相似代码 PERSIST: session.json.patterns + understanding.md §7
184
- S_DISCOVER — 评估发现,创建 issue / 记录决策 PERSIST: evidence.ndjson (discovery|decision) + understanding.md §8
185
- S_RECORD — 知识沉淀 + 目标审计 PERSIST: understanding.md §9 + spec entries
105
+ S_INTAKE S_ARCHAEOLOGY S_EXPLORE S_DIAGNOSE → S_FIX → S_CONFIRM → S_GENERALIZE → S_DISCOVER → S_RECORD → END
186
106
  </states>
187
107
 
188
108
  <transitions>
@@ -197,7 +117,7 @@ S_DIAGNOSE → S_FIX : root cause confirmed, !skip_fix
197
117
  S_DIAGNOSE → S_GENERALIZE : root cause confirmed, skip_fix, !skip_generalize
198
118
  S_DIAGNOSE → S_RECORD : root cause confirmed, skip_fix, skip_generalize
199
119
  S_DIAGNOSE → S_DIAGNOSE : all hypotheses failed, retries < 3 → A_ESCALATE_DIAGNOSIS
200
- S_DIAGNOSE → S_RECORD : all hypotheses failed, retries >= 3 → mark INCONCLUSIVE
120
+ S_DIAGNOSE → S_RECORD : retries >= 3 → mark INCONCLUSIVE
201
121
 
202
122
  S_FIX → S_CONFIRM : fix implemented
203
123
  S_CONFIRM → S_GENERALIZE : confirmed, !skip_generalize
@@ -207,10 +127,10 @@ S_CONFIRM → S_FIX : needs_rework
207
127
  S_GENERALIZE → S_DISCOVER : similar code found
208
128
  S_GENERALIZE → S_RECORD : no similar code
209
129
 
210
- S_DISCOVER → S_DIAGNOSE : discovery finds new bug worth investigating → cross_phase_loops++
211
- S_DISCOVER → S_FIX : discovery finds same-pattern bug, fix template applies, !skip_fix → cross_phase_loops++
212
- S_DISCOVER → S_RECORD : triage complete AND remaining_actionable == 0
213
- S_DISCOVER → S_RECORD : loops >= max_loops → MUST log each unfixed item with specific reason (blanket "pre-existing" is forbidden)
130
+ S_DISCOVER → S_DIAGNOSE : new bug worth investigating → cross_phase_loops++
131
+ S_DISCOVER → S_FIX : same-pattern bug, fix template applies, !skip_fix → cross_phase_loops++
132
+ S_DISCOVER → S_RECORD : triage complete, remaining_actionable == 0
133
+ S_DISCOVER → S_RECORD : loops >= max_loops → log each unfixed item with specific reason
214
134
 
215
135
  S_RECORD → END : A_RECORD complete
216
136
  </transitions>
@@ -218,12 +138,10 @@ S_RECORD → END : A_RECORD complete
218
138
  <actions>
219
139
 
220
140
  ### A_INTAKE
221
- 1. Parse arguments: issue description, flags
222
- 2. Generate slug, create `SESSION_DIR`
223
- 3. Search: `maestro search "<keywords>"` + Glob prior sessions + ARCHITECTURE.md + Grep keywords
224
- 4. Derive `phase_goals[]` from flags (apply `skip_when`)
225
- 5. Write `session.json` + `understanding.md` §1
226
- 6. Emit Goal Prompt (see Appendix)
141
+ 1. Parse arguments, generate slug, create `SESSION_DIR`
142
+ 2. Search: `maestro search "<keywords>"` + Glob prior sessions + ARCHITECTURE.md + Grep keywords
143
+ 3. Derive `phase_goals[]` from flags (apply `skip_when`)
144
+ 4. Write `session.json` + `understanding.md` §1, emit Goal Prompt
227
145
 
228
146
  📌 **Auto-commit**: `git add understanding.md && git commit -m "odyssey-debug({slug}): INTAKE — 目标解析与上下文加载"`
229
147
 
@@ -231,139 +149,68 @@ S_RECORD → END : A_RECORD complete
231
149
  Find latest session via Glob → read `session.json` → display summary → jump to `current_state`.
232
150
 
233
151
  ### A_ARCHAEOLOGY
234
- **Git archaeology (2 parallel Agents):**
235
-
236
- | Agent | Task |
237
- |-------|------|
238
- | Timeline | `git log --oneline -20 -- {files}` → change timeline |
239
- | Blame | Top 3 suspicious files: `git blame -L {region}` → critical paths |
240
-
241
- Append findings to `evidence.ndjson` (phase: "archaeology").
242
-
243
- **CLI-assisted change review:**
244
- ```bash
245
- maestro delegate "PURPOSE: Review recent modifications related to: {issue}
246
- TASK: Analyze intent behind changes | Identify risky modifications | Flag potential bug sources
247
- MODE: analysis
248
- CONTEXT: @{relevant_files} | Git log: {top_10_commits}
249
- EXPECTED: JSON [{commit_sha, risk_level, analysis, could_cause_issue, explanation}]
250
- CONSTRAINTS: Focus on behavioral changes, not formatting
251
- " --role analyze --mode analysis
252
- ```
253
- Execute with `run_in_background: true`, then wait for callback (do NOT halt the Odyssey flow). Append results to evidence.
152
+ **2 parallel Agents:** Timeline (`git log --oneline -20 -- {files}`) + Blame (top 3 suspicious files `git blame -L {region}`). Append evidence (phase: "archaeology").
153
+
154
+ **CLI change review** via `maestro delegate --role analyze --mode analysis` (`run_in_background: true`):
155
+ - PURPOSE: Review recent modifications related to {issue}
156
+ - EXPECTED: JSON [{commit_sha, risk_level, analysis, could_cause_issue, explanation}]
254
157
 
255
- Update `understanding.md` §2.
158
+ Update §2.
256
159
 
257
160
  📌 **Auto-commit**: `git add understanding.md && git commit -m "odyssey-debug({slug}): ARCHAEOLOGY — git 考古分析"`
258
161
 
259
162
  ### A_EXPLORE
260
163
  Skip if no enabled CLI tools (W006).
261
164
 
262
- ```bash
263
- maestro delegate "PURPOSE: Gather codebase evidence for: {issue}
264
- TASK: Trace call chains | Find recent changes | Identify error gaps | Check similar patterns
265
- MODE: analysis
266
- CONTEXT: @**/*
267
- EXPECTED: JSON {call_chains, recent_changes, error_gaps, similar_patterns}
268
- CONSTRAINTS: Max 20 entries/category | Symptom-related code paths
269
- Symptoms: {issue} Archaeology hints: {suspicious_commits}
270
- " --role explore --mode analysis
271
- ```
272
- Execute with `run_in_background: true`, then wait for callback (do NOT halt the Odyssey flow).
165
+ `maestro delegate --role explore --mode analysis` (`run_in_background: true`):
166
+ - PURPOSE: Gather codebase evidence call chains, recent changes, error gaps, similar patterns
167
+ - EXPECTED: JSON {call_chains, recent_changes, error_gaps, similar_patterns}
273
168
 
274
- Parse → write `explore.json` + append `evidence.ndjson` (phase: "explore"). Update §3. Mark G2 done.
169
+ Parse → write `explore.json` + evidence (phase: "explore"). Update §3. Mark G2 done.
275
170
 
276
171
  📌 **Auto-commit**: `git add understanding.md && git commit -m "odyssey-debug({slug}): EXPLORE — 代码探索完成"`
277
172
 
278
173
  ### A_DIAGNOSE
279
- 1. **Form hypotheses** from evidence (archaeology + explore), ranked [HIGH]/[MEDIUM]/[LOW] → §4
280
- 2. **Test each** (rank order): design test → execute → append evidence (phase: "diagnosis")
281
- 3. **Decision journal**: ambiguity → evidence (phase: "decision"); Normal: AskUserQuestion | `-y`: defer
282
- 4. **Root cause**: confirmed → `session.json.root_cause` + §5. Mark G1 done.
174
+ 1. Form hypotheses from evidence, ranked [HIGH]/[MEDIUM]/[LOW] → §4
175
+ 2. Test each: design test → execute → evidence (phase: "diagnosis")
176
+ 3. Decision journal: ambiguity → evidence (phase: "decision"); Normal: AskUserQuestion | `-y`: defer
177
+ 4. Root cause confirmed → `session.json.root_cause` + §5. Mark G1 done.
283
178
 
284
179
  📌 **Auto-commit**: `git add understanding.md && git commit -m "odyssey-debug({slug}): DIAGNOSE — 根因确认"`
285
180
 
286
181
  ### A_ESCALATE_DIAGNOSIS
287
- Increment `diagnosis_retries`. If < 3: broaden scope via `maestro delegate --role analyze` (same delegate format), form new hypotheses, return to S_DIAGNOSE. If >= 3: Normal → AskUserQuestion (broaden/new/INCONCLUSIVE) | `-y` → auto INCONCLUSIVE, proceed to S_RECORD. See Appendix: `-y` behavior.
182
+ Increment `diagnosis_retries`. < 3: broaden via `maestro delegate --role analyze`, new hypotheses, return S_DIAGNOSE. >= 3: Normal → AskUserQuestion | `-y` → auto INCONCLUSIVE S_RECORD.
288
183
 
289
184
  ### A_FIX
290
- 1. Present root cause + proposed fix. Normal: AskUserQuestion | `-y`: auto proceed (see Appendix)
291
- 2. Implement fix
292
- 3. Record in evidence (phase: "decision")
185
+ 1. Present root cause + proposed fix. Normal: AskUserQuestion | `-y`: auto proceed
186
+ 2. Implement fix, record evidence (phase: "decision")
293
187
 
294
188
  📌 **Auto-commit**: `git add -A && git commit -m "odyssey-debug({slug}): FIX — {修复摘要}"`
295
189
 
296
190
  ### A_CONFIRM
297
- 1. **Tests**: auto-detect framework, run covering tests
298
- 2. **CLI fix review**:
299
- ```bash
300
- maestro delegate "PURPOSE: Review fix for: {issue}
301
- TASK: Verify correctness | Check regressions | Assess completeness | Review edge cases
302
- MODE: analysis
303
- CONTEXT: @{modified_files} | Root cause: {summary} | Diff: {git_diff}
304
- EXPECTED: JSON {verdict, findings [{severity, description, suggestion}], regression_risk}
305
- CONSTRAINTS: Focus on correctness, not style
306
- " --role review --mode analysis
307
- ```
308
- Execute with `run_in_background: true`, then wait for callback (do NOT halt the Odyssey flow).
309
-
310
- 3. Write `session.json.confirmation`: `{test_result, cli_review, overall: "confirmed|needs_rework", timestamp}`
311
- 4. Update §6. `needs_rework` → S_FIX. `confirmed` → mark G3 done, advance.
191
+ 1. Run covering tests (auto-detect framework)
192
+ 2. CLI fix review via `maestro delegate --role review --mode analysis` (`run_in_background: true`):
193
+ - EXPECTED: JSON {verdict, findings [{severity, description, suggestion}], regression_risk}
194
+ 3. Write `session.json.confirmation`: `{test_result, cli_review, overall: "confirmed|needs_rework"}`
195
+ 4. Update §6. `needs_rework` S_FIX. `confirmed` mark G3 done.
312
196
 
313
197
  📌 **Auto-commit**: `git add understanding.md && git commit -m "odyssey-debug({slug}): CONFIRM — 修复验证"`
314
198
 
315
199
  ### A_GENERALIZE
316
- 举一反三: multi-layer pattern extraction 4-agent scan cross-layer dedup iterative deepening.
317
-
318
- **Pattern extraction** from root cause + fix:
319
-
320
- | Layer | Method | Example |
321
- |-------|--------|---------|
322
- | Syntax | Regex patterns (direct Grep) | `eval(`, missing `await`, unclosed resource |
323
- | Semantic | Anti-pattern description (Agent-driven) | Unhandled async errors, unvalidated input |
324
- | Structural | Architecture-level (file/module similarity) | Same import structure, missing override |
325
-
326
- Write `session.json.patterns[]`: `[{id, source, layer, signature, description, risk, fix_template}]`
327
-
328
- **4-agent parallel codebase scan:**
329
-
330
- | Agent | Strategy | Input | Scope |
331
- |-------|----------|-------|-------|
332
- | Syntax grep | Grep syntax-layer regex | P*.signature | Full project |
333
- | Semantic scan | Understand + check anti-pattern | P*.description | Related modules |
334
- | Structural match | Find structurally similar files | Buggy file structure | Full project |
335
- | Historical grep | `git log -S "{pattern}"` | P*.signature | Full git history |
336
-
337
- Returns: `[{pattern_id, file, line, context, risk_level, layer, confidence}]`
338
-
339
- **Cross-layer dedup**: same file:line multi-layer hit → boost confidence | single-layer → `needs_review` | historical hit on fixed record → `regression_risk`
340
-
341
- **Iterative deepening**: module with ≥3 hits → targeted deep scan (max 1 round).
342
-
343
- **Quality Gate** (self-iteration) → if insufficient, expand and re-scan.
344
-
345
- Write §7 + `session.json.generalization_stats`: `{patterns_extracted, total_hits, cross_layer_confirmed, regression_risks, by_layer, deepening_triggered}`. Mark G4 done.
200
+ base A_GENERALIZE 执行。Pattern 来源: root cause + fix。统计写入 `session.json.generalization_stats`。Mark G4 done.
346
201
 
347
202
  📌 **Auto-commit**: `git add understanding.md && git commit -m "odyssey-debug({slug}): GENERALIZE — 泛化扫描完成"`
348
203
 
349
204
  ### A_DISCOVER
350
- 1. **Triage** each hit: read ±10 lines context → classify `safe`/`risk`/`bug`
351
- 2. **Route**:
352
- - `bug` + directly fixable → **fix immediately** (not just log an issue) → back to S_FIX
353
- - `bug` + requires cross-module/architectural decision → create issue (with fix suggestion + impact analysis)
354
- - `risk` → evaluate if guard/validation can mitigate directly; if yes, fix it
355
- - `safe` → mark skip
356
- See Appendix `-y` behavior table. Append evidence (phase: "discovery" + "decision")
357
- 3. Update §8. Mark G5 done.
205
+ base A_DISCOVER 执行。Mark G5 done.
358
206
 
359
207
  📌 **Auto-commit**: `git add understanding.md && git commit -m "odyssey-debug({slug}): DISCOVER — 发现分类完成"`
360
208
 
361
209
  ### A_RECORD
362
- 1. Finalize `understanding.md` §9
363
- 2. **Write learnings** to understanding.md §9: Knowledge Persistence 表分类记录(临时),completion summary 列出建议的 `/spec-add` 命令
364
- 3. Mark G6 done. Process pending decisions: Normal → AskUserQuestion | `-y` → skip (show deferred count)
365
- 4. **Goal audit**: all `completion_confirmed` true → `phase_goals_all_done = true`. Any false: Normal → AskUserQuestion (回退/跳过/接受) | `-y` → auto accept
366
- 5. **Completion**: `current_state = "COMPLETED"`, emit summary:
210
+ 1. Finalize `understanding.md` §9,按 Knowledge Persistence 表分类记录
211
+ 2. Mark G6 done. Pending decisions: Normal AskUserQuestion | `-y` skip (show deferred count)
212
+ 3. 其余按 base A_RECORD 执行
213
+ 4. **Completion summary**:
367
214
  ```
368
215
  --- DEBUG ODYSSEY COMPLETE ---
369
216
  Issue: {issue}
@@ -387,7 +234,7 @@ Goals: {done}/{total} confirmed ({skipped} skipped)
387
234
 
388
235
  ### Goal Prompt Template
389
236
 
390
- **时机守卫:仅在 A_INTAKE 完成后显示一次。A_RECORD 完成时禁止重新显示。**
237
+ **时机守卫:仅在 A_INTAKE 完成后显示一次。** 机制见 base。
391
238
 
392
239
  ```
393
240
  📋 Debug Odyssey 会话已创建。可随时复制以下 /goal 设定终止条件:
@@ -397,34 +244,23 @@ Goals: {done}/{total} confirmed ({skipped} skipped)
397
244
  - {G.id}: {G.goal} — 完成条件: {G.done_when}
398
245
  {end for}
399
246
  穷尽迭代:直到根因确认(或明确 INCONCLUSIVE)且修复验证通过
400
- 且泛化扫描穷尽(所有 hits 已分类处理)且 phase_goals_all_done=true 才停。
401
- 假设失败时扩范围→换视角→升级工具,不轻易放弃。
247
+ 且泛化扫描穷尽且 phase_goals_all_done=true 才停。
402
248
  泛化发现的同类 bug 全部修复或创建 issue,不允许遗留。
403
249
  遇到 phase=decision 的 pending 必须 AskUserQuestion,不得自行 resolve。
404
250
  ```
405
251
 
406
- Odyssey 输出提示词后继续执行不阻塞。`/goal` 由用户任意时刻输入。
407
-
408
252
  ### `-y` Auto-Confirm Behavior
409
253
 
410
254
  | Decision Point | Normal | `-y` mode |
411
255
  |---------------|--------|-----------|
412
- | A_DIAGNOSE ambiguity | AskUserQuestion blocks | record `deferred`, best-effort continue |
256
+ | A_DIAGNOSE ambiguity | AskUserQuestion | `deferred`, best-effort continue |
413
257
  | A_ESCALATE 3-strike | AskUserQuestion 3-way | auto INCONCLUSIVE |
414
- | A_FIX direction | AskUserQuestion confirm | auto proceed with suggested fix |
415
- | A_DISCOVER bug triage | AskUserQuestion route | auto create issue |
258
+ | A_FIX direction | AskUserQuestion | auto proceed with suggested fix |
259
+ | A_DISCOVER bug triage | AskUserQuestion | auto create issue |
416
260
  | A_DISCOVER ambiguous | AskUserQuestion batch | all `deferred` |
417
261
  | A_RECORD decisions | AskUserQuestion per-item | skip, show deferred count |
418
262
  | A_RECORD goal audit | AskUserQuestion 3-way | auto accept current state |
419
263
 
420
- `deferred` items shown as "待决策" in completion summary; recoverable via `-c`.
421
-
422
- ### Phase Goal Lifecycle
423
-
424
- `pending → done (confirmed=true)` normal | `pending → skipped (confirmed=true)` flags/manual | `pending → failed (confirmed=false)` INCONCLUSIVE
425
-
426
- `phase_goals_all_done = true` only when ALL goals have `completion_confirmed == true`.
427
-
428
264
  </appendix>
429
265
 
430
266
  </state_machine>
@@ -433,37 +269,22 @@ Odyssey 输出提示词后继续执行不阻塞。`/goal` 由用户任意时刻
433
269
  | Code | Severity | Condition | Recovery |
434
270
  |------|----------|-----------|----------|
435
271
  | E001 | error | No issue and no session to resume | Provide issue or use -c |
436
- | E003 | error | Resume but no session found | Start new session |
437
- | E004 | error | Delegate execution failed | Retry or proceed without CLI |
438
272
  | W001 | warning | No relevant git history | Proceed with limited context |
439
273
  | W002 | warning | All hypotheses inconclusive after 3 retries | INCONCLUSIVE |
440
- | W003 | warning | Generalization scan 0 hits | Skip discovery |
441
- | W004 | warning | Delegate parse failed | Use raw output |
442
274
  | W005 | warning | Pending decisions unresolved | Filter evidence.ndjson phase=decision |
443
275
  | W006 | warning | CLI exploration skipped (no tools) | Proceed without explore.json |
444
276
  </error_codes>
445
277
 
446
278
  <success_criteria>
447
- - [ ] Session directory created with 4 output files
448
- - [ ] Prior knowledge searched (maestro search + sessions + architecture)
449
- - [ ] Git archaeology (log + blame) + CLI change review, evidence.ndjson phase=archaeology
450
- - [ ] CLI exploration, explore.json written, evidence phase=explore
451
- - [ ] Hypotheses formed from archaeology + explore, tested and logged phase=diagnosis
452
- - [ ] Root cause declared with evidence refs
279
+ - [ ] Session created with 4 output files, prior knowledge searched
280
+ - [ ] Git archaeology + CLI change review evidence phase=archaeology
281
+ - [ ] CLI exploration explore.json + evidence phase=explore
282
+ - [ ] Hypotheses tested, root cause declared with evidence refs
453
283
  - [ ] understanding.md tracks all 9 sections progressively
454
- - [ ] Fix implemented + confirmed with test + CLI review (unless --skip-fix)
455
- - [ ] Multi-layer patterns (syntax/semantic/structural) extracted (unless --skip-generalize)
456
- - [ ] 4-agent scan + cross-layer dedup + iterative deepening for ≥3 hits/module
457
- - [ ] Discoveries classified and routed (fix/issue/decision/skip)
458
- - [ ] **Every unfixed finding has individual classification and reason** — blanket "pre-existing" labels are forbidden
459
- - [ ] Decision journal: all human-judgment items in evidence.ndjson phase=decision
460
- - [ ] phase_goals derived from flags, skip_when applied, each phase marks its goal
461
- - [ ] Goal audit in A_RECORD — unmet goals surfaced, phase_goals_all_done set correctly
462
- - [ ] Goal Prompt displayed once after session creation
463
- - [ ] `-y`: all decisions auto-resolve/defer, deferred count in summary
464
- - [ ] State saved at each transition (resumable via -c)
465
- - [ ] Quality Gate self-iteration when insufficient, logged in self_iteration_log
466
- - [ ] Spec entries persisted for reusable learnings
284
+ - [ ] Fix implemented + confirmed (unless --skip-fix)
285
+ - [ ] Multi-layer generalization + scan (unless --skip-generalize)
286
+ - [ ] Discoveries classified and routed; every unfixed finding individually justified
287
+ - [ ] phase_goals derived, goal audit in A_RECORD, state resumable via -c
467
288
  - [ ] Completion summary with all stats
468
289
  </success_criteria>
469
290