AI教程

AI 编程智能体提交 PR 前怎么验收?测试、权限与回滚指南

用任务合同、差异边界、干净复现、安全审查、分支规则、灰度和回滚,验收AI编程智能体提交的拉取请求。

AI 编程智能体 PR 从任务合同、差异、复现、风险到发布回滚的六道门
本页目录
  1. 直接答案:AI 智能体的 PR 不能靠‘看起来合理’合并
  2. 为什么保留 124989 而不再新建一个 PR 清单页面
  3. 先写一页变更合同
  4. 把 PR 描述当索引,不当证据
  5. 第一道门:确认审查的是最新提交
  6. 第二道门:逐文件核对范围
  7. 第三道门:在干净环境复现
  8. 第四道门:测试必须覆盖错误路径
  9. 第五道门:检查安全敏感差异
  10. 第六道门:准备可执行回滚
  11. GitHub 状态检查的绿色边界
  12. 分支规则集要保护最后一米
  13. 合并队列需要单独触发验证
  14. 不要在特权上下文运行不可信 PR 代码
  15. 依赖变化需要独立审查
  16. 数据库迁移先看兼容顺序
  17. API 变化要验收契约与调用方
  18. 前端变化不能只看截图
  19. 后台任务要验证重试与幂等
  20. 并发变化要寻找竞争窗口
  21. 日志与遥测不能泄露更多数据
  22. 许可证与生成来源也要留痕
  23. 配置与基础设施变化扩大审查半径
  24. 性能结论必须有可复现实验
  25. 测试由同一个模型生成时要加独立反例
  26. 大 PR 先拆任务,再谈审查效率
  27. 审查顺序从风险开始
  28. 人工批准必须承担明确责任
  29. 功能开关不是免测按钮
  30. 发布前建立观察与停止条件
  31. 灰度要按稳定实体分桶
  32. 回滚后还要处理残留状态
  33. 如何验收智能体修改测试本身
  34. 如何验收文档和示例
  35. 如何验收生成文件
  36. 如何验收删除与清理
  37. 如何验收错误处理
  38. 如何验收缓存变化
  39. 如何验收时间与时区
  40. 如何验收多语言与编码
  41. 如何验收隐私与数据保留
  42. 可机读验收合同怎样使用
  43. 十二类一票否决条件
  44. 什么时候可以接受剩余风险
  45. 最终合并判定
  46. 用差异预算控制失焦
  47. 从用户故事反推可观察结果
  48. 用不变量审查比逐行猜测更可靠
  49. 对审查意见执行闭环
  50. 审查工作流文件本身
  51. 验证测试数据和夹具没有作弊
  52. 处理外部服务与不可重复依赖
  53. 定义 flaky 测试的处置
  54. 审查异常情况下的资源释放
  55. 审查权限最小化而非只看功能成功
  56. 审查网络出口和下载
  57. 审查命令与路径拼接
  58. 审查序列化和反序列化
  59. 审查加密与秘密处理
  60. 审查可访问性和安全提示
  61. 建立审查证据的保存期限
  62. 审查版本和发布身份
  63. 审查配置默认值与环境差异
  64. 审查成本与容量失控
  65. 审查事故与支持准备
  66. 完成一次反向验收
  67. 十二个常见失败与恢复分支
  68. 官方证据图与使用边界
  69. 当前一手来源
  70. 继续完成相邻任务
  71. 时效与数据边界
AI 编程智能体 PR 从任务合同、差异、复现、风险到发布回滚的六道门
兰塞 AI 原创:AI 智能体 PR 的六道验收门。

直接答案:AI 智能体的 PR 不能靠‘看起来合理’合并

把 AI 编程智能体提交的 PR 当成一个需要独立验收的外部贡献:先核对任务合同和变更边界,再从干净环境复现构建与测试,检查安全、数据、依赖和运维影响,最后由受保护分支、代码所有者与可执行回滚共同决定是否合并。智能体生成了代码、测试和说明,只能证明它提交了材料,不能证明结果正确,更不能让它批准自己的改动。

为什么保留 124989 而不再新建一个 PR 清单页面

站内已有这个明确意图的排期 URL,用户任务始终是审查 AI 编程智能体产生的拉取请求。旧稿只有约一千二百个字符,证据、失败分支、独立资产和当前视觉都不满足新 A 标准,因此本轮不把旧批准当通行证,而是保留 URL 与主题,冻结旧排期后整体重建。这样既避免同意图内耗,也让旧短稿不会在没有实页 QA 的情况下自动公开。

