maestro-flow 0.5.32 → 0.5.34

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 (213) hide show
  1. package/.agents/agents/role-design-author.md +5 -3
  2. package/.agents/skills/maestro/SKILL.md +8 -1
  3. package/.agents/skills/maestro-help/SKILL.md +39 -10
  4. package/.agents/skills/maestro-help/index/catalog.json +118 -53
  5. package/.agents/skills/maestro-help/phases/01-parse-intent.md +9 -6
  6. package/.agents/skills/maestro-help/phases/02-search-present.md +55 -15
  7. package/.agents/skills/maestro-help/phases/03-workflow-guide.md +35 -2
  8. package/.agents/skills/maestro-ralph/SKILL.md +9 -2
  9. package/.agents/skills/maestro-ralph-beta/SKILL.md +7 -2
  10. package/.agents/skills/maestro-ralph-execute/SKILL.md +1 -0
  11. package/.agents/skills/manage-harvest/SKILL.md +3 -0
  12. package/.agents/skills/manage-knowledge-audit/SKILL.md +29 -0
  13. package/.agents/skills/odyssey-debug/SKILL.md +7 -1
  14. package/.agents/skills/odyssey-improve/SKILL.md +7 -1
  15. package/.agents/skills/odyssey-planex/SKILL.md +11 -1
  16. package/.agents/skills/odyssey-review-test-fix/SKILL.md +7 -1
  17. package/.agents/skills/odyssey-ui/SKILL.md +7 -1
  18. package/.agents/skills/quality-review/SKILL.md +3 -0
  19. package/.agy/agents/role-design-author.md +5 -3
  20. package/.agy/skills/maestro/SKILL.md +8 -1
  21. package/.agy/skills/maestro-help/SKILL.md +39 -10
  22. package/.agy/skills/maestro-help/index/catalog.json +118 -53
  23. package/.agy/skills/maestro-help/phases/01-parse-intent.md +9 -6
  24. package/.agy/skills/maestro-help/phases/02-search-present.md +55 -15
  25. package/.agy/skills/maestro-help/phases/03-workflow-guide.md +35 -2
  26. package/.agy/skills/maestro-ralph/SKILL.md +9 -2
  27. package/.agy/skills/maestro-ralph-beta/SKILL.md +7 -2
  28. package/.agy/skills/maestro-ralph-execute/SKILL.md +1 -0
  29. package/.agy/skills/manage-harvest/SKILL.md +3 -0
  30. package/.agy/skills/manage-knowledge-audit/SKILL.md +29 -0
  31. package/.agy/skills/odyssey-debug/SKILL.md +7 -1
  32. package/.agy/skills/odyssey-improve/SKILL.md +7 -1
  33. package/.agy/skills/odyssey-planex/SKILL.md +11 -1
  34. package/.agy/skills/odyssey-review-test-fix/SKILL.md +7 -1
  35. package/.agy/skills/odyssey-ui/SKILL.md +7 -1
  36. package/.agy/skills/quality-review/SKILL.md +3 -0
  37. package/.claude/agents/role-design-author.md +5 -3
  38. package/.claude/commands/maestro-ralph-beta.md +7 -2
  39. package/.claude/commands/maestro-ralph-execute.md +1 -0
  40. package/.claude/commands/maestro-ralph.md +9 -2
  41. package/.claude/commands/maestro.md +8 -1
  42. package/.claude/commands/manage-harvest.md +3 -0
  43. package/.claude/commands/manage-knowledge-audit.md +29 -0
  44. package/.claude/commands/odyssey-debug.md +7 -1
  45. package/.claude/commands/odyssey-improve.md +7 -1
  46. package/.claude/commands/odyssey-planex.md +11 -1
  47. package/.claude/commands/odyssey-review-test-fix.md +7 -1
  48. package/.claude/commands/odyssey-ui.md +7 -1
  49. package/.claude/commands/quality-review.md +3 -0
  50. package/.claude/skills/maestro-help/SKILL.md +39 -10
  51. package/.claude/skills/maestro-help/index/catalog.json +118 -53
  52. package/.claude/skills/maestro-help/phases/01-parse-intent.md +9 -6
  53. package/.claude/skills/maestro-help/phases/02-search-present.md +55 -15
  54. package/.claude/skills/maestro-help/phases/03-workflow-guide.md +35 -2
  55. package/.codex/skills/manage-harvest/SKILL.md +2 -1
  56. package/.codex/skills/quality-review/SKILL.md +4 -2
  57. package/README.md +196 -87
  58. package/README.zh-CN.md +198 -79
  59. package/dashboard/dist-server/dashboard/src/server/wiki/graph-analysis.js +9 -4
  60. package/dashboard/dist-server/dashboard/src/server/wiki/graph-analysis.js.map +1 -1
  61. package/dashboard/dist-server/dashboard/src/server/wiki/search.d.ts +8 -5
  62. package/dashboard/dist-server/dashboard/src/server/wiki/search.js +22 -42
  63. package/dashboard/dist-server/dashboard/src/server/wiki/search.js.map +1 -1
  64. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.d.ts +1 -4
  65. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js +28 -42
  66. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js.map +1 -1
  67. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.test.js +22 -22
  68. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.test.js.map +1 -1
  69. package/dashboard/dist-server/dashboard/src/server/wiki/writer-stress.test.js +12 -12
  70. package/dashboard/dist-server/dashboard/src/server/wiki/writer-stress.test.js.map +1 -1
  71. package/dashboard/dist-server/dashboard/src/server/wiki/writer.js +10 -3
  72. package/dashboard/dist-server/dashboard/src/server/wiki/writer.js.map +1 -1
  73. package/dashboard/dist-server/src/commands/install-backend.d.ts +1 -1
  74. package/dashboard/dist-server/src/commands/install-backend.js +1 -1
  75. package/dashboard/dist-server/src/commands/install-backend.js.map +1 -1
  76. package/dashboard/dist-server/src/core/component-defs.d.ts +1 -0
  77. package/dashboard/dist-server/src/core/component-defs.js +68 -19
  78. package/dashboard/dist-server/src/core/component-defs.js.map +1 -1
  79. package/dashboard/dist-server/src/graph/kg/db/types.d.ts +2 -1
  80. package/dashboard/dist-server/src/graph/kg/db/types.js.map +1 -1
  81. package/dashboard/dist-server/src/graph/kg/extraction/knowledge-extractor-registry.d.ts +22 -0
  82. package/dashboard/dist-server/src/graph/kg/extraction/knowledge-extractor-registry.js +64 -0
  83. package/dashboard/dist-server/src/graph/kg/extraction/knowledge-extractor-registry.js.map +1 -0
  84. package/dashboard/dist-server/src/graph/kg/extraction/orchestrator.js +12 -98
  85. package/dashboard/dist-server/src/graph/kg/extraction/orchestrator.js.map +1 -1
  86. package/dashboard/dist-server/src/hooks/keyword-spec-injector.js +5 -2
  87. package/dashboard/dist-server/src/hooks/keyword-spec-injector.js.map +1 -1
  88. package/dashboard/dist-server/src/hooks/wiki-role-loader.js +2 -1
  89. package/dashboard/dist-server/src/hooks/wiki-role-loader.js.map +1 -1
  90. package/dashboard/dist-server/src/tools/domain-loader.js +22 -16
  91. package/dashboard/dist-server/src/tools/domain-loader.js.map +1 -1
  92. package/dashboard/dist-server/src/tools/spec-entry-parser.d.ts +6 -1
  93. package/dashboard/dist-server/src/tools/spec-entry-parser.js +44 -13
  94. package/dashboard/dist-server/src/tools/spec-entry-parser.js.map +1 -1
  95. package/dashboard/dist-server/src/tools/spec-keyword-index.d.ts +2 -0
  96. package/dashboard/dist-server/src/tools/spec-keyword-index.js +4 -9
  97. package/dashboard/dist-server/src/tools/spec-keyword-index.js.map +1 -1
  98. package/dashboard/dist-server/src/tools/spec-loader.js +3 -11
  99. package/dashboard/dist-server/src/tools/spec-loader.js.map +1 -1
  100. package/dashboard/dist-server/src/types/index.d.ts +14 -0
  101. package/dashboard/dist-server/src/utils/frontmatter.d.ts +15 -0
  102. package/dashboard/dist-server/src/utils/frontmatter.js +76 -0
  103. package/dashboard/dist-server/src/utils/frontmatter.js.map +1 -0
  104. package/dist/src/commands/domain.d.ts.map +1 -1
  105. package/dist/src/commands/domain.js +8 -2
  106. package/dist/src/commands/domain.js.map +1 -1
  107. package/dist/src/commands/install-backend.d.ts +1 -1
  108. package/dist/src/commands/install-backend.d.ts.map +1 -1
  109. package/dist/src/commands/install-backend.js +1 -1
  110. package/dist/src/commands/install-backend.js.map +1 -1
  111. package/dist/src/commands/install.d.ts.map +1 -1
  112. package/dist/src/commands/install.js +6 -2
  113. package/dist/src/commands/install.js.map +1 -1
  114. package/dist/src/commands/knowhow.d.ts.map +1 -1
  115. package/dist/src/commands/knowhow.js +3 -26
  116. package/dist/src/commands/knowhow.js.map +1 -1
  117. package/dist/src/commands/search.d.ts +1 -1
  118. package/dist/src/commands/search.d.ts.map +1 -1
  119. package/dist/src/commands/search.js +43 -41
  120. package/dist/src/commands/search.js.map +1 -1
  121. package/dist/src/commands/spec.d.ts.map +1 -1
  122. package/dist/src/commands/spec.js +106 -6
  123. package/dist/src/commands/spec.js.map +1 -1
  124. package/dist/src/commands/uninstall.d.ts.map +1 -1
  125. package/dist/src/commands/uninstall.js +12 -3
  126. package/dist/src/commands/uninstall.js.map +1 -1
  127. package/dist/src/config/cli-tools-config.d.ts.map +1 -1
  128. package/dist/src/config/cli-tools-config.js +2 -0
  129. package/dist/src/config/cli-tools-config.js.map +1 -1
  130. package/dist/src/core/component-defs.d.ts +1 -0
  131. package/dist/src/core/component-defs.d.ts.map +1 -1
  132. package/dist/src/core/component-defs.js +68 -19
  133. package/dist/src/core/component-defs.js.map +1 -1
  134. package/dist/src/core/extension-loader.d.ts.map +1 -1
  135. package/dist/src/core/extension-loader.js +4 -0
  136. package/dist/src/core/extension-loader.js.map +1 -1
  137. package/dist/src/core/install-executor.d.ts.map +1 -1
  138. package/dist/src/core/install-executor.js +2 -0
  139. package/dist/src/core/install-executor.js.map +1 -1
  140. package/dist/src/graph/analyzers/fs-analyzer.js +2 -2
  141. package/dist/src/graph/analyzers/fs-analyzer.js.map +1 -1
  142. package/dist/src/graph/kg/db/node-kind-registry.d.ts +18 -0
  143. package/dist/src/graph/kg/db/node-kind-registry.d.ts.map +1 -0
  144. package/dist/src/graph/kg/db/node-kind-registry.js +42 -0
  145. package/dist/src/graph/kg/db/node-kind-registry.js.map +1 -0
  146. package/dist/src/graph/kg/db/types.d.ts +2 -1
  147. package/dist/src/graph/kg/db/types.d.ts.map +1 -1
  148. package/dist/src/graph/kg/db/types.js.map +1 -1
  149. package/dist/src/graph/kg/extraction/knowledge-extractor-registry.d.ts +23 -0
  150. package/dist/src/graph/kg/extraction/knowledge-extractor-registry.d.ts.map +1 -0
  151. package/dist/src/graph/kg/extraction/knowledge-extractor-registry.js +64 -0
  152. package/dist/src/graph/kg/extraction/knowledge-extractor-registry.js.map +1 -0
  153. package/dist/src/graph/kg/extraction/orchestrator.d.ts.map +1 -1
  154. package/dist/src/graph/kg/extraction/orchestrator.js +12 -98
  155. package/dist/src/graph/kg/extraction/orchestrator.js.map +1 -1
  156. package/dist/src/hooks/keyword-spec-injector.d.ts.map +1 -1
  157. package/dist/src/hooks/keyword-spec-injector.js +5 -2
  158. package/dist/src/hooks/keyword-spec-injector.js.map +1 -1
  159. package/dist/src/hooks/wiki-role-loader.d.ts.map +1 -1
  160. package/dist/src/hooks/wiki-role-loader.js +2 -1
  161. package/dist/src/hooks/wiki-role-loader.js.map +1 -1
  162. package/dist/src/index.d.ts +6 -0
  163. package/dist/src/index.d.ts.map +1 -1
  164. package/dist/src/index.js +4 -0
  165. package/dist/src/index.js.map +1 -1
  166. package/dist/src/tools/domain-loader.d.ts.map +1 -1
  167. package/dist/src/tools/domain-loader.js +22 -16
  168. package/dist/src/tools/domain-loader.js.map +1 -1
  169. package/dist/src/tools/spec-conflict-marker.d.ts +55 -0
  170. package/dist/src/tools/spec-conflict-marker.d.ts.map +1 -0
  171. package/dist/src/tools/spec-conflict-marker.js +228 -0
  172. package/dist/src/tools/spec-conflict-marker.js.map +1 -0
  173. package/dist/src/tools/spec-entry-parser.d.ts +6 -1
  174. package/dist/src/tools/spec-entry-parser.d.ts.map +1 -1
  175. package/dist/src/tools/spec-entry-parser.js +44 -13
  176. package/dist/src/tools/spec-entry-parser.js.map +1 -1
  177. package/dist/src/tools/spec-keyword-index.d.ts +2 -0
  178. package/dist/src/tools/spec-keyword-index.d.ts.map +1 -1
  179. package/dist/src/tools/spec-keyword-index.js +4 -9
  180. package/dist/src/tools/spec-keyword-index.js.map +1 -1
  181. package/dist/src/tools/spec-loader.d.ts.map +1 -1
  182. package/dist/src/tools/spec-loader.js +3 -11
  183. package/dist/src/tools/spec-loader.js.map +1 -1
  184. package/dist/src/tools/spec-writer.d.ts.map +1 -1
  185. package/dist/src/tools/spec-writer.js +2 -6
  186. package/dist/src/tools/spec-writer.js.map +1 -1
  187. package/dist/src/tools/store-knowhow.d.ts.map +1 -1
  188. package/dist/src/tools/store-knowhow.js +6 -52
  189. package/dist/src/tools/store-knowhow.js.map +1 -1
  190. package/dist/src/tui/install-ui/ComponentGrid.d.ts +0 -4
  191. package/dist/src/tui/install-ui/ComponentGrid.d.ts.map +1 -1
  192. package/dist/src/tui/install-ui/ComponentGrid.js +57 -31
  193. package/dist/src/tui/install-ui/ComponentGrid.js.map +1 -1
  194. package/dist/src/tui/install-ui/GroupedHub.js +1 -1
  195. package/dist/src/tui/install-ui/GroupedHub.js.map +1 -1
  196. package/dist/src/tui/install-ui/useInstallFlowState.d.ts.map +1 -1
  197. package/dist/src/tui/install-ui/useInstallFlowState.js +3 -3
  198. package/dist/src/tui/install-ui/useInstallFlowState.js.map +1 -1
  199. package/dist/src/tui/uninstall-ui/UninstallFlow.d.ts.map +1 -1
  200. package/dist/src/tui/uninstall-ui/UninstallFlow.js +3 -1
  201. package/dist/src/tui/uninstall-ui/UninstallFlow.js.map +1 -1
  202. package/dist/src/types/index.d.ts +14 -0
  203. package/dist/src/types/index.d.ts.map +1 -1
  204. package/dist/src/utils/frontmatter.d.ts +16 -0
  205. package/dist/src/utils/frontmatter.d.ts.map +1 -0
  206. package/dist/src/utils/frontmatter.js +76 -0
  207. package/dist/src/utils/frontmatter.js.map +1 -0
  208. package/dist/src/utils/migration-registry.d.ts.map +1 -1
  209. package/dist/src/utils/migration-registry.js +14 -1
  210. package/dist/src/utils/migration-registry.js.map +1 -1
  211. package/package.json +2 -2
  212. package/workflows/claude-instructions.md +48 -45
  213. package/workflows/codex-instructions.md +25 -19
