@specpow/framework 0.5.11 → 0.5.13

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 (81) hide show
  1. package/builtin/schemas/bug-fix/schema.yaml +77 -0
  2. package/builtin/schemas/bug-fix/templates/analysis.md +43 -0
  3. package/builtin/schemas/bug-fix/templates/fix-plan.md +19 -0
  4. package/builtin/schemas/bug-fix/templates/proposal.md +30 -0
  5. package/builtin/schemas/bug-fix/templates/regression-test.md +70 -0
  6. package/builtin/schemas/crud-module/schema.yaml +90 -0
  7. package/builtin/schemas/crud-module/templates/api-docs.md +146 -0
  8. package/builtin/schemas/crud-module/templates/design.md +36 -0
  9. package/builtin/schemas/crud-module/templates/menu-register.md +72 -0
  10. package/builtin/schemas/crud-module/templates/proposal.md +30 -0
  11. package/builtin/schemas/crud-module/templates/spec.md +33 -0
  12. package/builtin/schemas/crud-module/templates/tasks.md +57 -0
  13. package/builtin/schemas/spec-driven/schema.yaml +87 -0
  14. package/builtin/schemas/spec-driven/templates/design.md +54 -0
  15. package/builtin/schemas/spec-driven/templates/proposal.md +31 -0
  16. package/builtin/schemas/spec-driven/templates/spec.md +42 -0
  17. package/builtin/schemas/spec-driven/templates/tasks.md +98 -0
  18. package/builtin/skills/business-code-review/SKILL.md +78 -0
  19. package/builtin/skills/business-db-design/SKILL.md +74 -0
  20. package/builtin/skills/business-deploy-check/SKILL.md +72 -0
  21. package/builtin/skills/business-doc-sync/SKILL.md +72 -0
  22. package/builtin/skills/business-java-codegen/SKILL.md +97 -0
  23. package/builtin/skills/business-menu-register/SKILL.md +63 -0
  24. package/builtin/skills/business-prd-writer/SKILL.md +80 -0
  25. package/builtin/skills/business-test-gen/SKILL.md +82 -0
  26. package/builtin/skills/business-ui-codegen/SKILL.md +104 -0
  27. package/builtin/skills/cli-router/SKILL.md +107 -0
  28. package/builtin/skills/execution-finish-branch/SKILL.md +58 -0
  29. package/builtin/skills/execution-git-worktrees/SKILL.md +48 -0
  30. package/builtin/skills/execution-parallel-agents/SKILL.md +46 -0
  31. package/builtin/skills/execution-receiving-review/SKILL.md +47 -0
  32. package/builtin/skills/execution-requesting-review/SKILL.md +51 -0
  33. package/builtin/skills/execution-sdd-orchestrator/SKILL.md +366 -0
  34. package/builtin/skills/execution-subagent-dispatch/SKILL.md +295 -0
  35. package/builtin/skills/execution-subagent-driven-dev/SKILL.md +143 -0
  36. package/builtin/skills/execution-systematic-debugging/SKILL.md +95 -0
  37. package/builtin/skills/execution-tdd/SKILL.md +74 -0
  38. package/builtin/skills/execution-verification-before-completion/SKILL.md +75 -0
  39. package/builtin/skills/meta-create-skill/SKILL.md +374 -0
  40. package/builtin/skills/meta-using-skills/SKILL.md +97 -0
  41. package/builtin/skills/meta-writing-skills/SKILL.md +66 -0
  42. package/builtin/skills/planning-apply-change/SKILL.md +194 -0
  43. package/builtin/skills/planning-archive-change/SKILL.md +53 -0
  44. package/builtin/skills/planning-explore/SKILL.md +99 -0
  45. package/builtin/skills/planning-onboard/SKILL.md +60 -0
  46. package/builtin/skills/planning-propose/SKILL.md +156 -0
  47. package/builtin/skills/planning-update-change/SKILL.md +45 -0
  48. package/builtin/skills/planning-verify-change/SKILL.md +72 -0
  49. package/builtin/skills/planning-write-design/SKILL.md +59 -0
  50. package/builtin/skills/planning-write-plans/SKILL.md +55 -0
  51. package/builtin/skills/planning-write-specs/SKILL.md +73 -0
  52. package/builtin/skills/using-specpow/SKILL.md +232 -0
  53. package/dist/cli/index.d.ts.map +1 -1
  54. package/dist/cli/index.js +3 -0
  55. package/dist/cli/index.js.map +1 -1
  56. package/dist/commands/apply.d.ts.map +1 -1
  57. package/dist/commands/apply.js +49 -2
  58. package/dist/commands/apply.js.map +1 -1
  59. package/dist/commands/init.d.ts.map +1 -1
  60. package/dist/commands/init.js +85 -14
  61. package/dist/commands/init.js.map +1 -1
  62. package/dist/commands/propose.d.ts +1 -0
  63. package/dist/commands/propose.d.ts.map +1 -1
  64. package/dist/commands/propose.js +73 -2
  65. package/dist/commands/propose.js.map +1 -1
  66. package/dist/core/config/config-schema.d.ts +24 -0
  67. package/dist/core/config/config-schema.d.ts.map +1 -1
  68. package/dist/core/config/config-schema.js +2 -0
  69. package/dist/core/config/config-schema.js.map +1 -1
  70. package/dist/core/migration/index.js +1 -1
  71. package/dist/core/migration/index.js.map +1 -1
  72. package/dist/core/sdd-engine/ai-caller.d.ts.map +1 -1
  73. package/dist/core/sdd-engine/ai-caller.js +60 -35
  74. package/dist/core/sdd-engine/ai-caller.js.map +1 -1
  75. package/dist/core/sdd-engine/controller.js +1 -1
  76. package/dist/core/sdd-engine/controller.js.map +1 -1
  77. package/dist/core/sdd-engine/parallel-dispatcher.js +1 -1
  78. package/dist/core/sdd-engine/parallel-dispatcher.js.map +1 -1
  79. package/dist/core/sdd-engine/types.d.ts +1 -0
  80. package/dist/core/sdd-engine/types.d.ts.map +1 -1
  81. package/package.json +4 -5