先写一页变更合同

合并前应能用一页说明回答:要解决什么问题、允许改哪些目录、明确禁止什么、成功标准是什么、运行哪些命令、哪些数据或权限不可触碰、谁负责验收、怎样回滚。任务合同必须在智能体开始工作前存在;事后根据补丁倒推目标,会把越界改动包装成必要工作。合同应使用仓库可以验证的路径、命令和阈值,不写‘确保高质量’这类无法判定的口号。

把 PR 描述当索引,不当证据

PR 描述应列出任务、改动文件、用户可见变化、测试、风险、未完成项和回滚入口,但审查者必须从差异和实际运行结果核对这些声明。智能体可能遗漏自动生成文件、锁文件、配置、迁移或删除,也可能把失败测试概括为已通过。每条‘已验证’声明至少连接到具体命令、提交 SHA、运行环境和回执;无法复现时改写成待验证,而不是保留肯定语气。

第一道门:确认审查的是最新提交

状态检查与人工批准必须对应 PR 最新 head SHA 或平台实际要求的测试合并提交。智能体收到评论后继续推送,旧测试和旧批准就可能不再覆盖当前差异。回执保存仓库、分支、base SHA、head SHA、merge SHA(如适用)与生成时间。GitHub 官方说明必需检查需要针对正确提交通过;审查界面显示绿色不等于你本地拿到的补丁与该绿色结果相同。

第二道门:逐文件核对范围

先看文件清单,再看补丁。把每个文件标记为直接实现、测试、文档、生成物、依赖、配置、迁移或无法解释。发现顺手重构、格式化全库、删除保护逻辑、修改工作流、扩大网络权限或新增遥测,应拆分或停止。范围门不是限制合理修复,而是要求每项变化都有任务关联和独立理由,使回滚能够只撤销本次行为,而不把无关改动绑在一起。

第三道门:在干净环境复现

不要只相信智能体工作区的最后输出。用固定提交、受控依赖源和无共享缓存的干净环境执行安装、格式化、类型检查、构建、单元、集成与任务特定测试。记录操作系统、运行时、包管理器、锁文件、环境变量名称和命令退出码。缺少私有服务时用明确的模拟器或暂缓合并,不能把‘本机没有条件’写成通过。干净复现能暴露未提交文件、隐藏缓存和本地全局依赖。

第四道门:测试必须覆盖错误路径

智能体生成的测试可能只重复实现逻辑,或只验证它知道会成功的路径。每个功能变化至少检查正常、边界、无权限、无数据、重复请求、并发、超时、下游失败与恢复。修复缺陷时先写能在旧版本稳定失败、在新版本通过的回归测试。若测试无法观察真实用户结果,只能算组件证据;不要用大量快照或行覆盖率掩盖关键业务不变量没有被验证。

第五道门:检查安全敏感差异

认证、授权、租户隔离、密钥、支付、上传、反序列化、命令执行、模板渲染、网络请求和日志属于高风险区域。逐条追踪输入从入口到副作用的路径,验证服务端授权而不是只看前端隐藏,测试另一个租户或角色不能读取目标资源。新增脚本和工作流还要检查令牌权限、外部 Action 固定版本、输出转义与不可信输入;安全扫描是补充,不能替代数据流审查。

第六道门:准备可执行回滚

回滚不是写一句‘可以 revert’。代码回滚要确认提交可逆、兼容窗口与配置默认值;数据库变更要明确前向修复、双写、读旧写新或不可逆边界;缓存、队列、搜索索引和对象存储可能需要额外恢复。上线前在测试环境演练触发、执行和验证步骤,写明负责人、停止阈值和预计时间。若旧版本不能读取新数据,简单回退二进制可能造成更大事故。

GitHub 状态检查的绿色边界

GitHub 的 check run 与 commit status 都可参与合并门禁,但绿色只说明配置的检查报告了允许结论。官方文档指出 skipped 与 neutral 在某些依赖或门禁路径上也可被视为成功,且拥有写权限的主体可能设置状态。因此要核对检查来源、运行条件、最新提交和日志,防止路径过滤让关键工作流根本没有运行。关键检查应限制到预期 GitHub App,并保存工作流版本。

分支规则集要保护最后一米

