sillyspec 3.10.3 → 3.10.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sillyspec",
3
- "version": "3.10.3",
3
+ "version": "3.10.4",
4
4
  "description": "SillySpec CLI — 流程状态机,让 AI 严格按步骤来",
5
5
  "icon": "logo.jpg",
6
6
  "homepage": "https://sillyspec.ppdmq.top/",
@@ -211,6 +211,34 @@ HTML 原型文件路径(或"跳过"如果不适合)`,
211
211
  name: '写设计文档并自审',
212
212
  prompt: `撰写 design 文档并进行 AI 自审。
213
213
 
214
+ ### design.md 必须包含的章节
215
+ 1. **背景**:为什么做、解决什么问题
216
+ 2. **设计目标**:要达成什么
217
+ 3. **非目标**:明确不做的事(防止 scope creep)
218
+ 4. **拆分判断**(如适用):为什么这样组织变更、为什么不走批量模式
219
+ 5. **总体方案**:技术方案(分 Phase/Wave)
220
+ 6. **文件变更清单**(必填):
221
+
222
+ | 操作 | 文件路径 | 说明 |
223
+ |---|---|---|
224
+ | 新增 | src/xxx/NewFile.java | ... |
225
+ | 修改 | src/xxx/ExistingFile.java | 新增 xx 方法 |
226
+ | 删除 | src/xxx/OldFile.java | 已被 xx 替代 |
227
+
228
+ 7. **接口定义**:方法签名、数据结构(代码类任务必填)
229
+ 8. **数据模型**(如涉及):表结构/字段变更
230
+ 9. **兼容策略**(brownfield 必填):
231
+ - 未配置新功能时行为不变
232
+ - 新旧逻辑的回退路径
233
+ - 不改变的 API / 表结构
234
+ 10. **风险登记**:
235
+
236
+ | 编号 | 风险 | 等级 | 应对策略 |
237
+ |---|---|---|---|
238
+ | R-01 | ... | P0/P1/P2 | ... |
239
+
240
+ 11. **自审**(AI 对自身设计的校验)
241
+
214
242
  ### 操作
215
243
  1. 确认变更目录存在:\`mkdir -p .sillyspec/changes/<变更名>\`(Windows 用 \`mkdir .sillyspec\\changes\\<变更名>\` 或 PowerShell \`New-Item -ItemType Directory -Force -Path .sillyspec/changes/<变更名>\`)
216
244
  - 变更名格式必须为 \`YYYY-MM-DD-<简短描述>\`(如 \`2026-05-13-user-auth\`)
@@ -218,11 +246,14 @@ HTML 原型文件路径(或"跳过"如果不适合)`,
218
246
  3. 自审检查:
219
247
  - 需求覆盖:是否完整覆盖 Step 6 确认的需求
220
248
  - 约束一致性:是否与 CONVENTIONS.md、ARCHITECTURE.md 一致
221
- - 真实性:表名/字段名来自真实 schema 或标注"新增"
249
+ - 真实性:表名/字段名/类名/方法名来自真实代码或标注"新增"
222
250
  - YAGNI:是否包含不必要功能
223
251
  - 验收标准:是否具体可测试
224
- 3. 自审发现问题 → 修改后重新检查
225
- 4. 全部通过 → 进入下一步
252
+ - 非目标清晰:是否明确界定了不做的事
253
+ - 兼容策略(brownfield):是否说明了回退路径
254
+ - 风险识别:是否识别了关键技术风险和对策
255
+ 4. 自审发现问题 → 修改后重新检查
256
+ 5. 全部通过 → 进入下一步
226
257
 
227
258
  ### 输出
228
259
  design.md 文件路径 + 自审结果
@@ -230,10 +261,7 @@ design.md 文件路径 + 自审结果
230
261
  ### 注意
231
262
  - 自审不通过不要进入下一步
