让 AI 修复 issue 时,最危险的提示词往往是:“看一下这个问题并修复。”

这句话把 triage、analysis 和 implementation 混成了一步。对小问题也许没事,但在真实仓库里,它会让 AI 在没有边界确认的情况下直接改代码。

更好的做法是分阶段。

Triage 决定这件事能不能交给 AI

Triage 不是实现前的形式动作。它是授权边界。

在 triage 阶段,系统或 human 应该回答:

  • issue 是否有足够的用户问题描述;
  • 是否有当前证据或复现路径;
  • 验收标准是否具体;
  • 非目标是否明确;
  • 是否涉及高风险区域;
  • automation mode 是 analysis-only、implement-after-triage,还是 manual-only。

如果这些问题回答不了,AI 不应该直接实现。

Triage 的输出可以很短,但必须明确:这次 worker 被允许推进到哪里,在哪里必须停下。

Analysis 是为了发现真实代码边界

即使 issue 写得很好,也不能直接相信 issue 就是真实系统。

代码才是当前实现的事实。

Analysis 阶段的目标,是让 worker 对照 issue 和代码,判断:

  • 问题是否真实存在;
  • 相关代码在哪里;
  • issue 描述是否与代码一致;
  • 修复可能触及哪些模块;
  • 是否需要测试、截图、数据证明;
  • 是否出现停工条件。

很多任务在 analysis 后就应该停下。

例如:issue 说是 UI 问题,但代码显示需要改变 API contract;issue 说是简单 bug,但实际涉及权限、支付、安全或持久化数据;issue 的验收标准与当前产品行为矛盾。

这些情况下,最好的 AI 输出不是 patch,而是清晰的 analysis report。

Implementation 只应该处理已授权范围

只有当 triage 允许实现,analysis 没有触发停工条件,worker 才应该进入 implementation。

实现阶段也不应该变成“顺手优化”。

worker 应该只做 issue contract 允许的最小一致改动:

  • 修复目标问题;
  • 增加或更新相关测试;
  • 不扩大到无关重构;
  • 不改变非目标;
  • 不绕开风险边界;
  • 保留 evidence。

这看起来限制很多,但正是这些限制让 AI 产出的 PR 更容易 review。

一个小而明确的 AI PR,比一个“顺便整理了很多东西”的 AI PR 更有价值。

Gate 的意义是允许停止

很多团队把流程设计成“让 AI 一路跑到 PR”。

这不是真正的 gate。

真正的 gate 必须允许任务停止、降级或回到 human。

例如:

  • triage gate 可以把任务标记为 manual-only;
  • risk gate 可以把任务降级为 analysis-only;
  • analysis gate 可以输出 needs-human;
  • implementation gate 可以因为测试失败而停在 blocked;
  • evidence gate 可以阻止 PR 被当作完成品。

如果每个 gate 最终都只是让任务继续前进,那它只是装饰。

分阶段不是降低速度,而是降低返工

AI coding 的表面效率很高:它很快能改很多文件。

但如果任务边界错了,返工也会很快出现。reviewer 要解释为什么不该这么改,AI 要回滚或重做,issue 里的原始意图还可能被覆盖。

分阶段的价值,是把错误尽早暴露在便宜的地方。

triage 阶段发现不适合自动化,比 PR 阶段发现要便宜。analysis 阶段发现需要 human 判断,比合并后发现要便宜。evidence gate 发现验证不足,比线上发现要便宜。

AI workflow 不应该追求“每个 issue 都自动修完”。它应该追求“每个 issue 都在正确的边界上前进或停止”。