@@ -46,6 +46,7 @@ Follow '~/.maestro/workflows/harvest.md' Stages 1-8 in order.
46
46
  2. **Dedup before write** — check harvest-log.jsonl and existing stores before each write.
47
47
  3. **Never modify source artifacts** — harvest is purely extractive.
48
48
  4. **Dedup contract with parallel writers** — when appending to `issues.jsonl`, set `source: "harvest"` on each row so concurrent writers (e.g. `manage-issue-discover` with `source: "discover"`) can be distinguished and deduplicated.
49
+ 5. **Conflict pre-check on spec routing** — when routing to spec (Stage 6b), compare new entry against existing specs with same keywords/category. If semantic conflict detected, set `confidence="low"` on the new entry and log conflict note. Use `maestro spec conflict mark` if contradiction is clear.
49
50
 
50
51
  Extraction patterns, classification rules, routing infrastructure, and fragment ID scheme defined in workflow harvest.md.
51
52
 
@@ -60,6 +61,8 @@ Extraction patterns, classification rules, routing infrastructure, and fragment
60
61
  | Wiki graph needs linking | `/manage-wiki connect --fix` |
61
62
  | Issues created | `/manage-issue list --source harvest` |
62
63
  | Specs extracted | `/spec-load --role implement` |
64
+ | Specs extracted (冲突审查) | `/manage-knowledge-audit --scope spec` — 新写入的 spec 可能与现有条目矛盾 |
65
+ | Spec 冲突标记已存在 | `maestro spec conflict list` — 查看当前冲突状态 |
63
66
  | Full phase retrospective | `/quality-retrospective` |
