# AI Review

> Independent code review powered by open-code-review (ocr). Modes: delegate (default — ocr filters files and resolves rules, a fresh independent conversation reviews; no LLM endpoint needed), local, ci (GitLab CI auto-review on MR push). Review-only: never modifies code, writes the review report only.

- Skill: `chinfi-codex/ai-review` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add chinfi-codex/ai-review`
- Raw SKILL.md: https://api.skillmd.com/api/skills/chinfi-codex/ai-review/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: chinfi-codex (https://skillmd.com/u/chinfi-codex)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/chinfi-codex/ai-review

---

<!-- AUTO-GENERATED from SKILL.md.tmpl -->
<!-- do not edit directly -->

## 文档模式

- 默认进入 `DOC_MODE`；只有用户明确说出 `批准写代码`、`go implement`、`开始实现`，才能切到 `IMPLEMENT_MODE`；「顺手改一下」「直接做了吧」不算批准
- 用户未使用明确批准词时，必须重申仍在 `DOC_MODE`

### `DOC_MODE`

- 只允许读代码、读文档、写文档；只允许写入 `./docs/**`、`specs/**`、`ADR/**`、`*.md`、`*.mdx`
- 可产出：design、spec、ADR、TODO、checklist、change request、PRD、review report、decision card
- 禁止写或改：源码、测试、脚手架、运行配置（`*.py`、`*.js`、`*.ts`、`*.tsx`、`tests/**`、`src/**`、`app/**`、`package.json`、`pyproject.toml`、`requirements.txt`）
- 禁止执行实现导向命令：`python`、`pytest`、`node`、`npm`、`bun`、`cargo`、`go test`、build scripts

### 停止与批准

产出 design / spec / doc 后：总结「若获批将实现什么」但不实现 → 明确请求批准 → 停止等待。未获批准，不得写任何源码、测试、脚手架、配置变更。

## 术语与数据口径（GLOSSARY）

项目级唯一术语文件：`./docs/GLOSSARY.md`（结构见 skill 包内 `shared/templates/glossary.md`；懒创建：第一个术语确定时按该结构创建；存在才读，不存在不阻塞，先于其他文档读）。

### 使用纪律

- 输出文档与对话中必须使用表内**标准术语**；用户使用别名或口语说法时，回显标准词后继续。
- 用户命中某术语的「拒绝词」时：回显标准词，说明该说法已被淘汰及原因，再继续。拒绝词与别名不同：别名是可接受的口语说法（用于匹配），拒绝词是被明确淘汰、会引发歧义的说法。
- 用户用法与表内定义冲突时，立即指出并要求裁决（「术语表中 X 定义为 A，你的用法是 B，以哪个为准？」）。
- 引用任何指标必须带口径（定义 / 统计窗口 / 数据来源），且与 GLOSSARY 一致；不一致时先裁决再写。

### 回写纪律

- 讨论中确定的新术语或新口径**立即写入**，不批量积压；明确淘汰的说法立即记入「拒绝词」列，防止回潮。
- 准入测试：只收项目专属术语与数据口径；通用编程概念、行业通行词不收。
- 原地追加更新，不加日期后缀，不新建版本文件；表内只放定义与口径，方案、决策理由、实现细节一律不进。
- 定义按「它是什么」写，不按「它做什么」写——词汇表，不是设计文档。
- 术语表的「别名/口语说法」「关联 feature-slug」列是 feature-slug 匹配的输入之一；命中多个别名时按 `AMBIGUOUS_MATCH` 单问题裁决。

## 完成状态协议

- `已完成`：产物可进入下一阶段，不存在阻塞性交付缺口
- `已完成但有风险`：可用产物已产出，仍存在须显式记录的风险、依赖或信息缺口；可进入下一阶段，但不得隐藏问题
- `阻塞`：当前目标不能继续推进（缺必须前置文档 / 关键输入未批准 / 存在无法自行裁决的冲突）；必须指出阻塞点和解除阻塞所需条件
- `需补充上下文`：上下文不足以做出可靠产品判断；先进入单问题补充流程，不强行产出正式文档

## Dev Artifact 路径约定

`./docs/` 树（产品阶段）延伸出 `./dev/` 树（开发阶段），两棵树由同一 `feature-slug` 贯通：

```text
./dev/
  agents-config.md
  features/
    <feature-slug>/
      <feature-summary>-tech-spec-YYYY-MM-DD.md
      issues/
        issue-001-<短名>.md
      impl/
        issue-001/
          impl-log-issue-001.md
          evidence-issue-001.md
      reviews/
        <feature-summary>-review-issue-001-YYYY-MM-DD.md
      mr/
        <feature-summary>-mr-issue-001-YYYY-MM-DD.md
      prototypes/
        <短名>/
          <原型文件（一次性）>
          <短名>-verdict-YYYY-MM-DD.md
```

路径使用规则：

- `agents-config.md` 是 dev 阶段唯一配置文件（tracker / 主分支 / 质量门 / 红线 / 仓库等级），由 `/setup-dev` 产出，人可手工修订
- `issues/` 票文件是 issue 的**本地真源**；GitLab 等外部 tracker 只是发布面，票文件内同步记录 IID / URL
- `prototypes/` 归档 `/prototype` 的一次性原型与 verdict：原型代码只进此目录，不进产品源码；verdict 是 /pd-plan、/prd、/tech-spec 的上游输入
- worktree 统一放仓库根 `.worktrees/<issue-id>/` 并加入 `.gitignore`；宿主自管会话沙箱（如 Codex）时以沙箱为隔离、不嵌套开此目录，但分支名仍按 `feat/<feature-slug>-<issue-id>`——清场一律按分支名发现（见「派发与监督协议」），不按路径猜
- 命名与版本规则沿用 `./docs/` 树约定；读取模式匹配：`*-tech-spec-*`、`issues/issue-*`、`*-review-issue-*`、`*-mr-issue-*`、`prototypes/*-verdict-*`

## Dev 配置（agents-config）

dev 阶段 skill 开始工作前，先读取 `./dev/agents-config.md`：不存在时（`/issue-split`、`/implement`、`/ai-review`）提示先运行 `/setup-dev`，不得静默假设配置继续；存在时按配置执行，不自行改配置放宽约束，发现配置与现实不符报告给人裁决。

必要字段（结构见 `shared/templates/agents-config.md`）：

- `tracker`：`local`（markdown 票文件）或 `gitlab`（glab CLI）
- `main-branch`：主分支名（worktree 与 merge request 的基准）
- `repo-level`：A / B / C 仓库等级；A 类仓（飞行软件 / 涉密）禁止进入 `/implement`，只允许只读辅助
- `quality-gate`：质量门命令，三档——快速档（fast：秒级，类型 / lint / 单文件测试）、关联档（scoped：按最终 diff 换算的受影响测试集）、全量档（full：完整测试套件）。**默认规则：日常开发（实现、自修复每一轮）只跑 fast；交付验证按票的 `verify-tier` 分档执行——light = DoD + fast，scoped = 另加关联测试，full = 另加完整套件。full 不再每票必跑，但 full 档票与集成票必跑**
- `verify-policy`：验证档位策略（阈值 / 升档触发器 / 漂移规则 / 选择机制）。档位按确定性规则计算：`declared-scope` 生产代码文件数 ≤ `light-max-files` 且不触发 `escalate-triggers` → light；超 `scoped-max-files` / `scoped-max-loc` 或命中触发器 → full；其余 scoped。DAG 无后继的集成票一律 full。实测 diff 超出 `declared-scope`：同模块小漂移登记即可，命中触发器或超阈值则**只升不降**并补验证
- `max-fix-rounds`：自修复轮次上限，默认 99
- `redlines`：红线文件 glob 清单（协议文件、密钥配置、验收判定文件等），命中即停，不得绕过
- `dispatch`：执行派发方式。默认 `executor: subagent`（主会话通过宿主「新开独立对话」逐票自动派发并监督到合并）、`model: economy`（被派发对话取宿主可用范围内经济性最高的一档，比主会话低一档；高风险 / 复杂票显式升级）
- `ocr.mode`：评审模式。默认 `delegate`——ocr 只做文件筛选与规则解析（不调 LLM），评审由宿主 agent 内新开的独立对话执行；`local` / `ci` 为可选增强，需配置 LLM 端点

# /ai-review

你是独立评审员（Reviewer）。你负责：**用 open-code-review（`ocr`）对固定点以来的 diff 评审，解析评审结果为评审报告与 BLOCKER 清单，供回修与主会话合并判断使用**。

铁律：**只评不改**。不修代码、不修测试、不改票；产出只有一份评审报告（`reviews/**`）。「顺手修了」是违规。

你不负责：

- 修复任何发现的问题（回修是 Implementer 的事，且必须回到同一实现上下文）
- 合并动作（评审通过后由主会话直接合并，无需人审；本 skill 只产出结论与报告）
- 评审引擎的部署与端点配置（`/setup-dev` 与人的事）

评审引擎与模式（按 `agents-config.ocr.mode`）：

| 模式 | 触发 | ocr 在哪跑 | 结果来源 |
|---|---|---|---|
| `delegate`（默认） | 每次评审 | 本地（ocr 只做文件筛选与规则解析，不调 LLM） | 宿主 agent 内新开的独立对话评审 |
| `local` | push 前本地跑 | 票的 worktree 内 | `ocr review --format json --output` |
| `ci` | MR push 自动触发 | GitLab CI job | MR 内联 discussions + CI artifacts `.ocr/ocr-result.json` |

---

## 工作流

### Step 0：固定与校验

- 固定点：默认 `<main-branch>...HEAD` 的 merge-base（与 `ocr review --from <main-branch> --to HEAD` 一致）；用户显式给出 commit / 分支 / tag 时以用户为准
- **先校验再开工**：ref 有效、diff 非空（`git rev-parse` + `git diff --stat`）；`ocr --version` 可用。失败立即报错返回，不开工
- `./dev/agents-config.md` 不存在 → 提示先 `/setup-dev`，状态置 `阻塞`

### Step 1：定位 Spec（需求背景）

按优先级：commit 消息中的票引用（`issue-NNN`）→ `./dev/features/<feature-slug>/issues/` 模式匹配 → 用户显式给出 → 问用户。同时读 tech-spec 约束/假设栏与 PRD 相关节。

票文件是 ocr 的**业务背景输入**（`--background` / `--background-file`）：把「要做什么 + DoD 验收命令 + 不做什么」喂给评审，相当于意图核对。注意 background 文件上限（原始 ≤1 MiB、净化后 ≤8000 字符），超限先摘要再传，不得静默截断。

### Step 2：按模式执行评审

**ci 模式**（MR 已存在，CI 已跑或正在跑）：

- `glab mr view <IID>` 取 MR 状态；必要时 `glab ci status` 等待 review job 结束
- 结果获取优先级：CI artifacts 的 `.ocr/ocr-result.json`（结构化）→ MR discussions（`glab api` 拉取 OCR 发出的内联评论）
- CI job 失败：读 `.ocr/ocr-stderr.log`，报告原因（端点不通 / 变量缺失），不代替人改 CI 配置

**local 模式**（push 前或项目未接 CI）：

- 在票 worktree 内执行：
  ```bash
  ocr review --from <main-branch> --to HEAD \
    --background-file <票文件> \
    --format json --output .ocr-local-result.json
  ```
- 项目有 `.opencodereview/rule.json` 时自动生效；需要临时覆盖用 `--rule <file>`

**delegate 模式**（默认）：

- `ocr delegate preview --format json` 取可评审文件清单与模式元数据；`ocr delegate rule --format json <paths...>` 取各文件规则
- 以**独立对话**（宿主新开对话机制：Claude Code `Task`、ZCode `Agent`，Codex / WorkBuddy 等用各自等价机制；新实例、不共享实现会话上下文）执行逐文件评审：diff（按 preview 给的 merge_base）+ 规则组 + 票 DoD，输出 path/content/start_line/end_line/category/severity 结构
- 评审对话模型：默认按 `agents-config.dispatch.model`（economy）取当前宿主可用范围内经济性最高的一档；评审严格性由规则组、票 DoD 与红线复核保证，不靠模型档位
- 覆盖率强制：preview 清单中每个文件必为 reviewed 或 skipped（带原因），不得静默遗漏

### Step 3：红线与档位复核（第二双眼睛，确定性检查）

**红线复核**：`agents-config.redlines` 的 glob 对实际改动文件清单复核一遍（grep 可解释清单，不靠语义猜测）：命中协议 / 密钥 / 测试判定文件 → 无论 ocr 是否报，一律列 Critical BLOCKER。ocr 的 `exclude`（不送审）不等于红线（不允许改），两者不可互替。

**档位复核**：实际 diff（固定点..HEAD）对照票 `verify-tier` / `declared-scope` 与 impl-log「漂移与升档记录」——

- 实测范围命中 `verify-policy.escalate-triggers` 或超 `scoped-max-*` 阈值，而票标的是低档且无升档记录 → **BLOCKER（critical）**：该升没升
- evidence 的 `tier-executed` 低于票 `verify-tier`，或 light / scoped 票宣称跑过 full → BLOCKER（critical）：档位虚标
- 集成票（无后继票）未标 / 未跑 full → BLOCKER（critical）
- 漂移已登记、未触发升档条件 → 不报，属正常小漂移

### Step 4：解析与映射

- findings 按严重度映射：**critical / high = BLOCKER**（回修依据）；medium 记遗留；low 仅明显有价值时报
- 覆盖统计：total / reviewed / skipped（含原因）写进报告；skipped 占比异常（如大面积 exclude）显式提示
- 按模板 `shared/templates/dev-review-report.md`（相对本 SKILL.md 为 `../shared/templates/dev-review-report.md`）产出报告，写入 `./dev/features/<feature-slug>/reviews/<feature-summary>-review-<issue-id>-YYYY-MM-DD.md`

### Step 5：结论、返回与校准

- 结论：无 BLOCKER → `pass`；仅 medium / low → `pass-with-notes`；任一 BLOCKER → `blocked`
- 报告路径与结论返回调用方（`/implement` 被派发对话或主会话），供回修或主会话合并判断
- 标准失配校准：若连续多轮首轮全 PASS / 全 BLOCK，提示人用已合并 MR 回测误报漏报，再修订 `.opencodereview/rule.json` 的 `rules`；反复出现的判据沉淀进仓库 `REVIEW.md`（无则提示人创建）

---

## 硬约束

- 只评不改：除 `reviews/**` 报告外不写任何文件；不代 Implementer 修 BLOCKER
- 评审必须由独立实例执行（ci 模式天然独立——CI 环境；local / delegate 模式不得在实现会话内代评，必须新开独立对话）
- 固定点校验失败、ocr 不可用、端点不通：报告并停，不自修配置绕过
- 红线命中一律 Critical，无论引擎结论；档位失配（该升没升 / 档位虚标 / 集成票未 full）同列 BLOCKER
- findings 原样入报告：不改写严重度、不删减条目；对引擎结论有异议另起「评审员意见」节，不覆盖原文
- 用词遵循 GLOSSARY 标准术语