为主分支要求 PR、必需检查、代码所有者批准、旧批准在新推送后失效、会话解析和受控合并队列。限制可以绕过规则的人和应用,并定期审计旁路记录。规则只对平台上的合并路径有效,不能防止凭据持有者直接修改生产数据库或部署配置,所以发布权限仍应与仓库权限分离。智能体账户不应拥有跳过审核、修改规则或批准自身 PR 的能力。

合并队列需要单独触发验证

当仓库启用 merge queue,GitHub Actions 工作流若只监听 pull_request,进入队列后的临时合并提交可能没有对应检查。官方故障排查文档要求相关工作流包含 merge_group 事件。验收时模拟一次真正入队,确认必需检查在队列提交上重新运行,且没有用旧 head SHA 的成功结果放行。高并发团队还要观察队列超时、取消、基线前移和冲突时的重新验证。

PR 证据链连接提交身份、检查来源、人工判断、合并保护、部署回执和业务终态
兰塞 AI 原创:绿色状态只是证据链的一环。

不要在特权上下文运行不可信 PR 代码

GitHub 官方安全文档明确警告:在 pull_request_target 或其他带秘密、写令牌的上下文中检出并执行外部 PR 代码,会形成供应链风险。即使工作流文件来自默认分支,随后执行 PR 内的 Makefile、脚本、依赖安装或测试也可能泄露秘密。外部分支应在隔离、临时、无秘密或最小只读令牌环境运行;需要评论或贴标签的特权工作流只消费经过验证的结果,不执行其内容。

依赖变化需要独立审查

新增或升级依赖时核对官方来源、维护状态、许可证、完整性、传递依赖、安装脚本、运行权限和体积。锁文件大幅变化不能只看顶层 package.json;使用包管理器解释为什么解析结果变化。对容器镜像和 Actions 固定不可变摘要或受控版本,并计划更新机制。依赖扫描发现无已知漏洞不等于安全,也不能证明包名没有拼写劫持或安装脚本不会访问网络。

数据库迁移先看兼容顺序

把 schema 变化按扩展、迁移、切读写、收缩分阶段处理。新增可空字段通常比直接重命名或删除安全;大表索引、默认值、回填和锁需要在代表性数据上评估。测试旧应用与新 schema、新应用与旧数据的兼容组合,并记录失败时如何暂停或前向修复。智能体生成的 down migration 可能丢数据,不能因为存在 rollback 文件就声称迁移可逆。

API 变化要验收契约与调用方

比较路径、方法、认证、参数、默认值、错误码、分页、幂等、速率限制和响应 schema。保留旧客户端样本与错误路径,确认字段新增不会破坏严格解析,字段删除或语义变化有版本策略。内部 API 也要搜索所有调用方、异步消费者和文档示例。仅通过服务端单元测试不能证明移动端、任务队列或第三方集成仍然兼容。

前端变化不能只看截图

截图能证明某个视口出现了某个画面,不能证明键盘、屏幕阅读器、错误状态、国际化和交互都正确。核对语义 HTML、焦点顺序、可见标签、颜色对比、缩放、390px 宽度、慢网、加载和空状态。用户可见行为应有稳定的端到端或组件测试,但选择器不要只依赖易变样式。涉及上传、支付或删除时,确认重复点击、返回和刷新不会产生重复副作用。

后台任务要验证重试与幂等

队列消费者、定时任务和 webhook 可能在至少一次投递下重复执行。测试相同事件、乱序、延迟、部分失败和毒消息,记录幂等键、最大重试、退避、死信与人工恢复。智能体常把异常捕获后返回成功,导致消息丢失;也可能无限重试放大下游事故。通过条件是业务终态正确且可追踪,不是日志里没有未捕获异常。

并发变化要寻找竞争窗口

对读改写、库存、配额、锁、缓存失效和状态机,单线程测试不足。写出允许状态转换和不变量,用并发夹具制造重复、交错、超时和进程重启。确认事务范围、唯一约束、乐观锁或分布式锁的失败处理。不要接受‘概率很低’作为结论;如果无法稳定复现,就加入观测和停止条件,在灰度中限制影响面。

日志与遥测不能泄露更多数据

新增可观测性时列出字段、来源、保留期、访问者和脱敏规则。密钥、令牌、Cookie、完整提示、上传内容、个人身份与支付信息不能进入普通日志。错误对象和第三方 SDK 可能自动包含请求体,需用测试数据检查实际输出。采样和追踪 ID 应支持事故定位,但不能把用户内容复制到新的供应商。遥测能证明请求发生,不等于证明用户、成功或业务价值。