64
67
  </completion>
65
68
 
@@ -45,10 +45,12 @@ Follow `~/.maestro/workflows/knowledge-audit.md` Stages 1-8 in order.
45
45
  **GATE 1: Load → Detect** (Stages 1-2 → Stage 4)
46
46
  - REQUIRED: Scope 解析通过,互斥标志校验完成。
47
47
  - REQUIRED: 三存储按 scope 加载完成。
48
+ - REQUIRED: 加载已有冲突标记: `maestro spec conflict list` → 合并到 finding 池。
48
49
  - BLOCKED if scope 非法或存储不可读: E001/E002。
49
50
 
50
51
  **GATE 2: Detect → Decision** (Stage 4 → Stage 5)
51
52
  - REQUIRED: Finding 池按 P0/P1/P2 分级输出。
53
+ - REQUIRED: 已标记 `contested` 的条目自动归入 P0 finding(来源: conflict-marker)。
52
54
  - REQUIRED: 未 harvest 的 artifact 删除前触发抢救确认(W002)。
53
55
  - BLOCKED if finding 为空: 无需淘汰,直接输出报告。
54
56
 
@@ -63,6 +65,31 @@ Follow `~/.maestro/workflows/knowledge-audit.md` Stages 1-8 in order.
63
65
  - **Deprecate over delete**: 文本存储首选 `status="deprecated"`,保留历史。
64
66
  - **Purge 仅 artifact**: `--purge` 不作用于 spec/knowhow。
65
67
  - **Rescue before delete**: 未抽取 artifact 删除前强制提示先 `/manage-harvest`。
68
+
69
+ ### Conflict Resolution Integration
70
+
71
+ 四态决策(扩展自三态 keep/deprecate/delete):
72
+
73
+ | 动作 | 适用场景 | 执行 |
74
+ |------|---------|------|
75
+ | `keep` | 内容正确,无需变更 | 写 audit-log ignore 记录 |
76
+ | `contest` | 矛盾真实存在,需进一步审查 | `maestro spec conflict mark <file> <line> --note "<evidence>"` |
77
+ | `deprecate` | 内容过时或被取代 | 注入 `status="deprecated"` + `maestro spec conflict clear <file> <line>` |
78
+ | `delete` | 内容明确错误 | 移除 entry + `maestro spec conflict clear <file> <line>` |
79
+
80
+ **关键**: deprecate/delete 执行时,如果目标条目有 conflict-marker,必须同步调用 `maestro spec conflict clear` 清除标记,避免悬空冲突。
81
+
82
+ ### Code-as-Truth 校验(审查核心原则)
83
+
84
+ **代码是唯一真理源。** Spec/knowhow 中的任何声明,必须与代码实际行为一致。
85
+
86
+ 当 detector 发现 spec 条目声称某行为/规则时:
87
+ 1. **代码校验**: grep/read 代码中相关实现,确认 spec 声明是否与代码一致
88
+ 2. **不一致处理**:
89
+ - 代码正确、spec 过时 → `deprecate` 或 `delete` spec 条目
90
+ - 代码正确、spec 不完整 → `contest` 并建议补充
91
+ - 代码有 bug、spec 正确 → `keep` spec,生成 issue 修代码
92
+ 3. **禁止**: 仅凭 spec 文本判断正确性。每个 finding 的 evidence 必须包含代码引用(文件:行号)
66
93
  </execution>
67
94
 
68
95
  <completion>
@@ -73,6 +100,8 @@ Follow `~/.maestro/workflows/knowledge-audit.md` Stages 1-8 in order.
73
100
  | 复审淘汰记录 | 查看 `audit-report-{date}.md` |
74
101
  | 抢救未抽取 artifact | `/manage-harvest <artifact-id>` |
75
102
  | 验证 spec 现状 | `/spec-load --role implement` |
103
+ | 查看冲突标记 | `maestro spec conflict list` |
104
+ | 清除已解决冲突 | `maestro spec conflict clear-all <file>` |
76
105
  | 周期巡检 | `--scope all --report` |
77
106
  </completion>
78
107
 
@@ -57,6 +57,8 @@ Treats every bug as a learning signal with exhaustive iteration until root cause
57
57
  - 关键判断用不同 `--role`(analyze / review / explore)获取多视角
58
58
  - 修复前后各做一次 CLI review 确认
59
59
  - 不同阶段可调用不同工具,综合多方意见再行动
60
+
61
+ 4. **禁止以上下文消耗为由中断** — harness 自动处理 context compression,以"上下文不足"或"已执行 N 个阶段"为由中断属于纪律违反;必须完整走完状态机直到 S_RECORD → END
60
62
  </execution_discipline>
61
63
 
62
64
  <context>
@@ -392,7 +394,11 @@ Goals: {done}/{total} confirmed ({skipped} skipped)
392
394
  ```
393
395
  📋 Debug Odyssey 会话已创建。可随时复制以下 /goal 设定终止条件:
394
396
 
395
- /goal 穷尽迭代:直到根因确认(或明确 INCONCLUSIVE)且修复验证通过
397
+ /goal 完成以下目标:
398
+ {for each G in phase_goals where status != "skipped":}
399
+ - {G.id}: {G.goal} — 完成条件: {G.done_when}
400
+ {end for}
401
+ 穷尽迭代:直到根因确认(或明确 INCONCLUSIVE)且修复验证通过
396
402
  且泛化扫描穷尽(所有 hits 已分类处理)且 phase_goals_all_done=true 才停。
397
403
  假设失败时扩范围→换视角→升级工具,不轻易放弃。
398
404
  泛化发现的同类 bug 全部修复或创建 issue,不允许遗留。
@@ -47,6 +47,8 @@ Baseline-first approach with exhaustive iteration until zero remaining actionabl
47
47
  - survey 阶段: `--role explore` 发现依赖/复杂度热点
48
48
  - audit/diagnose: `--role analyze` 获取多视角分析
49
49
  - fix 前后: `--role review` 确认改进正确性
50
+
51
+ 4. **禁止以上下文消耗为由中断** — harness 自动处理 context compression,以"上下文不足"或"已执行 N 个阶段"为由中断属于纪律违反;必须完整走完状态机直到 S_RECORD → END
50
52
  </execution_discipline>
51
53
 
52
54
  <context>
@@ -431,7 +433,11 @@ Goals: {done}/{total} ({skipped} skipped)
431
433
  ```
