sillyspec 3.26.10 → 3.26.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.
- package/.claude/skills/sillyspec-archive/SKILL.md +85 -85
- package/.claude/skills/sillyspec-brainstorm/SKILL.md +114 -114
- package/.claude/skills/sillyspec-commit/SKILL.md +109 -109
- package/.claude/skills/sillyspec-continue/SKILL.md +45 -45
- package/.claude/skills/sillyspec-doctor/SKILL.md +76 -76
- package/.claude/skills/sillyspec-execute/SKILL.md +200 -200
- package/.claude/skills/sillyspec-explore/SKILL.md +95 -95
- package/.claude/skills/sillyspec-knowledge/SKILL.md +269 -269
- package/.claude/skills/sillyspec-plan/SKILL.md +148 -148
- package/.claude/skills/sillyspec-quick/SKILL.md +115 -111
- package/.claude/skills/sillyspec-resume/SKILL.md +68 -68
- package/.claude/skills/sillyspec-scan/SKILL.md +79 -79
- package/.claude/skills/sillyspec-state/SKILL.md +64 -64
- package/.claude/skills/sillyspec-status/SKILL.md +54 -54
- package/.claude/skills/sillyspec-verify/SKILL.md +83 -83
- package/.claude/skills/sillyspec-workspace/SKILL.md +169 -169
- package/.gitattributes +2 -0
- package/.husky/pre-push +20 -20
- package/README.md +203 -201
- package/SKILL.md +91 -90
- package/package.json +39 -39
- package/packages/dashboard/dist/assets/index-Bq_Z2hne.js +7446 -7446
- package/packages/dashboard/dist/assets/index-O2W5RV4z.css +1 -1
- package/packages/dashboard/dist/index.html +16 -16
- package/packages/dashboard/package.json +25 -25
- package/packages/dashboard/server/executor.js +95 -86
- package/packages/dashboard/server/index.js +663 -601
- package/packages/dashboard/server/parser.js +526 -526
- package/src/change-risk-profile.js +254 -254
- package/src/classify-change.js +109 -109
- package/src/config-schema.js +313 -310
- package/src/contract-matrix.js +388 -379
- package/src/db.js +370 -350
- package/src/dispatch/backends/local-agent.js +155 -155
- package/src/dispatch/backends/sillyhub-mcp.js +245 -245
- package/src/dispatch/probe.js +246 -210
- package/src/dispatch/strategy.js +121 -121
- package/src/docs-check.js +188 -16
- package/src/docs-debt.js +6 -2
- package/src/docs-gate.js +1 -0
- package/src/doctor-diagnostics.js +898 -711
- package/src/endpoint-extractor.js +401 -401
- package/src/fs-atomic.js +71 -69
- package/src/git-helper.js +82 -79
- package/src/hooks/claude-pre-tool-use.cjs +125 -125
- package/src/hooks/worktree-guard.js +854 -848
- package/src/index.js +251 -20
- package/src/init.js +624 -623
- package/src/knowledge-match.js +130 -130
- package/src/local-detect.js +128 -120
- package/src/machine-interface.js +543 -543
- package/src/migrate.js +127 -127
- package/src/modules.js +7 -5
- package/src/progress/change-registry.js +297 -260
- package/src/progress/consistency-doctor.js +355 -355
- package/src/progress/shared.js +36 -36
- package/src/progress/stage-machine.js +589 -550
- package/src/progress/step-store.js +261 -261
- package/src/progress.js +1285 -1127
- package/src/quicklog.js +724 -693
- package/src/review-tier.js +77 -77
- package/src/run/command.js +1408 -1364
- package/src/run/complete-handlers.js +1450 -1399
- package/src/run/complete.js +1181 -920
- package/src/run/gates.js +878 -755
- package/src/run/prompt.js +765 -761
- package/src/run/quick-audit.js +155 -146
- package/src/run/shared.js +1348 -1215
- package/src/run/stage.js +527 -479
- package/src/scan-postcheck.js +371 -371
- package/src/setup.js +414 -416
- package/src/sillyhub-mcp/client.js +597 -529
- package/src/spec-dir-typo.js +3 -24
- package/src/spec-sync.js +358 -319
- package/src/stage-contract.js +871 -897
- package/src/stage-review.js +549 -549
- package/src/stages/archive.js +156 -155
- package/src/stages/brainstorm-auto.js +236 -236
- package/src/stages/brainstorm.js +597 -597
- package/src/stages/cmd-existence.js +145 -145
- package/src/stages/doctor.js +386 -371
- package/src/stages/execute.js +1014 -1003
- package/src/stages/explore.js +34 -34
- package/src/stages/index.js +29 -29
- package/src/stages/knowledge.js +498 -498
- package/src/stages/plan-postcheck.js +1323 -1302
- package/src/stages/plan.js +642 -623
- package/src/stages/quick.js +153 -151
- package/src/stages/scan.js +607 -607
- package/src/stages/status.js +64 -64
- package/src/stages/verify.js +264 -264
- package/src/sync.js +1325 -1135
- package/src/task-review.js +1204 -1019
- package/src/taskcard.js +178 -0
- package/src/verify-postcheck.js +1199 -1186
- package/src/workflow.js +600 -600
- package/src/worktree-apply.js +1237 -1136
- package/src/worktree-deps.js +453 -353
- package/src/worktree.js +1527 -1481
- package/templates/workflows/archive-impact.yaml +79 -79
- package/templates/workflows/scan-docs.yaml +132 -132
package/src/stages/verify.js
CHANGED
|
@@ -1,264 +1,264 @@
|
|
|
1
|
-
export const definition = {
|
|
2
|
-
name: 'verify',
|
|
3
|
-
title: '验证确认',
|
|
4
|
-
description: '对照规范检查 + 测试套件',
|
|
5
|
-
|
|
6
|
-
// ⛔ 全局护栏:verify 阶段禁止一切破坏性操作
|
|
7
|
-
// 子代理只能「读」和「写报告」,不能「改代码」或「改 git 状态」。
|
|
8
|
-
_globalGuardrails: `
|
|
9
|
-
## ⛔ verify 阶段绝对禁止的操作
|
|
10
|
-
|
|
11
|
-
以下操作在 verify 阶段**绝对禁止**,无论出于任何原因(包括「恢复文件」「修复问题」「清理目录」):
|
|
12
|
-
|
|
13
|
-
### 禁止的 Git 操作
|
|
14
|
-
- git checkout(覆盖文件)
|
|
15
|
-
- git restore(覆盖文件)
|
|
16
|
-
- git reset(回滚提交)
|
|
17
|
-
- git revert(撤销提交)
|
|
18
|
-
- git clean(删除未跟踪文件)
|
|
19
|
-
- git stash drop(删除 stash)
|
|
20
|
-
- git branch -D(强制删除分支)
|
|
21
|
-
|
|
22
|
-
### 禁止的文件操作
|
|
23
|
-
- 删除任何源码文件(rm、trash)
|
|
24
|
-
- 覆盖任何源码文件(cp 覆盖、echo > 覆盖)
|
|
25
|
-
- 修改任何源码文件(除了 .sillyspec/ 下的报告文件)
|
|
26
|
-
|
|
27
|
-
### 只允许的操作
|
|
28
|
-
- git status / git diff / git show / git log / git stash list(只读)
|
|
29
|
-
- cat / head / grep / find / wc(只读检查)
|
|
30
|
-
- 写入 .sillyspec/changes/ 下的报告文件(verify-result.md)
|
|
31
|
-
- 运行测试命令(不修改源码)
|
|
32
|
-
- 运行 lint 命令(不自动修复)
|
|
33
|
-
|
|
34
|
-
### 长测试/构建执行铁律
|
|
35
|
-
- 长测试/构建/lint 命令必须**前台同步执行**,禁止 run_in_background:true / & / nohup / disown——后台任务易被会话生命周期回收导致中断无果
|
|
36
|
-
|
|
37
|
-
如果发现文件缺失或异常,**只报告问题,不尝试修复**。
|
|
38
|
-
`,
|
|
39
|
-
|
|
40
|
-
steps: [
|
|
41
|
-
{
|
|
42
|
-
name: '进度确认',
|
|
43
|
-
migratedFrom: ['状态检查'],
|
|
44
|
-
prompt: `> 💡 先说清楚:\`sillyspec run verify\`(不带 --done)**只下发执行指令,不会替你跑测试/构建**——真正的测试由 CLI 在最后 --done 时统一执行(local.yaml 的 commands.test,同步对账可能耗时较长);「运行测试和质量扫描」那步**不需要你重复手动跑全量**(避免与 CLI 对账重复耗时),只做 lint/静态检查 + 可选快速冒烟。别以为敲了 run verify 就自动验证了。
|
|
45
|
-
|
|
46
|
-
检查当前进度,确认可以执行 verify。
|
|
47
|
-
|
|
48
|
-
> ⚠️ 本步用 \`sillyspec progress show\` 查**流程进度**(推进工作流用),不要用 \`sillyspec status\`(那是**项目级快照**,只读、不推进流程,是另一条命令)。
|
|
49
|
-
|
|
50
|
-
### 操作
|
|
51
|
-
1. 运行 \`sillyspec progress show\`
|
|
52
|
-
2. 确认 currentStage 为 "verify"
|
|
53
|
-
|
|
54
|
-
### 输出
|
|
55
|
-
当前进度摘要`,
|
|
56
|
-
outputHint: '进度摘要',
|
|
57
|
-
optional: false
|
|
58
|
-
},
|
|
59
|
-
{
|
|
60
|
-
name: '加载规范并锚定',
|
|
61
|
-
prompt: `加载规范文件并确认。
|
|
62
|
-
|
|
63
|
-
### 操作
|
|
64
|
-
1. 读取 proposal.md、design.md、tasks.md、requirements.md、plan.md
|
|
65
|
-
2. 如果存在 decisions.md,必须读取并提取所有当前版本 D-xxx@vN 决策 ID
|
|
66
|
-
- 如果存在 P0/P1 unresolved/blocking 决策,验证结论不能为 PASS
|
|
67
|
-
- 如果发现 superseded 决策被下游引用,标记为 ⚠️ stale decision reference
|
|
68
|
-
3. 加载项目信息:\`cat .sillyspec/projects/*.yaml 2>/dev/null\`
|
|
69
|
-
4. 加载本地配置:\`cat .sillyspec/local.yaml 2>/dev/null\`(构建命令、测试命令、lint 命令等)若 local.yaml 不存在,先 \`sillyspec local detect\` 生成骨架再读取
|
|
70
|
-
5. 加载代码规范:\`cat .sillyspec/docs/<project>/scan/CONVENTIONS.md 2>/dev/null\`
|
|
71
|
-
- 测试现状:\`cat .sillyspec/docs/<project>/scan/TESTING.md 2>/dev/null\`(了解既有测试约定与覆盖范围,验收时对照)
|
|
72
|
-
- 技术债清单:\`cat .sillyspec/docs/<project>/scan/CONCERNS.md 2>/dev/null\`(🔴/🟡 区域;本次变更若触碰须在 verify-result.md 标注)
|
|
73
|
-
6. 标注每个文件的存在/不存在状态
|
|
74
|
-
|
|
75
|
-
### Execute Evidence 传递检查
|
|
76
|
-
7. 检查 verify-required-evidence.json 是否存在(由 execute 阶段 Task Review Gate 写入)
|
|
77
|
-
- 路径:变更目录下的 verify-required-evidence.json
|
|
78
|
-
- 文件 schema:\`{ items: [{ task, verdict, evidence: string[] }] }\`——顶层是 \`items\`,每项的 \`evidence\` 是字符串数组(不是 \`requiredEvidence\` 键)
|
|
79
|
-
- 如果存在 → 逐项读取 \`items\`,对每个 cannot_verify 任务逐条核对其 \`evidence\` 数组是否已满足
|
|
80
|
-
- 每条 evidence 必须在 verify-result.md 中给出明确结论(satisfied / missing / partial)
|
|
81
|
-
- 如果有任何 evidence 为 missing → verify 结论不能为 PASS
|
|
82
|
-
- 如果文件不存在 → 表示 execute 阶段无 cannot_verify 任务,正常继续
|
|
83
|
-
- CLI 会 advisory 复核每个 cannot_verify 任务是否在 verify-result.md 体现(未体现仅 warn 不阻断归档;evidence 是否真满足由你诚实判定,CLI 不替你语义判定)
|
|
84
|
-
|
|
85
|
-
### 模块文档加载
|
|
86
|
-
8. 读取 \`.sillyspec/docs/<project>/modules/_module-map.yaml\`(不存在则跳过以下步骤)
|
|
87
|
-
9. 根据 design.md 的文件变更清单匹配 _module-map.yaml 中的模块
|
|
88
|
-
10. 读取匹配到的 \`.sillyspec/docs/<project>/modules/<module>.md\`
|
|
89
|
-
11. **检查模块索引可信度**:如果相关模块的 needs_review 为 true,提示"该模块索引可能不可信,需要回看模块卡片或源码"
|
|
90
|
-
|
|
91
|
-
### worktree 基线锚点(CLI 注入)
|
|
92
|
-
{WORKTREE_BASELINE_INFO}
|
|
93
|
-
|
|
94
|
-
### 输出
|
|
95
|
-
文件加载确认清单(含 decisions.md 当前版本/未决项状态、模块文档 + 索引可信度、worktree 基线锚点)`,
|
|
96
|
-
outputHint: '文件确认清单',
|
|
97
|
-
optional: false
|
|
98
|
-
},
|
|
99
|
-
{
|
|
100
|
-
name: '逐项检查任务',
|
|
101
|
-
prompt: `对照 tasks.md
|
|
102
|
-
|
|
103
|
-
### 操作
|
|
104
|
-
对每个 checkbox:
|
|
105
|
-
1. 检查相关文件是否存在
|
|
106
|
-
2. 检查代码是否实现了描述的功能
|
|
107
|
-
3. 标记:✅ 已完成 / ❌ 未完成 / ⚠️ 部分完成
|
|
108
|
-
|
|
109
|
-
### 批量模式验证指引
|
|
110
|
-
如果 tasks.md 中有批量特征(引擎/模板/配置/批量生成),采用分层验证:
|
|
111
|
-
- **L1 自动化(100%)**:运行验证脚本(如有),检查所有实例的文件存在、格式正确、Schema 校验通过
|
|
112
|
-
- **L2 AI 抽查(5-10 个)**:选择最复杂的 3 个 + 最简单的 2 个 + 有特殊逻辑的,检查业务逻辑正确性
|
|
113
|
-
- **L3 模式性 bug 检测**:L2 发现 bug → 判断是否为系统性问题 → 系统性 bug 则回退修复引擎并重新生成所有实例
|
|
114
|
-
|
|
115
|
-
### 输出
|
|
116
|
-
任务完成度列表 + 完成率
|
|
117
|
-
|
|
118
|
-
`,
|
|
119
|
-
outputHint: '任务完成度报告',
|
|
120
|
-
optional: false
|
|
121
|
-
},
|
|
122
|
-
{
|
|
123
|
-
name: '对照设计检查',
|
|
124
|
-
prompt: `先运行自动探针,再对照 design.md 检查实现一致性。**design.md 是唯一 truth source,不符合 design.md 的实现 = Bug。**
|
|
125
|
-
|
|
126
|
-
{{include: verify-probes}}
|
|
127
|
-
|
|
128
|
-
### 探针结果处理
|
|
129
|
-
- 将六个探针的结果汇总为「探针报告」
|
|
130
|
-
- 如果探针发现问题(未实现标记、关键词缺失、测试缺失、决策未闭环、API 契约缺口、代码删除对账),在最终验证报告中明确标注
|
|
131
|
-
- 探针发现的问题不等同于验证失败,但必须在报告中列出
|
|
132
|
-
|
|
133
|
-
### 设计一致性检查
|
|
134
|
-
基于探针结果,继续检查:
|
|
135
|
-
1. 架构决策是否遵循
|
|
136
|
-
2. 文件变更清单是否一致
|
|
137
|
-
3. 数据模型是否符合
|
|
138
|
-
4. API 设计是否符合
|
|
139
|
-
5. **Reverse Sync 检查**:如果发现实现合理但 design.md 未覆盖,先更新 design.md 补充遗漏
|
|
140
|
-
6. **模块文档一致性检查**:如果在"加载规范并锚定"步骤中加载了模块文档,检查实现是否符合模块文档描述的当前设计(特别关注接口签名、数据流、依赖关系)。不一致时**当场同步模块文档**(这是 verify 的收尾义务,不是可选项);module-impact.md「更新结果」表的文档同步项也须在本阶段回填 done/skipped——CLI 在 verify --done 时硬校验该表无 pending/待办死信行,未清即阻断完成
|
|
141
|
-
7. **决策链路检查**:如果存在 decisions.md,输出 D-xxx@vN → FR-xxx → task-xx → evidence 的追踪矩阵;缺失项必须列为风险(CLI 只校验每个 D-xxx@vN ID 字面出现在 verify-result.md,warning 不阻断;矩阵的 D→FR→task→evidence 映射完整性供人类追溯,CLI 不校验——是否真覆盖由你诚实判定)
|
|
142
|
-
|
|
143
|
-
### 输出
|
|
144
|
-
探针报告 + 设计一致性检查结果 + 模块文档一致性检查结果 + 决策追踪矩阵(如有)`,
|
|
145
|
-
outputHint: '设计一致性报告',
|
|
146
|
-
optional: false
|
|
147
|
-
},
|
|
148
|
-
{
|
|
149
|
-
name: '任务蓝图验收',
|
|
150
|
-
prompt: `检查每个 task-N.md 的验收标准是否全部满足。
|
|
151
|
-
|
|
152
|
-
### 操作
|
|
153
|
-
1. 检查变更目录下 tasks/ 是否存在
|
|
154
|
-
2. 如果存在:
|
|
155
|
-
- 逐个读取 tasks/task-NN.md,对照 frontmatter 的 \`acceptance:\` 列表逐条核验(TaskCard 协议的验收标准在 frontmatter YAML,正文无 checkbox)
|
|
156
|
-
- 每条 acceptance 对照实际实现/测试结果判定满足与否,未满足的项列为不通过
|
|
157
|
-
3. 如果不存在:跳过此步骤
|
|
158
|
-
|
|
159
|
-
### 输出
|
|
160
|
-
验收结果:通过/不通过 + 未通过的项`,
|
|
161
|
-
outputHint: '验收结果',
|
|
162
|
-
optional: false
|
|
163
|
-
},
|
|
164
|
-
{
|
|
165
|
-
name: '运行测试和质量扫描',
|
|
166
|
-
prompt: `运行代码质量扫描(测试实测统一由 CLI 对账执行,本步不重复手动跑全量)。
|
|
167
|
-
|
|
168
|
-
### 操作
|
|
169
|
-
1. 读取 \`.sillyspec/local.yaml\` 获取构建、测试和 lint 命令若 local.yaml 不存在,先 \`sillyspec local detect\` 生成骨架再读取
|
|
170
|
-
2. **不要手动重复跑 commands.test**——CLI 会在最终 --done 时统一执行一次(按变更命中模块子集),本步再跑 = 与 CLI 对账重复耗时(实测 198s×2)。如为提前发现实现问题,可对变更模块做**针对性快速冒烟**(可选,非必需):
|
|
171
|
-
- Maven:\`mvn test -pl <变更模块> -am\`(仅编译变更模块及其依赖)
|
|
172
|
-
- Gradle:\`./gradlew :<模块>:test\`
|
|
173
|
-
- npm/pnpm:\`pnpm test --filter=<包名>\` 或 \`npm test -- --testPathPattern=<相关文件>\`
|
|
174
|
-
- Python:\`pytest <变更模块路径>/\`
|
|
175
|
-
3. 如果 local.yaml 有 lint 命令,运行 lint 检查
|
|
176
|
-
4. 搜索技术债务:grep TODO/FIXME/HACK/XXX(仅限变更文件)
|
|
177
|
-
|
|
178
|
-
### 注意
|
|
179
|
-
- **CLI 对账机制**:verify 阶段最终 --done 时,CLI 会亲自执行 local.yaml 的 commands.test(同步,耗时可能较长);实测失败会直接阻断 verify 完成,谎报测试结果没有意义
|
|
180
|
-
- 冒烟测试非必需:全量/模块实测结果以 CLI 对账为准,本步跑的结果仅供你提前发现问题并写入验证报告
|
|
181
|
-
|
|
182
|
-
### 输出
|
|
183
|
-
质量扫描结果 + 技术债务标记`,
|
|
184
|
-
outputHint: '质量扫描结果 + 技术债务',
|
|
185
|
-
optional: false
|
|
186
|
-
},
|
|
187
|
-
{
|
|
188
|
-
name: '输出验证报告',
|
|
189
|
-
prompt: `生成完整验证报告,并写入 verify-result.md。
|
|
190
|
-
|
|
191
|
-
### 操作
|
|
192
|
-
1. 汇总以上所有检查结果
|
|
193
|
-
2. **变更风险等级(change_risk_profile)由 CLI 自动判定与门控**:你无需自己扫描关键词。本步骤 --done 时,CLI 会用 detectChangeRisk 扫描 design.md / plan.md 自动判定等级(doc-only / unit-sufficient / contract-required / integration-critical / deployment-critical)并强制门控:integration-critical / deployment-critical 变更若结论为 PASS / PASS WITH NOTES 但缺少真实集成证据,CLI 直接阻断 verify 完成——谎报结论无效。
|
|
194
|
-
- **判级是机械字面匹配、不认否定语境**:design 里写「本次不改动 daemon/session」仍命中关键词被误判高危级。
|
|
195
|
-
- **误判时的诚实出路(豁免级)**:在 design.md 顶部 frontmatter 加一行 \`risk_level: <真实等级>\`(doc-only / unit-sufficient / contract-required / integration-critical / deployment-critical),CLI 会以声明为准覆盖关键词判级。声明后若是 unit-sufficient 等豁免级,PASS WITH NOTES 不再被强制拦;但结论为 PASS 仍需对应证据。
|
|
196
|
-
- **留痕要求(防逃逸)**:用了显式声明,必须在本报告「变更风险等级」section 写明「risk_level 由 design frontmatter 显式声明 = <等级>(覆盖关键词判级)」+ 一句话理由,让豁免可审计。
|
|
197
|
-
你只需:在 verify-result.md 的「变更风险等级」section 如实记录变更性质;若变更涉及 daemon/backend 跨进程、session/lease/lifecycle 状态机、或部署启动路径,在「Runtime Evidence」section 提供真实集成证据(启动命令、daemon↔backend 调用与日志关键片段、终态断言)。
|
|
198
|
-
- **集成证据是自报告、CLI 不独立运行时核验**:「Runtime Evidence」由你如实填写,CLI 只校验其**字面存在**(是否含关键词),**不会替你启动 daemon、打真实请求或跑迁移**——它是否名副其实取决于你是否实跑过。务必实跑后据实填写,不得凭堆关键词通过门控。(测试套件对账另算:commands.test 由 CLI 真实执行,那块谎报无效。)
|
|
199
|
-
|
|
200
|
-
3. 生成 verify-result.md 文件,保存到 \`.sillyspec/changes/<change-name>/verify-result.md\`
|
|
201
|
-
4. 给出结论:PASS / PASS WITH NOTES / FAIL(受风险门控约束)
|
|
202
|
-
5. **核对 module-impact.md**(若 changes/<change>/module-impact.md 存在):对照本次实际代码变更(git diff)与 module-impact.md 的模块影响矩阵,发现不一致(漏标受影响模块 / 影响类型错误 / 实际未触碰的模块被误标)则在 verify-result.md 标注。module-impact 由 plan 首版生成、execute 各 Wave 更新,verify 是最后一次核对机会(archive 仅终审不再生成)。这是 advisory 核对(不阻断 verify 完成),但 module-impact 与实际严重背离应记为风险。
|
|
203
|
-
|
|
204
|
-
### verify-result.md 格式
|
|
205
|
-
\`\`\`markdown
|
|
206
|
-
# 验证报告(Verify Result)
|
|
207
|
-
|
|
208
|
-
## 结论
|
|
209
|
-
PASS / PASS WITH NOTES / FAIL
|
|
210
|
-
|
|
211
|
-
## 任务完成度
|
|
212
|
-
(逐项检查任务的结果)
|
|
213
|
-
|
|
214
|
-
## 设计一致性
|
|
215
|
-
(对照 design.md 的检查结果)
|
|
216
|
-
|
|
217
|
-
## 探针结果
|
|
218
|
-
- 未实现标记扫描:...
|
|
219
|
-
- 关键词覆盖:...
|
|
220
|
-
- 测试覆盖(含断言有效性抽查):...
|
|
221
|
-
- 决策追踪覆盖:...
|
|
222
|
-
- API 契约对账:...
|
|
223
|
-
- 代码删除对账:声明修改/新增却被整文件删除 = 高风险;清单未列出的删除 = 未声明(CLI 会用 git diff --name-status HEAD advisory 复核,仅 warn 不阻断——是否 FAIL blocker 由你诚实判定)
|
|
224
|
-
|
|
225
|
-
## 决策追踪矩阵(如存在 decisions.md)
|
|
226
|
-
| 决策 ID | FR | Task | Evidence | 状态 |
|
|
227
|
-
|---|---|---|---|---|
|
|
228
|
-
| D-001@v1 | FR-01 | task-01 | test/file/path | PASS/PARTIAL/MISSING |
|
|
229
|
-
|
|
230
|
-
## 测试结果
|
|
231
|
-
(测试套件执行结果)
|
|
232
|
-
|
|
233
|
-
## 技术债务
|
|
234
|
-
(TODO/FIXME/HACK 统计)
|
|
235
|
-
|
|
236
|
-
## 变更风险等级
|
|
237
|
-
(自动检测的 change_risk_profile: doc-only / unit-sufficient / contract-required / integration-critical / deployment-critical;若 design.md frontmatter 有 risk_level 显式声明,以声明为准并在此注明「显式声明 = <等级>」+ 理由)
|
|
238
|
-
|
|
239
|
-
## Runtime Evidence(integration-critical / deployment-critical 必填;自报告,CLI 仅校验字面存在、不独立核验,须真实执行过)
|
|
240
|
-
按本次变更实际触碰的运行时组件填写(模板是通用形态——长驻进程 / 服务端点 / 生命周期状态机的证据结构;未涉及的行写「不涉及」并注明原因,勿堆砌无关关键词):
|
|
241
|
-
- 长驻进程/服务 启动命令:
|
|
242
|
-
- 服务地址(本变更触碰的端点):
|
|
243
|
-
- 触发核心路径的请求/命令(附关键响应):
|
|
244
|
-
- 进程日志关键片段(证明走了新路径、无降级/回退分支):
|
|
245
|
-
- 生命周期终态断言(本变更涉及的状态机:初始态 → 运行态 → 终态,逐个确认到达):
|
|
246
|
-
- 失败模式排除(针对本变更声明的风险,逐条说明为何未触发):
|
|
247
|
-
|
|
248
|
-
## 代码审查
|
|
249
|
-
(问题列表 + 总体评价)
|
|
250
|
-
\`\`\`
|
|
251
|
-
|
|
252
|
-
### 输出
|
|
253
|
-
verify-result.md 路径 + 验证报告摘要 + 下一步命令
|
|
254
|
-
|
|
255
|
-
### 注意
|
|
256
|
-
- PASS → 运行 \`sillyspec run archive\` 归档
|
|
257
|
-
- FAIL → 修复后运行 \`sillyspec run verify\` 重新验证
|
|
258
|
-
- verify-result.md 是变更包的正式验收记录,归档后保留
|
|
259
|
-
- **CLI 对账机制**:本步骤 --done 时 CLI 会亲自执行 local.yaml 的 commands.test;结论写 PASS 但实测失败 → verify 完成被阻断`,
|
|
260
|
-
outputHint: '验证报告',
|
|
261
|
-
optional: false
|
|
262
|
-
}
|
|
263
|
-
]
|
|
264
|
-
}
|
|
1
|
+
export const definition = {
|
|
2
|
+
name: 'verify',
|
|
3
|
+
title: '验证确认',
|
|
4
|
+
description: '对照规范检查 + 测试套件',
|
|
5
|
+
|
|
6
|
+
// ⛔ 全局护栏:verify 阶段禁止一切破坏性操作
|
|
7
|
+
// 子代理只能「读」和「写报告」,不能「改代码」或「改 git 状态」。
|
|
8
|
+
_globalGuardrails: `
|
|
9
|
+
## ⛔ verify 阶段绝对禁止的操作
|
|
10
|
+
|
|
11
|
+
以下操作在 verify 阶段**绝对禁止**,无论出于任何原因(包括「恢复文件」「修复问题」「清理目录」):
|
|
12
|
+
|
|
13
|
+
### 禁止的 Git 操作
|
|
14
|
+
- git checkout(覆盖文件)
|
|
15
|
+
- git restore(覆盖文件)
|
|
16
|
+
- git reset(回滚提交)
|
|
17
|
+
- git revert(撤销提交)
|
|
18
|
+
- git clean(删除未跟踪文件)
|
|
19
|
+
- git stash drop(删除 stash)
|
|
20
|
+
- git branch -D(强制删除分支)
|
|
21
|
+
|
|
22
|
+
### 禁止的文件操作
|
|
23
|
+
- 删除任何源码文件(rm、trash)
|
|
24
|
+
- 覆盖任何源码文件(cp 覆盖、echo > 覆盖)
|
|
25
|
+
- 修改任何源码文件(除了 .sillyspec/ 下的报告文件)
|
|
26
|
+
|
|
27
|
+
### 只允许的操作
|
|
28
|
+
- git status / git diff / git show / git log / git stash list(只读)
|
|
29
|
+
- cat / head / grep / find / wc(只读检查)
|
|
30
|
+
- 写入 .sillyspec/changes/ 下的报告文件(verify-result.md)
|
|
31
|
+
- 运行测试命令(不修改源码)
|
|
32
|
+
- 运行 lint 命令(不自动修复)
|
|
33
|
+
|
|
34
|
+
### 长测试/构建执行铁律
|
|
35
|
+
- 长测试/构建/lint 命令必须**前台同步执行**,禁止 run_in_background:true / & / nohup / disown——后台任务易被会话生命周期回收导致中断无果
|
|
36
|
+
|
|
37
|
+
如果发现文件缺失或异常,**只报告问题,不尝试修复**。
|
|
38
|
+
`,
|
|
39
|
+
|
|
40
|
+
steps: [
|
|
41
|
+
{
|
|
42
|
+
name: '进度确认',
|
|
43
|
+
migratedFrom: ['状态检查'],
|
|
44
|
+
prompt: `> 💡 先说清楚:\`sillyspec run verify\`(不带 --done)**只下发执行指令,不会替你跑测试/构建**——真正的测试由 CLI 在最后 --done 时统一执行(local.yaml 的 commands.test,同步对账可能耗时较长);「运行测试和质量扫描」那步**不需要你重复手动跑全量**(避免与 CLI 对账重复耗时),只做 lint/静态检查 + 可选快速冒烟。别以为敲了 run verify 就自动验证了。
|
|
45
|
+
|
|
46
|
+
检查当前进度,确认可以执行 verify。
|
|
47
|
+
|
|
48
|
+
> ⚠️ 本步用 \`sillyspec progress show\` 查**流程进度**(推进工作流用),不要用 \`sillyspec status\`(那是**项目级快照**,只读、不推进流程,是另一条命令)。
|
|
49
|
+
|
|
50
|
+
### 操作
|
|
51
|
+
1. 运行 \`sillyspec progress show\`
|
|
52
|
+
2. 确认 currentStage 为 "verify"
|
|
53
|
+
|
|
54
|
+
### 输出
|
|
55
|
+
当前进度摘要`,
|
|
56
|
+
outputHint: '进度摘要',
|
|
57
|
+
optional: false
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
name: '加载规范并锚定',
|
|
61
|
+
prompt: `加载规范文件并确认。
|
|
62
|
+
|
|
63
|
+
### 操作
|
|
64
|
+
1. 读取 proposal.md、design.md、tasks.md、requirements.md、plan.md
|
|
65
|
+
2. 如果存在 decisions.md,必须读取并提取所有当前版本 D-xxx@vN 决策 ID
|
|
66
|
+
- 如果存在 P0/P1 unresolved/blocking 决策,验证结论不能为 PASS
|
|
67
|
+
- 如果发现 superseded 决策被下游引用,标记为 ⚠️ stale decision reference
|
|
68
|
+
3. 加载项目信息:\`cat .sillyspec/projects/*.yaml 2>/dev/null\`
|
|
69
|
+
4. 加载本地配置:\`cat .sillyspec/local.yaml 2>/dev/null\`(构建命令、测试命令、lint 命令等)若 local.yaml 不存在,先 \`sillyspec local detect\` 生成骨架再读取
|
|
70
|
+
5. 加载代码规范:\`cat .sillyspec/docs/<project>/scan/CONVENTIONS.md 2>/dev/null\`
|
|
71
|
+
- 测试现状:\`cat .sillyspec/docs/<project>/scan/TESTING.md 2>/dev/null\`(了解既有测试约定与覆盖范围,验收时对照)
|
|
72
|
+
- 技术债清单:\`cat .sillyspec/docs/<project>/scan/CONCERNS.md 2>/dev/null\`(🔴/🟡 区域;本次变更若触碰须在 verify-result.md 标注)
|
|
73
|
+
6. 标注每个文件的存在/不存在状态
|
|
74
|
+
|
|
75
|
+
### Execute Evidence 传递检查
|
|
76
|
+
7. 检查 verify-required-evidence.json 是否存在(由 execute 阶段 Task Review Gate 写入)
|
|
77
|
+
- 路径:变更目录下的 verify-required-evidence.json
|
|
78
|
+
- 文件 schema:\`{ items: [{ task, verdict, evidence: string[] }] }\`——顶层是 \`items\`,每项的 \`evidence\` 是字符串数组(不是 \`requiredEvidence\` 键)
|
|
79
|
+
- 如果存在 → 逐项读取 \`items\`,对每个 cannot_verify 任务逐条核对其 \`evidence\` 数组是否已满足
|
|
80
|
+
- 每条 evidence 必须在 verify-result.md 中给出明确结论(satisfied / missing / partial)
|
|
81
|
+
- 如果有任何 evidence 为 missing → verify 结论不能为 PASS
|
|
82
|
+
- 如果文件不存在 → 表示 execute 阶段无 cannot_verify 任务,正常继续
|
|
83
|
+
- CLI 会 advisory 复核每个 cannot_verify 任务是否在 verify-result.md 体现(未体现仅 warn 不阻断归档;evidence 是否真满足由你诚实判定,CLI 不替你语义判定)
|
|
84
|
+
|
|
85
|
+
### 模块文档加载
|
|
86
|
+
8. 读取 \`.sillyspec/docs/<project>/modules/_module-map.yaml\`(不存在则跳过以下步骤)
|
|
87
|
+
9. 根据 design.md 的文件变更清单匹配 _module-map.yaml 中的模块
|
|
88
|
+
10. 读取匹配到的 \`.sillyspec/docs/<project>/modules/<module>.md\`
|
|
89
|
+
11. **检查模块索引可信度**:如果相关模块的 needs_review 为 true,提示"该模块索引可能不可信,需要回看模块卡片或源码"
|
|
90
|
+
|
|
91
|
+
### worktree 基线锚点(CLI 注入)
|
|
92
|
+
{WORKTREE_BASELINE_INFO}
|
|
93
|
+
|
|
94
|
+
### 输出
|
|
95
|
+
文件加载确认清单(含 decisions.md 当前版本/未决项状态、模块文档 + 索引可信度、worktree 基线锚点)`,
|
|
96
|
+
outputHint: '文件确认清单',
|
|
97
|
+
optional: false
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
name: '逐项检查任务',
|
|
101
|
+
prompt: `对照 tasks.md(任务注册表唯一真相)检查每个任务完成状态。勾选由 execute 双路写入(agent 按 review gate 手动勾 + CLI autoCheckPlanFromReviews 机器勾选器按 review.json 自动勾),本阶段只读对照、不改勾。
|
|
102
|
+
|
|
103
|
+
### 操作
|
|
104
|
+
对每个 checkbox:
|
|
105
|
+
1. 检查相关文件是否存在
|
|
106
|
+
2. 检查代码是否实现了描述的功能
|
|
107
|
+
3. 标记:✅ 已完成 / ❌ 未完成 / ⚠️ 部分完成
|
|
108
|
+
|
|
109
|
+
### 批量模式验证指引
|
|
110
|
+
如果 tasks.md 中有批量特征(引擎/模板/配置/批量生成),采用分层验证:
|
|
111
|
+
- **L1 自动化(100%)**:运行验证脚本(如有),检查所有实例的文件存在、格式正确、Schema 校验通过
|
|
112
|
+
- **L2 AI 抽查(5-10 个)**:选择最复杂的 3 个 + 最简单的 2 个 + 有特殊逻辑的,检查业务逻辑正确性
|
|
113
|
+
- **L3 模式性 bug 检测**:L2 发现 bug → 判断是否为系统性问题 → 系统性 bug 则回退修复引擎并重新生成所有实例
|
|
114
|
+
|
|
115
|
+
### 输出
|
|
116
|
+
任务完成度列表 + 完成率
|
|
117
|
+
|
|
118
|
+
`,
|
|
119
|
+
outputHint: '任务完成度报告',
|
|
120
|
+
optional: false
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
name: '对照设计检查',
|
|
124
|
+
prompt: `先运行自动探针,再对照 design.md 检查实现一致性。**design.md 是唯一 truth source,不符合 design.md 的实现 = Bug。**
|
|
125
|
+
|
|
126
|
+
{{include: verify-probes}}
|
|
127
|
+
|
|
128
|
+
### 探针结果处理
|
|
129
|
+
- 将六个探针的结果汇总为「探针报告」
|
|
130
|
+
- 如果探针发现问题(未实现标记、关键词缺失、测试缺失、决策未闭环、API 契约缺口、代码删除对账),在最终验证报告中明确标注
|
|
131
|
+
- 探针发现的问题不等同于验证失败,但必须在报告中列出
|
|
132
|
+
|
|
133
|
+
### 设计一致性检查
|
|
134
|
+
基于探针结果,继续检查:
|
|
135
|
+
1. 架构决策是否遵循
|
|
136
|
+
2. 文件变更清单是否一致
|
|
137
|
+
3. 数据模型是否符合
|
|
138
|
+
4. API 设计是否符合
|
|
139
|
+
5. **Reverse Sync 检查**:如果发现实现合理但 design.md 未覆盖,先更新 design.md 补充遗漏
|
|
140
|
+
6. **模块文档一致性检查**:如果在"加载规范并锚定"步骤中加载了模块文档,检查实现是否符合模块文档描述的当前设计(特别关注接口签名、数据流、依赖关系)。不一致时**当场同步模块文档**(这是 verify 的收尾义务,不是可选项);module-impact.md「更新结果」表的文档同步项也须在本阶段回填 done/skipped——CLI 在 verify --done 时硬校验该表无 pending/待办死信行,未清即阻断完成
|
|
141
|
+
7. **决策链路检查**:如果存在 decisions.md,输出 D-xxx@vN → FR-xxx → task-xx → evidence 的追踪矩阵;缺失项必须列为风险(CLI 只校验每个 D-xxx@vN ID 字面出现在 verify-result.md,warning 不阻断;矩阵的 D→FR→task→evidence 映射完整性供人类追溯,CLI 不校验——是否真覆盖由你诚实判定)
|
|
142
|
+
|
|
143
|
+
### 输出
|
|
144
|
+
探针报告 + 设计一致性检查结果 + 模块文档一致性检查结果 + 决策追踪矩阵(如有)`,
|
|
145
|
+
outputHint: '设计一致性报告',
|
|
146
|
+
optional: false
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
name: '任务蓝图验收',
|
|
150
|
+
prompt: `检查每个 task-N.md 的验收标准是否全部满足。
|
|
151
|
+
|
|
152
|
+
### 操作
|
|
153
|
+
1. 检查变更目录下 tasks/ 是否存在
|
|
154
|
+
2. 如果存在:
|
|
155
|
+
- 逐个读取 tasks/task-NN.md,对照 frontmatter 的 \`acceptance:\` 列表逐条核验(TaskCard 协议的验收标准在 frontmatter YAML,正文无 checkbox)
|
|
156
|
+
- 每条 acceptance 对照实际实现/测试结果判定满足与否,未满足的项列为不通过
|
|
157
|
+
3. 如果不存在:跳过此步骤
|
|
158
|
+
|
|
159
|
+
### 输出
|
|
160
|
+
验收结果:通过/不通过 + 未通过的项`,
|
|
161
|
+
outputHint: '验收结果',
|
|
162
|
+
optional: false
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
name: '运行测试和质量扫描',
|
|
166
|
+
prompt: `运行代码质量扫描(测试实测统一由 CLI 对账执行,本步不重复手动跑全量)。
|
|
167
|
+
|
|
168
|
+
### 操作
|
|
169
|
+
1. 读取 \`.sillyspec/local.yaml\` 获取构建、测试和 lint 命令若 local.yaml 不存在,先 \`sillyspec local detect\` 生成骨架再读取
|
|
170
|
+
2. **不要手动重复跑 commands.test**——CLI 会在最终 --done 时统一执行一次(按变更命中模块子集),本步再跑 = 与 CLI 对账重复耗时(实测 198s×2)。如为提前发现实现问题,可对变更模块做**针对性快速冒烟**(可选,非必需):
|
|
171
|
+
- Maven:\`mvn test -pl <变更模块> -am\`(仅编译变更模块及其依赖)
|
|
172
|
+
- Gradle:\`./gradlew :<模块>:test\`
|
|
173
|
+
- npm/pnpm:\`pnpm test --filter=<包名>\` 或 \`npm test -- --testPathPattern=<相关文件>\`
|
|
174
|
+
- Python:\`pytest <变更模块路径>/\`
|
|
175
|
+
3. 如果 local.yaml 有 lint 命令,运行 lint 检查
|
|
176
|
+
4. 搜索技术债务:grep TODO/FIXME/HACK/XXX(仅限变更文件)
|
|
177
|
+
|
|
178
|
+
### 注意
|
|
179
|
+
- **CLI 对账机制**:verify 阶段最终 --done 时,CLI 会亲自执行 local.yaml 的 commands.test(同步,耗时可能较长);实测失败会直接阻断 verify 完成,谎报测试结果没有意义
|
|
180
|
+
- 冒烟测试非必需:全量/模块实测结果以 CLI 对账为准,本步跑的结果仅供你提前发现问题并写入验证报告
|
|
181
|
+
|
|
182
|
+
### 输出
|
|
183
|
+
质量扫描结果 + 技术债务标记`,
|
|
184
|
+
outputHint: '质量扫描结果 + 技术债务',
|
|
185
|
+
optional: false
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
name: '输出验证报告',
|
|
189
|
+
prompt: `生成完整验证报告,并写入 verify-result.md。
|
|
190
|
+
|
|
191
|
+
### 操作
|
|
192
|
+
1. 汇总以上所有检查结果
|
|
193
|
+
2. **变更风险等级(change_risk_profile)由 CLI 自动判定与门控**:你无需自己扫描关键词。本步骤 --done 时,CLI 会用 detectChangeRisk 扫描 design.md / plan.md 自动判定等级(doc-only / unit-sufficient / contract-required / integration-critical / deployment-critical)并强制门控:integration-critical / deployment-critical 变更若结论为 PASS / PASS WITH NOTES 但缺少真实集成证据,CLI 直接阻断 verify 完成——谎报结论无效。
|
|
194
|
+
- **判级是机械字面匹配、不认否定语境**:design 里写「本次不改动 daemon/session」仍命中关键词被误判高危级。
|
|
195
|
+
- **误判时的诚实出路(豁免级)**:在 design.md 顶部 frontmatter 加一行 \`risk_level: <真实等级>\`(doc-only / unit-sufficient / contract-required / integration-critical / deployment-critical),CLI 会以声明为准覆盖关键词判级。声明后若是 unit-sufficient 等豁免级,PASS WITH NOTES 不再被强制拦;但结论为 PASS 仍需对应证据。
|
|
196
|
+
- **留痕要求(防逃逸)**:用了显式声明,必须在本报告「变更风险等级」section 写明「risk_level 由 design frontmatter 显式声明 = <等级>(覆盖关键词判级)」+ 一句话理由,让豁免可审计。
|
|
197
|
+
你只需:在 verify-result.md 的「变更风险等级」section 如实记录变更性质;若变更涉及 daemon/backend 跨进程、session/lease/lifecycle 状态机、或部署启动路径,在「Runtime Evidence」section 提供真实集成证据(启动命令、daemon↔backend 调用与日志关键片段、终态断言)。
|
|
198
|
+
- **集成证据是自报告、CLI 不独立运行时核验**:「Runtime Evidence」由你如实填写,CLI 只校验其**字面存在**(是否含关键词),**不会替你启动 daemon、打真实请求或跑迁移**——它是否名副其实取决于你是否实跑过。务必实跑后据实填写,不得凭堆关键词通过门控。(测试套件对账另算:commands.test 由 CLI 真实执行,那块谎报无效。)
|
|
199
|
+
|
|
200
|
+
3. 生成 verify-result.md 文件,保存到 \`.sillyspec/changes/<change-name>/verify-result.md\`
|
|
201
|
+
4. 给出结论:PASS / PASS WITH NOTES / FAIL(受风险门控约束)
|
|
202
|
+
5. **核对 module-impact.md**(若 changes/<change>/module-impact.md 存在):对照本次实际代码变更(git diff)与 module-impact.md 的模块影响矩阵,发现不一致(漏标受影响模块 / 影响类型错误 / 实际未触碰的模块被误标)则在 verify-result.md 标注。module-impact 由 plan 首版生成、execute 各 Wave 更新,verify 是最后一次核对机会(archive 仅终审不再生成)。这是 advisory 核对(不阻断 verify 完成),但 module-impact 与实际严重背离应记为风险。
|
|
203
|
+
|
|
204
|
+
### verify-result.md 格式
|
|
205
|
+
\`\`\`markdown
|
|
206
|
+
# 验证报告(Verify Result)
|
|
207
|
+
|
|
208
|
+
## 结论
|
|
209
|
+
PASS / PASS WITH NOTES / FAIL
|
|
210
|
+
|
|
211
|
+
## 任务完成度
|
|
212
|
+
(逐项检查任务的结果)
|
|
213
|
+
|
|
214
|
+
## 设计一致性
|
|
215
|
+
(对照 design.md 的检查结果)
|
|
216
|
+
|
|
217
|
+
## 探针结果
|
|
218
|
+
- 未实现标记扫描:...
|
|
219
|
+
- 关键词覆盖:...
|
|
220
|
+
- 测试覆盖(含断言有效性抽查):...
|
|
221
|
+
- 决策追踪覆盖:...
|
|
222
|
+
- API 契约对账:...
|
|
223
|
+
- 代码删除对账:声明修改/新增却被整文件删除 = 高风险;清单未列出的删除 = 未声明(CLI 会用 git diff --name-status HEAD advisory 复核,仅 warn 不阻断——是否 FAIL blocker 由你诚实判定)
|
|
224
|
+
|
|
225
|
+
## 决策追踪矩阵(如存在 decisions.md)
|
|
226
|
+
| 决策 ID | FR | Task | Evidence | 状态 |
|
|
227
|
+
|---|---|---|---|---|
|
|
228
|
+
| D-001@v1 | FR-01 | task-01 | test/file/path | PASS/PARTIAL/MISSING |
|
|
229
|
+
|
|
230
|
+
## 测试结果
|
|
231
|
+
(测试套件执行结果)
|
|
232
|
+
|
|
233
|
+
## 技术债务
|
|
234
|
+
(TODO/FIXME/HACK 统计)
|
|
235
|
+
|
|
236
|
+
## 变更风险等级
|
|
237
|
+
(自动检测的 change_risk_profile: doc-only / unit-sufficient / contract-required / integration-critical / deployment-critical;若 design.md frontmatter 有 risk_level 显式声明,以声明为准并在此注明「显式声明 = <等级>」+ 理由)
|
|
238
|
+
|
|
239
|
+
## Runtime Evidence(integration-critical / deployment-critical 必填;自报告,CLI 仅校验字面存在、不独立核验,须真实执行过)
|
|
240
|
+
按本次变更实际触碰的运行时组件填写(模板是通用形态——长驻进程 / 服务端点 / 生命周期状态机的证据结构;未涉及的行写「不涉及」并注明原因,勿堆砌无关关键词):
|
|
241
|
+
- 长驻进程/服务 启动命令:
|
|
242
|
+
- 服务地址(本变更触碰的端点):
|
|
243
|
+
- 触发核心路径的请求/命令(附关键响应):
|
|
244
|
+
- 进程日志关键片段(证明走了新路径、无降级/回退分支):
|
|
245
|
+
- 生命周期终态断言(本变更涉及的状态机:初始态 → 运行态 → 终态,逐个确认到达):
|
|
246
|
+
- 失败模式排除(针对本变更声明的风险,逐条说明为何未触发):
|
|
247
|
+
|
|
248
|
+
## 代码审查
|
|
249
|
+
(问题列表 + 总体评价)
|
|
250
|
+
\`\`\`
|
|
251
|
+
|
|
252
|
+
### 输出
|
|
253
|
+
verify-result.md 路径 + 验证报告摘要 + 下一步命令
|
|
254
|
+
|
|
255
|
+
### 注意
|
|
256
|
+
- PASS → 运行 \`sillyspec run archive\` 归档
|
|
257
|
+
- FAIL → 修复后运行 \`sillyspec run verify\` 重新验证
|
|
258
|
+
- verify-result.md 是变更包的正式验收记录,归档后保留
|
|
259
|
+
- **CLI 对账机制**:本步骤 --done 时 CLI 会亲自执行 local.yaml 的 commands.test;结论写 PASS 但实测失败 → verify 完成被阻断`,
|
|
260
|
+
outputHint: '验证报告',
|
|
261
|
+
optional: false
|
|
262
|
+
}
|
|
263
|
+
]
|
|
264
|
+
}
|