@@ -0,0 +1,47 @@
1
+ ---
2
+ name: execution-receiving-review
3
+ description: SpecPow execution-receiving-review skill
4
+ ---
5
+
6
+ # 接收审查
7
+
8
+ > 收到代码审查反馈后的正确处理流程
9
+
10
+ ## 触发条件
11
+
12
+ - 收到审查意见/评论
13
+ - PR/MR 有审查反馈
14
+ - 用户提到"处理审查"/"审查反馈"
15
+
16
+ ## 铁律
17
+
18
+ 1. **不辩解** — 审查意见是改进机会,不是攻击
19
+ 2. **逐条回应** — 每个 Finding 都要回复
20
+ 3. **修复优先** — Critical/Major 必须修复
21
+ 4. **不扩大范围** — 只修复审查指出的问题
22
+
23
+ ## 处理流程
24
+
25
+ ### 1. 分类反馈
26
+ - Critical → 立即修复
27
+ - Major → 本轮修复
28
+ - Minor → 本轮修复或标注后续处理
29
+ - Suggestion → 评估后决定
30
+
31
+ ### 2. 修复
32
+ - 每个修复单独 commit
33
+ - commit message 引用 Finding ID
34
+
35
+ ### 3. 回应
36
+ ```
37
+ ✅ [Critical] SQL 注入 → 已修复 (commit abc123)
38
+ ✅ [Major] 缺少事务 → 已修复 (commit def456)
39
+ ⏳ [Minor] 命名优化 → 下个迭代处理
40
+ 📝 [Suggestion] 重构 → 超出本次范围,记录到 backlog
41
+ ```
42
+
43
+ ## 红旗
44
+
45
+ - 忽略 Critical → 必须修复
46
+ - 反驳审查而不修改 → 重新评估
47
+ - 修复引入新问题 → 回退并重新修复
@@ -0,0 +1,51 @@
1
+ ---
2
+ name: execution-requesting-review
3
+ description: SpecPow execution-requesting-review skill
4
+ ---
5
+
6
+ # 请求审查
7
+
8
+ > 在完成任务后,正确请求代码审查
9
+
10
+ ## 触发条件
11
+
12
+ - 任务完成后需要请求审查
13
+ - 准备提交 PR/MR
14
+ - 用户提到"请求审查"/"review"
15
+
16
+ ## 铁律
17
+
18
+ 1. **自审先行** — 先自己审查一遍再请求他人
19
+ 2. **上下文充分** — 提供变更背景和影响范围
20
+ 3. **范围明确** — 指明需要重点审查的部分
21
+
22
+ ## 审查请求模板
23
+
24
+ ```markdown
25
+ ## 审查请求
26
+
27
+ ### 变更概述
28
+ - 变更 ID: xxx
29
+ - 影响范围: [文件列表]
30
+ - 变更类型: [新功能/修复/重构]
31
+
32
+ ### 自审结果
33
+ - [ ] 代码编译通过
34
+ - [ ] 测试通过
35
+ - [ ] 无 lint 警告
36
+ - [ ] 文档已更新
37
+
38
+ ### 重点审查
39
+ 1. [文件:行号] — 请确认逻辑正确性
40
+ 2. [文件:行号] — 请确认性能可接受
41
+
42
+ ### 背景信息
43
+ - 相关需求: [链接]
44
+ - 技术决策: [说明]
45
+ ```
46
+
47
+ ## 红旗
48
+
49
+ - 未自审就请求审查 → 先自审
50
+ - 变更超过 500 行 → 拆分变更
51
+ - 无测试 → 补充测试后再请求
@@ -0,0 +1,366 @@
1
+ ---
2
+ name: execution-sdd-orchestrator
3
+ description: SDD 编排技能。将 controller.ts 的 implement→review→fix 循环转化为宿主 Agent 可执行的指令。当执行 specpow apply 或用户要求实现变更时使用。
4
+ version: 1.0.0
5
+ trigger: on-demand
6
+ ---
7
+
8
+ # SDD 编排技能
9
+
10
+ 当执行 `specpow apply` 或用户要求实现变更时,按以下流程执行。
11
+
12
+ ## 前置条件
13
+
14
+ - 变更提案已完成:`.specpow/openspec/changes/{change}/` 存在
15
+ - 任务清单已生成:`.specpow/openspec/changes/{change}/task-manifest.json`(Host-Driven 模式由 `apply.ts` 生成)
16
+ - Ledger 位置:`.specpow/sdd/{change}/progress.md`
17
+
18
+ ## 执行流程
19
+
20
+ ### 步骤 1:初始化
21
+
22
+ 1. 读取 Ledger(`progress.md`),检查是否有已完成的任务(断点续跑)
23
+ 2. 读取任务清单:`.specpow/openspec/changes/{change}/task-manifest.json`(包含增强描述和 specConstraints)
24
+ 3. 记录 BASE commit:`git rev-parse HEAD`
25
+
26
+ ### 步骤 2:逐任务执行
27
+
28
+ 对每个未完成任务:
29
+
30
+ #### 2a. 创建 Brief
31
+
32
+ 读取任务信息,创建 brief 文件:
33
+ - **路径**:`.specpow/sdd/{change}/task-{N}-brief.md`
34
+ - **内容**:
35
+ ```markdown
36
+ # Task {N}: {title}
37
+
38
+ ## 描述
39
+ {description}
40
+
41
+ ## 涉及文件
42
+ {files list}
43
+
44
+ ## Spec 约束
45
+ {spec constraints from specs/ directory}
46
+
47
+ ## 输出要求
48
+ 完成后写 Report JSON 到:`.specpow/sdd/{change}/task-{N}-report.md`
49
+ ```
50
+
51
+ #### 2b. 派发实现者子代理
52
+
53
+ 使用宿主原生 subagent 工具派发:
54
+ - **Prompt**:读取 brief 文件 + TDD 指令 + spec 约束
55
+ - **模型选择**(参考,可根据实际情况调整):
56
+ - ≤2 文件 + 完整 spec → `cheap`(haiku)
57
+ - 多文件协调 → `standard`(sonnet)
58
+ - 需要架构判断 → `capable`(opus)
59
+ - **指令**:
60
+ 1. 读取 brief 文件
61
+ 2. TDD 流程:RED → GREEN → REFACTOR
62
+ 3. 遵守 spec 约束
63
+ 4. 完成后写 Report JSON 到 reportPath
64
+
65
+ #### 2c. 检查 Report
66
+
67
+ 读取 `.specpow/sdd/{change}/task-{N}-report.md`,解析 JSON:
68
+ ```json
69
+ {
70
+ "status": "done|blocked|in_progress|done_with_concerns|needs_context",
71
+ "commits": ["sha1", "sha2"],
72
+ "testSummary": "X tests passed",
73
+ "concerns": "any issues or null",
74
+ "fixReport": "修复说明(仅 fix 轮次)"
75
+ }
76
+ ```
77
+
78
+ - `status === 'blocked'` → 记录到 Ledger:`Task {N}: BLOCKED — {concerns}`,跳过此任务
79
+ - `status === 'done'` → 继续审查
80
+
81
+ #### 2d. 生成审查包
82
+
83
+ 运行 `git diff` 生成变更摘要:
84
+ ```bash
85
+ BASE_COMMIT={recorded base commit}
86
+ HEAD_COMMIT=$(git rev-parse HEAD)
87
+ git diff ${BASE_COMMIT}..${HEAD_COMMIT} > .specpow/sdd/{change}/review-package.md
88
+ ```
89
+
90
+ #### 2e. 派发审查者子代理
91
+
92
+ 使用宿主原生 subagent 工具派发:
93
+ - **Prompt**:brief + review package + spec 约束
94
+ - **指令**:
95
+ 1. 读取 brief 文件
96
+ 2. 读取 review package(diff)
97
+ 3. 两阶段审查:
98
+ - **阶段 A:Spec 合规性** — 实现是否满足 spec 要求
99
+ - **阶段 B:代码质量** — bug、安全问题、性能问题
100
+ - **阶段 C:TDD 合规** — 测试是否充分
101
+ 4. 输出 Review JSON 到 `.specpow/sdd/{change}/review-result.json`:
102
+ ```json
103
+ {
104
+ "specCompliant": true/false,
105
+ "qualityApproved": true/false,
106
+ "findings": [
107
+ {
108
+ "id": "F1",
109
+ "severity": "critical|important|minor",
110
+ "description": "...",
111
+ "file": "src/foo.ts",
112
+ "line": 42,
113
+ "isLoadBearing": false
114
+ }
115
+ ],
116
+ "cannotVerify": ["..."]
117
+ }
118
+ ```
119
+ **注意**:初始审查不输出 `addressed` 字段(由重审者在修复循环中填充)。
120
+
121
+ #### 2f. 运行测试
122
+
123
+ 执行项目测试:
124
+ ```bash
125
+ # 检测包管理器并运行测试
126
+ if [ -f pnpm-lock.yaml ]; then
127
+ pnpm test --silent
128
+ elif [ -f yarn.lock ]; then
129
+ yarn test --silent
130
+ else
131
+ npm test --silent
132
+ fi
133
+ ```
134
+
135
+ 记录测试结果:通过/失败。
136
+
137
+ #### 2g. 分析审查结果
138
+
139
+ 读取 review JSON,判定:
140
+ - `specCompliant === true && qualityApproved === true && tests passed` → **PASS**
141
+ - 记录到 Ledger:`Task {N}: complete (commits {BASE}..{HEAD}, review clean)`
142
+ - 进入下一任务
143
+ - `findings.length > 0 || tests failed` → **需要修复**,进入修复循环
144
+
145
+ ### 步骤 3:修复循环(最多 5 轮)
146
+
147
+ 每轮:
148
+
149
+ 1. **派发实现者修复(复用原始 brief)**
150
+ - Brief 路径不变:`.specpow/sdd/{change}/task-{N}-brief.md`(不修改 brief 文件)
151
+ - Open findings 通过指令传递给实现者,不写入 brief 文件
152
+ - **模型升级**:第 4-5 轮使用比当前高一级模型
153
+ - **指令**:修复 findings → 写 Report JSON 到 `task-{N}-report.md.fix-{R}`
154
+
155
+ 2. **生成修复 diff**
156
+ ```bash
157
+ FIX_BASE=$(git rev-parse HEAD)
158
+ # 实现者修复后...
159
+ FIX_HEAD=$(git rev-parse HEAD)
160
+ git diff ${FIX_BASE}..${FIX_HEAD} > .specpow/sdd/{change}/review-package.md
161
+ ```
162
+
163
+ 3. **派发重审者(范围限定)**
164
+ - **只审查修复部分**,不重新审查整个任务
165
+ - **指令**:对每个 finding 判定 `addressed: true/false`
166
+ - 输出更新后的 review JSON 到 `.specpow/sdd/{change}/re-review-result.json`
167
+
168
+ 4. **运行测试**
169
+
170
+ 5. **分析结果**
171
+ - 所有 findings addressed + tests passed → **PASS**
172
+ - 仍有 open findings → 继续下一轮
173
+
174
+ 6. **记录到 Ledger**
175
+ ```
176
+ Task {N}: fix round {R}/5 ({A} addressed, {O} open — {finding1_summary}; {finding2_summary}; commits {BASE}..{HEAD})
177
+ ```
178
+
179
+ **断路器**:5 轮后仍未通过 → 对每个 finding 判定:
180
+ - `isLoadBearing === false` → **park**(延后,记录到 Ledger)
181
+ - `isLoadBearing === true` → **block**(阻塞,任务标记为 BLOCKED)
182
+
183
+ ### 步骤 4:完成
184
+
185
+ 所有任务完成后,输出总结:
186
+ ```
187
+ ✅ SDD 执行完成
188
+ - 完成任务:X/Y
189
+ - 阻塞任务:Z
190
+ - 停放发现:N(已记录到 Ledger)
191
+ ```
192
+
193
+ ## 并行执行模式
194
+
195
+ 当用户指定 `--parallel` 或任务数量 ≥ 3 且无强依赖时,可启用并行执行。
196
+
197
+ ### 前置条件
198
+
199
+ - 任务清单已读取
200
+ - 依赖分析完成(参考 `buildParallelLayers` 逻辑)
201
+
202
+ ### 执行流程
203
+
204
+ #### 1. 依赖分析与分层
205
+
206
+ 分析任务依赖关系,构建并行层:
207
+ - **文件级依赖**:多个任务修改同一文件 → 顺序执行
208
+ - **逻辑级依赖**:tasks.md 中显式声明的依赖
209
+ - **分层结果**:每层内的任务彼此独立,可并行执行
210
+
211
+ ```
212
+ 示例:
213
+ - 层 1: [T1, T2, T3] — 无依赖,可并行
214
+ - 层 2: [T4] — 依赖 T1 的输出
215
+ - 层 3: [T5, T6] — 无依赖,可并行
216
+ ```
217
+
218
+ #### 2. 逐层并行执行
219
+
220
+ 对每一层:
221
+
222
+ ##### 2a. 为每个任务创建 Git Worktree
223
+
224
+ ```bash
225
+ # 为每个任务创建独立 worktree
226
+ BASE_COMMIT=$(git rev-parse HEAD)
227
+ BRANCH_NAME="specpow-parallel-{TASK_NUM}-{TIMESTAMP}"
228
+ WORKTREE_PATH=".specpow/sdd/{change}/.worktrees/task-{TASK_NUM}"
229
+
230
+ git worktree add -b "$BRANCH_NAME" "$WORKTREE_PATH" "$BASE_COMMIT"
231
+ ```
232
+
233
+ **关键**:
234
+ - 每个任务在独立的 worktree 中工作,消除并行竞态
235
+ - worktree 拥有独立的 HEAD 和工作目录
236
+ - 所有文件编辑和 git 操作必须在 worktree 中执行
237
+
238
+ ##### 2b. 并行派发实现者子代理
239
+
240
+ 使用宿主原生 subagent 工具**同时**派发多个实现者:
241
+
242
+ ```
243
+ 对层内的每个任务:
244
+ 派发子代理(isolation: "worktree"):
245
+ - prompt: 读取 brief + TDD 指令 + spec 约束
246
+ - 指令:在 worktree 中工作,完成后写 report
247
+ - 模型选择:参考串行模式的模型选择表
248
+ ```
249
+
250
+ **并行派发示例**(Claude Code):
251
+ ```
252
+ 同时发起多个 Agent 调用:
253
+ - Agent 1: "Task 1 in worktree .specpow/sdd/{change}/.worktrees/task-1"
254
+ - Agent 2: "Task 2 in worktree .specpow/sdd/{change}/.worktrees/task-2"
255
+ - Agent 3: "Task 3 in worktree .specpow/sdd/{change}/.worktrees/task-3"
256
+ ```
257
+
258
+ ##### 2c. 等待所有子代理完成
259
+
260
+ 所有子代理完成后,检查各自的 report 文件。
261
+
262
+ ##### 2d. 顺序合并分支
263
+
264
+ ```bash
265
+ # 按任务编号顺序合并
266
+ for TASK_NUM in 1 2 3; do
267
+ BRANCH="specpow-parallel-${TASK_NUM}-xxx"
268
+ git merge "$BRANCH" --no-edit
269
+
270
+ # 检查冲突
271
+ if [ $? -ne 0 ]; then
272
+ echo "冲突:任务 $TASK_NUM 合并失败"
273
+ # 记录到 Ledger
274
+ fi
275
+ done
276
+ ```
277
+
278
+ ##### 2e. 冲突检测
279
+
280
+ 检查哪些文件被多个任务修改:
281
+ ```bash
282
+ # 对每个完成的任务,获取变更文件列表
283
+ for TASK_NUM in 1 2 3; do
284
+ git diff --name-only "$BASE_COMMIT".."$HEAD_COMMIT"
285
+ done
286
+
287
+ # 如果同一文件出现在多个任务的变更列表中 → 冲突
288
+ ```
289
+
290
+ ##### 2f. 清理 Worktree
291
+
292
+ ```bash
293
+ # 删除 worktree 和分支
294
+ git worktree remove ".specpow/sdd/{change}/.worktrees/task-{TASK_NUM}" --force
295
+ git branch -D "specpow-parallel-{TASK_NUM}-xxx"
296
+ ```
297
+
298
+ ##### 2g. 运行集成测试
299
+
300
+ 所有任务合并后,运行完整测试套件:
301
+ ```bash
302
+ pnpm test --silent
303
+ ```
304
+
305
+ ##### 2h. 记录到 Ledger
306
+
307
+ ```
308
+ Layer {L}: complete ({N} tasks merged, {C} conflicts detected)
309
+ ```
310
+
311
+ #### 3. 层间串行
312
+
313
+ 前一层合并完成后,才开始下一层。这确保了依赖关系的正确性。
314
+
315
+ ### 并行执行的注意事项
316
+
317
+ 1. **绝不并行修改同一文件** — 依赖分析必须准确
318
+ 2. **合并后必须运行完整测试** — 并行执行可能引入集成问题
319
+ 3. **冲突是并行代价** — 显式报告冲突,而非静默丢失
320
+ 4. **Worktree 清理必须彻底** — 即使任务失败也要清理
321
+ 5. **断路器保护** — 如果一层中有 ≥ 50% 任务失败,停止后续层
322
+
323
+ ### 何时使用并行模式
324
+
325
+ | 场景 | 推荐模式 |
326
+ |------|----------|
327
+ | 3+ 个独立任务,无文件重叠 | 并行 |
328
+ | 任务间有强依赖 | 串行 |
329
+ | CI/CD 自动化 | 并行(节省时间) |
330
+ | 交互式开发,需要实时反馈 | 串行(更易调试) |
331
+ | 多文件非依赖变更 | 并行 |
332
+
333
+ ## Ledger 记录格式
334
+
335
+ 每完成一个操作,**追加一行**到 `.specpow/sdd/{change}/progress.md`。
336
+ 格式为**扁平日志行**(不是结构化 markdown),ledger.ts 用正则解析这些行。
337
+
338
+ 首行固定为:
339
+ ```
340
+ # SDD ledger — plan: {planFile}
341
+ ```
342
+
343
+ 后续追加的日志行格式:
344
+
345
+ ```
346
+ Task {N}: complete (commits {BASE}..{HEAD}, review clean)
347
+ Task {N}: complete (commits {BASE}..{HEAD}, review with parked)
348
+ Task {N}: fix round {R}/{MAX} ({A} addressed, {O} open — {summary1}; {summary2}; commits {RANGE})
349
+ Task {N}: BLOCKED — {reason}
350
+ Task {N}: parked — {description} — ruling: {ruling}
351
+ Task {N}: minor (deferred): {description}
352
+ ```
353
+
354
+ **注意**:
355
+ - 每行独立,不分组、不嵌套
356
+ - `review clean` 表示审查通过无停放;`review with parked` 表示有停放发现
357
+ - fix round 行中的 summaries 用分号分隔,每个 summary 对应一个 open finding 的描述
358
+ - `{MAX}` 来自配置 `sdd.maxFixRounds`(默认 5)
359
+
360
+ ## 关键原则
361
+
362
+ 1. **文件即接口** — 所有产物通过文件传递,不占用上下文
363
+ 2. **信任 Ledger** — 断点续跑时读取 Ledger,不信任记忆
364
+ 3. **模型升级** — 修复轮次 4-5 升级模型,避免卡死
365
+ 4. **范围限定重审** — 修复后只审查修复部分,提高效率
366
+ 5. **断路器保护** — 5 轮后强制判定,避免无限循环