# AI Review 数据盘点 · 2026-05-13（近 5 天）

**生成时间**: 2026-05-13 17:10 +0800
**数据源**: Gitea API · FFAIWorkspace/workspace
**窗口**: 2026-05-08 17:10 → 2026-05-13 17:10 (5 天)
**采样**: 窗口内活跃 PR 112 个，其中 103 个跑过 AI Review

> 本报告**只列事实**。基于此报告做的 review 工作流优化决策见 issue #259。

---

## 1. 概览

| 指标 | 值 |
|---|---|
| 跑过 AI Review 的 PR | 103 |
| AI Review 评论总数 | 202 |
| 每 PR 平均 review 次数 | 1.96 |
| 单 PR 最多 review 次数 | 10 (PR #247) |
| DRY RUN 期评论 | 150 (74%) |

### Review 次数分布（按 PR）

| 次数 | PR 数 |
|---|---|
| 1 | 52 |
| 2 | 35 |
| 3 | 8 |
| 4 | 1 |
| 6 | 2 |
| 7 | 2 |
| 8 | 2 |
| 10 | 1 |

### Verdict 分布（按评论）

| verdict | 次数 | 占比 |
|---|---|---|
| pass | 127 | 63% |
| pass_with_risk | 56 | 28% |
| should_fix | 14 | 7% |
| needs_fix | 3 | 1% |
| block | 1 | 0% |
| _(未解析出 verdict)_ | 1 | 0% |

### Mode 分布（按评论）

| mode | 次数 |
|---|---|
| hard-rules-block | 171 |
| batch-summary | 21 |
| release-risk | 9 |

### Base 分支分布（按 PR）

| base | PR 数 |
|---|---|
| develop | 83 |
| staging | 13 |
| production | 7 |

> 解析质量：ok=201, partial=0, unparseable=1
> (老格式评论或 PR 描述里被 quote 的 AI Review 节选可能算 partial/unparseable)

## 2. 重复指控 Top（同 PR 内同 finding 跨 ≥2 次 review 出现）

> **state 缺失的硬证据**：同一个问题在同一 PR 被反复指出，但 AI 不知道前一轮已指出过。

共 5 组重复指控。Top 20：

| PR | category | message (≤60 字) | 出现次数 |
|---|---|---|---|
| #345 | 性能 | 沿用上轮：syncAttendees 是 Graph 通知热路径，本改动新增 2 次 DB 往返（meeting.... | 2 |
| #320 | 文档一致性 | 沿用上轮：CLAUDE.md「合并路径」段「等 ai-review 升 required check 后（trac... | 2 |
| #320 | 高风险路径合规 | 沿用上轮：本 PR 同时触碰 .gitea/workflows/** + docs/standards/** + ... | 2 |
| #320 | 可维护性 | 沿用上轮：.learnings/2026-05-11-gitea-enable-status-check-stuc... | 2 |
| #290 | docs | `.learnings/2026-05-10-check-existing-infra-before-judgin... | 2 |

## 3. PR 详表（review ≥2 次的 PR）

verdicts/findings 按时序排列；findings 列为 `hard/risk/sugg` 元组。

| PR | base | state | reviews | verdicts | findings 演化 |
|---|---|---|---|---|---|
| [#358](http://43.130.59.228/FFAIWorkspace/workspace/pulls/358) docs(learnings): force-push 共享分支后部署镜像... | develop | open | 2 | pass → pass | (0/0/0) → (0/0/1) |
| [#354](http://43.130.59.228/FFAIWorkspace/workspace/pulls/354) promote: develop → staging（FF-only 首次... | staging | merged | 2 | pass → pass | (0/0/2) → (0/0/3) |
| [#348](http://43.130.59.228/FFAIWorkspace/workspace/pulls/348) chore: sync-back staging → develop（解锁... | develop | merged | 2 | pass → pass | (0/0/0) → (0/0/0) |
| [#346](http://43.130.59.228/FFAIWorkspace/workspace/pulls/346) docs(workflow): Promotion PR 模板 + 脚本 ... | staging | merged | 2 | should_fix → should_fix | (0/5/2) → (0/5/2) |
| [#345](http://43.130.59.228/FFAIWorkspace/workspace/pulls/345) feat(meeting-attendance): 系列层参会人排除清单 ... | develop | merged | 3 | should_fix → should_fix → should_fix | (0/2/3) → (0/2/2) → (0/4/3) |
| [#343](http://43.130.59.228/FFAIWorkspace/workspace/pulls/343) fix(meeting-attendance): 单次删参会人级联系列 +... | develop | closed | 2 | pass_with_risk → should_fix | (0/2/3) → (0/3/1) |
| [#335](http://43.130.59.228/FFAIWorkspace/workspace/pulls/335) docs+ops(workflow): Promotion PR 模板/脚... | develop | merged | 2 | pass → pass_with_risk | (0/0/3) → (0/0/6) |
| [#333](http://43.130.59.228/FFAIWorkspace/workspace/pulls/333) fix(ai-review): push → pull/agent 模式，... | develop | merged | 4 | pass → pass → pass_with_risk → pass_with_risk | (0/0/3) → (0/0/3) → (0/1/3) → (0/1/3) |
| [#329](http://43.130.59.228/FFAIWorkspace/workspace/pulls/329) chore(deploy): #313 移除 deploy.sh / sm... | develop | merged | 2 | pass → pass | (0/0/1) → (0/0/1) |
| [#326](http://43.130.59.228/FFAIWorkspace/workspace/pulls/326) feat(help): 4 模块前端使用说明页 + 抽公共 HelpPag... | develop | merged | 2 | pass_with_risk → should_fix | (0/2/2) → (0/2/3) |
| [#325](http://43.130.59.228/FFAIWorkspace/workspace/pulls/325) release(2026-W20): develop → staging（... | staging | merged | 2 | should_fix → pass_with_risk | (0/1/3) → (0/1/3) |
| [#323](http://43.130.59.228/FFAIWorkspace/workspace/pulls/323) feat(dingtalk): 工龄展示 + 年假总览「显示所有状态」清查... | develop | merged | 3 | block → pass → pass | (1/2/3) → (0/0/1) → (0/0/1) |
| [#322](http://43.130.59.228/FFAIWorkspace/workspace/pulls/322) feat(ai-review): types 加回 synchronize... | develop | merged | 2 | pass → pass_with_risk | (0/0/2) → (0/0/2) |
| [#321](http://43.130.59.228/FFAIWorkspace/workspace/pulls/321) chore(learnings): Gitea Actions 触发/ch... | develop | merged | 2 | pass → pass | (0/0/0) → (0/0/0) |
| [#320](http://43.130.59.228/FFAIWorkspace/workspace/pulls/320) feat(ai-review): 退出 dry-run 转正为 devel... | develop | merged | 3 | pass_with_risk → pass → pass_with_risk | (0/0/3) → (0/0/3) → (0/0/3) |
| [#314](http://43.130.59.228/FFAIWorkspace/workspace/pulls/314) fix(test): 集成测试 batch by module 治 jes... | develop | merged | 2 | pass_with_risk → pass_with_risk | (0/2/2) → (0/3/2) |
| [#308](http://43.130.59.228/FFAIWorkspace/workspace/pulls/308) chore(deploy): #273 saga 收口 7 项 — cit... | develop | merged | 2 | pass → pass | (0/2/2) → (0/3/2) |
| [#304](http://43.130.59.228/FFAIWorkspace/workspace/pulls/304) feat(weekly-retro): W20 候选改进 — weekly... | develop | merged | 8 | pass → pass → pass → pass → pass_with_risk → pass_with_risk → pass_with_risk → pass_with_risk | (0/0/3) → (0/0/4) → (0/2/1) → (0/2/3) → (0/2/2) → (0/3/2) → (0/2/3) → (0/3/3) |
| [#303](http://43.130.59.228/FFAIWorkspace/workspace/pulls/303) feat(organization): 新增组织架构暗色网格视图（Phas... | develop | merged | 7 | pass_with_risk → pass_with_risk → pass_with_risk → pass_with_risk → pass_with_risk → pass_with_risk → pass_with_risk | (0/1/4) → (0/2/5) → (0/2/3) → (0/2/2) → (0/3/3) → (0/3/2) → (0/3/3) |
| [#301](http://43.130.59.228/FFAIWorkspace/workspace/pulls/301) feat(pr-workflow): 模板 v2 / AI Review ... | develop | merged | 6 | pass → pass → pass_with_risk → pass → pass → pass | (0/0/0) → (0/0/1) → (0/0/3) → (0/0/2) → (0/0/2) → (0/0/2) |
| [#297](http://43.130.59.228/FFAIWorkspace/workspace/pulls/297) fix(ai-review): 用 claude --json-schem... | develop | merged | 2 | pass → pass | (0/0/3) → (0/0/2) |
| [#296](http://43.130.59.228/FFAIWorkspace/workspace/pulls/296) chore(workflow): 收尾 #242 + 第一性原理方法论 +... | develop | merged | 2 | pass_with_risk → pass_with_risk | (0/0/5) → (0/2/4) |
| [#293](http://43.130.59.228/FFAIWorkspace/workspace/pulls/293) refactor(audit): 后端 IntegrityService ... | develop | merged | 2 | pass_with_risk → pass_with_risk | (0/2/2) → (0/1/3) |
| [#292](http://43.130.59.228/FFAIWorkspace/workspace/pulls/292) feat(agent-client): Demo v0.1 — Web 三... | develop | merged | 2 | pass_with_risk → pass_with_risk | (0/4/3) → (0/4/3) |
| [#290](http://43.130.59.228/FFAIWorkspace/workspace/pulls/290) chore(logging-system): simplify 内部实现 ... | develop | merged | 2 | pass → pass | (0/0/3) → (0/0/3) |
| [#288](http://43.130.59.228/FFAIWorkspace/workspace/pulls/288) fix(agent-pool): heartbeat 自动同步 task_... | develop | merged | 6 | pass → pass → pass → pass → pass → pass | (0/0/2) → (0/0/2) → (0/0/1) → (0/0/2) → (0/0/2) → (0/0/2) |
| [#286](http://43.130.59.228/FFAIWorkspace/workspace/pulls/286) fix(ci): CI/CD 审计 6 项修复（B3 timeout / ... | develop | merged | 2 | pass → pass | (0/0/3) → (0/0/3) |
| [#285](http://43.130.59.228/FFAIWorkspace/workspace/pulls/285) feat(agent-pool): 固化路径 + .code-worksp... | develop | merged | 2 | pass → pass | (0/0/4) → (0/0/4) |
| [#283](http://43.130.59.228/FFAIWorkspace/workspace/pulls/283) docs(ci): 重整 CI/CD 文档体系，分层「设计 vs 实施」 | develop | merged | 2 | pass → pass | (0/0/3) → (0/0/2) |
| [#281](http://43.130.59.228/FFAIWorkspace/workspace/pulls/281) feat(weekly-retro): 架构 doc + skill or... | develop | merged | 8 | pass → pass → pass → pass → pass → pass → pass → pass_with_risk | (0/0/2) → (0/0/3) → (0/0/5) → (0/0/3) → (0/0/4) → (0/0/3) → (0/0/3) → (0/2/2) |
| [#277](http://43.130.59.228/FFAIWorkspace/workspace/pulls/277) fix(ci): 补 PR #272 cutover 后 CI 工作流漏（... | develop | merged | 3 | pass → pass → pass | (0/0/0) → (0/0/1) → (0/0/1) |
| [#275](http://43.130.59.228/FFAIWorkspace/workspace/pulls/275) feat(workflow): 周复盘机制——Gitea Actions ... | develop | merged | 2 | pass → pass | (0/0/3) → (0/0/3) |
| [#272](http://43.130.59.228/FFAIWorkspace/workspace/pulls/272) refactor(env): dev 环境重命名 test，部署到独立机器... | develop | merged | 7 | pass → pass → pass → pass → pass_with_risk → pass_with_risk → pass | (0/0/3) → (0/1/2) → (0/0/2) → (0/0/4) → (0/1/3) → (0/2/3) → (0/0/2) |
| [#271](http://43.130.59.228/FFAIWorkspace/workspace/pulls/271) docs(daily-reports): lijian 2026-05-0... | develop | merged | 2 | pass → pass | (0/0/0) → (0/0/0) |
| [#268](http://43.130.59.228/FFAIWorkspace/workspace/pulls/268) fix(logging): 文档漂移 + 写入兜底 + dropOverf... | develop | merged | 2 | pass → pass | (0/0/2) → (0/0/2) |
| [#266](http://43.130.59.228/FFAIWorkspace/workspace/pulls/266) feat(agent-pool): 开发 agent 池——常驻 work... | develop | merged | 3 | pass_with_risk → pass → pass | (0/0/5) → (0/0/4) → (0/0/5) |
| [#263](http://43.130.59.228/FFAIWorkspace/workspace/pulls/263) chore: 删除未使用的 core TemporalService（0 ... | develop | merged | 2 | pass → pass | (0/0/0) → (0/0/2) |
| [#258](http://43.130.59.228/FFAIWorkspace/workspace/pulls/258) staging | production | merged | 2 | pass → pass | (0/0/1) → (0/0/2) |
| [#257](http://43.130.59.228/FFAIWorkspace/workspace/pulls/257) develop | staging | merged | 2 | pass → pass | (0/0/1) → (0/0/1) |
| [#255](http://43.130.59.228/FFAIWorkspace/workspace/pulls/255) docs(learnings): ERR-006 dev swap 100... | develop | merged | 2 | pass → pass | (0/0/2) → (0/0/2) |
| [#254](http://43.130.59.228/FFAIWorkspace/workspace/pulls/254) release: staging → production | production | merged | 2 | pass_with_risk → pass_with_risk | (0/5/2) → (2/4/2) |
| [#253](http://43.130.59.228/FFAIWorkspace/workspace/pulls/253) develop | staging | merged | 2 | pass_with_risk → pass_with_risk | (0/4/4) → (0/4/3) |
| [#248](http://43.130.59.228/FFAIWorkspace/workspace/pulls/248) chore(workflow): 产品哲学元规则 + 修 worktree... | develop | merged | 3 | pass → pass → pass | (0/0/0) → (0/0/2) → (0/0/0) |
| [#247](http://43.130.59.228/FFAIWorkspace/workspace/pulls/247) feat(audit): 详情页 4 项 P0 优化 + Sensitiv... | develop | merged | 10 | pass_with_risk → pass_with_risk → pass_with_risk → pass_with_risk → pass_with_risk → pass_with_risk → pass_with_risk → pass_with_risk → pass_with_risk → pass_with_risk | (0/2/4) → (0/4/4) → (0/2/3) → (0/3/4) → (0/4/4) → (0/2/3) → (0/3/4) → (0/2/2) → (0/1/4) → (0/3/3) |
| [#245](http://43.130.59.228/FFAIWorkspace/workspace/pulls/245) fix(site-attendance): 打卡页登录态用 /users/... | develop | merged | 2 | pass → pass | (0/0/2) → (0/0/2) |
| [#243](http://43.130.59.228/FFAIWorkspace/workspace/pulls/243) chore(ops): 统一基线 Node 22（CI/engines/d... | develop | merged | 3 | pass → pass → pass | (0/0/3) → (0/0/2) → (0/0/3) |
| [#237](http://43.130.59.228/FFAIWorkspace/workspace/pulls/237) chore(release): develop → staging（sit... | staging | merged | 2 | pass → pass | (0/0/2) → (0/0/3) |
| [#235](http://43.130.59.228/FFAIWorkspace/workspace/pulls/235) ci(deploy-uat): 跳过 production→staging... | develop | merged | 3 | pass → pass → pass | (0/0/0) → (0/0/1) → (0/0/2) |
| [#234](http://43.130.59.228/FFAIWorkspace/workspace/pulls/234) staging | production | merged | 2 | ? → needs_fix | (0/0/0) → (2/7/3) |
| [#232](http://43.130.59.228/FFAIWorkspace/workspace/pulls/232) develop | staging | merged | 2 | pass_with_risk → pass_with_risk | (0/3/3) → (0/2/3) |
| [#228](http://43.130.59.228/FFAIWorkspace/workspace/pulls/228) develop | staging | merged | 2 | needs_fix → needs_fix | (2/7/3) → (1/4/2) |

## 4. 关键发现

- 窗口内 **103 个 PR** 跑过 AI Review，共 202 条评论，平均每 PR **1.96** 次
- **51 个 PR (50%)** 跑了 ≥2 次 review —— **触发收敛 + state 去重的主要收益面**
- **3 个 PR 内部存在跨 review 重复指控**，共 5 组 —— state header 落地后这部分理论可清零
- **全部 150 条评论标 DRY RUN**，verdict=block 出现 1 次但**未实际阻断合并**（待 #171 转正后才生效）
- 单 PR 最多跑了 **10 次** review（PR #247）—— 重复消耗集中点

## 5. 数据局限

- **采纳率没真值**：DRY RUN 期没有强制反馈通道，「finding 在下次 review 消失」既可能是被修了、也可能是 AI 这次没指出。本报告**不推断采纳率**，留给人工抽样
- **误报率没真值**：同上，需要 sample ~20 条人工标注（5 verdict=pass + 5 verdict=needs_fix + 10 finding 抽样）
- **finding 文本指纹**：用 (category, message 前 60 字 lower-cased) 模糊去重，AI 偶尔换措辞会算成两条，这部分误差未量化
- **老格式评论**：schema 化（PR #297）前的评论 verdict 解析为空，归入 `_(未解析)_`

---

_Generated by `scripts/ops/ai-review-stats.py`. 跟踪 [#259](http://43.130.59.228/FFAIWorkspace/workspace/issues/259)._
