前一篇讲的是open_issues.md把暂时不能解决、但又不能忘掉的问题留下来。这一篇讨论另一个问题当 Agent 做对了一轮任务系统怎样确认“这次已经通过”海狮做对动作以后训练员会喂它一条小鱼。那么Agent 做对以后应该“喂”什么不是一句“做得不错”也不是让模型因为受到表扬而变聪明。Agent 真正需要的是一个明确的通过信号验收条件已经满足当前结果可以保留修改不需要继续扩大项目可以进入下一状态已验证的结果可以成为后续工作的依据。1. 为什么需要通过信号AI 编程中经常出现两种问题。改对了还继续改问题已经解决但因为没有明确的结束条件Agent 继续重构附近代码、增加无关功能甚至把已经正确的部分重新改坏。只改对一部分就宣布完成页面不报错了不代表后端没有错误副作用一个测试通过了也不代表正常路径没有被破坏。所以一轮任务不能靠“看起来差不多”结束。系统需要明确判断当前结果能不能保留这轮任务能不能结束。2. Agent 得到的“鱼”是什么Agent 得到的不是情绪鼓励而是一组工程信号测试通过编译成功关键路径验证完成没有产生错误副作用修改范围没有越界剩余风险已经记录当前任务被标记为完成。这里说的 reward并不会直接重新训练模型或修改模型参数。它主要完成三件事判断结果是否可以接受决定修改循环是否结束把已验证结果写回项目。因此更准确地说验收提供的是工作流中的通过信号和状态转移条件。3. 购物车程序怎样验收假设任务是修复空购物车结算时的异常行为。验收不能只看页面是否报错还要检查空购物车是否返回安全错误是否阻止支付和下单正常购物车是否仍然可以结算是否没有创建错误订单是否只修改了允许修改的文件剩余问题是否写入open_issues.md。只有这些条件都满足系统才能确认当前结果可以保留这轮任务可以结束。这就是 Agent 得到的“鱼”。4. 验收条件要提前写验收不能等任务结束以后再临时决定。它应该在任务开始时写进current_task.md## Task Fix the empty-cart checkout path. ## Allowed - checkout/service.py - tests/test_checkout.py - revision_log.md - open_issues.md ## Acceptance 1. Empty-cart checkout returns a safe error. 2. Normal checkout still passes. 3. No payment request is sent. 4. No order is created. 5. Only allowed files are changed. 6. Remaining risks are recorded.这份文件提前规定了什么叫正确什么叫越界什么必须验证什么情况才算完成。因此验收既是终点也是方向。5. 测试通过不等于任务通过测试只能检查已经写入测试的条件。Agent 可能让测试通过却同时写死返回结果破坏正常业务路径产生未被测试覆盖的副作用修改范围外文件忘记更新项目状态。所以完整验收通常包括代码测试 业务语义 副作用检查 修改边界 状态回写 本轮任务通过All tests passed只能证明已有测试通过不能自动证明整个任务完成。6. 通过以后还要回写状态验收完成后需要把结果写回项目revision_log.md记录修改原因、验证方法和结果open_issues.md关闭已解决问题保留剩余风险state.md更新当前状态和下一步current_task.md结束当前任务。这一步把一次性的通过结果变成下一轮可以继续使用的项目事实。否则下一个 Agent 仍然不知道哪条路径已经验证哪些问题已经解决为什么代码现在这样哪些风险仍然存在。7. 本章小结海狮做对了训练员会喂它一条小鱼。Agent 做对了得到的是一组明确的通过信号目标已经完成关键路径已经验证正常行为没有被破坏修改范围没有越界剩余风险已经记录当前结果可以保留项目可以进入下一状态。验收不是让 Agent 感到被表扬而是在决定这一轮修改能不能停止当前结果能不能进入项目历史。前一篇用open_issues.md保存尚未解决的问题。这一篇用验收保存已经验证的结果。一个防止问题被忘记一个防止正确结果再次被破坏。两者共同推动项目一轮一轮地收敛。下一章我会继续讲程序项目里的工作台应该怎么搭才能把代码、状态和人类视图分开。