许可证与生成来源也要留痕

智能体可能复制训练或检索上下文中的代码片段,项目仍需运行许可证和相似性检查,核对新增文件头、第三方资源与模型输出条款。发现与外部实现高度相似时,追到原始仓库和许可证,必要时重写或取得许可。不能仅凭智能体说‘这是原创’放行;也不要把无法解释的归属自动写成本站或公司所有。

配置与基础设施变化扩大审查半径

Terraform、Kubernetes、权限策略、网络、DNS、密钥和 CI 工作流的少量文本可能产生大范围副作用。查看计划输出、资源替换、权限差异和环境选择,禁止在审查阶段使用生产写权限。对删除、公开访问、跨账户信任、通配符权限和持久卷变更设置人工批准。计划无变化只能证明工具当前计算结果,不证明云端漂移、配额或运行时行为不存在风险。

性能结论必须有可复现实验

如果 PR 声称更快或更省,记录基线与变更版本、硬件、数据、并发、预热、样本量和统计口径;同时观察 P50、P95、资源、错误率与正确性。减少耗时但丢请求、关闭验证或扩大缓存陈旧都不是优化。微基准不能外推整条用户路径。没有运行测试时,把文字改成设计预期,并为上线设置测量和回退阈值,禁止把智能体估算当实测数字。

测试由同一个模型生成时要加独立反例

生成者容易在实现和测试中共享同一误解。让人工或独立规则从需求与不变量出发补充反例,必要时用另一工具做静态审查,但最终仍由可执行结果与负责人判断。重点挑战权限、边界、旧数据、失败恢复和隐藏依赖,而不是要求第二个模型泛泛评价代码风格。AI 对 AI 的一致意见不是正确性证明,它们可能同时忽略同一上下文。

大 PR 先拆任务,再谈审查效率

当差异跨越多个意图、组件和风险域时,审查者无法建立清晰因果。按行为切成可独立构建、测试和回滚的小 PR,先合并机械准备,再合并功能,最后清理旧路径。不要为了减少 PR 数把数据库、API、前端、遥测和基础设施塞在一起。若必须原子变更,提供分层阅读顺序、生成文件说明和逐阶段启用开关。

审查顺序从风险开始

先读任务合同和文件列表,再定位认证、数据、迁移、依赖、工作流与删除等高风险差异;然后检查核心行为和测试,最后看命名与样式。这样可在重大阻断出现时尽早停止,避免先花时间润色低风险代码。对每个关键不变量写下可验证问题,例如‘A 租户能否访问 B 资源’,并用代码路径和测试回答,避免被流畅的 PR 摘要带偏。

AI 编程智能体 PR 按低中高风险分配自动门禁、领域所有者和发布责任
兰塞 AI 原创:让风险决定审查深度。

人工批准必须承担明确责任

指定产品行为、代码所有权、安全、数据或运维责任人,而不是让任何一个批准覆盖所有领域。审批记录说明看了哪些证据、接受什么残余风险和何时复查。合并按钮由有权承担后果的人操作,智能体和自动审查只能提出建议。紧急旁路要有时间限制、事故编号、事后补测与权限复核,不能演变为日常通道。

功能开关不是免测按钮

开关可限制暴露和快速关闭,但错误代码仍可能在初始化、迁移、构建或后台路径执行。验证关闭状态、开启状态、配置服务不可用、缓存旧值和不同租户组合。定义安全默认值、所有者、清理日期与指标。回滚时确认关开关是否足以停止副作用;已经写入的数据、发送的消息或外部调用不会因为界面关闭自动撤销。

发布前建立观察与停止条件

为新功能选择真实但最小的健康信号:错误、延迟、资源、业务终态、权限拒绝、队列积压和人工投诉。设置基线、阈值、观察窗、样本下限与责任人。部署成功和 HTTP 200 只说明技术路径可达,不证明功能正确。指标缺失、遥测断流或版本无法区分时应停止扩大;不能把没有告警解释为没有问题。

灰度要按稳定实体分桶

按租户、账户或稳定哈希放量,避免同一用户在新旧逻辑间来回跳。先内部和低风险租户,再扩大比例;每阶段重新核对质量、安全、成本和支持反馈。涉及状态写入时,确认新旧版本能共同读取并处理在途任务。灰度样本太小只能发现灾难性问题,不能证明长期正确,因此需要足够观察期和完整回滚能力。