432
434
  📋 Improve Odyssey 会话已创建。可随时复制以下 /goal 设定终止条件:
433
435
 
434
- /goal 穷尽迭代:直到 session.json 的 audit_result 中所有 findings 均已处理(fix/issue/decision)
436
+ /goal 完成以下目标:
437
+ {for each G in phase_goals where status != "skipped":}
438
+ - {G.id}: {G.goal} — 完成条件: {G.done_when}
439
+ {end for}
440
+ 穷尽迭代:直到 session.json 的 audit_result 中所有 findings 均已处理(fix/issue/decision)
435
441
  且 phase_goals_all_done=true 才停。修复按 severity 逐轮迭代,每轮修复后 re-verify 修改区域。
436
442
  Baseline metrics 必须在修复前采集,修复后必须与 baseline 对比确认改进。
437
443
  遇到 phase=decision 的 pending 必须 ask_question。不允许"只报告不处理"。
@@ -56,6 +56,8 @@ plan → execute → verify → fix gaps → iterate until ALL criteria pass.
56
56
  - 计划阶段: `--role analyze` 获取任务分解建议
57
57
  - 修复前后: `--role review` 确认无回归
58
58
  - verify 阶段: cli-review 类型标准自动 delegate
59
+
60
+ 4. **禁止以上下文消耗为由中断** — harness 自动处理 context compression,以"上下文不足"或"已执行 N 个阶段"为由中断属于纪律违反;必须完整走完状态机直到 S_RECORD → END
59
61
  </execution_discipline>
60
62
 
61
63
  <context>
@@ -515,7 +517,15 @@ Write understanding.md §6, generalization_stats. Mark G5 done.
515
517
  ```
516
518
  📋 Planex Odyssey 会话已创建。可随时复制以下 /goal 设定终止条件(执行过程中输入即可):
517
519
 
518
- /goal 穷尽迭代:直到 acceptance_criteria[*] 全部 status==passed
520
+ /goal 完成以下目标:
521
+ {for each G in phase_goals where status != "skipped":}
522
+ - {G.id}: {G.goal} — 完成条件: {G.done_when}
523
+ {end for}
524
+ 验收标准:
525
+ {for each AC in acceptance_criteria:}
526
+ - {AC.id}: {AC.criterion} (验证方式: {AC.verify_method})
527
+ {end for}
528
+ 穷尽迭代:直到 acceptance_criteria[*] 全部 status==passed
519
529
  且 phase_goals_all_done=true 才停。verify 失败自动 fix→re-verify 循环。
520
530
  每轮修复后重新验证,新发现的标准违反继续修,不超过 max_iterations。
521
531
  遇到 phase=decision 的 pending 必须 ask_question,不得自行 resolve。
@@ -46,6 +46,8 @@ fix ALL findings → confirm → generalize → discover → persist. Zero-resid
46
46
  3. **多 CLI 辅助** — 利用 `maestro delegate` 调用多个 CLI 工具交叉验证
47
47
  - 关键判断用不同 `--role`(analyze / review / explore)获取多视角
48
48
  - 修复前后各做一次 CLI review 确认
49
+
50
+ 4. **禁止以上下文消耗为由中断** — harness 自动处理 context compression,以"上下文不足"或"已执行 N 个阶段"为由中断属于纪律违反;必须完整走完状态机直到 S_RECORD → END
49
51
  </execution_discipline>
50
52
 
51
53
  <context>
@@ -366,7 +368,11 @@ Goals: {done}/{total} ({skipped} skipped)
366
368
  ```
367
369
  📋 Review-Test-Fix Odyssey 会话已创建。可随时复制以下 /goal 设定终止条件(执行过程中输入即可):
368
370
 
369
- /goal 穷尽迭代:直到 session.json 的 review_result.remaining_actionable == 0
371
+ /goal 完成以下目标:
372
+ {for each G in phase_goals where status != "skipped":}
373
+ - {G.id}: {G.goal} — 完成条件: {G.done_when}
374
+ {end for}
375
+ 穷尽迭代:直到 session.json 的 review_result.remaining_actionable == 0
370
376
  且 confirmation.verdict == "confirmed" 且 phase_goals_all_done == true 才停。
371
377
  修复按 severity 逐轮迭代(critical→high→medium→low),每轮修复后 re-review 修改区域。
372
378
  发现新问题追加到当前轮继续。遇到 phase=decision 的 pending 必须 ask_question。
@@ -47,6 +47,8 @@ fix → verify → generalize → discover → persist. Every pixel is a learnin
47
47
  - survey 阶段: `--role explore` 发现设计系统用法
48
48
  - audit/diverge: `--role analyze` 获取多视角创意
49
49
  - fix 前后: `--role review` 确认视觉正确性
50
+
51
+ 4. **禁止以上下文消耗为由中断** — harness 自动处理 context compression,以"上下文不足"或"已执行 N 个阶段"为由中断属于纪律违反;必须完整走完状态机直到 S_RECORD → END
50
52
  </execution_discipline>
51
53
 
52
54
  <context>
@@ -391,7 +393,11 @@ Goals: {done}/{total} ({skipped} skipped)
391
393
  ```
392
394
  📋 UI Odyssey 会话已创建。可随时复制以下 /goal 设定终止条件(执行过程中输入即可):
393
395
 
394
- /goal 穷尽迭代:直到 session.json 的 audit + diverge findings 均已处理(fix/issue/decision)
396
+ /goal 完成以下目标:
397
+ {for each G in phase_goals where status != "skipped":}
398
+ - {G.id}: {G.goal} — 完成条件: {G.done_when}
399
+ {end for}
400
+ 穷尽迭代:直到 session.json 的 audit + diverge findings 均已处理(fix/issue/decision)
395
401
  且 phase_goals_all_done=true 才停。修复按 impact×severity 逐轮迭代。
396
402
  每轮修复后重审修改区域,新发现追加继续修。
397
403
  遇到 phase=decision 的 pending 必须 ask_question。不允许"只报告不处理"。
@@ -52,6 +52,7 @@ Each artifact's type determines its outputs at `.workflow/{a.path}/`:
52
52
  - Codebase docs: `.workflow/codebase/ARCHITECTURE.md` → component boundaries, layer rules
53
53
  - Wiki constraints: `maestro search "architecture constraint" --json` → documented decisions
54
54
  - Specs: `maestro spec load --category review` → review standards, checklists, knowhow tools
55
+ - Conflict state: `maestro spec conflict list` → 当前已标记冲突的 spec 条目(review 时优先关注)
55
56
  - Role knowledge: `maestro search --category review` → select relevant → `maestro wiki load`
56
57
 
57
58
  **Output**: `REVIEW_DIR = .workflow/scratch/{YYYYMMDD}-review-P{N}-{slug}/` (P{N} = phase number, enables directory-level identification as state.json fallback)
@@ -75,6 +76,7 @@ Follow '~/.maestro/workflows/review.md' completely.
75
76
  - REQUIRED: review.json written with findings, severity distribution, and verdict.
76
77
  - REQUIRED: Issues auto-created based on level thresholds.
77
78
  - REQUIRED: index.json updated with review status.
79
+ - REQUIRED: Spec conflict check — if any finding directly contradicts a loaded spec entry (code behavior ≠ spec rule), suggest `maestro spec conflict mark` on the spec entry. Code is the single source of truth.
78
80
 
79
81
  **Output writes to REVIEW_DIR** (not EXEC_DIR):
80
82
  - `REVIEW_DIR/review.json` — findings, severity distribution, verdict
@@ -129,6 +131,7 @@ maestro ralph complete <idx> --status {STATUS} [--evidence {path}]
129
131
  | PASS verdict | `/quality-test {phase}` |
130
132
  | WARN verdict (non-blocking issues) | `/quality-test {phase}` (proceed with caveats) |
131
133
  | BLOCK verdict (critical findings) | `/maestro-plan {phase} --gaps` (fix first) |
134
+ | Spec contradictions found | `maestro spec conflict list` → `/manage-knowledge-audit --scope spec` |
132
135
  | Want code cleanup | `/quality-refactor {phase}` |
133
136
  </completion>
134
137
 
@@ -190,9 +190,11 @@ All behavioral statements MUST use MUST / SHOULD / MAY / MUST NOT / SHOULD NOT.
190
190
  - [ ] No interrogative sentences (all declarative)
191
191
  - [ ] system-architect: §3 contains "Data Model" and "State Machine" headings
192
192
 
193
- ## Return Protocol
193
+ ## Completion Sequence (MANDATORY ORDER)
194
194
 
195
- Report completion with this structure (the orchestrator reads ONLY this, not the files):
195
+ **Step A Write files**: Use the Write tool to create every file under `output_dir/`. Then verify with Glob that `analysis.md` and each `analysis-F-*.md` exist on disk. If any Write call fails, emit `TASK BLOCKED` and stop.
196
+
197
+ **Step B — Report summary**: ONLY AFTER Step A files are confirmed on disk, emit this text (the orchestrator reads this summary to track progress — it does NOT substitute for the files):
196
198
 
197
199
  ```
