Skip to content

当天目标:用"验收闭环"让 Codex 自己证明任务完成,而不是你盲信它说的"好了"。

为什么"放手"不等于"不管"

Day 2 你学会了收权限,Day 3 学会了教约定。但还有最后一个坎:你让它干完一件事,它说"做完了",你信不信?

答案是:别信它说,让它证。这就是验收闭环——你下任务时就把"怎样算完成"写清楚,它做完必须对照那条标准自证。OpenAI 团队内部流传一句话:"有雄心没有验证,不过是个愿望。"

一个你现在就能复现的实验(就知道为什么需要验收)

这一条别读,直接跑:给 Codex 下这个任务,然后别看它说"完成",直接去看测试文件

utils/ 加个 slugify 函数 + 测试,Done when:npm test 全绿、测试里有对 slugify 的 assert。

它大概率能跑通。但请故意做一件事:把 Done when 里的"有 assert"去掉,只说"加个测试",再看它写出来的测试——常会是 print(slugify("你好 World")) 而没有 assert,或者 slugify 对中文直接返回空串。它在"完成"的定义里,把"文件存在"当成了"功能正确"。

验收闭环要做的,是逼它证明"测试真跑了、真绿了",而不是"我写了测试"。

提示四要素:Goal / Context / Constraints / Done when

下任务时,把下面四块写全:

  • Goal:要达成什么。
  • Context:背景、相关文件、已知约束。
  • Constraints:红线(别动哪些、必须过什么)。
  • Done when:怎样算真完成——必须可验证。比如"测试全绿且 npm run build 通过",而不是"功能实现"。

可复制的验收提示词骨架:

markdown
Goal:给 utils/ 加 slugify 函数,处理中英文。
Context:TS 项目,strict 模式,现有测试用 vitest。
Constraints:不引入新依赖;不动其他文件。
Done when:
- `npm test` 全绿,且测试里包含对 slugify 的 assert(不是 print);
- 中文输入 "你好 World" 返回 "ni-hao-world";
- `npm run build` 通过。

模糊的 Done when("做好就行")等于没验收——它说自己好,不等于真做好了。

长任务怎么不失控:compact / 新 Thread / worktree 三选一

上下文会满,满了对齐就崩。三个手段按场景选:

  • /compact:一段对话跑太久、开始胡说前,把已完成部分压成摘要腾空间——同一任务继续时用。
  • 开新 Thread:任务之间毫无关联(比如一个在改前端、一个在写后端文档),别塞同一条线,新开一条避免上下文互相污染。判断标准:上一条任务的背景,下一条用不上,就开新的。
  • git worktree:一个大任务要拆多路并行(比如"重构三个模块"),每条开独立 worktree + 分支,各管各的,主线程只收结果,避免互相踩。

判断口诀:同一任务接着干用 compact,不相干任务开新 Thread,要并行才用 worktree。

把多 Thread 当产能,不只是防污染:① 每条线挂一个独立、可验收的目标,你从执行者变成调度者,轮流验收;② 只要动同一批文件,就必须配 worktree,否则两条线会互相踩。

验收闭环实操 + 代码评审

回到 Day 1 那个小任务,今天升级:下任务时写全四要素,特别是 Done when。它做完,你实际看它执行的命令和测试结果,对照 Done when 逐条勾。勾满了才算过,勾不满打回去重做。

进阶:让 Codex 自己审自己。用 /review 命令(或让它在计划阶段产出 PLANS.md、在改动后产出 code_review.md),把"它认为完成了"和"它自己复检的结论"都留痕,你再对照 Done when 收口。

它跑完改动后产出的 code_review.md 大致长这样(节选):

## 改动概述
在 utils/ 新增 slugify,处理中英文;新增 slugify.test.ts。

## 自检验证
- [x] npm test 全绿
- [x] "你好 World" → "ni-hao-world"
- [x] npm run build 通过

## 风险点
- slugify 暂未处理 emoji,极端输入可能返回空串(已记入 Memories 待跟进)

拿这份对照 Done when 逐条勾,比听它说"完成"靠谱。空着的勾就是打回去的理由。

验收闭环

三个锦囊

  1. 每个任务都写 Done when,且必须可验证。"功能实现"不是验收标准,"测试绿 + build 过 + 含 assert"才是。
  2. 长任务中途 /compact,别等上下文爆了才救;大任务拆 worktree 并行。
  3. 它说"完成"先别信,看实际命令和测试结果,对照 Done when 逐条勾;用 /review 让它自己复检。

自测标尺(用动作验证)

  • [ ] 你给任意一个任务写出了可验证的 Done when(含具体 assert / 命令),不是"做好就行"。
  • [ ] 你实操过一次"对照 Done when 验收并打回",而不是只看它说"完成"。
  • [ ] 你知道 /compact 干嘛用;跑过长任务中途 compact 过。
  • [ ] 你用过 /review(或产出 code_review.md)让它自己复检。

效率日志

任务手动做要几分钟Codex 做+你验收几分钟打回几次
带四要素的任务 + 验收打回_________

本页目录