回滚后还要处理残留状态

关闭路由或 revert 提交后,检查数据库、缓存、消息、对象、搜索索引、外部供应商和客户端版本。重复副作用要用幂等与对账修复,失败迁移可能需要前向脚本。保留失败提交、运行日志、样本和决策,避免修复时丢失证据。只有业务终态恢复、监控稳定和责任人确认后,才能结束事故;回滚动作执行成功不是事故已经解决。

如何验收智能体修改测试本身

测试删除、断言变宽、跳过条件、固定随机种子变化和快照批量更新都可能让红灯变绿。比较测试意图而非只看行数,要求每个变更说明旧行为为什么不再正确。对 bug 修复保留故障复现,检查修改前失败、修改后通过。若生产代码和测试同时由智能体修改,让独立样本或人工断言验证业务不变量,防止两边共同迁就错误。

如何验收文档和示例

文档中的命令、路径、参数与界面应在当前版本实际执行;示例使用无敏感数据的最小输入,并说明预期输出和失败分支。检查链接、版本边界、平台差异和权限前提。代码片段能编译不等于适合生产,涉及密钥、删除、付费或外部发布时必须给出安全边界。文档若承诺尚未上线的功能,应明确为计划而不是现状。

如何验收生成文件

构建产物、客户端、schema、锁文件和代码生成结果应由固定工具版本从源文件重新产生,并确认工作树无额外变化。不要手工修生成物掩盖源定义错误,也不要忽略巨大差异。记录生成命令和工具哈希;若生成结果包含时间戳或机器路径,应先消除非确定性。可重复生成是供应链证据之一,但不证明生成逻辑或业务定义正确。

如何验收删除与清理

删除代码前搜索运行时加载、动态配置、反射、任务调度、文档和外部调用,确认迁移窗口和回退版本不再依赖它。删除表、字段、事件或 API 前先观察实际使用并通知所有者。所谓‘无引用’可能只是静态搜索找不到动态入口。清理 PR 最好与行为变更分开,在生产已切换且观察期结束后执行,避免一旦失败无法快速恢复。

如何验收错误处理

检查异常是否被正确分类、传播、记录和转换,不能用 catch-all 吞掉故障或把失败返回成功。错误信息不得泄露秘密,但要包含可关联的请求 ID。重试只用于瞬时且安全重放的操作,设最大次数、退避和总时限。用户看到的恢复建议要真实可执行;自动降级改变质量、费用或数据路径时必须可观测,并在 PR 中写明边界。

如何验收缓存变化

定义键、范围、TTL、失效、版本和敏感数据边界。测试不同租户、权限、语言与配置不会共享错误条目,写后读和删除会触发必要失效。缓存命中提高不等于业务更快,若返回旧权限或旧价格就是严重错误。回滚时新旧键格式要兼容,无法兼容则计划双读或清理;大规模清缓存还要评估瞬时负载。

如何验收时间与时区

定时任务、过期、计费和报告应明确使用的时区、夏令时、闰日和边界。测试时钟回拨、跨日、月底、重复执行和延迟事件,不要依赖开发机本地时间。数据库存储与展示层转换分离,日志带时区。智能体常生成看似直观的日期运算,却遗漏业务日历或包版本差异;使用固定时钟和代表性样本验证。

如何验收多语言与编码

用简体中文、英文、混合实体、全角符号、emoji、组合字符和长文本测试输入输出。确认排序、截断、正则、数据库长度、URL 编码和导出不会损坏内容。前端字符数与后端字节数要区分。不要因为 ASCII 测试通过就声称国际化完成;也不要让自动格式化改坏合法引用、代码或品牌专名。生产日志出现乱码时先修编码链路,不用替换字符掩盖损坏。

如何验收隐私与数据保留

列出新增采集、处理、发送、存储和删除的字段,核对合法目的、最小化、地区、供应商、保留和访问控制。测试删除请求、导出、权限撤销与备份边界。即使功能由 AI 生成,责任仍属于部署者。代码里没有明文个人信息不等于无隐私影响,标识符、日志、向量和模型提示都可能可关联。任何新外部端点都需安全和合同复核。

可机读验收合同怎样使用

随文 JSON 示例记录任务、仓库、base/head SHA、允许路径、禁止路径、测试命令、风险标签、必需检查、人工批准、发布和回滚。离线校验器只验证结构、SHA 格式、路径边界和决定值,不访问 GitHub、不运行测试,也不判断代码正确。团队应把真实 CI 回执和审批链接填入后再归档;模板通过只能证明字段齐全,不能冒充合并授权。