198
200
  TASK COMPLETE
@@ -205,7 +207,7 @@ rfc_keyword_count: {N}
205
207
  total_lines: {sum across all files}
206
208
  ```
207
209
 
208
- If blocked: report blocker with `TASK BLOCKED` prefix.
210
+ Never emit `TASK COMPLETE` without files on disk. If blocked: report with `TASK BLOCKED` prefix.
209
211
 
210
212
  ## NEVER
211
213
 
@@ -49,6 +49,7 @@ Remaining → intent (new session)
49
49
  9. **Decomposition is outcome-oriented** — sub-goals 为可观测交付,禁止 lifecycle 复刻;`/goal` 由用户输入
50
50
  10. **planning_mode governs arg granularity** — `unified` → skill args 无 `{phase}`;`independent` → 含 `{phase}`
51
51
  11. **task_decomposition 驱动 steps[] 动态生长** — `post-goal-audit` 按 unmet 子目标插入 scoped mini-loop;字段累加,既有字段不删不改
52
+ 12. **禁止以上下文消耗为由中断自调用链** — harness 自动处理 context compression(消息摘要),模型无需判断上下文剩余空间。自调用的唯一合法终止条件是:router 命中终止条件(S_COMPLETE / S_FALLBACK / END)、session paused、或 decision 末尾的 A_PAUSE_ESCALATE。以"上下文不足"、"已连续完成 N 个 step"、"避免 context overflow"等理由中断属于 invariant violation
52
53
  </invariants>
53
54
 
54
55
  <router>
@@ -447,7 +448,7 @@ narrow → derive defaults from intent + codebase, skip questions.
447
448
  1. 校验所有 step 的 `command_scope != "missing"`;否则 raise E006 + 列出缺失 skill
448
449
  2. Write `.workflow/.maestro/ralph-{YYYYMMDD-HHmmss}/status.json`
449
450
  3. Display chain overview:每步显示 `{index}. {skill} [{command_scope}]`
450
- 4. `task_decomposition` 存在 display Goal Prompt block,继续进入 tick
451
+ 4. **Goal Prompt 显示(强制)**:`task_decomposition` 存在时,chain overview 之后**必须逐字显示** Goal Prompt block(Appendix),不得省略或摘要。显示后继续进入 tick
451
452
 
452
453
  ### A_LOCATE_SESSION
453
454
 
@@ -839,7 +840,11 @@ decomposition 产出后,链路概览之后逐字显示:
839
840
  ```
840
841
  📋 任务分解完成。可随时复制以下 /goal 设定终止条件:
841
842
 
842
- /goal 直到 {session_dir}/status.json 的 task_decomposition[*] 与 steps[*] 全部 completion_confirmed=true 才停。每轮以 status.json 为唯一行动手册,通过 /maestro-ralph-beta 推进 tick;decision 节点由 ralph 内联评估。禁止手动执行 skill 或修改 boundary_contract.out_of_scope。
843
+ /goal 完成以下子目标:
844
+ {for each G in task_decomposition:}
845
+ - {G.id}: {G.goal} — 完成条件: {G.done_when}
846
+ {end for}
847
+ 直到 {session_dir}/status.json 的 task_decomposition[*] 与 steps[*] 全部 completion_confirmed=true 才停。每轮以 status.json 为唯一行动手册,通过 /maestro-ralph-beta 推进 tick;decision 节点由 ralph 内联评估。禁止手动执行 skill 或修改 boundary_contract.out_of_scope。
843
848
  ```
844
849
 
845
850
  ### Error Codes
@@ -53,6 +53,7 @@ HARD RULES:
53
53
  7. **status.json 每步骤后由 CLI 原子写盘** — resume-safe
54
54
  8. **STATUS 枚举受限** — 仅 `DONE | DONE_WITH_CONCERNS | NEEDS_RETRY | BLOCKED`;`NEEDS_CONTEXT` 已废除
55
55
  9. **CLI 输出禁止截断** — `maestro ralph next` 的 stdout 包含完整 skill prompt,必须全量捕获。**严禁** `| head`、`| tail`、`2>&1 | head -N` 等任何截断管道。Bash timeout 可加长但不可截断输出
56
+ 10. **禁止以上下文消耗为由中断自调用链** — harness 自动处理 context compression(消息摘要),模型无需判断上下文剩余空间。自调用链的唯一合法终止条件是:全部 `completion_confirmed`、session paused、或 decision handoff 到 ralph。以"上下文不足"、"已连续完成 N 个 step"、"避免 context overflow"等理由中断属于 invariant violation
56
57
  </invariants>
57
58
 
58
59
  <state_machine>
@@ -354,6 +354,7 @@ Generate steps from `session.lifecycle_position` to `milestone-complete`.
354
354
  | brainstorm | `maestro-brainstorm "{intent}" --from grill:{grill_id}` *(if grill ran)* / `maestro-brainstorm "{intent}"` *(otherwise)* | *(same)* | — | all |
355
355
  | blueprint | `maestro-blueprint "{intent}"` | *(same)* | — | all |
356
356
  | init | `maestro-init` | *(same)* | — | all |
357
+ | spec-setup | `spec-setup` | *(same)* | — | all (**仅当 `.workflow/specs/` 不存在时插入**) |
357
358
  | analyze-macro | `maestro-analyze "{intent}"` | *(same)* | `post-analyze-scope` | all |
358
359
  | roadmap | `maestro-roadmap --from analyze:{analyze_macro_id}` | *(same)* | — | all |
359
360
  | analyze | `maestro-analyze {phase}` | `maestro-analyze` | — | all |
@@ -372,6 +373,7 @@ Generate steps from `session.lifecycle_position` to `milestone-complete`.
372
373
  **Build rules (按顺序应用):**
373
374
 
374
375
  0. **planning_mode 选列**:`unified` → Skill (unified) 列;`independent` → Skill (independent) 列
376
+ 0.5. **specs 预检**:当 `lifecycle_position ∉ {grill, brainstorm, blueprint, init}` 且 `.workflow/specs/` 目录不存在时,在链路最前面插入 `spec-setup` 步骤(stage=`spec-setup`,无 decision)。确保下游 analyze/plan/execute 可获得项目约束规则注入
375
377
  1. **起点**:从 `session.lifecycle_position` 开始
376
378
  2. **跳过已完成**:跳过当前 milestone+phase 下已有 completed artifact 的 stage(按 `session.phase` 过滤);unified 按 milestone 过滤
377
379
  3. **quality_mode 过滤**:按 `session.quality_mode` 排除不匹配 stage
@@ -406,7 +408,7 @@ Generate steps from `session.lifecycle_position` to `milestone-complete`.
406
408
  1. Validate: 所有 step 的 `command_scope != "missing"`;否则 raise E006 + 列出缺失 skill
407
409
  2. Write `.workflow/.maestro/ralph-{YYYYMMDD-HHmmss}/status.json` (Appendix: Session Schema)
408
410
  3. Display chain overview:每步显示 `{index}. {skill} [{type}] [{command_scope}]`
409
- 4. If `task_decomposition` present: display **Goal Prompt block** (Appendix),不阻塞流程,继续 handoff
411
+ 4. **Goal Prompt 显示(强制)**:`task_decomposition` 存在时,chain overview 之后**必须逐字显示** Goal Prompt blockAppendix),不得省略或摘要。显示后继续 handoff,不阻塞
410
412
 
411
413
  ### A_DELEGATE_EVALUATE
412
414
 
@@ -684,7 +686,11 @@ decision:post-goal-audit {retry+1}
684
686
  ```
