verification-before-completion
在声明任务完成、修复成功或测试通过前,必须先跑一遍验证命令并确认输出;提交、开 PR 前同样适用。证据先于结论,永远如此。
SKILL.mdplugins/xxih-kit/skills/verification-before-completion/SKILL.md
GitHub完成前的验证
概述
不验证就声称工作已完成,是不诚实,不是高效。
核心原则:先有证据,再下结论。
违反字面就等于违反精神。 换个说法绕过这条规则也算违反。
铁律
没有刚跑出来的验证证据,就不能宣布完成
如果你在这条消息里没跑过验证命令,你就没资格说它通过了。
闸门函数
在做出任何状态声明或表达满意之前:
1. 锁定:什么命令能证明这个声明?
2. 跑一遍:完整地、新鲜地执行这个命令
3. 读输出:完整看一遍,看 exit code,数失败数
4. 核验:输出是否支持你想说的话?
- 不支持:照实陈述当前状态,附证据
- 支持:再下结论,附证据
5. 然后才允许做声明
漏掉任何一步 = 在撒谎,不是在验证
常见翻车
| 想说的结论 | 必须有 | 不够的 |
|---|---|---|
| 测试通过 | 测试命令输出:0 失败 | 上一次跑的结果、"应该会过" |
| Lint 干净 | Lint 输出:0 错 | 部分文件检查、外推 |
| Build 成功 | Build 命令:exit 0 | Lint 过了、日志看着没事 |
| Bug 修好 | 重跑原始症状的测试:通过 | 改了代码、自以为修好 |
| 回归测试可用 | 红→绿循环已验证 | 测试跑过一次就算 |
| Agent 完成 | VCS diff 显示有改动 | Agent 自己说 "success" |
| 满足需求 | 逐条对照 checklist | 测试通过 |
红灯——立刻停
- 用了"应该"、"大概"、"看起来"、"差不多"
- 在验证之前先表达满意("很好!"、"完美!"、"搞定!")
- 准备 commit / push / 开 PR,但还没验证
- 信任 agent 自己报告的成功
- 只做了部分验证就下结论
- 想"就这一次破例"
- 累了,想赶紧收工
- 任何在没跑验证的情况下暗示成功的措辞
防合理化
| 借口 | 真相 |
|---|---|
| "现在应该 work 了" | 那就跑验证 |
| "我有把握" | 把握 ≠ 证据 |
| "就这一次" | 没有例外 |
| "Lint 过了" | Lint ≠ 编译器 |
| "Agent 说 success" | 自己再核一遍 |
| "我累了" | 累不是借口 |
| "部分验证够了" | 部分什么都不能证明 |
| "换个说法这条规则就不适用" | 看精神,不抠字面 |
关键模式
测试:
✅ [跑测试] [看到:34/34 通过] "全部测试通过"
❌ "现在应该会过" / "看起来对的"
回归测试(TDD 红绿循环):
✅ 写 → 跑(过) → 撤销修复 → 跑(必须失败) → 还原 → 跑(过)
❌ "我已经写了回归测试"(没走过红绿循环)
Build:
✅ [跑 build] [看到:exit 0] "Build 通过"
❌ "Lint 过了"(Lint 不检查编译)
需求对照:
✅ 重新读计划 → 列 checklist → 逐条核对 → 报告差距或完成
❌ "测试过了,阶段完成"
Agent 委托:
✅ Agent 报告成功 → 看 VCS diff → 核对实际改动 → 报告真实状态
❌ 直接信 agent 的报告
为什么必须这样
来自 24 个失败案例:
- 用户说"我不信你了"——信任崩了
- 引用未定义函数被发布——线上崩
- 漏需求被发布——功能不完整
- 时间浪费在虚假完成 → 被打回 → 返工
- 违背:"诚实是核心价值。撒谎就被换掉。"
何时适用
任何以下动作之前都要先过这道闸:
- 任何形式的成功 / 完成声明
- 任何对工作状态的满意表达
- 任何对工作状态的肯定陈述
- commit / 开 PR / 标记任务完成
- 切换到下一个任务
- 把工作委托给 agent
这条规则覆盖:
- 原话
- 同义改写
- 暗示成功的措辞
- 任何让人觉得"完成了 / 没问题"的表达
底线
验证没有捷径。
跑命令。读输出。然后才允许下结论。
不可商量。