十二类一票否决条件

出现任务意图不清、无法解释的越界文件、秘密或个人数据泄露、跨租户访问、未授权生产写入、不可逆迁移无方案、必需检查未针对最新提交、关键测试被跳过、来源不明依赖、高危扫描未处置、回滚不可执行或批准者存在利益冲突时停止合并。阻断项应写清复现与修复要求,不用模糊的‘再看看’把责任推给下一位审查者。

什么时候可以接受剩余风险

不是所有警告都必须归零,但接受必须显式:描述风险、影响面、发生条件、现有控制、观察指标、负责人、期限和补救任务。低风险格式问题可后续处理,高风险权限、数据和迁移问题通常不能用时间压力豁免。风险接受记录关联具体提交,后续推送需重新评估。没有人愿意署名负责的风险,不应被系统默认接受。

最终合并判定

只有任务合同完成、范围可解释、当前提交的必需检查通过、人工审查覆盖对应风险、部署与回滚可执行、证据已归档时,才把 decision 设为 approved。任何关键材料缺失则保持 pending 或 rejected。合并后按计划观察并在异常时回滚;认证不是永久标签,依赖、平台、数据和业务变化都可能要求复核。本文给出流程,不替代你的仓库规则、安全评审和上线责任。

用差异预算控制失焦

在任务合同中给出预计文件、模块和改动规模,超过预算时不自动失败,但必须解释并重新批准。预算的作用是暴露需求蔓延和智能体顺手重构,不是鼓励为了行数隐藏必要测试。生成代码、快照和锁文件可单独统计;真正需要关注的是新增行为和风险半径。若一个小缺陷最终触及认证、数据库、基础设施和十多个模块,先停下来重做设计或拆分,而不是继续让智能体补更多说明。

从用户故事反推可观察结果

把‘实现某功能’改写为用户或系统能观察的输入、动作、结果与错误。例如权限修复不能只说增加校验,而要写明未授权身份得到什么状态、授权身份仍能完成什么、日志留下哪些字段、资源状态是否改变。测试和人工验收都映射到这些结果,避免仅检查内部函数被调用。可观察结果还应覆盖旧客户端、慢网络和中断恢复,使审查者能够判断变更是否真正满足需求。

用不变量审查比逐行猜测更可靠

先列出任何实现都必须保持的规则:跨租户不可读、余额不能为负、一次事件只产生一个副作用、删除后不得继续对外可见、未批准代码不能部署。然后沿数据流、状态机和异常路径验证这些规则。逐行阅读仍重要,但没有不变量时容易被局部正确迷惑。把关键不变量做成测试或运行时断言,并为断言失败设置明确报警;不要让智能体自行删除它认为‘多余’的保护。

对审查意见执行闭环

每条阻断意见应包含位置、风险、复现或证据要求和通过条件。智能体修复后,不只看回复文字,重新检查差异、运行受影响命令并确认没有把问题转移到别处。相互依赖的意见按主题汇总,避免连续小补丁制造新的冲突。所有阻断关闭后仍要重新查看总体文件列表和提交 SHA,因为最后一次修复可能新增未审查内容。评论数量归零不代表风险归零,只有证据闭环才算完成。

审查工作流文件本身

GitHub Actions 或其他 CI 文件决定哪些证据会出现,应像生产代码一样审查。核对事件、分支、路径、权限、秘密、第三方 Action、脚本插值、缓存、产物和环境保护。注意条件表达式导致关键 job 被 skipped 却仍让聚合检查成功,也注意并发取消让旧运行覆盖新状态。修改门禁的 PR 不应仅靠被修改后的门禁自证,需要独立管理员或预先存在的策略验证,并限制智能体修改规则的权限。

验证测试数据和夹具没有作弊

智能体可能为了通过测试修改夹具、默认账户、时间、随机种子或期望文件。比较测试数据变更是否符合真实业务,确保没有把危险输入删掉、把预期错误改成成功或降低阈值。对生成快照抽查关键字段,不批准成百上千个无法阅读的更新。需要迁移测试数据时保留旧样本和版本说明,让回归仍能覆盖历史状态,而不是只适配新实现的理想输入。

处理外部服务与不可重复依赖