232
263
  - 不确定的问题标注「⚠️ 自审存疑」`,
233
- outputHint: 'design.md 路径 + 自审结果',
234
- optional: false
235
- },
236
- {
264
+
237
265
  name: '用户确认并生成规范文件',
238
266
  prompt: `用户确认设计方案,生成规范文件。
239
267
 
@@ -241,12 +269,59 @@ design.md 文件路径 + 自审结果
241
269
  1. 展示 design.md 摘要给用户
242
270
  2. 请用户选择:✅ 确认 / ✏️ 修改 / ❌ 推翻重来
243
271
  3. 确认后,在 \`.sillyspec/changes/<变更名>/\` 下生成所有规范文件:
244
- - **design.md**:架构决策、文件变更清单、数据模型、API 设计、代码风格参照
245
- - **proposal.md**:动机、变更范围、不在范围内、成功标准
246
- - **requirements.md**:功能需求、用户场景(Given/When/Then 格式)、非功能需求
272
+ - **design.md**:架构决策、文件变更清单、数据模型、API 设计、兼容策略、风险登记、自审
273
+ - **proposal.md**:动机、关键问题(为什么现有方案不够)、变更范围、不在范围内(显式清单)、成功标准(可验证条件)
274
+ - **requirements.md**:角色表 + FR 编号需求 + Given/When/Then 行为规格 + 非功能需求
247
275
  - **tasks.md**:任务列表(只列名称和对应文件路径,细节在 plan 阶段展开)
248
276
  - \`git add .sillyspec/\` — 暂存规范文件(不要 commit)
249
277
 
278
+ ### proposal.md 格式要求
279
+ \`\`\`markdown
280
+ # Proposal
281
+
282
+ ## 动机
283
+ 为什么做、解决什么核心问题
284
+
285
+ ## 关键问题
286
+ 为什么现有方案不够(展开 2-3 个具体痛点)
287
+
288
+ ## 变更范围
289
+ 本次做什么
290
+
291
+ ## 不在范围内(显式清单)
292
+ - 不做 X
293
+ - 不做 Y
294
+
295
+ ## 成功标准(可验证)
296
+ - 旧配置默认行为不变
297
+ - 新功能在配置后可用
298
+ - ...
299
+ \`\`\`
300
+
301
+ ### requirements.md 格式要求
302
+ \`\`\`markdown
303
+ # Requirements
304
+
305
+ ## 角色
306
+ | 角色 | 说明 |
307
+ |---|---|
308
+ | 开发者 | ... |
309
+
310
+ ## 功能需求
311
+
312
+ ### FR-01: 需求名称
313
+ Given 前提条件
314
+ When 触发动作
315
+ Then 期望结果
316
+
317
+ (每个边界条件独立 GWT 块)
318
+
319
+ ## 非功能需求
320
+ - 兼容性:...
321
+ - 可回退:...
322
+ - 可测试:...
323
+ \`\`\`
324
+
250
325
  ### 输出
251
326
  所有规范文件路径
252
327
 
@@ -255,10 +330,9 @@ design.md 文件路径 + 自审结果
255
330
  - 禁止在确认前推进到后续阶段
256
331
  - 禁止自动 commit
257
332
  - 推翻重来回到 Step 6
258
- - 表名/字段名必须来自真实 schema 或标注"新增"
333
+ - 表名/字段名/类名必须来自真实代码或标注"新增"
259
334
  - tasks.md 只列任务名,细节在 plan 阶段展开`,
260
- outputHint: '规范文件路径',
261
- optional: false
335
+
262
336
  }
263
337
  ]
264
338
  }
@@ -274,7 +274,7 @@ ${taskSummary}
274
274
  子代理 prompt 要点:
275
275
  1. 任务目标(简短描述)
276
276
  2. 蓝图文件路径(让子代理自行读取详情)
277
- 3. 编码铁律:先读后写、TDD、不编造方法、只做蓝图里写的事
277
+ 3. 编码铁律:先读后写、TDD、不编造方法、只做蓝图里写的事、遵守边界处理规则、不超出 allowed_paths
278
278
 
