# AI Review `pass_with_risk` 不会触发 auto-merger；遇到这种情况怎么处理

**触发日期**：2026-05-16
**载入 PR**：#395 feat(agent) Phase 1 质量闭合批

## 现象

PR 所有 CI check 全绿（build / contract / env-coverage / backend-integration 等），但 auto-merger 不合：因为 `.gitea/workflows/auto-merge.yml` 严格要求 `verdict=pass`，**不接受 `pass_with_risk` / `should_fix` / `block`**。

## 为什么会卡在 `pass_with_risk`

AI review 把 risk 等级的发现也会让 verdict 降到 `pass_with_risk`，**即使你已经在代码里加了 TODO 注释 / .learnings 落点 / PRD 备注「延后处理」明确 ack**。AI 的判定是基于代码客观状态，不会因为「作者声明延后」就降级。

典型场景（PR #395 实测）：
- in-memory Map 多副本部署会失效 → 即使用户明确决策 PR0.6 一起做，AI 仍标 risk
- 大模块重构涉及 schema + API + UI + 权限 → 即使主题单一，AI 可能标 "高风险路径合规 warn"

## 三个出口

| 出口 | 何时用 | 代价 |
|---|---|---|
| 1. **彻底解决 risk** 升 verdict 到 pass | risk 范围在本 PR 主题内 | 工作量增加 |
| 2. **加 `do-not-auto-merge` label** + 走人工合并路径 | risk 是用户已决策延后的部分 / 跨 PR 工作 | 需另一位团队成员 approve+merge（CLAUDE.md 禁止作者自合） |
| 3. **降级 risk 到 suggestion** 让 AI 重新评 | risk 实际是低优先 + 你能用代码/文档让 AI 信服 | 不保证 AI 给面子，可能仍 pass_with_risk |

## `do-not-auto-merge` label workflow

**label 不一定存在**——CLAUDE.md 文档化了但 repo 里没创建（PR #395 首次使用时手动创建）：

```bash
# 1. 创建 label（仅首次需要）
curl -X POST -H "Authorization: token $GITEA_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"do-not-auto-merge","color":"#ff8800","description":"标记后 auto-merger 跳过本 PR"}' \
  http://43.130.59.228/api/v1/repos/FFAIWorkspace/workspace/labels

# 2. 加到 PR
scripts/ops/gitea label add <PR#> do-not-auto-merge
```

打上 label 后：
- auto-merger 看到 label 直接跳过本 PR
- 团队另一位成员需在 Gitea web UI 点 Approve → Merge（CLAUDE.md「人工兜底」路径）
- PR body 里建议加段说明为什么走人工合并，方便 reviewer 理解上下文

## 何时不该走 label 路径

- AI 标的 risk 是**契约面 / 安全 / hard_block 隐含**类 → 必须修，不能 label 绕过
- PR 主题在本 PR 范围内能修但你嫌麻烦 → 修了，别 label
- 仅 suggestion 级 → AI 一般直接给 pass，不会到 pass_with_risk

## 反例（不要这样做）

- ❌ 看到 pass_with_risk 就反复推 commit 试图说服 AI（除非真有新证据，AI 判定基本是确定性的）
- ❌ 自己 approve+merge（CLAUDE.md 严格禁止作者自合 feature PR）
- ❌ 跳过 AI review 直接人工合（破坏审计 trail，team 信任成本高）