第三方 API、时钟、网络、模型和云资源会让测试波动。核心业务使用固定响应夹具验证确定性逻辑,再用少量受控集成检查当前契约;两者要明确区分。集成失败不能被自动重跑到绿色后忽略,应记录首次失败和重试原因。涉及付费或不可逆调用时使用沙箱、最小配额与幂等键。无法在审查期访问外部服务时,保留阻断或缩小发布范围,不以模拟结果冒充真实端到端通过。

定义 flaky 测试的处置

偶发失败说明证据不稳定,不能靠重复运行直到绿色。记录失败频率、种子、环境和最近变化,先判断是产品竞争条件、资源瓶颈还是测试缺陷。关键门禁中的 flaky 测试应修复或用等价稳定检查替换;暂时隔离必须有负责人、到期和独立风险控制。智能体若自动增加重试、延长等待或删除断言,可能只是掩盖问题。合并决定应看到所有尝试,不只看最后一次成功。

审查异常情况下的资源释放

文件、锁、事务、连接、临时目录、子进程和云资源在成功与失败路径都要释放。制造超时、取消、进程终止和部分初始化,检查 finally、上下文管理和补偿动作。泄漏在小测试里可能不可见,上线后会积累成容量事故。不要因为运行一次没有报错就认为资源安全;用循环、并发和故障注入观察句柄、连接池、磁盘与队列。回滚还应清理新版本遗留的临时状态。

审查权限最小化而非只看功能成功

新功能能完成动作,只说明权限足够,不说明权限没有过大。列出运行身份、令牌范围、云角色、数据库权限和文件访问,把读写资源限制到任务需要。测试不允许的动作确实失败,并确认失败不会回退到更高权限身份。临时管理员凭据只用于人工受控迁移,不放入智能体环境、CI 变量或日志。权限变更要能撤销并有使用审计,避免一次 PR 永久扩大攻击面。

审查网络出口和下载

新增 HTTP 请求、包下载、遥测、Webhook 或模型调用会改变数据边界。核对域名、协议、证书验证、重定向、代理、超时、响应大小和内容类型,限制可访问地址,防止服务端请求伪造与内网探测。下载内容在解析或执行前验证来源、摘要和格式,并隔离处理。测试恶意重定向、超大响应、压缩炸弹和慢连接。没有网络变更说明但依赖安装脚本访问外部域名,也应纳入审查。

审查命令与路径拼接

智能体容易用字符串拼接 shell、文件路径或 SQL。优先使用参数化 API 和字面路径,测试空格、引号、Unicode、父目录、绝对路径和特殊设备名。工作目录必须明确,删除、移动和覆盖前解析并验证目标仍在允许根目录。用户输入、分支名、文件名和 PR 标题都可能进入命令,不能因来源是开发者就视为可信。日志展示命令时避免同时泄露令牌和敏感参数。

审查序列化和反序列化

对 JSON、YAML、pickle、对象存储和消息协议,明确 schema、版本、大小、未知字段和默认值。不要对不可信输入使用可执行反序列化,也不要静默接受类型漂移。测试旧数据、新字段、缺字段、重复键、深层嵌套和畸形内容。写入前验证语义与权限,读取失败要进入可恢复路径。智能体生成的宽松解析可能短期兼容,却把错误推到更危险的下游;严格程度应由业务契约决定。

审查加密与秘密处理

禁止让智能体自行设计加密算法或把编码当加密。使用经过维护的库和组织批准的密钥管理,记录算法、密钥用途、轮换、随机数和失败处理。秘密不写入代码、示例、测试快照、构建产物、浏览器包或错误日志;扫描历史和生成文件。认证比较避免时序泄漏,令牌设置最小范围与短期有效。若 PR 暴露了真实秘密,删除文本不足以补救,应立即吊销、轮换并调查使用记录。

审查可访问性和安全提示

涉及批准、删除、支付、授权或数据分享的界面必须让用户理解对象、后果与取消路径。按钮文字、焦点、错误提示和确认不能仅依赖颜色或图标,读屏器可获得相同信息。智能体可能生成视觉漂亮但误导的默认选项,或把危险动作放在常用路径。用键盘、390px、缩放和读屏流程检查,并验证服务端仍强制权限;可访问性提示不能替代真正的安全控制。

建立审查证据的保存期限