279
279
  ### Wave 开始前
280
280
  1. 读取 design.md 的「编码铁律」章节(如果存在),严格遵守
@@ -54,10 +54,17 @@ export const fixedPrefix = [
54
54
  name: '展开任务并分组',
55
55
  prompt: `把 tasks.md 每个 checkbox 展开为任务描述,按 Wave 分组,产出 plan.md 总览。
56
56
 
57
- ### plan.md 格式(轻量总览,PM 视角)
57
+ ### plan.md 格式(PM 视角 + 机器可解析)
58
58
  \`\`\`markdown
59
59
  # 实现计划
60
60
 
61
+ ## Spike 前置验证(如需要)
62
+ | Spike | 验证内容 | 不通过后果 |
63
+ |---|---|---|
64
+ | spike-01 | ... | task-XX 推翻重设计 |
65
+
66
+ > 技术不确定性高时才需要 Spike。无不确定性则跳过此节。
67
+
61
68
  ## Wave 1(并行,无依赖)
62
69
  - [ ] task-01: 添加用户创建接口
63
70
  - [ ] task-02: 添加角色创建接口
@@ -65,14 +72,42 @@ export const fixedPrefix = [
65
72
  ## Wave 2(依赖 Wave 1)
66
73
  - [ ] task-03: 用户创建接口联调
67
74
 
75
+ ## 任务总表
76
+ | 编号 | 任务 | Wave | 优先级 | 估时 | 依赖 | 说明 |
77
+ |---|---|---|---|---|---|---|
78
+ | task-01 | 添加用户创建接口 | W1 | P0 | 4h | — | ... |
79
+ | task-02 | 添加角色创建接口 | W1 | P0 | 3h | — | ... |
80
+ | task-03 | 用户创建接口联调 | W2 | P0 | 4h | task-01,02 | ... |
81
+
82
+ ## 依赖关系图
83
+ \`\`\`mermaid
84
+ graph LR
85
+ task-01 --> task-03
86
+ task-02 --> task-03
87
+ \`\`\`
88
+
89
+ ## 关键路径
90
+ task-01 → task-03(最长路径,决定最短交付周期)
91
+
68
92
  ## 全局验收标准
69
93
  - [ ] 所有单元测试通过
94
+ - [ ] (brownfield)未配置新功能时行为不变
70
95
  \`\`\`
71
96
 
72
97
  ### 关键规则
73
- - plan.md 只放任务列表 + Wave 划分 + 全局验收标准,**不放实现细节**
98
+ - plan.md 包含:Wave 分组 + 任务总表 + 依赖图 + 关键路径 + 全局验收标准,**不放实现细节**
74
99
  - 实现细节写到后续的 tasks/task-NN.md 中
75
100
  - 每个任务编号格式:task-01、task-02 ...
101
+ - **Wave 下的 checkbox 行必须保留**(execute 阶段解析依赖 \`- [ ] task-XX:\` 格式)
102
+ - 任务总表的优先级:P0(必须)/ P1(重要)/ P2(可选)
103
+ - 估时参考:单个 task ≤ 8h,超过则拆分
104
+
105
+ ### Spike 前置验证
106
+ 当存在技术不确定性时,在 Wave 之前设计 Spike:
107
+ - 涉及新技术栈/未经验证的集成 → 需要 Spike
108
+ - 涉及安全隔离/性能瓶颈 → 需要 Spike
109
+ - 纯业务逻辑/确定的技术方案 → 不需要 Spike
110
+ - 每个 Spike 定义:验证内容 + 通过标准 + 不通过后果
76
111
 
77
112
  ### 批量模式指引
78
113
  如果 design.md 或需求中包含批量特征(关键词:批量/模板/引擎/N个相似),按以下原则规划:
@@ -87,7 +122,11 @@ export const fixedPrefix = [
87
122
  2. 读取 design.md 获取文件变更清单
88
123
  3. 逐个展开为任务描述
89
124
  4. 分析依赖关系,按 Wave 分组
90
- 5. 保存到 \`.sillyspec/changes/<变更名>/plan.md\`
125
+ 5. 生成任务总表(含优先级、估时、依赖)
126
+ 6. 生成 Mermaid 依赖关系图
127
+ 7. 标注关键路径
128
+ 8. 评估是否需要 Spike 前置验证
129
+ 9. 保存到 \`.sillyspec/changes/<变更名>/plan.md\`
91
130
 
92
131
  ### 输出
93
132
  plan.md 总览内容`,
@@ -101,9 +140,13 @@ plan.md 总览内容`,
101
140
  ### 操作
102
141
  检查以下各项:
103
142
  - [ ] 每个 task 有编号(task-01、task-02 ...)
104
- - [ ] 每个 task checkbox
143
+ - [ ] 每个 task Wave 下有 checkbox(\`- [ ] task-XX:\` 格式,execute 解析依赖此格式)
105
144
  - [ ] 已标注 Wave 分组和依赖关系
145
+ - [ ] 有任务总表(含优先级、估时、依赖列)
146
+ - [ ] 有 Mermaid 依赖关系图
147
+ - [ ] 有关键路径标注
106
148
  - [ ] 有全局验收标准
149
+ - [ ] (brownfield)全局验收包含兼容性条款
107
150
  - [ ] 没有实现细节(接口定义、代码示例等不应该在 plan.md 里)
108
151
  - [ ] plan.md 与 design.md 的文件变更清单一致
109
152
 
@@ -161,57 +204,89 @@ function parseTaskCount(planContent) {
161
204
  * 生成单个任务的蓝图写作 prompt
162
205
  */
163
206
  function buildTaskPrompt(taskNum, taskName, changeDir) {
164
- return `编写任务蓝图 tasks/task-${String(taskNum).padStart(2, '0')}.md
207
+ const num = String(taskNum).padStart(2, '0')
208
+ return `编写任务蓝图 tasks/task-${num}.md
165
209
 
166
210
  ### 任务
167
211
  ${taskName}
168
212
 
169
213
  ### 文件路径
170
- \`.sillyspec/changes/<变更名>/tasks/task-${String(taskNum).padStart(2, '0')}.md\`
214
+ \`.sillyspec/changes/<变更名>/tasks/task-${num}.md\`
171
215
 
172
216
  ### 格式要求(必须严格遵守)
173
217
  \`\`\`markdown
174
- # task-${String(taskNum).padStart(2, '0')}: ${taskName}
175
-
176
- ## 修改文件
177
- - 具体文件路径列表
218
+ ---
219
+ id: task-${num}
220
+ title: ${taskName}
221
+ priority: P0
222
+ estimated_hours: N
223
+ depends_on: []
224
+ blocks: []
225
+ allowed_paths:
226
+ - 允许修改的路径范围
227
+ ---
228
+
229
+ # task-${num}: ${taskName}
230
+
231
+ ## 修改文件(必填)
232
+ - 精确到文件路径,列出所有需要新增或修改的文件
178
233
 
179
234
  ## 实现要求
180
235
  1. 具体做什么,写清楚
181
236
  2. ...
182
237
 
183
- ## 接口定义
184
- (代码类任务必填,写方法签名、数据结构)
238
+ ## 接口定义(代码类任务必填)
239
+ 写方法签名、数据结构、控制流伪代码。AI executor 应能照着直接编码。
240
+
241
+ ## 边界处理(必填)
242
+ - null/空值行为
243
+ - 兼容旧行为(brownfield:未配置新功能时行为不变)
244
+ - 异常不静默吞掉(明确返回值或抛出)
245
+ - 不修改传入参数
246
+ - 歧义/冲突场景的处理策略
185
247
 
186
- ## 边界处理
187
- - 异常场景列表
248
+ ## 非目标(本任务不做的事)
249
+ - 明确列出边界,防止 scope creep
188
250
 
189
251
  ## 参考
190
252
  - 已有代码可参考的模式
191
253
  - 相关的 CONVENTIONS.md 条目
192
254
 
193
255
  ## TDD 步骤
194
- 1. 写测试 ...
195
- 2. 运行 <test-cmd> 确认失败
196
- 3. 写代码 ...
197
- 4. 运行 <test-cmd> 确认通过
256
+ 1. XxxTest,覆盖场景 A/B/C
257
+ 2. 运行 <test-cmd> 确认测试失败
258
+ 3. 实现 Xxx
259
+ 4. 运行 <test-cmd> 确认测试通过
260
+ 5. 运行全量测试确认无回退
198
261
  (纯配置/文档类任务简化为:1. 实现 2. 验证)
199
262
 
200
263
  ## 验收标准
201
- - [ ] 具体可测试的验收条件
264
+ | # | 验证步骤 | 通过标准 |
265
+ |---|---|---|
266
+ | AC-01 | 具体操作 | 期望结果 |
267
+ | AC-02 | ... | ... |
202
268
  \`\`\`
203
269
 
270
+ ### frontmatter 元数据说明
271
+ - \`priority\`: P0(必须)/ P1(重要)/ P2(可选)
272
+ - \`estimated_hours\`: 预估工时,单个 task ≤ 8h
273
+ - \`depends_on\`: 依赖的前序 task 编号列表
274
+ - \`blocks\`: 被本 task 阻塞的后续 task 编号列表
275
+ - \`allowed_paths\`: AI executor 可以修改的文件路径范围(安全边界)
276
+
204
277
  ### 关键规则
205
278
  - task-N.md 必须独立完整,execute 子代理只读这一个文件就能干活
206
279
  - 不要依赖其他 task-N.md 的内容
207
280
  - 接口定义写到"搬砖工照着做"的程度
281
+ - 边界处理至少覆盖 5 条规则
282
+ - 验收标准用表格格式,每条可点击验证,禁止"功能可演示"类笼统表述
208
283
  - 写完后保存到文件
209
284
 
210
285
  ### 操作
211
286
  1. 读取 design.md 和 plan.md 了解上下文
212
287
  2. 读取相关源文件了解现有代码
213
288
  3. 编写任务蓝图
214
- 4. 保存到 tasks/task-${String(taskNum).padStart(2, '0')}.md
289
+ 4. 保存到 tasks/task-${num}.md
215
290
 
216
291
  ### 输出
217
292
  任务蓝图内容摘要`
@@ -238,37 +313,60 @@ export function buildCoordinatorStep(changeDir, taskNames) {
238
313
  2. 读取相关源文件了解现有代码
239
314
  3. 按以下格式编写任务蓝图并保存到 ${changeDir}/tasks/task-${num}.md:
240
315
 
316
+ ---
317
+ id: task-${num}
318
+ title: ${name}
319
+ priority: P0/P1/P2
320
+ estimated_hours: N
321
+ depends_on: [task-XX]
322
+ blocks: [task-XX]
323
+ allowed_paths:
324
+ - ...
325
+ ---
326
+
241
327
  # task-${num}: ${name}
242
328
 
243
- ## 修改文件
244
- - 文件路径列表
329
+ ## 修改文件(必填)
330
+ - 精确到文件路径
245
331
 
246
332
  ## 实现要求
247
333
  1. 具体做什么
248
334
 
249
- ## 接口定义
250
- (代码类任务必填)
335
+ ## 接口定义(代码类任务必填)
336
+ 方法签名、数据结构、控制流伪代码
337
+
338
+ ## 边界处理(必填)
339
+ - null/空值行为
340
+ - 兼容旧行为(brownfield:未配置新功能时行为不变)
341
+ - 异常不静默吞掉(明确返回值或抛出)
342
+ - 不修改传入参数
343
+ - 歧义/冲突场景的处理策略
251
344
 
252
- ## 边界处理
253
- - 异常场景
345
+ ## 非目标(本任务不做的事)
346
+ - 明确边界,防止 scope creep
254
347
 
255
348
  ## 参考
256
349
  - 可参考的模式
257
350
 
258
351
  ## TDD 步骤
259
- 1. 写测试 → 2. 确认失败 → 3. 写代码 → 4. 确认通过
352
+ 1. 写测试 → 2. 确认失败 → 3. 写代码 → 4. 确认通过 → 5. 回归
260
353
 
261
354
  ## 验收标准
262
- - [ ] 具体可测试的条件
355
+ | # | 验证步骤 | 通过标准 |
356
+ |---|---|---|
357
+ | AC-01 | ... | ... |
263
358
 
264
359
  关键规则:
265
360
  - 必须独立完整,execute 子代理只读这一个文件就能干活
266
361
  - 不要依赖其他 task-N.md 的内容
267
362
  - 接口定义写到"搬砖工照着做"的程度
363
+ - 边界处理至少 5 条
364
+ - 验收标准用表格,禁止笼统表述
268
365
  - 写完后用 Write tool 保存到文件
269
366
  \`\`\``
270
367
  }).join('\n\n')
