9.1 可验证:让完成标准落到证据¶
Agent 最危险的输出不是错误代码,而是“看起来已经完成”的错误代码。可验证系统的核心是:任何完成声明都必须有证据。
验证不是最后一步¶
验证应该从任务定义阶段开始。
flowchart LR
A[需求] --> B[验收标准]
B --> C[实现计划]
C --> D[测试与检查]
D --> E[Diff Review]
E --> F[交付证据]
如果验收标准在最后才补,Agent 很容易按自己的理解完成任务。
证据分四类¶
1. 自动化证据¶
包括:
- 单元测试。
- 集成测试。
- E2E。
- lint。
- typecheck。
- build。
- smoke test。
要求 Agent 输出具体命令和结果,而不是只说“测试通过”。
推荐格式:
Verification:
- `npm test`: passed
- `npm run typecheck`: passed
- `npm run build`: failed, reason: existing unrelated error in <file>
- Manual UI check: not run, reason: no browser environment
2. 结构证据¶
包括:
git diff --stat。- 变更文件列表。
- 关键函数或模块说明。
- 新增/删除依赖。
- 数据库迁移或配置变更。
结构证据回答“到底改了哪里”。
3. 行为证据¶
包括:
- bug 复现步骤。
- 修复后同样步骤的结果。
- API 请求/响应样例。
- UI 操作路径。
- 日志变化。
- 性能或资源变化。
行为证据回答“用户看到的行为是否改变正确”。
4. 人工审查证据¶
包括:
- diff review 结论。
- 风险点确认。
- 产品验收。
- 安全审查。
- 视觉或交互检查。
人工审查不是“相信 AI”,而是“根据证据做最终判断”。
验收标准怎么写¶
坏标准:
优化登录体验。
好标准:
- 未登录访问 `/settings` 时跳转登录页。
- 登录成功后回到原始目标页。
- token 过期时清理本地状态并展示提示。
- 新增或更新覆盖上述路径的测试。
- 不修改现有 OAuth 回调路径。
好标准具备三个特征:
- 可观察。
- 可测试。
- 有边界。
让 Agent 自己补验证计划¶
每次实现前可以要求:
在写代码前,请先给出验证计划:
1. 哪些路径需要测试。
2. 哪些现有测试应该运行。
3. 是否需要新增测试。
4. 哪些检查可能耗时或需要外部服务。
5. 如果不能运行某项检查,应该如何替代验证。
如果 Agent 给不出验证计划,说明它还没理解任务。
Review 的最低标准¶
人工 review 至少看:
- 是否满足验收标准。
- diff 是否只包含相关改动。
- 是否存在无关格式化。
- 是否绕过错误而不是修复错误。
- 是否引入新依赖。
- 是否破坏兼容性。
- 是否补了必要测试。
- 是否更新文档或配置说明。
高风险任务的额外验证¶
这些任务要提高验证等级:
- 认证与权限。
- 支付、账单、订单。
- 数据库迁移。
- 批量更新和删除。
- 加密、密钥、凭证。
- 发布、部署、回滚。
- 对外 API。
额外要求:
- 设计阶段列风险。
- 实现阶段保持小步提交。
- review 阶段使用只读 reviewer。
- 验证阶段保留命令和输出摘要。
- 发布前写回滚方案。
可验证系统的完成定义¶
一个任务真正完成,需要同时满足:
- 代码实现完成。
- 验收标准逐条满足。
- 自动检查有结果。
- diff 已审。
- 风险已说明。
- 未完成项已列出。
- 复盘项已进入 docs、AGENTS 或 skills。
少任何一项,都只能叫“实现暂告一段落”,不能叫完成。