verification-before-completion

在声明任务完成、修复成功或测试通过前,必须先跑一遍验证命令并确认输出;提交、开 PR 前同样适用。证据先于结论,永远如此。

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

这条规则覆盖:

  • 原话
  • 同义改写
  • 暗示成功的措辞
  • 任何让人觉得"完成了 / 没问题"的表达

底线

验证没有捷径。

跑命令。读输出。然后才允许下结论。

不可商量。