271
368
 
369
+
272
370
  return {
273
371
  name: '生成任务蓝图(子代理并行)',
274
372
  prompt: `为 plan.md 中的每个任务生成独立蓝图文件。
@@ -293,7 +391,9 @@ ${subagentPrompts}
293
391
 
294
392
  ## 验收
295
393
  - 每个 task-N.md 文件存在且非空
296
- - 包含所有必要章节:修改文件、实现要求、接口定义、边界处理、TDD 步骤、验收标准`,
394
+ - 包含 YAML frontmatter(id、title、priority、depends_on、blocks、allowed_paths)
395
+ - 包含所有必要章节:修改文件、实现要求、接口定义、边界处理(≥5条)、非目标、TDD 步骤、验收标准(表格格式)
396
+ - 边界处理覆盖:null/空值、兼容性、异常处理、参数不可变、歧义场景`,
297
397
  outputHint: '蓝图生成结果',
298
398
  optional: false
299
399
  }
@@ -65,39 +65,61 @@ export const definition = {
65
65
  name: '生成规范文件',
66
66
  prompt: `在 \`.sillyspec/changes/<变更名>/\` 下生成四个文件。
67
67
 
68
+ ### proposal.md 格式要求
69
+ - **动机**:为什么做、解决什么核心问题
70
+ - **关键问题**:为什么现有方案不够(展开 2-3 个具体痛点)
71
+ - **变更范围**:本次做什么
72
+ - **不在范围内**(显式清单):不做 X、不做 Y
73
+ - **成功标准**(可验证条件):旧配置默认行为不变、新功能配置后可用
74
+
75
+ ### requirements.md 格式要求
76
+ - **角色表**:涉及的角色和说明
77
+ - **FR 编号需求**:FR-01、FR-02 ... 每条需求用 Given/When/Then 格式
78
+ - **每个边界条件**独立 GWT 块
79
+ - **非功能需求**:兼容性、可回退、可测试、可扩展
80
+
81
+ ### design.md 格式要求
82
+ - **架构决策** + **文件变更清单表格** + **接口定义**
83
+ - **兼容策略**(brownfield 必填):未配置新功能时行为不变、回退路径
84
+ - **风险登记**表格:编号/风险/等级/应对策略
85
+ - **自审**:需求覆盖、真实性、YAGNI、非目标
86
+
87
+ ### tasks.md 格式要求
88
+ - 任务列表(只列名称,不展开步骤)
89
+ - 每个 task 附文件路径
90
+
68
91
  ### 操作
69
- 1. 生成 proposal.md:动机、变更范围、不在范围内、成功标准
70
- 2. 生成 requirements.md:功能需求、用户场景(Given/When/Then)、非功能需求
71
- 3. 生成 design.md:架构决策、文件变更清单、数据模型、API 设计、代码风格参照
72
- 4. 生成 tasks.md:任务列表(只列名称,不展开步骤)
92
+ 1. 生成 proposal.md
93
+ 2. 生成 requirements.md
94
+ 3. 生成 design.md
95
+ 4. 生成 tasks.md
73
96
 
74
97
  ### 输出
75
98
  四个文件路径
76
99
 
77
100
  ### 注意
78
- - 表名/字段名必须来自真实 schema 或标注"新增"
101
+ - 表名/字段名/类名必须来自真实代码或标注"新增"
79
102
  - 用户场景必须用 Given/When/Then 格式
80
103
  - tasks.md 只列任务名,细节在 plan 阶段展开`,
81
- outputHint: '四个文件路径',
82
- optional: false
83
- },
84
- {
104
+
85
105
  name: '自检门控',
86
106
  prompt: `自检生成的规范文件。
87
107
 
88
108
  ### 操作
89
109
  检查以下各项:
90
- - [ ] proposal.md 有动机、变更范围、不在范围内、成功标准
110
+ - [ ] proposal.md 有动机、关键问题、变更范围、不在范围内、成功标准
91
111
  - [ ] design.md 有文件变更清单表格
92
- - [ ] requirements.md Given/When/Then 用户场景
112
+ - [ ] design.md 有兼容策略(brownfield 时)
113
+ - [ ] design.md 有风险登记表格
114
+ - [ ] requirements.md 有角色表
115
+ - [ ] requirements.md 有 FR 编号和 Given/When/Then 用户场景
93
116
  - [ ] tasks.md 每个 task 有文件路径
94
117
 
95
118
  任何不通过 → 修正后重新检查。
96
119
 
97
120
  ### 输出
98
121
  自检通过/不通过`,
99
- outputHint: '自检结果',
100
- optional: false
122
+
101
123
  },
