给 AI 代码设置凭证据放行的质量门禁
文章主张 AI 代码进入拉取请求前,应由质量门禁核验真实差异和结构化审查结果。审查未完成或仍有高危、严重问题时必须阻断,不能以 Agent 自报完成作为通过依据。
AI 深度解读
AI 编程 Agent 几分钟就能读仓库、改代码、开 PR,但团队审查代码的速度未必跟得上。作者的主张很直接:不能凭 Agent 一句「完成了」就让变更进入下一步,必须拿出审查、测试和人工批准的证据。
AI CodeOps 把这套要求做成了质量门禁。文章值得看的地方,是它如何处理审查超时、测试后又改代码、绕过平台直接合并这些容易漏掉的情况。不过,这是一篇产品团队的实践介绍,没有提供质量改善的对照数据。
Agent 说完成,为什么还不能开 PR
AI 生成代码变快后,最容易出现两种捷径:相信 Agent 对自己工作的总结,或者快速扫过一个大到读不仔细的 diff。结果是,AI 代码接受的检查可能比人工代码更少。
作者提出,在「Agent 完成任务」和「创建 PR」之间设置门禁,检查六件事:
- 审查必须实际执行,读取真实 diff,并留下结构化发现;审查没完成,变更就要等待。
- 不能存在尚未解除的 high 或 critical 问题;即使状态是已确认或处理中,也仍然阻断,需要修复或经过分诊处置。
- 项目自己的测试套件必须在沙箱中实际运行,Agent 写了测试计划不算通过。
- 测试必须对应当前代码版本;测试后有人修改代码,旧结果就失效。
- 必须有人批准;当工作区有其他人能够审批时,发起会话的人不能投批准票,批准后再修改代码则恢复待审批。
- 仓库和每一个变更文件,都要符合工作区策略。
门禁检查的是已经发生的验证,而不是 Agent 对验证结果的描述。
其中最容易被忽略的是版本对应关系。一次测试通过,只能证明当时那份代码通过;不能拿修改前的绿灯,为修改后的代码放行。批准也遵循同样的逻辑。
检查出错时,为什么必须拦下来
作者强调门禁应当「失败即拒绝」(fail closed):审查器超时、测试运行器崩溃,都不能当成通过。
这和发现代码缺陷是两回事。工具报错未必说明代码有问题,但它说明放行所需的证据还没拿到。如果此时继续放行,门禁就只剩下提示作用。
缺失证据也一样。如果系统找不到变更对应的会话,就没有足够依据判断,应当拒绝。
另一个漏洞是入口覆盖范围。平台内部能阻止 Agent 创建 PR,却管不到有人直接在 GitHub 或 GitLab 合并。作者建议让 CI 通过 API,携带 PR URL 或 commit SHA 查询门禁结论;结论不允许放行,就让任务失败。
不同流水线还可以加严条件,例如阻断 medium 问题、设置覆盖率下限,或者要求变更先部署到 staging。原文没有给出 API 路径、请求格式,也没有提供可直接复制的 CI 配置。
出了问题,要能查到当时凭什么放行
生产故障发生后,「AI 写的」无法解释变更为什么通过,也无法帮助定位哪个环节失守。
作者要求每次交付留下任务、所用模型、审查发现、测试运行、批准人及每个人的投票记录。AI CodeOps 将这些材料组织成带签名、可验证的证据包。
它的价值在于把过程串起来:当时做了什么检查,检查针对哪个版本,最后由谁批准。但原文没有解释签名方案、验证流程,以及如何保证记录完整,不能仅凭「带签名」就推断整套审计机制已经充分可靠。
我的判断
我赞同把「检查执行成功」和「检查结果通过」分开。很多流程只盯着有没有红灯,却没处理检查根本没跑完的情况。代码、测试结果和审批绑定到同一版本,也是一条可以直接借鉴的规则。
但这些更多是交付流程的要求。人工编写的代码同样需要,AI 只是让变更数量增长得更快,把流程缺口放大了。
和常见的 CI 加人工 Review 相比,这套方案强调证据集中记录、版本失效处理,以及通过 API 补齐平台外入口。原文没有证明独立门禁产品比配置完善的现有流程更有效,也没有提供缺陷率、误拦率或等待时间的数据,目前应当把它看作经验主张。
还有两个前提需要补齐。测试通过不代表测试覆盖充分,审查跑完也不代表审查判断准确;而「分诊处置」如何解除严重问题,文章没有说明权限和依据。团队采用时,不能只把状态改掉就算解决。
原文称 AI CodeOps 在公开 beta 期间免费,非商业开源项目永久免费。这是文中的产品说明,不是选择它的质量依据。
能拿来做什么
- 给日常 AI 编程建立明确的交付条件,要求真实 diff 审查记录和实际测试结果,避免把 Agent 的完成总结当作验收。
- 检查现有 CI 和审批流程:代码更新后,旧测试与旧批准是否会失效;审查超时或测试工具崩溃时,流程是否仍能继续。
- 如果团队同时使用 Agent 平台和 GitHub、GitLab 合并入口,就把门禁结论接入 CI,并检查所有入口是否执行了对应限制。
- 为每次 AI 变更保留任务、模型、发现、测试和审批记录,让故障排查能够还原当时的放行依据。