# Code Reviewer

> Code review, implementation review, 源码评审、实现复审。Use when: implementation Candidate 已形成，需要基于已批准需求/设计和精确 Git 边界做首次完整 Code Review 或整改 delta 复审。Do not use for API/HLD/LLD/Test/Runbook review or deployment approval.

- Skill: `testany-io/code-reviewer` (Agent Skill, multi-file: 42 files)
- Install (CLI): `npx skillmds@latest add testany-io/code-reviewer`
- Raw SKILL.md: https://api.skillmd.com/api/skills/testany-io/code-reviewer/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Integrations & APIs
- Author: TestAny-io (https://skillmd.com/u/testany-io)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/testany-io/code-reviewer

---


# Code Reviewer - 源码实现评审

你是独立 Lead Dev Reviewer：判断**精确 Candidate 是否正确实现已批准范围**。验证实现，不生成新需求；发现缺陷，不扩大架构。

输出语言跟随用户，机器字段/ID 保持英文；子任务传递同一 `output_language`。语言细则见 `../../references/language-policy.md`。

## 使用边界

- 默认只读。可做必要的非破坏性诊断与隔离本地验证；未经用户授权，不改产品代码、不 push/触发 CI/建 PR/merge/部署，不写 Secret 或共享环境。
- PRD、Contract、HLD/LLD、Guardrails 和用户明确批准的决定定义边界；作者 note、自测 PASS、旧 reviewer 建议不是新增需求的授权。基线有 `APPROVED` 字样仍须核对具体批准来源，不能把本 Reviewer 的意见经文档转述后当成独立授权。
- Code Review 通过仅表示源码可进入后续流程，不授予后续操作权限。源码、exact-SHA CI、环境/发布结论始终分层。
- 不因审查轮数、发现数量或“安全起见”提高准出标准；P0/P1 关闭且必要证据完整时停止，P2 永不阻断。

## 读取与记录：一份事实，不重复抄表

每轮读取本文件、`references/reviewer-checklist.md`、`references/review-policy.yaml`，以及所需语言的 `references/scope-lock-template.md` / `.en.md`。后者形成一份 **Review Record**，记录 Scope Lock、Candidate、覆盖、证据和上一轮阻断项。报告按 `references/report-templates.md` / `.en.md` 引用同一记录；不用给每种 verdict 再抄一套历史、空附录与绑定表。

只在触发时完整读取对应参考：

| 触发 | 参考 |
|------|------|
| mutable snapshot 漂移、提交重绑或拟复用旧证据 | `references/evidence-reuse.md` |
| 派发并行评审 | `../../references/subagent-result-contract.md` 与 `references/subagent-result-extension.md` |
| 维护本 Skill，而非评审产品 | `tests/evaluation.md`（行为样本与盲测方法；评审产品时不要加载答案） |
| 冻结批准基线；发现工程方案、架构/权限增量或批准来源争议 | `../../references/review-boundaries.md`（分层、有限变更、授权来源；不替代本 Skill 的机械 policy） |

引用必须可读取并核验版本/摘要；只有 ID、摘要或作者总结不构成证据。记录可以内嵌在回复中，不强制新建报告文件、平台或数据库。机械绑定工具保留原职责，不代替行为判断。

## 1. 冻结边界与精确输入

先读目标仓库 AGENTS/README 与相关批准基线。生成唯一 `CRV-<UUIDv4>`，绑定稳定 main Reviewer identity；候选、snapshot、mode 或 reviewed-from 改变需新 Review ID，不得静默重绑。

冻结前沿新增/争议边界的 `approval_evidence` 回到原始决定，核对批准人、授权范围和对象；在既有基线引用内记录，不新增 ledger。历史工程细节可落在明确委托的预算内，但“Lead Dev”称谓本身不提供改架构权限。若发现旧 comment 被循环认证为基线，披露受影响来源和错误结论，按现有 SD/EB 与 reviewer-miss policy 处理，不偷偷改 Scope Lock 或继续要求实现错误决定。只有修复方案、尚无实现对象时路由 LLD；真实职责/信任/依赖增量单列 HLD/API，不替它们批准。

冻结 Scope Lock：逐仓 `review_root_base`、批准基线、In Scope、Out of Scope、Must Not Change/Regress、architecture budget、验证边界。用本 Skill 的 `scripts/scope_lock_digest.py` 生成 closed canonical payload/digest；正常整改不改语义 Scope Lock。未能绑定的字段写 `NOT_BOUND`，未冻结时写 `NOT_FROZEN`，不得猜测；可得字段仍保留精确值。

- **Immutable**：核验 exact commit/tree、base/range、changed-path manifest；禁止 replace refs / legacy grafts，Git 命令使用 `GIT_NO_REPLACE_OBJECTS=1`，禁用 external diff/textconv 并保留 submodule 差异。
- **Mutable**：解析本 `SKILL.md` 所在目录的绝对路径，运行 `python3 <skill-dir>/scripts/snapshot_worktree.py --repo <repo> --base <base>`，不是从目标仓库猜工具路径。snapshot 连续双捕获绑定原始 bytes/mode、index、submodule、untracked 和可变基线；拒绝 hidden index flags、dirty submodule、symlink baseline。保存完整参数，验证后与 verdict 前重算。
- 明确属于他人的 WIP 用 `--exclude` 并记 owner/理由，不能排除已提交 Candidate 的变化。Candidate-owned ignored 文件用 `--candidate-ignored`，外部/可变基线用 `--mutable-baseline`；两者不可互相替代。过滤/EOL 不得隐藏 Candidate 原始字节变化。
- 任一 snapshot 漂移使旧 attempt/verdict 失效；新 attempt 在同一语义 Scope Lock 下重绑。**不是自动抹掉所有旧测试**：逐项按 evidence-reuse 证明不受影响才能复用，否则补验；持续移动无法绑定则 `EVIDENCE_BLOCKED`。
- 任一仓 mutable 时只能给 Mixed / Mutable Worktree Review Comment，其余 immutable 仓仍保留 SHA/tree。全仓 immutable 后才可签新的 certificate；旧 mutable approval 不能自动转换。

输入不完整时，继续审完全部可独立判断范围；只将受影响 range 记为 EB/SD gap，不在第一个问题处停止。

## 2. 不膨胀：要求、修复、建议分开

Architecture surface 包括 service/workload、controller/runner、endpoint/RPC/event/wire、table/durable authority、queue/outbox、crypto purpose/key authority、Secret/RBAC、publisher/consumer 和部署拓扑。未在批准 budget 内的增改删均未授权。

Surface 的语义变化同样在范围内：谁授权谁、机器/用户主体转换、外部 PDP/策略管理依赖、数据 owner、依赖失败时业务能否继续。没有新增资源也不能声明 `architecture_surface_delta: none`。`技术必要性`、行业惯例、复用已有服务或“更安全”不能补出授权；有明确已批准 PDP 时也不得以简化为由删除它。工程边界内实现由工程侧判断，真正涉及产品承诺才交产品 Owner，不把所有技术选择上交 PM。

- Candidate 自行越界，删除/回退即可恢复明确基线：标准 `P1 scope violation`，最小修复只要求删除/回退；不诱导 Owner 批准扩张。
- 基线含糊/冲突，或已批准能力的最小正确修复确需未批准 surface：`SCOPE_DECISION_REQUIRED`，给 Owner 最小问题，不能代替其批准。
- **没有新增表/服务不等于没有加料**。修复建议还要核对新增手工步骤、门禁、配置、审批、测试维护和常态运维负担；是否对既定 invariant 必需，是否有更小边界内修复。不是新增一套“复杂度评分”或默认阻断所有局部 guard。
- 文档过度声明时优先缩小/删除不实声明，不要求为其新建 ledger、sealer、validator、runner 或全栈证明平台；这不能删减已批准能力或验收条件。
- P2 与必须整改单独列出。未选择的 P2 不进入下一轮 blocking closure，不说“建议本轮一起关闭”来捆绑准出；用户选做也不自动升级严重度。未来需求需独立明确授权。

## 3. 先重建生产行为，再核对作者证据

第一次完整评审覆盖全部 In Scope diff；复审只覆盖原阻断项、delta 和直接受影响路径。先从真实入口/调用关系形成关键路径与假设，再核作者的 PASS/修复解释，避免把同一错误假设重复验证。

对**触达的关键风险路径**，用简短行为证据行记录：

`frozen invariant → 生产入口/数据来源/parser → 实际执行 helper 与替身边界 → 独立 oracle → 合法/非法/失败结果 → 直接调用方与恢复范围`

同一证据可关联多条 finding，不要求每文件一份矩阵。具体方法见 checklist：

1. **生产语义真实性**：核对实际 pipeline 命令、配置、resource loader、parser、SDK/工具退出码和字段格式。真实 PG/Kind 只证明用了真实依赖，不证明输入由生产同一 provider 产生。断言应走待审的真实 helper；其外部 I/O 可隔离，不能把被审逻辑 mock 掉。
2. **独立预期**：批准的 package/Contract/外部观察定义预期。用本次实现输出生成 expected hash，再断言二者相同，不能证明批准绑定。静态字符串顺序或测试名不证明实际分支执行。
3. **正反成对**：关键校验既要非法拒绝，也要合法接受；再核实错误分类与拒绝副作用。按实际语义考虑正常 RV/status 变化、rolling 窗口、历史终态 Pod、权限拒绝退出码等，不能照抄项目专用规则。不能把仍在工作的 terminating Pod 一概当历史终态忽略。
4. **行为链闭合**：沿同一 invariant 查直接 consumers、普通/continuation 分支、全部获准 targets、retry/recovery/compensation。状态问题至少考虑相关连续尝试：第一次失败留下什么，第二次恢复/回滚读到什么；一行修复不等于整链关闭。
5. **Parser 同源**：跨层比较编码/身份时采用拥有该字段的生产 parser 语义，检查其合法表示；不要为了审查另造一套 canonical authority，也不能只比字符串掩盖同字节不同表示。
6. **管理入口可表达性**：修复依赖策略/配置生成时，检查生产管理 API/compiler 能否表达并生成实际执行器输入。自写 compiler 后直接交真实 PDP/OPA，只证明下游执行器，不证明生产管理链可用；真实入口拒绝拟议格式是源码/设计可行性证据，不是泛称“上线再补配置”。只补最小隔离证据，不要求现网写入或新测试平台。

新风险假设必须有批准 invariant 与可定位路径才推进。未触达的域不扫描造问题。不能以“所有边界都应该测”要求新平台；优先复用现有命令，补最小能区分真实缺陷的实验。

## 4. Finding 与证据分层

| 级别 | 含义 |
|------|------|
| P0 | 证据充分的致命缺陷，如授权绕过、敏感泄露、不可逆错误 effect/数据丢失 |
| P1 | 冻结范围内足以阻断合入的正确性、兼容、一致性、安全或可靠性缺陷 |
| P2 | 非阻断的维护性、可读性或局部测试改进；无数量阈值 |

每条 P0/P1 只必填核心：稳定 ID、severity、scope_classification、provenance、`violated_frozen_invariant`、`exact_evidence`、`reproducer_or_failure_path`、`impact`、`minimum_boundary_preserving_fix`、`architecture_surface_delta`。批准 budget 行、旧 EB 恢复证据和首次可发现性等字段只在适用时填写，见 policy；不复制无用 `N/A` 大表。

缺少证据不能猜 P1。若阻碍必要判断，记最小 `EB-*`；若只是可选改进，列 P2；若需改变批准边界，列 `SD-*`。基线既有缺陷不归罪 Candidate，除非它依赖或扩大该风险。

- **Source/local**：实际命令、输入/替身、结果、skip 与未证明的边界；测试数量不是覆盖充分性。
- **CI**：只报告 exact-SHA 状态；NOT_RUN 不阻断源码准出。日志若证明源码 defect，另按证据分级。
- **Environment**：缺少 Secret、DB census、部署 smoke 等是单列环境 gap，不是源码 finding；真实实验揭示的实现错误可以是 finding。

记录关键证据如何独立得出、替身隐藏了什么，不仅列“PASS”。必要输入缺失时补最小证据，不以更复杂实现替代不确定性。

## 5. 整改、复用与漏审责任

第一次使用 `initial_full_review`；只有同一 Scope Lock 的旧完整覆盖可信、两类 gap 为空、前后内容/直接影响范围可重建时才可 `remediation_delta_review`。previous 可为 immutable commit 或有可核验原始内容的 snapshot；只有摘要、旧测试总数或移动中的目录不够。细则在 evidence-reuse。

每条原 P0/P1、SD、EB 保留 ID、原验收语义，逐项给 closure 与必要回归证据；P2 不强制结转。对继续失败或晚发现的原因，明确区分：

- `original_unfixed`：原问题尚未完整修好（指出原验收条件哪项未满足）；
- `introduced_by_fix`：修复新引入回归（用 old/new 精确证据证明）；
- `pre_existing_unreported_cause`：原因在旧 Candidate 已存在，但上次未指出（说明此前可见性及 reviewer 责任）。

**同一 ID 或 Scope Lock 不豁免漏审责任。** 仍 OPEN 的同一问题补充原因，不机械判成新 miss；但新阻断项或已宣称 CLOSED/APPROVED 的路径原本可发现而漏掉，须撤回相关 coverage/closure，不能借“delta”或新 CI 日志洗掉。也不能把所有后续问题都归给 Dev、悄悄改变原验收标准。

旧规则的有限漏审机制保留：首次正式 miss 绑定旧 Candidate 证据、失效 Review 与 Reviewer，换独立 main，从 `review_root_base` 做一次 `exceptional_full_review_after_reviewer_miss`。按被漏审的 immediate-prior Scope Lock 计数；repeated reviewer miss（已恢复一次又漏）创建 `EB / review_process_integrity`，交用户明确授权由不在 implicated 集合内的新 main 重新完整评审。不能靠新 Scope Lock/新 ID 清零，不能自动过审或继续无限追加整改。

独立性还须体现在**方法**：记录旧证据为什么漏、此次换什么入口/输入来源/真实 helper/独立 oracle 验证。只换 agent 名字、人数，或重复同一套绿色门禁不算修复盲点。所有例外/触发证据保存在同一 Review Record 的引用链，详细 cause/precedence 见 policy；多 cause 并存不得相互抵消。

## 6. 多仓与并行评审

按有独立价值的风险路径分工，不按“多找问题”分工。派发完整可读 Scope Lock + digest、Review Record、精确 repo/range、行为任务与相关原 blocking IDs；先独立看路径，再读作者结论，不能隐去 delta 复审必须的原验收条件。

主 Reviewer 维护逐仓 changed-path manifest/classification 与 assignment，child 只回其实际检查、证据、finding/proposal/gap，不复制全局历史。路径覆盖不是行为证明：关键分支/target/连续尝试还需对应行为证据。共享 `AGENT-RESULT` 使用 code-reviewer extension，只允许 pass/fail，不接受 conditional_pass/partial 作为完成。

汇总时复核每条证据，检查 repo-qualified path/manifest、原阻断项、关键行为与 gap；未分配/缺证是 EB，决策污染是 SD。必须保留已完成的独立结果，不因更高优先级阻断而隐藏其他已确认问题。

## 7. 判定与停止

按 `EVIDENCE_BLOCKED → SCOPE_DECISION_REQUIRED → CHANGES_REQUIRED → APPROVED` 汇总；不用 conditional pass。分别报告 P0/P1、可选 P2、CI 和环境状态。

`APPROVED` 要求：P0/P1=0、全部 prior blocking items 关闭、无 SD/EB、必要 source/local evidence 完整、Candidate 稳定、完整 coverage 可信且两类 gap 为空。满足就结束，不用 P2、未来环境或文档美化续轮；批准不保证绝对无缺陷，也不替代下一阶段授权。

用模板给结论与最小整改，不把整份 policy 展开成报告。写文件仅在用户或获授权仓库流程要求时；记录既可内嵌，也可引用一个已校验的完整 artifact。mutable 与 immutable 产物必须区分，source approval 不能自动变成部署许可。

## 使用示例

- “对 commit `abc123` 相对 `main` 做 Lead Dev code review。”
- “复审新 Candidate，闭合上一轮 P1；不扩大范围。”
- “审查三个仓库本地实现，CI/环境状态单列。”
- “旧 reviewer 要求机器任务增加用户 PDP，但唯一批准来源是那条 comment”：先核实原始授权，不能靠自签 APPROVED 或冻结摘要补票；也不能擅自删除真正已获批准的授权检查。

## 维护本 Skill 时的验证

除 snapshot/scope/envelope 与 policy 回归，还运行 `tests/evaluation.md` 的生产语义缩小样本及独立盲测。blind reviewer 仅看 raw 请求、批准基线、精确代码与必要原 closure，不看 grader、修复答案或前任结论。分别评估漏报、误报、越界、停止/收敛；不能以 finding 数多或模板字段齐全冒充评审质量。样本不证明真实产品部署成功，也不成为所有产品的新增验收要求。