102
124
  {
103
125
  name: '展示并更新进度',
@@ -145,18 +145,48 @@ grep -rl "<关键词>" <源码目录>/ --include="*.java" --include="*.js" --inc
145
145
  },
146
146
  {
147
147
  name: '输出验证报告',
148
- prompt: `生成完整验证报告。
148
+ prompt: `生成完整验证报告,并写入 verification.md。
149
149
 
150
150
  ### 操作
151
151
  1. 汇总以上所有检查结果
152
- 2. 给出结论:PASS / PASS WITH NOTES / FAIL
152
+ 2. 生成 verification.md 文件,保存到 \`.sillyspec/changes/<变更名>/verification.md\`
153
+ 3. 给出结论:PASS / PASS WITH NOTES / FAIL
154
+
155
+ ### verification.md 格式
156
+ \`\`\`markdown
157
+ # 验证报告
158
+
159
+ ## 结论
160
+ PASS / PASS WITH NOTES / FAIL
161
+
162
+ ## 任务完成度
163
+ (逐项检查任务的结果)
164
+
165
+ ## 设计一致性
166
+ (对照 design.md 的检查结果)
167
+
168
+ ## 探针结果
169
+ - 未实现标记扫描:...
170
+ - 关键词覆盖:...
171
+ - 测试覆盖:...
172
+
173
+ ## 测试结果
174
+ (测试套件执行结果)
175
+
176
+ ## 技术债务
177
+ (TODO/FIXME/HACK 统计)
178
+
179
+ ## 代码审查
180
+ (问题列表 + 总体评价)
181
+ \`\`\`
153
182
 
154
183
  ### 输出
155
- 验证报告 markdown + 下一步命令
184
+ verification.md 路径 + 验证报告摘要 + 下一步命令
156
185
 
157
186
  ### 注意
158
187
  - PASS → 运行 \`sillyspec run archive\` 归档
159
- - FAIL → 修复后运行 \`sillyspec run verify\` 重新验证`,
188
+ - FAIL → 修复后运行 \`sillyspec run verify\` 重新验证
189
+ - verification.md 是变更包的正式验收记录,归档后保留`,
160
190
  outputHint: '验证报告',
161
191
  optional: false
162
192
  }