CI 日志、检查和外部链接可能过期,GitHub 官方也对检查数据有保留边界。对高风险变更归档任务合同、差异摘要、提交 SHA、关键命令回执、审批、发布版本、指标和回滚演练,避免只保存一个会失效的 URL。证据仓库控制访问并做最小化,不复制完整客户数据。保留期按法规、合同和事故需要设定,到期安全删除;长期保存并不自动提高可信度。

审查版本和发布身份

构建产物必须能追溯到已审查提交,记录源 SHA、构建器、依赖锁、制品摘要和签名。不要在审批后从可变分支重新构建未知内容,也不要让同名标签覆盖旧制品。部署系统核对摘要而非仅核对版本字符串,回滚目标同样需要可验证。若生产版本无法映射到 PR、提交和构建回执,观察指标再漂亮也不能证明运行的是已批准代码,应停止扩大并先恢复可追溯链。

审查配置默认值与环境差异

开发、测试、预发布和生产的开关、权限、区域、数据库、队列与外部服务可能不同。列出变更读取的每个配置、默认值、缺失行为和热更新边界,禁止因测试环境有安全值就假设生产相同。用只读方式核对生产配置 schema,不把秘密复制到 PR。配置服务不可用或返回旧值时要有安全默认和报警;部署回执保存最终生效版本,而不是只保存提交中的配置文件。

审查成本与容量失控

新增模型调用、重试、并发、日志、存储、扫描和第三方 API 都可能改变成本。用代表性任务估算请求数、数据量和失败放大,设置配额、并发、超时和停止线。成本下降不能靠关闭必要验证,成本上升也不能只用模型估算解释。灰度期按成功任务统计资源,并观察队列、连接池、磁盘和供应商限额。达到阈值时应自动降级或暂停,而不是等月底账单才发现。

审查事故与支持准备

上线前让值班和支持人员知道变化、症状、查询方式、临时缓解和升级联系人。运行手册包含版本识别、关键指标、日志入口、停用开关、回滚和用户沟通模板,并在非生产环境走一次。智能体可以起草手册,但负责人要核对命令和权限。若故障只能由原作者在个人环境诊断,说明交付未完成;可维护性和恢复能力与功能实现同样属于 PR 验收。

完成一次反向验收

在准备合并时,假设补丁已经造成事故,反问现有证据能否定位版本、影响用户、错误路径和恢复动作。让未参与生成的人仅凭任务合同、回执与运行手册尝试复现和回滚;若仍必须询问智能体当时‘在想什么’,说明关键事实没有进入可维护资产。反向验收不是悲观演练,而是验证交付能否脱离生成会话长期运转,也能发现描述和实际差异之间的最后缺口。

十二个常见失败与恢复分支

失败 处理
PR 推送新提交后旧批准仍显示 要求新提交使旧批准失效,并核对最新 head SHA。
必需工作流因路径过滤没有运行 用不可跳过的聚合检查,显式验证关键路径是否覆盖。
测试只在智能体工作区通过 在干净、固定依赖的环境复现并保存回执。
pull_request_target 执行外部代码 分离无秘密测试与特权评论流程,不在特权上下文执行 PR 内容。
数据库 down migration 会丢数据 改用兼容扩展与前向修复,记录不可逆边界。
同一模型生成实现和所有测试 从需求不变量补独立反例与人工检查。
扫描绿色但存在业务越权 加入跨租户、跨角色和对象级授权测试。
开关关闭仍执行后台副作用 测试初始化、消费者和计划任务的关闭路径。
回滚代码后新数据不可读 先设计兼容窗口、双读或前向修复。
依赖升级带来大锁文件差异 解释解析树、许可证、安装脚本与不可变来源。
截图正常但键盘与慢网失败 增加可访问性、移动端、错误态与限速验收。
PR 摘要声称通过而日志失败 以命令退出码、环境、提交和原始回执为准。

官方证据图与使用边界

GitHub 官方状态检查文档说明检查状态、结论与拉取请求合并边界
GitHub 官方状态检查文档局部,访问于 2026 年 10 月 1 日。官方展示不等于本站实测;商标归 GitHub 所有。

当前一手来源

继续完成相邻任务

时效与数据边界

本文于 2026 年 10 月 1 日核验。GitHub 规则、Actions 事件、安全默认值、Codex 能力和 NIST 资料会变化,实施前应重开对应一手页面。本文没有对特定商业模型做性能评测,也没有运行用户仓库。Bing Webmaster、Search Console、排名、曝光、点击、CTR、访问、用户与转化均未取数;IndexNow、sitemap、爬虫请求与页面可访问性不能替代这些指标。