685
687
  📋 任务分解完成。可随时复制以下 /goal 设定终止条件(执行过程中输入即可):
686
688
 
687
- /goal 直到 {session_dir}/status.json 的 task_decomposition[*] 与 steps[*] 全部 completion_confirmed=true 才停。每轮以 status.json 为唯一行动手册,通过 /maestro-ralph-execute 推进 step;decision 节点由其自动 handoff 回 ralph 评估。禁止手动执行 skill 或修改 boundary_contract.out_of_scope。
689
+ /goal 完成以下子目标:
690
+ {for each G in task_decomposition:}
691
+ - {G.id}: {G.goal} — 完成条件: {G.done_when}
692
+ {end for}
693
+ 直到 {session_dir}/status.json 的 task_decomposition[*] 与 steps[*] 全部 completion_confirmed=true 才停。每轮以 status.json 为唯一行动手册,通过 /maestro-ralph-execute 推进 step;decision 节点由其自动 handoff 回 ralph 评估。禁止手动执行 skill 或修改 boundary_contract.out_of_scope。
688
694
  ```
689
695
 
690
696
  `/goal` 由用户输入;ralph 输出提示词后继续 handoff,不阻塞。
@@ -727,6 +733,7 @@ decision:post-goal-audit {retry+1}
727
733
  - [ ] post-goal-audit decision 仅在 decomposed 时插入,位于 milestone-complete 之前
728
734
  - [ ] Unmet sub-goals 动态 grow steps[](goal_ref tagged);max retries → escalate
729
735
  - [ ] planning_mode 显式决定;unified=无 `{phase}`, independent=带 `{phase}`
736
+ - [ ] specs 预检:lifecycle_position 在 init 之后 + `.workflow/specs/` 不存在 → 链路最前面插入 `spec-setup`
730
737
  - [ ] Chain 必须以 `milestone-complete` 结尾
731
738
  - [ ] Decision nodes 由 maestro delegate --role analyze 评估
732
739
  - [ ] Ralph 不执行 step,只 evaluate;Skill("maestro-ralph-execute") handoff
@@ -48,6 +48,7 @@ $ARGUMENTS — user intent text, or special keywords.
48
48
  10. **每个 step 必须 `completion_confirmed: true`** — 由 `maestro ralph complete N --status DONE|DONE_WITH_CONCERNS` 写入
49
49
  11. **schema** — `ralph_protocol_version: "1"` 标记 CLI-driven session;新增字段全部可选
50
50
  12. **Invariant violation = BLOCK** — 违反上述任一 invariant 即阻断当前操作,不可绕过。特别是 invariant 1(dispatch via ralph-execute)和 invariant 2(session before execution)和 invariant 10(completion_confirmed 由 CLI 写入)为硬约束。
51
+ 14. **禁止以上下文消耗为由中断执行** — harness 自动处理 context compression,以"上下文不足"或"避免 context overflow"为由中断属于 invariant violation
51
52
  13. **Classification evidence** — S_CLASSIFY 的 chain 选择决策 MUST 记录到 status.json 的 `classification_rationale` 字段:匹配了哪个 pattern、排除了哪些备选、confidence level。无记录的分类不可进入 S_CREATE。
52
53
  </invariants>
53
54
 
@@ -156,11 +157,16 @@ S_FALLBACK:
156
157
  ```
157
158
  📋 任务分解完成。可随时复制下面一行设定目标(执行过程中输入即可):
158
159
 
159
- /goal 目标达成条件: {session_dir}/status.json 中 task_decomposition[*].status == "done" 且 task_decomposition[*].completion_confirmed == true 且 steps[*].completion_confirmed == true。未达成时:阅读 {session_dir}/status.json 取得 execution_criteria / boundary_contract / task_decomposition / steps 作为行动手册,调用 /maestro-ralph continue 推进;严禁手动执行 skill 或越界修改 status.json.boundary_contract.out_of_scope。
160
+ /goal 完成以下子目标:
161
+ {for each G in task_decomposition:}
162
+ - {G.id}: {G.goal} — 完成条件: {G.done_when}
163
+ {end for}
164
+ 达成条件: {session_dir}/status.json 中 task_decomposition[*].status == "done" 且 task_decomposition[*].completion_confirmed == true 且 steps[*].completion_confirmed == true。未达成时:阅读 {session_dir}/status.json 取得 execution_criteria / boundary_contract / task_decomposition / steps 作为行动手册,调用 /maestro-ralph continue 推进;严禁手动执行 skill 或越界修改 status.json.boundary_contract.out_of_scope。
160
165
  ```
161
166
 
162
167
  ### A_CREATE_SESSION
163
168
 
169
+ 0. **Specs 预检**:当 chain 包含 `analyze-macro` / `analyze` / `plan` / `execute` 等执行 stage 且 `.workflow/specs/` 目录不存在时,在 steps 最前面插入 `spec-setup`(stage=`spec-setup`,无 decision)。确保下游可获得项目约束规则注入。chain ∈ {grill, brainstorm, blueprint, init, status, quick} 时跳过
164
170
  1. Read `.workflow/state.json` 获取 phase / milestone(含 D-007 反查 `phase_slugs`);读最新 macro analyze artifact 注入 `scope_verdict` + `analyze_macro_id`(如存在);读最新 blueprint artifact 注入 `blueprint_id`
165
171
  2. Create `.workflow/.maestro/maestro-{YYYYMMDD-HHMMSS}/status.json`(与 ralph 共用 schema):
166
172
  ```json
@@ -220,6 +226,7 @@ S_FALLBACK:
220
226
  - [ ] plan 支持 `{phase}` / `--from analyze:{ANL_ID}` / `--from blueprint:{BLP_ID}` 三路径;`source_artifact_ref` 写入 step
221
227
  - [ ] Broad lifecycle intents decomposed (≤3 boundary questions); narrow/single-step skip
222
228
  - [ ] status.json 唯一真源;无 markdown 清单;post-goal-audit 节点在 decomposed 时追加;/goal 提示词以 status.json 为判据
229
+ - [ ] Specs 预检:chain 含执行 stage + `.workflow/specs/` 不存在 → steps 最前面插入 `spec-setup`
223
230
  - [ ] Chain selected and confirmed (or auto-confirmed)
224
231
  - [ ] Session dir created with status.json before execution; decomposition fields additive-only
225
232
  - [ ] 执行 step 含 `command_scope` + `command_path` + `completion_confirmed`;decision step 由 `step.decision` 标识
@@ -44,6 +44,7 @@ Follow '~/.maestro/workflows/harvest.md' Stages 1-8 in order.
44
44
  2. **Dedup before write** — check harvest-log.jsonl and existing stores before each write.
