Coding Agent 说完成之后,我还会再跑一次

我现在看 Coding Agent,最不信的一句话就是:测试都过了。

这次实测的产品是 Ling-3.0-flash,我让 Agent 做了一个截图日志校验 CLI:扫描目录里的 PNG,找出缺号、重号和非法文件名。它创建了项目文件,自己运行测试,5/5 全绿。

但我在 Windows 里真正执行 node index.js,退出码是 0,终端却一行 JSON 都没有。

原因并不复杂:现有测试只调用了内部函数,没有从子进程启动真正的 CLI。函数能跑,不代表用户入口能跑。

最初的 5 项函数测试全部通过,但没有覆盖真实 CLI 入口

这种失败比红色报错更容易漏掉。红了,你知道要修;全绿,你很容易把半成品带进下一步。

所以我现在只认一个标准:

Agent 说完成不算完成,走完「失败基线 → 受限执行 → 独立验收」才算。

我把它叫作「可复验闭环」。

具体来说,我会把“完成”拆成三层:

• Agent 完成:它停止运行并给出总结。

• 测试完成:它运行的测试全部通过。

• 用户完成:真实入口、异常路径和文件改动都经过会话外复查。

前两层可以同时成立,第三层仍然失败。这次就是这样。

命令行工具要检查真实入口和退出码,网页要走一遍用户路径,批量处理要主动放进坏数据。验收对象必须和最终使用方式一致。

这套判断不依赖具体模型。只要任务有可观察的输出,就能先定义失败,再限制修改范围,最后用外部命令复查。模型可以换,验收口径不用跟着换。

我拿 Ling 跑了这个闭环

我通过 OpenCode 和 OpenRouter 的免费入口,拿它完成了这个 CLI 的创建、两轮 Bug 修复和三组独立边界任务。

发现 Windows CLI 没有输出后,我把实际输出、预期行为、复现步骤和验收要求一起交给它。

Ling 修复了 Windows 下的入口判断,把测试从 5 项补到 9 项。新增测试会通过子进程真正执行 CLI,我在会话外复跑后,JSON 输出恢复。

修复后新增了真实 CLI 端到端测试

但这还没结束。

我继续用不存在的目录验收,又发现路径明明写错了,程序仍返回空结果和退出码 0。

第二轮结构化报修后,测试增加到 10 项;不存在目录会返回带 error 字段的 JSON,并以退出码 1 结束。

第二轮补上不存在目录的端到端测试

第一版没有一次写对,第一次修复也没有覆盖所有边界。这反而更接近我实际使用 Agent 的方式:用外部验收抓住错误,再把失败变成下一轮输入。

可以直接复制的验收 SOP

1. 先固定失败基线

在 Agent 介入前,先保存:

• 执行命令• stdout / stderr• 退出码• 测试数量• 运行环境

如果验收本来就通过,它不能用来证明 Agent 修复了问题。

2. 锁住修改范围

把答题文件和验收文件分开:

只允许修改:

- index.js- test/test.js

禁止修改:

- acceptance.test.js- 项目外文件- 系统配置

否则你看到的通过,可能只是 Agent 顺手改了题。

3. 用这份模板报修

请先复现问题,再修改代码。

当前情况:[实际输出、退出码、失败测试]

预期情况:[正确行为]

精确报错:[粘贴原始日志,不自行概括]

复现步骤:[从哪个目录运行哪条命令]

允许修改:[文件白名单]

禁止修改:[验收文件、项目外文件、系统配置]

通过标准:

1. 失败基线由失败变成通过

2. 新增覆盖真实入口的端到端测试

3. 完整测试退出码为 0

4. 报告 tests、pass、fail 和改动文件

4. 在会话外重新验收

[ ] 原失败基线已经通过

[ ] Agent 正常退出,没有超时

[ ] 真实用户入口可以运行

[ ] 只修改了白名单文件

[ ] 没有删除测试或放宽断言

任何一项不满足,都不要写“任务完成”。

5. 把结果和边界放在一张表里

我后续补测的结果如下:

这张表的作用不是堆成绩,而是防止我只展示成功的部分。

冷水

• 样本只有三个相近的小型 Node.js 修复任务。大型仓库、长期连续任务和更多语言没有验证。

• 免费入口出现过每日额度限制,长上下文请求出现过 429。需要持续可用性的流程,仍要准备预算、重试和备用路由。

• 浏览器 MCP 的干净复验通过了,但首次运行发生过重复失败和工具越界。最终答案正确,不代表执行过程合格。

• Gemini 对照没有进入模型工作阶段;Office MCP、登录态浏览器、多页交互和下载也没有测试。这篇文章不提供模型排行榜。

如果你的任务没有测试、Schema、编译器或明确验收命令,我不建议把 Agent 的完成总结直接当成交付。

同样不适合的,是希望一句 Prompt 完成大型工程,中间不检查的人。

想自己跑

不用复制我的项目。

找一个真实存在的小 Bug,先写一条必定失败的验收,再把上面的模板交给 Agent。跑完后不要问它“完成了吗”,直接在会话外重新执行验收命令。

如果这套流程能抓住一次“测试全绿但真实入口不可用”,它就已经完成了自己的工作。

官方体验地址:https://openrouter.ai/activity

官方账号:@AntLingAGI