Agent 说“代码已完成”,我为什么还不敢合并:一套可复现的自动验收流程

Agent 用几分钟改完代码,测试结果一片绿色,最后还附上一句:“任务已完成,可以合并。”

我差点就信了。

直到打开页面才发现:登录框旁边确实多了一个“显示密码”按钮,但点击后毫无反应;切到移动端视口,按钮又被挤出了输入框。

代码改了,测试也过了,任务却没有真正完成。

这暴露了 AI 编程里一个容易被忽略的问题:

当 Agent 既负责写代码,又负责告诉你“代码没问题”,这真的算验收吗?

传统开发至少包含开发、测试和验收。很多 AI 编程工作流却只自动化了“开发”,然后顺手把“是否完成”的判断权也交给开发 Agent。

问题不在于 Claude Code、Cursor、Codex 或其他工具谁更强,而在于我们缺少一套工具无关、证据优先的验收机制。

本文用一个可以复现的任务,拆解如何让编程 Agent 在交付代码的同时,提交测试结果、界面截图和结构化变更说明。

编程 Agent 自动验收:假完成、自动验收产物与最终验收包对比示意图

配图说明:上图为脱敏复现示意图,不代表生产数据。左侧是 Agent 声称完成但实际存在问题的页面,中间是自动验收产物,右侧是最终验收包。三个面板分别对应本文要求保留的三组关键截图。

Agent 的“假完成”到底有多少种

先看本文贯穿始终的任务:

给登录页增加“显示/隐藏密码”按钮,同时保证键盘操作、移动端布局和原有登录功能正常。

这是一个很小的需求,却同时涉及状态管理、按钮行为、无障碍属性、响应式布局和旧功能回归,非常适合暴露 Agent 的“假完成”。

常见问题至少有以下几类。

代码改了,但需求没有真正实现

Agent 加上了眼睛图标,却没有正确更新密码输入框的 type 属性。页面看起来有变化,按钮实际上只是装饰。

还有一种情况是修改了错误组件:项目里同时存在旧版登录页和新版登录页,Agent 改了未被路由引用的文件。Git diff 很漂亮,运行中的页面却没有任何变化。

测试通过,但用户看到的结果不正确

单元测试可能证明“点击后状态由 false 变成 true”,却无法证明按钮有没有被遮挡、图标是否溢出、文案有没有错位。

这正是第一个失败样例:

  • 组件测试通过;
  • 桌面端按钮可以点击;
  • 移动端截图显示按钮超出输入框边界;
  • 最终状态不能是 PASS,而应是 NEEDS_REVIEWFAIL

新功能正常,旧功能却被破坏

例如,Agent 为眼睛图标增加了一个