Deep Review
多维度拉取请求审查调度器。主代理负责收集原始材料、按风险路由和综合结果;每个审查维度在彼此隔离的全新上下文中独立判断。
资料研究、规则冲突审计和技能适配不因出现“审查”一词而触发本技能。明确代码差异但没有拉取请求时,以用户指定的基准和目标版本收集等价材料,跳过拉取请求状态与身份检查。
先判断触发来源。用户明确只要求修改待评审状态时不自动启动审查;请求“跑到待评审”则按当前工作流完成适用的首次评审并交接,不自动循环修复。用户明确要求运行本地深度审查时直接执行。其他待评审请求:没有为当前拉取请求配置并实际运行的持续集成评审时,第一次本地深度审查直接执行;已有持续集成评审时,先询问用户是否还需要本地深度审查;是否存在有效的持续集成评审无法判断时也询问用户。
确定需要本地审查后,再检查当前任务、拉取请求正文或讨论、已归档记录中是否已有可识别的正式审查记录。已有记录时,用户明确要求再次审查,或已授权的收敛目标需要下一轮审查时直接执行。除此之外,代理主动建议重跑时先询问用户。记录彼此冲突或无法判断时询问用户。没有持续收敛授权时,不因修复了上一轮发现自动开始下一轮深度审查。
旧报告须识别其基准、头提交与覆盖的路径和维度;它只能证明对应版本的审查结果。当前版本按变化及其影响判断哪些证据仍有效、哪些维度需要补审,不把旧报告当作本版完成,也不机械重跑全部维度。补审仍遵守上述授权边界。
Prerequisites
- 已确定目标拉取请求和基准分支,
gh auth status正常。 - 正式审查面向 Ready 拉取请求;Draft 只做用户明确要求的早期反馈。
- 找到本轮权威需求来源;缺失时仍可审查其他维度,但必须把需求符合性标记为不完整。
1. 收集审查数据包
运行 gh pr view --json number,title,body,baseRefName,headRefName,baseRefOid,headRefOid 与 gh pr diff,并读取:
- 当前对话里用户对本任务的原始要求和最新明确决定;
- 与本分支相关的
docs/specs/、docs/long-running-specs/、docs/worklog/、任务或问题; - 仓库指令以及本次涉及的
docs/rules/; - 原始差异与必要的未改动上下文。
提交信息、拉取请求里的实现理由和实现代理的自主决定可以帮助定位,但不是需求权威来源,不能覆盖用户或已确认契约。
2. 按事实与风险表面分类
标签可以多选,不使用统一的“平凡 / 非平凡”二分替代判断:
| 标签 | 命中条件 |
|---|---|
executable-behavior |
生产代码、运行时配置、schema、数据转换、命令或其他会改变执行结果的差异 |
tests |
新增或修改测试、测试工具、夹具或测试规则 |
maintained-code |
需要长期维护且存在实质逻辑、结构或接口变化的代码;机械生成物和纯格式不算 |
security-sensitive |
信任边界、身份与权限、秘密、外部输入、文件或网络、支付、隐私数据、代理工具执行能力 |
ui |
Web、移动端、桌面端、终端交互或命令行用户体验 |
performance-sensitive |
热路径、大数据量、高频或并发路径、资源预算、第三方或模型调用成本 |
architecture |
模块或组件边界、依赖方向、公共接口、领域职责、持久化模型或迁移方式发生实质变化 |
agent-extension |
技能、插件清单、市场清单、代理、钩子、模型上下文协议配置、AGENTS.md 或 CLAUDE.md |
一行修复仍可能命中正确性、测试或安全;新增普通文件本身不等于架构变化;纯文档也可能改变权威契约并触发需求与文档审查。
3. 发现并校验审查者
内置审查者位于 references/reviewers/。主代理只读取每个文件的 YAML frontmatter 做编排,把文件绝对路径交给审查代理,由审查代理自读正文。若执行环境无法解析仓库绝对路径,才内联该文件正文。
项目审查者位于 docs/rules/review/*.md。用 git rev-parse --show-toplevel 定位仓库根,同时从受影响路径向上查找更近的 docs/rules/review/;两层都读取,冲突时子包级优先。正式拉取请求审查只执行基准分支的可信版本。头分支新增或修改的项目审查者仍作为差异交给 skill-plugin-quality 审查,但本轮不执行,合并后才影响后续审查。非 git 仓库回退当前目录,但只有用户明确确认这些文件可信时才执行;否则列为审查缺口。
frontmatter 字段
项目审查者必须有合法 YAML frontmatter。主代理只解析元数据。
必填:
name:kebab-case,且与文件名一致;best_for与value:非空字符串;extends: <内置审查者名>:作为宿主维度的项目专属补充;或extends: standalone:作为内置维度没有覆盖的独立维度;trigger:always或当前路由表支持的一个tag:<标签>;reasoning:flagship或workhorse;tools:只包含Read、Grep、Glob、Bash,且至少包含Read。
可选:
effort:仅在需要覆盖默认推理投入时设置,取值须受当前运行时支持,不写死模型名。
任一必填字段缺失或非法(包括 extends 指向不存在的宿主),都不做正文语义猜测,也不回退读取旧 ## Metadata;将该文件列入“审查缺口”。新建审查者避免与内置名称重名;历史同名项只要元数据合法且显式声明宿主或 standalone,仍兼容执行。
被吸收的项目审查者与宿主组成一个数据包。宿主默认条件或任一项目扩展的 trigger 命中时,都运行宿主,避免项目规则因宿主默认条件未命中而静默失效。每个数据包显式携带来源标签:仅来自宿主时写 (宿主名);项目补充产生的发现写 (宿主名 / 项目审查者名);独立审查者写 (项目审查者名, standalone)。补充型审查者继承宿主的输出契约,不自行改变字段。
使用 reviewer-creator 创建或修正项目审查者。
4. 路由
| 审查者 | 触发条件 |
|---|---|
spec-conformance |
始终执行 |
docs-sync |
始终执行 |
correctness |
executable-behavior |
test-quality |
executable-behavior 或 tests |
code-quality |
maintained-code |
security |
security-sensitive |
ux |
ui |
performance |
performance-sensitive |
architecture |
architecture |
skill-plugin-quality |
agent-extension |
correctness 同时覆盖正常、边界和失败路径,不再单独分派鲁棒性审查者。项目独立审查者按自己的合法 trigger 路由。
5. 独立执行
每个维度必须在全新、干净的上下文中运行:
- 不继承实现会话、当前对话历史或先前审查会话;
- 不使用
resume/continue,也不复制父上下文; - 只接收目标元数据、原始差异、权威需求、适用项目规则、审查者文件路径和下面的统一约束;
- 默认使用平台内置的干净上下文 Agent;
- 只有用户明确要求使用独立进程的非交互式 Agent 调用时,才允许改用外部 Agent;跨模型覆盖、缺少细粒度权限控制或其他平台能力差异都不能自行触发外部调用;
reasoning: flagship用当前平台最强推理档,workhorse用下一档;尊重审查者显式effort,没有时不额外写死投入档位。
frontmatter 的 tools 是审查者申请的最大权限,不是提示词建议。实际权限取“审查者 tools、主编排只读策略、运行时可执行限制”的交集。
内置 Agent 继承主编排的只读策略,并通过平台原生隔离与权限边界运行;宿主提供任务级只读模式时必须启用。宿主支持逐 Agent 的允许列表、禁止列表或只读沙箱时,应当用这些机制进一步收紧权限;缺少逐 Agent 的细粒度工具允许列表,不能切换到外部 Agent,也不能停止内置评审。下方的 Reviewer Must-Not Preamble 仍作为审查任务契约。
只有用户明确要求的外部调用才需要额外验证进程级只读边界。外部进程若无法强制只读或阻止外部写入,不启动该外部调用并记录审查缺口,不能用自然语言承诺冒充权限边界。
不可信头分支或来源无法判断时按不可信处理:可以读取差异、源码和持续集成证据,但不执行该头分支的测试、构建脚本、安装脚本或二进制。需要运行证据时优先引用现有持续集成结果;没有可信证据则列入“需要验证”。只有仓库策略或用户明确确认头分支可信,并且执行环境移除秘密、限制外部写入后,才允许 Bash 运行无外部副作用的验证。
并行执行彼此独立的只读审查。只有超时、限流或代理启动失败等明确的瞬时失败,才用新的干净上下文重试一次。错误路径或元数据解析输入可在现有授权内纠正后重新校验;不得为让当前审查通过而修改可信基准规则。权限或信任限制直接记录为审查缺口,不重复尝试同一条件;多个维度出现同一共享故障时停止继续重试。不能宣称未完成的维度已经通过。
Reviewer Must-Not Preamble
把以下约束原文放在每个审查数据包开头:
- 不按严重度或置信度预过滤;报告范围内所有发现,由综合阶段排序。
- 不修改代码、创建问题、提交评论、批准设计或执行其他外部写入。
- 可以给出具体修复方向和验证方式,但不要编写补丁或自主展开完整替代设计。
- 必须重新检查本次差异,即使相同行以前通过过审查。
- 只对本维度有证据的问题下结论;缺少运行、视觉或负载证据但已有具体风险时明确写为需要验证,缺少权威来源导致本维度无法完成时写入审查缺口。
Reviewer Output Contract
把以下输出契约原文放进每个审查数据包。它是所有内置、补充型和独立项目审查者共同遵守的外层格式;审查者文件只补充本维度在各单元格中必须说明的证据,不得改列、改章节名或退回自由列表。除模板中的章节外不要添加自由摘要、前言或结语。
阻断问题、非阻断问题和需要验证是每个审查者的固定核心章节,没有条目时也保留章节并写 无。。编号在单个数据包内按章节从 1 开始;主代理综合时会重新合并、排序和编号。来源使用第 3 节定义的标签;同一来源的条目相邻,多来源发现保留全部来源。置信度只允许写 高、中 或 低,表示审查者对证据链的判断,不代替主代理的修复建议。
架构观察仅由 architecture 审查数据包及其吸收的项目补充审查者输出;其他维度发现结构性根因时,仍按该维度的阻断、非阻断或需要验证报告。审查缺口仅在审查者因权威来源、权限、工具或证据不可用而无法完成本维度时输出;调度失败由主代理在综合阶段补充。任意审查者都可以输出有证据的亮点,但每个数据包至多一条。可选章节没有内容时直接省略。
## Reviewer Result: <数据包来源>
### 阻断问题
| 编号 | 来源 | 位置 | 问题与影响 | 置信度 |
|---|---|---|---|---|
| 阻断1 | <来源> | `<file:line>` | <问题、触发条件与影响> | <高、中、低之一> |
### 非阻断问题
| 编号 | 来源 | 位置 | 问题与影响 | 置信度 |
|---|---|---|---|---|
| 非阻断1 | <来源> | `<file:line>` | <问题与具体维护成本> | <高、中、低之一> |
### 需要验证
| 编号 | 来源 | 位置或证据 | 缺失证据与风险 | 验证方式 |
|---|---|---|---|---|
| 验证1 | <来源> | <file:line 或证据源> | <缺少的证据及其影响> | <如何确认> |
### 架构观察
| 编号 | 来源 | 位置或证据 | 观察与长期成本 | 后续建议 |
|---|---|---|---|---|
| 架构1 | <architecture 来源> | <file:line 或证据源> | <不阻塞当前合并的架构观察> | <后续如何处理> |
### 审查缺口
| 编号 | 来源 | 缺口 | 影响 | 补齐方式 |
|---|---|---|---|---|
| 缺口1 | <来源> | <本维度无法完成的原因> | <对结论的影响> | <如何补齐> |
### 亮点
| 编号 | 来源 | 位置或证据 | 亮点 |
|---|---|---|---|
| 亮点1 | <来源> | <file:line 或证据源> | <有证据的亮点> |
6. 综合
主代理逐条复核审查者证据,按同一根因合并重复发现,同时保留所有来源。不要仅因置信度低就把条目移动到架构维度;证据不足但风险具体时进入“需要验证”,证据足够时按实际影响分类。
阻断与非阻断条目不展示审查者置信度。主代理必须结合权威需求、差异证据、当前拉取请求范围和修复成本,给出自己的处理建议与判断理由:
修:建议在当前拉取请求合并前处理,并说明为什么收益与风险值得现在修改;不修:建议当前拉取请求不处理,并说明为什么不构成缺陷、超出范围或收益不足;- 阻断问题只能建议
修。主代理若判断不修,该条不得继续保留为阻断,必须根据证据重新分类为非阻断或需要验证。
主代理丢弃子审查者局部编号,在每个分类内按当前影响排序,保留全部来源,再连续编号。使用下方主报告格式,记录目标提交与实际覆盖范围;所有分类章节保留,空章节写 无。。
总判断按以下优先级生成:存在阻断问题时写“阻塞”;没有阻断但存在审查缺口时写“评审不完整”;没有前两者但存在需要验证项时写“需要验证”;其余写“可合并”,并在存在非阻断问题时注明数量。结论只表示审查判断,不执行修复或替用户批准合并。
阻断问题包括会造成错误行为、安全问题、契约或测试破坏、未满足权威要求、实质性未授权范围扩张,以及对仍有效设计的高风险偏离。非阻断问题有具体维护成本,但不阻止合并。需要验证只用于已有权威来源或具体风险、但缺少运行、视觉或负载证据的情况;缺少权威需求来源、维度无法执行或证据源不可用属于审查缺口。同一缺口不要同时放进两节。
## Deep Review: PR #<n> — <title>
**结论**:<阻塞 | 评审不完整 | 需要验证 | 可合并> — <一句话理由>
**目标版本**:<基准提交与头提交> | **覆盖范围**:<本轮路径和维度;沿用证据注明对应版本>
**信号**:<标签> | **已完成审查者**:<列表>
### 阻断问题
| 编号 | 来源 | 位置 | 问题与影响 | 主代理建议与判断理由 |
|---|---|---|---|---|
| 阻断1 | <来源> | `<file:line>` | <问题与影响> | **修**:<判断理由> |
### 非阻断问题
| 编号 | 来源 | 位置 | 问题与影响 | 主代理建议与判断理由 |
|---|---|---|---|---|
| 非阻断1 | <来源> | `<file:line>` | <问题与影响> | **修**或**不修**:<判断理由> |
### 需要验证
| 编号 | 来源 | 位置或证据 | 缺失证据与风险 | 验证方式 |
|---|---|---|---|---|
| 验证1 | <来源> | <file:line 或证据源> | <缺少的证据及其影响> | <如何确认> |
### 架构观察
| 编号 | 来源 | 位置或证据 | 观察与长期成本 | 后续建议 |
|---|---|---|---|---|
| 架构1 | <来源> | <file:line 或证据源> | <不阻塞当前合并的观察> | <后续如何处理> |
### 审查缺口
| 编号 | 来源 | 缺口 | 影响 | 补齐方式 |
|---|---|---|---|---|
| 缺口1 | <来源或失败维度> | <缺失的权威来源或不可用证据> | <对审查结论的影响> | <如何补齐> |
### 亮点
| 编号 | 来源 | 位置或证据 | 亮点 |
|---|---|---|---|
| 亮点1 | <来源> | <file:line 或证据源> | <有证据的亮点,至多两条> |
7. 交回用户决定
单轮正式审查到报告为止。独立审查交回用户决定后续;已授权收敛目标的协调者消费报告,按原授权继续修复、验证和再次审查。新增产品或架构决定、对外沟通和跟踪事项仍须相应授权;修复后的定向验证本身不构成再次完整审查授权。
Anti-patterns
- 复用实现上下文或上一轮审查会话,削弱独立判断。
- 主代理读取全部审查者正文再转发,浪费主上下文。
- 因差异很小就跳过正确性或测试审查,或因新增文件就触发架构审查。
- 让实现者理由覆盖用户原始要求,或在缺少需求来源时输出“符合规格”。
- 猜测无合法 frontmatter 的项目审查者属于哪个宿主。
- 被吸收扩展命中、宿主未命中时直接跳过整个维度。
- 把低置信度问题塞进架构观察,隐藏其真实维度。
- 审查过程中顺手改代码、评论拉取请求或创建问题。