45
45
  3. **Never modify source artifacts** — harvest is purely extractive.
46
46
  4. **Dedup contract with parallel writers** — when appending to `issues.jsonl`, set `source: "harvest"` on each row so concurrent writers (e.g. `manage-issue-discover` with `source: "discover"`) can be distinguished and deduplicated.
47
+ 5. **Conflict pre-check on spec routing** — when routing to spec (Stage 6b), compare new entry against existing specs with same keywords/category. If semantic conflict detected, set `confidence="low"` on the new entry and log conflict note. Use `maestro spec conflict mark` if contradiction is clear.
47
48
 
48
49
  Extraction patterns, classification rules, routing infrastructure, and fragment ID scheme defined in workflow harvest.md.
49
50
 
@@ -58,6 +59,8 @@ Extraction patterns, classification rules, routing infrastructure, and fragment
58
59
  | Wiki graph needs linking | `/manage-wiki connect --fix` |
59
60
  | Issues created | `/manage-issue list --source harvest` |
60
61
  | Specs extracted | `/spec-load --role implement` |
62
+ | Specs extracted (冲突审查) | `/manage-knowledge-audit --scope spec` — 新写入的 spec 可能与现有条目矛盾 |
63
+ | Spec 冲突标记已存在 | `maestro spec conflict list` — 查看当前冲突状态 |
61
64
  | Full phase retrospective | `/quality-retrospective` |
62
65
  </completion>
63
66
 
@@ -43,10 +43,12 @@ Follow `~/.maestro/workflows/knowledge-audit.md` Stages 1-8 in order.
43
43
  **GATE 1: Load → Detect** (Stages 1-2 → Stage 4)
44
44
  - REQUIRED: Scope 解析通过,互斥标志校验完成。
45
45
  - REQUIRED: 三存储按 scope 加载完成。
46
+ - REQUIRED: 加载已有冲突标记: `maestro spec conflict list` → 合并到 finding 池。
46
47
  - BLOCKED if scope 非法或存储不可读: E001/E002。
47
48
 
48
49
  **GATE 2: Detect → Decision** (Stage 4 → Stage 5)
49
50
  - REQUIRED: Finding 池按 P0/P1/P2 分级输出。
51
+ - REQUIRED: 已标记 `contested` 的条目自动归入 P0 finding(来源: conflict-marker)。
50
52
  - REQUIRED: 未 harvest 的 artifact 删除前触发抢救确认(W002)。
51
53
  - BLOCKED if finding 为空: 无需淘汰,直接输出报告。
52
54
 
@@ -61,6 +63,31 @@ Follow `~/.maestro/workflows/knowledge-audit.md` Stages 1-8 in order.
61
63
  - **Deprecate over delete**: 文本存储首选 `status="deprecated"`,保留历史。
62
64
  - **Purge 仅 artifact**: `--purge` 不作用于 spec/knowhow。
63
65
  - **Rescue before delete**: 未抽取 artifact 删除前强制提示先 `/manage-harvest`。
66
+
67
+ ### Conflict Resolution Integration
68
+
69
+ 四态决策(扩展自三态 keep/deprecate/delete):
70
+
71
+ | 动作 | 适用场景 | 执行 |
72
+ |------|---------|------|
73
+ | `keep` | 内容正确,无需变更 | 写 audit-log ignore 记录 |
74
+ | `contest` | 矛盾真实存在,需进一步审查 | `maestro spec conflict mark <file> <line> --note "<evidence>"` |
75
+ | `deprecate` | 内容过时或被取代 | 注入 `status="deprecated"` + `maestro spec conflict clear <file> <line>` |
76
+ | `delete` | 内容明确错误 | 移除 entry + `maestro spec conflict clear <file> <line>` |
77
+
78
+ **关键**: deprecate/delete 执行时,如果目标条目有 conflict-marker,必须同步调用 `maestro spec conflict clear` 清除标记,避免悬空冲突。
79
+
80
+ ### Code-as-Truth 校验(审查核心原则)
81
+
82
+ **代码是唯一真理源。** Spec/knowhow 中的任何声明,必须与代码实际行为一致。
83
+
84
+ 当 detector 发现 spec 条目声称某行为/规则时:
85
+ 1. **代码校验**: grep/read 代码中相关实现,确认 spec 声明是否与代码一致
86
+ 2. **不一致处理**:
87
+ - 代码正确、spec 过时 → `deprecate` 或 `delete` spec 条目
88
+ - 代码正确、spec 不完整 → `contest` 并建议补充
89
+ - 代码有 bug、spec 正确 → `keep` spec,生成 issue 修代码
90
+ 3. **禁止**: 仅凭 spec 文本判断正确性。每个 finding 的 evidence 必须包含代码引用(文件:行号)
64
91
  </execution>
65
92
 
66
93
  <completion>
@@ -71,6 +98,8 @@ Follow `~/.maestro/workflows/knowledge-audit.md` Stages 1-8 in order.
71
98
  | 复审淘汰记录 | 查看 `audit-report-{date}.md` |
72
99
  | 抢救未抽取 artifact | `/manage-harvest <artifact-id>` |
73
100
  | 验证 spec 现状 | `/spec-load --role implement` |
101
+ | 查看冲突标记 | `maestro spec conflict list` |
102
+ | 清除已解决冲突 | `maestro spec conflict clear-all <file>` |
74
103
  | 周期巡检 | `--scope all --report` |
75
104
  </completion>
76
105
 
@@ -55,6 +55,8 @@ Treats every bug as a learning signal with exhaustive iteration until root cause
55
55
  - 关键判断用不同 `--role`(analyze / review / explore)获取多视角
56
56
  - 修复前后各做一次 CLI review 确认
57
57
  - 不同阶段可调用不同工具,综合多方意见再行动
58
+
59
+ 4. **禁止以上下文消耗为由中断** — harness 自动处理 context compression,以"上下文不足"或"已执行 N 个阶段"为由中断属于纪律违反;必须完整走完状态机直到 S_RECORD → END
58
60
  </execution_discipline>
59
61
 
60
62
  <context>
@@ -390,7 +392,11 @@ Goals: {done}/{total} confirmed ({skipped} skipped)
390
392
  ```
391
393
  📋 Debug Odyssey 会话已创建。可随时复制以下 /goal 设定终止条件:
392
394
 
393
- /goal 穷尽迭代:直到根因确认(或明确 INCONCLUSIVE)且修复验证通过
395
+ /goal 完成以下目标:
396
+ {for each G in phase_goals where status != "skipped":}
397
+ - {G.id}: {G.goal} — 完成条件: {G.done_when}
398
+ {end for}
399
+ 穷尽迭代:直到根因确认(或明确 INCONCLUSIVE)且修复验证通过
394
400
  且泛化扫描穷尽(所有 hits 已分类处理)且 phase_goals_all_done=true 才停。
395
401
  假设失败时扩范围→换视角→升级工具,不轻易放弃。
396
402
  泛化发现的同类 bug 全部修复或创建 issue,不允许遗留。
@@ -45,6 +45,8 @@ Baseline-first approach with exhaustive iteration until zero remaining actionabl
45
45
  - survey 阶段: `--role explore` 发现依赖/复杂度热点
46
46
  - audit/diagnose: `--role analyze` 获取多视角分析
47
47
  - fix 前后: `--role review` 确认改进正确性
48
+
49
+ 4. **禁止以上下文消耗为由中断** — harness 自动处理 context compression,以"上下文不足"或"已执行 N 个阶段"为由中断属于纪律违反;必须完整走完状态机直到 S_RECORD → END
48
50
  </execution_discipline>
49
51
 
50
52
  <context>
@@ -429,7 +431,11 @@ Goals: {done}/{total} ({skipped} skipped)
429
431
  ```
430
432
  📋 Improve Odyssey 会话已创建。可随时复制以下 /goal 设定终止条件:
431
433
 
432
- /goal 穷尽迭代:直到 session.json 的 audit_result 中所有 findings 均已处理(fix/issue/decision)
434
+ /goal 完成以下目标:
435
+ {for each G in phase_goals where status != "skipped":}
436
+ - {G.id}: {G.goal} — 完成条件: {G.done_when}
437
+ {end for}
438
+ 穷尽迭代:直到 session.json 的 audit_result 中所有 findings 均已处理(fix/issue/decision)
433
439
  且 phase_goals_all_done=true 才停。修复按 severity 逐轮迭代,每轮修复后 re-verify 修改区域。
434
440
  Baseline metrics 必须在修复前采集,修复后必须与 baseline 对比确认改进。
435
441
  遇到 phase=decision 的 pending 必须 AskUserQuestion。不允许"只报告不处理"。
@@ -54,6 +54,8 @@ plan → execute → verify → fix gaps → iterate until ALL criteria pass.
54
54
  - 计划阶段: `--role analyze` 获取任务分解建议
55
55
  - 修复前后: `--role review` 确认无回归
56
56
  - verify 阶段: cli-review 类型标准自动 delegate
57
+
58
+ 4. **禁止以上下文消耗为由中断** — harness 自动处理 context compression,以"上下文不足"或"已执行 N 个阶段"为由中断属于纪律违反;必须完整走完状态机直到 S_RECORD → END
57
59
  </execution_discipline>
58
60
 
59
61
  <context>
@@ -513,7 +515,15 @@ Write understanding.md §6, generalization_stats. Mark G5 done.
513
515
  ```
514
516
  📋 Planex Odyssey 会话已创建。可随时复制以下 /goal 设定终止条件(执行过程中输入即可):
515
517
 
516
- /goal 穷尽迭代:直到 acceptance_criteria[*] 全部 status==passed
518
+ /goal 完成以下目标:
519
+ {for each G in phase_goals where status != "skipped":}
520
+ - {G.id}: {G.goal} — 完成条件: {G.done_when}
521
+ {end for}
522
+ 验收标准:
523
+ {for each AC in acceptance_criteria:}
524
+ - {AC.id}: {AC.criterion} (验证方式: {AC.verify_method})
525
+ {end for}
526
+ 穷尽迭代:直到 acceptance_criteria[*] 全部 status==passed
517
527
  且 phase_goals_all_done=true 才停。verify 失败自动 fix→re-verify 循环。
518
528
  每轮修复后重新验证,新发现的标准违反继续修,不超过 max_iterations。
519
529
  遇到 phase=decision 的 pending 必须 AskUserQuestion,不得自行 resolve。
@@ -44,6 +44,8 @@ fix ALL findings → confirm → generalize → discover → persist. Zero-resid
44
44
  3. **多 CLI 辅助** — 利用 `maestro delegate` 调用多个 CLI 工具交叉验证
45
45
  - 关键判断用不同 `--role`(analyze / review / explore)获取多视角
46
46
  - 修复前后各做一次 CLI review 确认
47
+
48
+ 4. **禁止以上下文消耗为由中断** — harness 自动处理 context compression,以"上下文不足"或"已执行 N 个阶段"为由中断属于纪律违反;必须完整走完状态机直到 S_RECORD → END
47
49
  </execution_discipline>
48
50
 
49
51
  <context>
@@ -364,7 +366,11 @@ Goals: {done}/{total} ({skipped} skipped)
364
366
  ```
365
367
  📋 Review-Test-Fix Odyssey 会话已创建。可随时复制以下 /goal 设定终止条件(执行过程中输入即可):
366
368
 
367
- /goal 穷尽迭代:直到 session.json 的 review_result.remaining_actionable == 0
369
+ /goal 完成以下目标:
370
+ {for each G in phase_goals where status != "skipped":}
371
+ - {G.id}: {G.goal} — 完成条件: {G.done_when}
372
+ {end for}
373
+ 穷尽迭代:直到 session.json 的 review_result.remaining_actionable == 0
368
374
  且 confirmation.verdict == "confirmed" 且 phase_goals_all_done == true 才停。
369
375
  修复按 severity 逐轮迭代(critical→high→medium→low),每轮修复后 re-review 修改区域。
370
376
  发现新问题追加到当前轮继续。遇到 phase=decision 的 pending 必须 AskUserQuestion。
@@ -45,6 +45,8 @@ fix → verify → generalize → discover → persist. Every pixel is a learnin
45
45
  - survey 阶段: `--role explore` 发现设计系统用法
46
46
  - audit/diverge: `--role analyze` 获取多视角创意
47
47
  - fix 前后: `--role review` 确认视觉正确性
48
+
49
+ 4. **禁止以上下文消耗为由中断** — harness 自动处理 context compression,以"上下文不足"或"已执行 N 个阶段"为由中断属于纪律违反;必须完整走完状态机直到 S_RECORD → END
48
50
  </execution_discipline>
49
51
 
50
52
  <context>
@@ -389,7 +391,11 @@ Goals: {done}/{total} ({skipped} skipped)
389
391
  ```
390
392
  📋 UI Odyssey 会话已创建。可随时复制以下 /goal 设定终止条件(执行过程中输入即可):
391
393
 
392
- /goal 穷尽迭代:直到 session.json 的 audit + diverge findings 均已处理(fix/issue/decision)
394
+ /goal 完成以下目标:
395
+ {for each G in phase_goals where status != "skipped":}
396
+ - {G.id}: {G.goal} — 完成条件: {G.done_when}
397
+ {end for}
398
+ 穷尽迭代:直到 session.json 的 audit + diverge findings 均已处理(fix/issue/decision)
393
399
  且 phase_goals_all_done=true 才停。修复按 impact×severity 逐轮迭代。
394
400
  每轮修复后重审修改区域,新发现追加继续修。
395
401
  遇到 phase=decision 的 pending 必须 AskUserQuestion。不允许"只报告不处理"。
@@ -50,6 +50,7 @@ Each artifact's type determines its outputs at `.workflow/{a.path}/`:
50
50
  - Codebase docs: `.workflow/codebase/ARCHITECTURE.md` → component boundaries, layer rules
51
51
  - Wiki constraints: `maestro search "architecture constraint" --json` → documented decisions
52
52
  - Specs: `maestro spec load --category review` → review standards, checklists, knowhow tools
53
+ - Conflict state: `maestro spec conflict list` → 当前已标记冲突的 spec 条目(review 时优先关注)
53
54
  - Role knowledge: `maestro search --category review` → select relevant → `maestro wiki load`
54
55
 
55
56
  **Output**: `REVIEW_DIR = .workflow/scratch/{YYYYMMDD}-review-P{N}-{slug}/` (P{N} = phase number, enables directory-level identification as state.json fallback)
@@ -73,6 +74,7 @@ Follow '~/.maestro/workflows/review.md' completely.
73
74
  - REQUIRED: review.json written with findings, severity distribution, and verdict.
74
75
  - REQUIRED: Issues auto-created based on level thresholds.
75
76
  - REQUIRED: index.json updated with review status.
77
+ - REQUIRED: Spec conflict check — if any finding directly contradicts a loaded spec entry (code behavior ≠ spec rule), suggest `maestro spec conflict mark` on the spec entry. Code is the single source of truth.
76
78
 
77
79
  **Output writes to REVIEW_DIR** (not EXEC_DIR):
78
80
  - `REVIEW_DIR/review.json` — findings, severity distribution, verdict
@@ -127,6 +129,7 @@ maestro ralph complete <idx> --status {STATUS} [--evidence {path}]
127
129
  | PASS verdict | `/quality-test {phase}` |
128
130
  | WARN verdict (non-blocking issues) | `/quality-test {phase}` (proceed with caveats) |
129
131
  | BLOCK verdict (critical findings) | `/maestro-plan {phase} --gaps` (fix first) |
132
+ | Spec contradictions found | `maestro spec conflict list` → `/manage-knowledge-audit --scope spec` |
130
133
  | Want code cleanup | `/quality-refactor {phase}` |
131
134
  </completion>
132
135