Skip to content
Back to skills

Specpowers Review

ASecurity

Use when code or document review is triggered in a specpowers workflow — when implementation is complete and needs quality gate, when design/spec/plan documents need review, when user says "review this" or "run UltraReview", "关键审查" / "完整审查", or when a specpowers Gate requires formal review before proceeding to next phase.

  • 2 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 22, 2026
ai-agentsgodockercode-reviewgitapi

Works with

  • claude code
  • api

Security analysis

A100/100

Pro scans all 11 files and shows the line behind each finding

Scanned September 22, 2026

npx -y skills add SAXEM1997/specpowers --skill specpowers-review --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Specpowers Review?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Specpowers Review
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/saxem1997-specpowers-review/badge)](https://www.skillsdirectory.com/skills/saxem1997-specpowers-review)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: specpowers-review
description: >-
  Use when code or document review is triggered in a specpowers workflow — when
  implementation is complete and needs quality gate, when design/spec/plan documents
  need review, when user says "review this" or "run UltraReview",
  "关键审查" / "完整审查", or when a specpowers Gate requires formal review
  before proceeding to next phase.
---

# specpowers-review: 审查阶段

> **平台适配(技能调用)**: 本技能内所有技能引用一律用**裸名**(如 `specpowers-review`、`brainstorming`)。
> - **DSH**: `skill(name: "specpowers-review")`;`Skill({skill: "specpowers-review"})` 视为等价写法。
> - **Claude Code**: 裸名可用则 `Skill({skill: "specpowers-review"})`;技能注册表要求插件命名空间时
>   回退 `Skill({skill: "specpowers:specpowers-review"})`(上游技能回退 `Skill({skill: "superpowers:brainstorming"})`)。
> - **Codex**: 技能名直呼(skills-only 工具)。🔲 未验证
> 完整三平台映射与降级路径见 `<SKILL_BASE>/refs/platform-tools.md`。**`<SKILL_BASE>` = 入口技能基目录**(入口技能即 `skills/specpowers/`);从子技能加载时它是本技能目录的兄弟目录——注意 DSH 的资源提示给出的是**本技能**目录,两者不同,勿按该提示解析。

> **前置检查(必须执行,不可跳过)**:
> 1. 执行 `Skill({skill: "specpowers"})` 加载入口 skill,获取全局规则。等待加载完成后继续。
> 2. 确认审查对象(文档/代码)和变更范围(文件数)已知。如未知,向用户确认后继续。

## 术语说明

- **主 Agent**:specpowers-review 技能内部的协调 Agent,调度子 Agent、合并审查结果、执行修复。与入口技能 specpowers 的 Agent 区分。
- **用户**:人类开发者(审批修复方案),非调用方 Agent。

## 审查决策树

审查类型由本 skill 内部按「对象类型 → recipe(对象类型×tier 对应的 Agent 编排与 STEP 集合,见下方 recipe 表;代码类完整层按 bucket 分叉子路径)」查找,自动判定,用户可手动覆盖。

```text
审查对象类型?
├── 文档类(proposal / design / plan / spec / skill / README / 架构文档 / clarifications)
│   └── 两级 tier 路由(关键/完整)→ recipe(见下方 recipe 表文档类行)
│       用户可手动指定"UltraReview"→ 完整层 3-agent 多模型渐进式审查(6-agent 维度 build/code/specs/docs/deps 仅代码类,文档类映射到 3-agent)。
│       文档类 UltraReview 不走 tier 路由,但仍须经护栏 1(ledger 缺失 early-return 完整,见 refs/protocols.md 协议 6(护栏 1))
│
└── 代码类(实现代码 / 项目结构 / 构建配置 / 项目创建或变更)
    └── 两级 tier 路由(关键/完整)→ recipe(见下方 recipe 表代码类行,按 bucket 分叉)
        用户可手动指定审查层级:"关键审查" / "完整审查"
```

**路由矩阵摘要**(完整定义见 `refs/protocols.md` 协议 6):

| 规模 × 轮数 | 第 1 轮 | 第 2 轮 | 第 3 轮+ |
|------------|--------|--------|---------|
| 微小 | 关键 | 关键 | 关键 |
| 中等 | 完整 | 关键★ | 关键★ |
| 复杂 | 完整 | 完整 | 完整 |
| 大规模 | 完整 | 完整 | 完整 |

> **规模分桶度量(按对象类型区分)**:代码类按 `file_count`(变更文件数,直接反映变更范围)——微小 1-3(`file_count=0` 归入微小,见协议 3「独立调用场景自检」)/ 中等 4-19 / 复杂 20-49 / 大规模 50+。文档类按 `line_count`(审查对象总行数,行数与内容复杂度正相关)——微小 ≤100 / 中等 101-300 / 复杂 301-600 / 大规模 >600。文档类的 file_count 无区分度(Gate 0/2 始终 1 文件,Gate 1 通常 4-6 文件),改用 line_count 度量内容复杂度。**`line_count` 口径按对象类型固定、不得互换**:文档类=**审查对象总行数**(`wc -l`);代码类=**修改总行数**(git diff)——同一字段两种度量(如 700 行 design.md 只改 20 行:总行数口径判大规模/完整层、修改行数口径判微小)不得由执行者自选,否则分桶不可复现。详见 refs/protocols.md 协议 6 `bucket_doc` 函数(口径来源注记见协议 3「独立调用场景自检」)。

★ 触发收敛闸门(完整算法见 refs/protocols.md 协议 6)。两道硬护栏(ledger 缺失→完整、行数地板)+ 收敛闸门。收敛闸门:关键层(中等规模)若上轮 p0_raw>0 → 升级完整(阵容保守加强——闸门用 **raw 口径**:验证强度类判定统一取保守值,见「问题数口径权威定义」;闸门口径 p0_raw>0 比收敛触发条件①的 merged 口径 >1 更严,为有意设计:闸门在下一轮实际发生时才生效,含 P0 历史即加强阵容)。

**手动覆盖关键词**:当前轮用户输入含"关键审查"/"完整审查"→ 手动覆盖设定基础 tier(后续护栏/矩阵/地板/闸门在此基础上只升不降)。匹配范围为当前轮用户输入,不含历史轮次指令;排除否定语境。"UltraReview"→ 文档类映射到完整层 3-agent 多模型渐进式(6-agent 维度 build/code/specs/docs/deps 仅代码类),代码类走 6-agent UltraReview recipe(→ 完整层增强)。

"项目创建或变更"指涉及项目配置文件(package.json / Cargo.toml / go.mod / CMakeLists.txt / Makefile / pom.xml / docker-compose.yml 等)、构建脚本、目录结构调整的变更。判断标准:变更涉及项目基础设施层面(而非仅业务代码),即归入此类。

### recipe 表

审查 Agent 编排按 `(对象类型 × tier × bucket 分支)` 决定。代码类完整层按 bucket 分叉子路径。`bucket 分支` 仅在代码类完整层用于区分子路径(文档类不分子路径)。

| 对象类型 × tier | 完整 Full | 关键 Critical |
|----------------|----------|---------------|
| **文档类** | **文档3Agent**:结构+落地+对齐(3 Agent) [STEP1-5] | **文档2Agent**:对齐 Agent + 监督 Agent(=`supervisor1`,Step 1 普通独立审查 Agent,职责见下方 `supervisor1` 统一定义) [STEP1-5] |
| **代码类(微小/中等(4-9) bucket)** | **加强审查**:code-review(由 specpowers-apply 执行)+ 对齐单审 [STEP1-2] | **3 独立视角**:code-review(由 specpowers-apply 执行)+ 对齐 Agent + 监督 Agent(=`supervisor1`,Step 1 普通独立审查 Agent) [STEP1-5] |
| **代码类(中等(10-19)/复杂/大规模 bucket)** | **UltraReview**(6 Agent: build/code/specs/docs/deps/对齐) [STEP1-5] | 同代码类(微小/中等)关键 |

> bucket_class 映射(与 protocols.md 协议 6 对齐):{微小, 中等且file_count<10}→小代码(加强审查 recipe);{中等且file_count≥10, 复杂, 大规模}→大代码(UltraReview recipe)

> **STEP 集合记法约定**:本表 `[STEP1-5]`/`[STEP1-2]` **仅为编排说明的简写**;`[TIER_ROUTING]` 标记的 `expected_steps` 字段**必须写离散 STEP 列表,禁止区间记法**——如 `expected_steps=[STEP1, STEP2]`(文档2Agent / 加强审查)与 `expected_steps=[STEP1, STEP2, STEP3, STEP4, STEP5]`(全 STEP recipe)。父技能按单个 STEP 逐项匹配,无法机械展开区间记法。

> **STEP→阶段映射(所有 tier 共用)**:
> - STEP1 = 审查 Agent 并行执行(数量由 tier recipe 决定)
> - STEP2 = 主 Agent 合并去重判断(产出 `sources` 来源映射列 + 未纳入清单 → 合并后问题数 `p*_merged`(仅计已采纳行:`disposition ∈ {agent_accepted, user_adjudicated}`) / 未纳入数 `p*_rejected`;守恒等式自检通过方可进入 STEP3)
> - STEP3 = 合并验证(按 **raw 口径** N 部署【验证强度类判定取保守值,见「问题数口径权威定义」】:p0_raw≥3或N>15→独立Agent完整4维;N∈[1,15]且p0_raw≤2→转Step5兼并;N==0→trivial;加强审查子路径裁剪)
> - STEP4 = 修复 + 主 Agent 校验
> - STEP5 = Quick Review(加强审查子路径裁剪,并入 STEP2 主 Agent 合并判断)
>
> **完整层不对称(设计意图,非遗漏)**:代码类完整层按 bucket 分——微小/中等(4-9)=加强审查(STEP1-2,无监督,轻量路径,小变更无需监督即可控);中等(10-19)/复杂/大规模=UltraReview(STEP1-5,含 6 维度审查)。关键层统一含监督(=`supervisor1`,Step 1 普通独立审查 Agent——统一定义见下方注),覆盖强度高于加强审查。
>
> **3 独立视角(代码类关键层)**= code-review(由 specpowers-apply 通过 `requesting-code-review` 执行,代码质量维度)+ 对齐 Agent(规范合规维度 COVERED/MISSING/DRIFT)+ **监督 Agent(`supervisor1`)**——**Step 1 的普通独立审查 Agent**:与另两个视角并行启动、互不感知,只对**审查对象**产出自己的 `supervisor1#k` 发现(计入 `Σp*_raw`,走 `sources: supervisor1#k`),视角定位为交叉验证另两个视角的原始报告(覆盖/遗漏/重复倾向——实际比对发生在 Step 2 合并阶段)。**「溯源检查 / 遗漏检测 / 合并合理性 / 判断充分性」四维全部归属 Step 3 部署的监督 Agent**(独立于 `supervisor1`,见 Step 2「编号空间隔离」),其部署形式按原始发现总数 N(raw_count_sum 口径——验证强度类判定统一取 raw 保守值,见「问题数口径权威定义」)动态决定——N∈[1,15] 且 p0_raw≤2 时合并验证(溯源+遗漏+守恒等式核对+误合抽查)转移至 Step 5 兼并执行,不启动独立 Agent(见 Step 3)。
>
> **`supervisor1` 统一定义(关键层 Step 1 监督审查 Agent)**:Step 1 **普通独立审查 Agent**——按 tier recipe 在 Step 1 并行启动、与其他视角互不感知,只对**审查对象**产出自己的 `supervisor1#k` 发现(计入 `Σp*_raw`,走 `sources: supervisor1#k`;编号空间见 Step 2「编号空间隔离」),视角定位为**交叉验证另两个视角的原始报告**(覆盖/遗漏/重复倾向)。代码类关键层的另两视角 = code-review + 对齐;**文档类关键层**(recipe 表「对齐 Agent + 监督 Agent」中的监督即此 `supervisor1`)的交叉验证对象为对齐 Agent 视角(文档类无 code-review),同样只对文档审查对象产出发现(如需求点覆盖核对、章节遗漏、术语矛盾——以文档语言表述)。四维监督(溯源/遗漏/合并合理性/判断充分性)不在 Step 1 部署——全部归属 Step 3 监督 Agent。
>
> **code-review 执行主体(代码类全 tier)**:apply 先执行 code-review(`requesting-code-review`),结果注入 review 的对齐 Agent prompt;review 对齐 Agent 输出 STEP1_EXECUTED(含 code-review 结果引用)。文档类无 code-review。
>
> **加强审查**= 代码类完整层微小/中等(file_count<10) bucket 专用 recipe(STEP1-2,无监督),详见下方"加强审查"节。
>
> **质量底线(每级强制)**:①对齐 COVERED/MISSING/DRIFT 不可省;②代码类必含 code-review(全 tier);③P0 修复不可省;④最终通读 Gate 横切不可省略——加强审查子路径以主 Agent STEP2 合并去重判断+变更区域轻量通读作为最终通读的轻量替代,不可裁(替代声明在 STEP_FINAL_READTHROUGH 标记块 **`notes`** 中注明"轻量替代"——`status` 一律取通用枚举 complete|degraded|failed,通读结果由独立字段 `result: pass|fail` 表达,与协议 9 统一);⑤层级裁剪声明块——格式见协议 6;⑥合并验证(溯源+遗漏)维度不可省——部署形式见 Step 3。
>
> 详细路由算法、层级裁剪声明块格式、典型场景示例见 `refs/protocols.md` 协议 6。

## 全流程逐层审查 Gate

全流程 Phase-Gate 管道(线性,无分支):

1. **Phase 0** clarifications → **[Gate 0]**(文档类,多模型渐进式)→ design
2. **Phase 1** design → **[Gate 1]**(文档类,多模型渐进式)→ proposal/specs
3. **Phase 2** proposal/specs → **[Gate 2]**(文档类,多模型渐进式)→ plan
4. **Phase 3** plan → **[Gate 3]**(代码类,tier 路由)→ 代码
5. **Phase 4** 代码 → **[Gate 4]**(归档,现有 hard gate 链)

### 各 Gate 详细定义表

| Gate | 触发时机 | 触发者 | 审查对象 | 对齐上游 | 审查方式 |
|------|---------|--------|---------|---------|---------|
| **Gate 0** | Phase 0 用户审批通过后 | specpowers-design | `design.md` | `clarifications/<name>.md` | 文档类 tier 路由(默认 recipe=多模型渐进式) |
| **Gate 1** | Phase 1 用户审核通过后 | specpowers-design | proposal/design/specs/tasks | Phase 0 design + clarifications | 文档类 tier 路由(默认 recipe=多模型渐进式) |
| **Gate 2** | Phase 2 plan 生成后 | specpowers-plan | `docs/superpowers/plans/<name>.md` | Phase 1 specs + Phase 0 design | 文档类 tier 路由(默认 recipe=多模型渐进式) |
| **Gate 3** | Phase 3 代码实现完成后 | specpowers-apply | 代码变更 | Phase 2 plan + Phase 1 specs + Phase 0 design | 代码类 tier 路由(recipe 按 bucket 分叉) |
| **Gate 4** | Phase 4 归档前 | specpowers-archive 内部 | 归档完整性 | — | 现有 hard gate 链,仅标记为 Gate 节点 |
| **最终通读** | 每 Gate 审查修复完成后 | specpowers-review 内部 | 审查对象全文 | — | 独立 Agent 通读(PASS 四条件) |

### 多文件 Gate 的审查粒度

> **阵容限定**:以下按完整层 `文档3Agent` 阵容描述;关键层 `文档2Agent`(如 Gate 1 中等文档第 2 轮+)时由**对齐 Agent + `supervisor1`** 分摊对应职责——无结构/落地 Agent,四件套内部一致性(结构 Agent 职责)与各文件独立可执行性(落地 Agent 职责)并入对齐视角与 `supervisor1` 的交叉验证检查面。

Gate 1 审查对象包含多个独立文件(proposal.md / design.md / specs/ / tasks.md),审查策略:
- 合并为一次审查:三 Agent 分别读取所有文件,输出合并报告(一条问题可能跨文件关联)
- 对齐 Agent 的"逐条对照"以 `design.md` 为主线,对照 `clarifications` 中的需求点是否在 proposal/specs/tasks 中完整覆盖
- 结构 Agent 检查四件套之间的内部一致性(如 tasks.md 的任务是否覆盖了 specs/ 的所有 Requirement)
- 落地 Agent 检查每个文件独立的可执行性(对文档类:检查引用路径是否存在、命令示例是否可运行、配置示例语法是否正确、平台差异是否已标注;对代码类:检查编译/运行可行性、依赖完整性)

### Gate 执行规则

- 每个 Gate 不可跳过
- Gate 未通过(存在 P0,见「P0 阻塞规则(权威定义)」节)→ 禁止进入下一 Phase
- Gate 发现 P1/P2 → 记录后允许通过
- 问题清单写入会话上下文账本(主 Agent 内存 dict,见 `refs/protocols.md` 协议 1(会话上下文账本)),跨 Gate 通过主 Agent 注入对齐 Agent prompt。
- 不再写入任何 .review 开头的文件产物
- 跨会话场景下,审查教训从 .specpowers/review-cache.json 读取(尽力而为缓存,丢失不影响正确性)
- 每个 Gate 审查完成后均输出收敛判定(`[CONVERGENCE_CHECK]` 标记)
- **审查修改与审批的关系**:Gate 审查发现的修改分为两类:
  - (a) **结构性修改**(改变设计意图/架构/接口/数据模型/核心流程)→ 需重新走用户审批
  - (b) **澄清性修改**(消除歧义、补充遗漏、修正措辞、修复格式,不改变设计意图、接口和数据流)→ 免二次审批,直接修改后由主 Agent 确认
  - **判定标准**:如果修改会导致下游产物的内容或结构发生变化,则为结构性修改。对齐 Agent 的审查报告需标注每项修改的类型及判定理由。
  - **P0 问题**:无论修改类型,均须先经用户确认问题判定和修复方案。确认后——澄清性修改免二次审批直接修改,结构性修改需在修改后重新走用户审批流程。
- **代码类 Gate 3**:分两部分——(a) specpowers-apply 的 code-review(通过标准:无 P0 问题),结果注入 review 对齐 Agent prompt;(b) specpowers-review 按 tier recipe 执行审查(对齐检查,通过标准:无 MISSING 或 DRIFT 标记为 P0 的项)。两者均通过方可进入 Phase 4。加强审查 recipe(STEP1-2)走轻量路径,UltraReview recipe 走完整 6-agent + 对齐。

### P0 阻塞规则(权威定义)

> 本节为 P0 阻塞判定的**全文档唯一权威来源**,作用于**所有对象类型、所有 tier、所有 Gate**(普适规则,非 UltraReview 专属——原寄居于「UltraReview + 对齐审查」节的定义已移入本节,原位置留有指针)。

- **P0 阻塞规则(权威定义,全文档唯一权威来源)**: P0 > 0(修复后剩余)→ Gate 未通过,禁止进入下一 Phase;P0 必须全部修复且通过重审方可放行(重审载体:触发条件①/⑤引起的下一轮完整审查,或 `p0_raw∈[1,2]` **且 N∈[1,15]**(transferred 档位)单轮收敛时的 Step 5 严重度校准抽查——见 Step 5 兼并模式第 5 项;**mode=standard 时(`p0_raw≥3` 或 `N>15`)由独立监督 Agent 的第④维(判断充分性 + 严重度校准)承担**;此处用 raw 口径保守判定,见「问题数口径权威定义」)。P1/P2/P3 不阻塞 Gate 通过。其余各处 P0 阻塞引用均以此处为准(修复范围见下方"Gate 通过标准 vs 修复范围")。

> **Gate 通过标准 vs 修复范围**: 以上为 Gate 通过标准(阻塞判定——什么情况下 Gate 不通过)。修复阶段的修复范围见 Step 4 "修复策略"(或 UltraReview Step F——两路径**共享同一修复策略**(默认全量修复 P0-P3),但**不共享审批范围**:UltraReview Step E 为整表逐条审批(P0-P3),通用路径 Step 4 前置 Gate 默认仅 P0 逐条确认,见「UltraReview + 对齐审查」节 A-F→STEP 映射注与协议 8 Step E;A-F 协议见 `refs/protocols.md` 协议 8)——默认全量修复 P0-P3,不受此阻塞标准限制。例如:P2/P3 "不阻塞 Gate 通过" 意味着即使有未修复的 P2/P3 也可以进入下一 Phase,但修复阶段仍默认修复它们(用户可显式跳过)。

---

## 审查层级边界(文档类防漂移)

> 以下边界表横切所有文档类审查(不分 tier),代码类 Gate 3 不受此边界限制。

> **两层边界原则**: 审查时区分两个边界——
> - **探索分析边界(不受限)**: 审查 Agent 可以深入分析代码/实现层面的细节来验证设计决策。例如:评判接口设计是否合理时,可以查阅目标平台的 API 文档、分析语言特性约束。深层分析是发现深层设计问题的前提。
> - **产物评论边界(受限制)**: 审查输出(问题描述 + 建议)必须表述为当前层级的语言。例如:发现接口与平台 API 不兼容 → 评论"接口设计与目标平台约束不兼容,需重新评估"(✅ design 层面),而非"应改用 `PlatformAPI.connect_async()`"(❌ 代码实现建议)。

| 审查对象 | Gate | 审查范围(应关注) | 评论边界(审查输出不应越界到…) |
|---------|------|-----------------|---------------------------|
| **design.md** | Gate 0 | 架构合理性、组件划分、数据流设计、接口设计、错误处理策略、测试策略 | ❌ 具体代码实现方式、代码风格、变量命名、API 具体参数格式 |
| **proposal.md** | Gate 1 | 动机清晰性、范围完整性、排除范围明确性 | ❌ 实现方案(属于 design.md 范围) |
| **specs/** | Gate 1 | Requirement 覆盖完整性、场景可测试性、SHALL/MUST 规范性 | ❌ 实现方式(属于 code 范围) |
| **tasks.md** | Gate 1 | 任务拆解合理性、依赖关系完整性、可执行性(粒度适中/描述清晰/状态明确) | ❌ 具体代码实现细节、代码优化建议(参照 plan 行) |
| **`docs/superpowers/plans/<name>.md`** | Gate 2 | 任务拆解合理性、TDD 步骤完整性、依赖关系正确性、实现策略可行性 | ❌ 具体代码写法、函数实现细节、代码优化建议 |
| **代码变更** | Gate 3 | 代码正确性、spec 合规性、构建/依赖/文档一致性 | 无(代码级审查允许评论实现细节) |

> **通用原则**: 用代码层面的知识做分析,用设计/规划层面的语言写评论。审查意见应表述为"某个设计决策可能存在问题,因为…(深层分析结论)",而非"应该这样写代码"。评论边界过窄则遗漏深层问题,过宽则输出对当前 Phase 无价值的实现建议。

## UltraReview + 对齐审查(代码类 recipe,中等(10-19)/复杂/大规模 bucket 完整层)

**适用条件**:代码类完整层 + 中等(10-19)/复杂/大规模 bucket(文件数 ≥ 10),由 tier 路由自动判定(见上方 recipe 表)。

> **文档类注意事项**: 文档类手动指定 UltraReview 时映射到完整层 3-agent 多模型渐进式(6-agent 维度 build/code/specs/docs/deps 仅适用代码类,文档类无对应定义)。详见审查决策树和手动覆盖关键词说明。

> **详细协议移出(创建审查团队 + Steps A-F)**: 6-agent 审查团队定义(build/code/specs/docs/deps/对齐六维度 prompt 要点 + 对齐审查 Agent 对照方法与 COVERED/MISSING/DRIFT 语义)与主 Agent 逐条分析协议 Steps A-F(A 确认全部子 Agent 完成 → B 去重合并 → C 逐条判断 → D 输出合并判断表 → E 用户审批(硬 Gate)→ F 执行修复)详见 `refs/protocols.md` 协议 8。执行 UltraReview recipe 时 Read 协议 8 获取逐步细节;未路由到 UltraReview 时无需读取。

> **STEP 兼容性说明**: 对齐审查 Agent 在 Step A 与其他 5 个审查 Agent 并行启动,产出在 Step B-C 中与其他报告一同去重合并,不产生独立 STEP 标记块。STEP 标记块体系(STEP1-STEP5)不变,STEP1_EXECUTED 的 agents 列表含 6 个维度。
>
> **UltraReview Steps A-F → STEP 映射**:Steps A-B → STEP1(并行审查+报告汇总)/ Steps C-D → STEP2(逐条判断+合并判断表)/ Step D' = 通用 Step 3 在 UltraReview 流程的插入点(非 A-F 独立 Step,执行独立监督 Agent 交叉验证,输出 STEP3_EXECUTED)/ Step E → 用户审批(STEP4 前置环节;**UltraReview 审批范围为整表**——用户逐条确认合并判断表全部行(P0-P3),与通用路径 Step 4 前置 Gate「默认仅 P0 逐条确认、P1/P2/P3 直接纳入修复」不同,见协议 8 Step E)/ Step F → STEP4(执行修复+输出 STEP4_EXECUTED)。映射覆盖 STEP1-4(STEP5 Quick Review 由通用审查流程 Step 5 覆盖,非 A-F 协议)。

> **术语说明**: 加强审查中的"对齐 Agent 单审"与 UltraReview 中的"对齐审查 Agent"为同一审查维度,区别仅在于部署模式——加强审查中作为独立 Agent 产出 STEP1/STEP2 标记块,UltraReview 中作为 6-agent 团队成员在 Step A 并行产出、融入 Step B-C 去重合并。

### 审查规则

- 只读不写:所有审查 Agent 仅输出审查报告,不修改任何文件
- P0(必须修复):阻塞性问题——接口不匹配、数据丢失风险、安全漏洞、spec 严重偏离
- P1(不阻塞 Gate 通过):重要问题——性能退化、代码异味、文档过时、错误处理缺失
- P2(记录待办):改进建议——重构机会、可读性优化、测试覆盖增强
- P3(记录待办):风格问题——命名规范、格式一致性、注释完善
- **P0 阻塞**:权威定义见〈**P0 阻塞规则(权威定义)**〉节(上方「Gate 执行规则」之后——全 tier/全对象类型通用,非本节专属);本节的 P0-P3 分级定义(严重度语义)不变

## 加强审查(代码类 recipe,微小/中等(file_count<10) bucket 完整层)

**适用条件**:代码类完整层 + 微小/中等(file_count<10) bucket(文件数 ≤ 9),由 tier 路由自动判定(见上方 recipe 表)。不启动 6-agent 团队,由 specpowers-review 构造对齐 Agent 单审:

1. **specpowers-apply 内部 code-review**:通过标准为无 P0 问题
2. **specpowers-review 对齐 Agent 单审**:对齐检查,通过标准为无 MISSING 或 DRIFT 标记为 P0 的项

主 Agent 构造对齐 Agent 的审查 prompt 时,注入 spec-compliance-check(OpenSpec 规范逐条对照协议,输出 COVERED/MISSING/DRIFT),确保对齐检查覆盖原双重审查的规范合规维度。

两者均通过方可进入 Phase 4。

**P0 修复机制**:本路径裁剪独立修复子 Agent(STEP4_TIER_SKIPPED),但对齐 Agent 发现 MISSING/DRIFT 标记为 P0 的项时,主 Agent 在 STEP2 合并后对接受的 P0 项**先经用户逐条确认(问题判定 + 修复方案),确认后直接执行修复**(主 Agent 内联,非独立子 Agent),修复后重新运行对齐检查直到 P0 清零——避免 [GATE_BLOCKED] 死循环。**循环出口(上限)**:该「修复 → 对齐复检」循环**最多 3 轮**,超限仍未清零 → 标注「修复失败」并提请用户裁决(与 Step 4 校验重试上限一致)。**本子路径不接受「用户拒绝 P0」**——P0 一律修复;用户在逐条确认中拒绝某项 P0(判定为非问题或拒绝修复)时,**转 mode=standard 完整层处理**:放弃本子路径裁剪,按完整层 Step 3/4/5 执行(独立监督 Agent → 独立修复子 Agent → Quick Review,均输出对应 `STEP<N>_EXECUTED`,不再输出对应的 `STEP<N>_TIER_SKIPPED`;`[TIER_ROUTING]` 不重出,但在报告中声明「用户拒绝 P0,加强审查子路径升级完整层」——父技能 expected_steps 检查只要求声明的 STEP 存在,额外 STEP 不受阻,见协议 3「动态检查规则」;下方「STEP3/4/5 被层级裁剪」注的例外与裁剪声明自此不适用于本轮)。上述动作与后续动作的**执行顺序(写死)**见下方「STEP3/4/5 被层级裁剪」注:`STEP2 合并 → 内联修复 + 对齐复检(P0 清零)→ 轻量通读(记录拆行差值)→ 收敛判定 → Gate Token`。

> **P1/P2/P3 修复策略**:修复范围与 Step 4 修复策略一致(默认全量修复 P0-P3),执行主体为**主 Agent 在 STEP2 合并判断后内联修复**(本子路径裁剪独立修复子 Agent,无 STEP4 标记块);收敛判定触发继续时由下一轮完整审查兜底验证。P1/P2/P3 不阻塞 Gate。

> STEP3/4/5 被层级裁剪:输出 STEP3_TIER_SKIPPED / STEP4_TIER_SKIPPED / STEP5_TIER_SKIPPED(格式见 refs/protocols.md 协议 6)。**例外(检出 `[拒绝异常]` 时)**:本子路径**不裁剪 Step 3**——但按 N 分叉:**N>0** → 按 mode=standard 启动独立监督 Agent 完整 4 维(拒绝理由由监督第④维复核;**不注入 Step 5 字段组**;Step 4/5 仍按本子路径规则裁剪,**且不输出 `STEP3_TIER_SKIPPED`**;若该 Step 3 触发 `[补充否决异常]`,其复核**不转移至 Step 5**——Step 5 保持裁剪,改为 **Step 3 复议留痕**:监督复议结论 + 双方理由必须写入 `STEP3_EXECUTED` 的 `notes`(或审计说明),并同步写入 `[CONVERGENCE_CHECK]` 的 `notes`);**N==0**(trivial)→ 不启动 Step 3,**例外启动独立 Step 5** 复核拒绝理由与守恒等式(此时**不输出 `STEP5_TIER_SKIPPED`**,须输出 `STEP5_EXECUTED`)。主 Agent STEP2 合并判断 + 变更区域轻量通读共同作为最终通读轻量替代(不可省略)。**执行顺序(写死,不得乱序)**:`STEP2 合并 → 内联修复 + 对齐复检(P0 清零)→ 轻量通读(记录拆行差值)→ 收敛判定 → Gate Token`——轻量通读的 PASS 条件 (a)「所有已确认修复均已正确应用」(协议 9)要求修复先行,故不得在 STEP2 合并后立即通读;收敛判定与 Gate Token 依次后置。**收敛判定(按分支锚定)**:①**无 Step 3 的加强审查轮(默认)** → **轻量通读完成后**(而非「STEP2 合并后」立即)输出 `[CONVERGENCE_CHECK]` 标记(按 raw 口径,理由见「问题数口径权威定义」;见下方「收敛判定与硬阻止机制」节),替代标准路径 STEP5 后的收敛判定位置;②**有 Step 3 的轮(检出 `[拒绝异常]` 且 N>0 → mode=standard 独立监督)** → 与标准路径一致,**口径冻结后(Step 3 完成后)**输出——该 Step 3 可调整合并表,已输出的 `supplement/rejected/conservation` 在其完成前**非终值**,收敛判定禁止早于口径冻结(分支顺序:STEP2 合并 → 独立 Step 3(口径冻结)→ 内联修复 + 对齐复检(含监督新发现,P0 清零)→ 轻量通读 → 收敛判定 → Gate Token);③**N==0 例外(独立 Step 5 复核)** → 该 Step 5 复核输出后再输出收敛判定(复核可标记 [问题数存疑] 触发重审,重审轮重新计算)。

---

## 多模型渐进式审查(文档类 recipe,3 Agent)

**适用对象**:所有文档类(proposal / design / plan / spec / skill / README / 架构文档 / clarifications)。

### 三 Agent 结构

| Agent | 关注点 | 模型建议 |
|-------|--------|---------|
| **结构审查 Agent** | 完整性/冗余/一致性/结构合理性 | 强推理模型 |
| **落地审查 Agent** | 可执行性/兼容性/边界/平台差异 | 快速模型 |
| **对齐审查 Agent** | 对齐原始需求/设计;错漏项检测;模糊歧义识别 | 与前两者不同模型 |

### 对齐审查 Agent 检查维度

```
□ 逐条对照: 文档内容与原始需求/设计方案逐条对照,标记偏差
□ 错漏检测: 原始需求中是否有未覆盖的点?是否有隐含假设被遗漏?
□ 歧义检测: 是否有可被两种方式解读的表述?术语定义是否一致?
□ 矛盾检测: 不同章节/段落间的结论是否自洽?
□ 引用完整性: 引用的外部资源/文档/接口是否存在且版本正确?
```

### 对齐 Agent 对照方法

1. 读取对标源文件(如 Gate 0 读取 `clarifications/<name>.md`,Gate 2 读取 `specs/` + `design.md`)
2. 逐条提取对标源中的需求点/决策/排除项
3. 在审查对象中逐一查找对应覆盖
4. 输出对照表:[COVERED/MISSING/DRIFT] 需求点 → 对应位置 → 证据
   - COVERED:需求点在审查对象中有明确对应内容,且语义一致
   - MISSING:需求点在审查对象中完全无对应内容(遗漏),标注为 P1
   - DRIFT:需求点在审查对象中有对应内容但语义偏离(矛盾/降级/范围变化),标注为 P0
5. 边界情况:部分覆盖但关键细节缺失 → DRIFT(P0);非关键细节缺失 → COVERED + 标注"部分覆盖"(P2)

### 模型多样性规则

**模型选择规则**:
1. 模型选择原则:三 Agent 使用不同模型以最大化视角多样性。具体模型品牌取决于环境可用模型,以能力等级匹配为优先(强推理/快速/中等)。
2. 结构审查 Agent:优先使用强推理能力模型,关注完整性/一致性分析
3. 落地审查 Agent:优先使用快速模型,关注边界/兼容性检查——快速模型在细节问题(列对齐解析、转义字符、边界值处理)上常有意外发现
4. 对齐审查 Agent:优先使用与前两者不同的模型,关注逐条对照+错漏检测的中等推理任务
5. **降级策略**:仅两个模型/仅单一模型可用时的部署与串行顺序细则见 `refs/protocols.md` 协议 4「模型多样性降级细则」。
6. 如在支持子 Agent 的环境中执行(DSH:`subagent` / `workflow` 工具;Claude Code:子 Agent 工具),优先为不同子 Agent 分配不同模型。工具与模型的平台对照见 `refs/platform-tools.md`。

### 与 UltraReview 的分工

| 维度 | 多模型渐进式 | UltraReview |
|------|------------|-------------|
| 审查对象 | 文档(设计/规范/计划等) | 代码(中等(10-19)/复杂/大规模 bucket) |
| Agent 数量 | 3(完整层)/ 2(关键层) | 6(仅完整层) |
| 对齐检查 | 对齐 Agent 专门负责 | 对齐审查 Agent 专门负责(COVERED/MISSING/DRIFT 对照) |
| 收敛判定 | 是 | 是 |

---

## 问题数口径权威定义(全文档唯一权威来源)

> 本节是全文档问题数口径的**唯一权威来源**。Step 1-5、「收敛判定与硬阻止机制」节、Gate Token 与 `refs/protocols.md` 各处的计数引用均以本节为准。一个数只有一种口径、一种用途——**禁止跨口径替代**(用修复后剩余数算收敛触发、用合并后数决定验证强度,都是错误用法)。

| 口径 | 符号 | 产出 | 含义 |
|------|------|------|------|
| **原始发现数** | `p0_raw`~`p3_raw` | Step 1(各审查 Agent 的 `RAW_COUNT` 求和) | **去重前**的全部发现,含多 Agent 重复报告与噪声,**在不含监督补充、未经用户裁决升级严重度、且未发生书面降级时,总量必然 ≥ 合并后数(逐级比较不保证)** |
| **合并后问题数** | `p0_merged`~`p3_merged` | Step 2(合并判断表行数;Step 3 结束后冻结终值) | 去重 + 去噪后的真实问题数:合并判断表**行**均为已采纳项(`disposition ∈ {agent_accepted, user_adjudicated}`) |
| **未纳入数** | `p0_rejected`~`p3_rejected` | Step 2(未纳入清单条数) | **不进入**合并判断表的发现:`disposition ∈ {agent_rejected, user_rejected}` 的项——含来源于 Step 1 原始发现的拒绝与被否决的监督发现型补充(`sup3#`,见下行)。判为重复而被合并行吸收的项**不计入**(它们已由该行的 `sources` 列承载)。**`[拒绝异常]` 分子仅计其中来源于原始发现(计入 `Σp*_raw`)的被拒项**;被否决 `sup3` 项不占分子(由 `[补充否决异常]` 单独承接) |
| **监督补充数** | `p0_supplement`~`p3_supplement` | Step 3(监督 Agent 的 `[补充]` 项中**被记账**的条数) | 监督 Agent 交叉验证时**新增**的、Step 1 各审查 Agent 未报告的发现。**`p*_supplement` = 监督 `[补充]` 项中被记账的条数**,两类计入:① **发现型**——作为新发现采纳(以 `sources: sup3#<编号>` 记入合并表并计入 `p*_merged`)或被否决(登记入未纳入清单并计入 `p*_rejected`;**不计入 `[拒绝异常]` 分子**——分子仅计计入 `Σp*_raw` 的被拒项,`sup3` 否决由 `[补充否决异常]` 单独承接);② **更正型**(不新增发现、也不构成拒绝,如删除无效引用、修订行描述)——**记入审计说明,不计入 `p*_supplement`**(它不产生 `sup3#` 编号条目) |
| **修复后剩余数** | `p0`/`p1`/`p2` | Step 5(**加强审查子路径为轻量通读 + 收敛判定后**) | 修复完成后仍存在(或未修复)的问题数;**用户豁免的 P0(Step 4 前置 Gate,记 `user_exempt_p0`)不计入此数**(用户已裁决为非问题/跳过) |

**守恒等式(Step 2 强制自检,Step 3/Step 5 强制核对)**:

```
Σ(所有行的 sources 条数) + Σp*_rejected == Σp*_raw + Σp*_supplement
```

> **口径边界**:`Σp*_raw` 仅含 Step 1 各审查 Agent 报告的发现(其 `RAW_COUNT` 求和),**不含**监督补充项(`sup3#` 只出现在 `p*_supplement` 与 `sources` 的补充条目中,绝不计入 `raw`)。

即**每条原始发现都必须有去向**——要么被某个合并行的 `sources` 列收录,要么进未纳入清单并写明原因。这条等式是"合并后问题数"可信的唯一依据:它把合并从主 Agent 的自由裁量变成**可算术校验的导出量**。等式不成立 → 合并表不完整 → **一律标记 `[问题数存疑]`**(Step 2/3/5 同名同义)→ 禁止进入 Step 3。**分级漂移不由等式负责**——等式只校验总量守恒;严重度降级/升级由 Step 5 的严重度校准抽查(第 5 项)拦截。Step 2 自检时监督尚未运行,`Σp*_supplement=0`;Step 3 完成后若监督有 `[补充]` 项,按含该项的完整等式复核。**`p*_supplement` = 监督 `[补充]` 项中被记账的条数**,两类计入:① **发现型**——作为新发现采纳(以 `sources: sup3#<编号>` 记入合并表并计入 `p*_merged`)或被否决(登记入未纳入清单并计入 `p*_rejected`);② **更正型**(不新增发现、也不构成拒绝,如删除无效引用、修订行描述)——**记入审计说明,不计入 `p*_supplement`**(它不产生 `sup3#` 编号条目)。等式右侧的 `Σp*_supplement` 只含"两类去向各有承载"的**发现型**补充——采纳者入合并行 `sources`、被否决者入未纳入清单,主 Agent 否决补充项不会破坏等式平衡;**更正型不进 `sources` 也不进未纳入清单,不参与等式**(若计入会使等式右侧凭空多算、造成假失败)。

> **行与清单互斥**:每条原始发现只能出现在一处——要么被某个合并行的 `sources` 列收录(该行必为已采纳行),要么进入未纳入清单(计入 `p*_rejected`)。**被拒绝项不构成合并判断表行**;`disposition` 的取值 `agent_rejected` / `user_rejected` 仅用于**未纳入清单的标注**,不出现为表行。合并表行数即 `p*_merged` 的唯一来源,未纳入清单条数即 `p*_rejected` 的唯一来源。(特例:`判断` 列标注「用户拒绝(计数保留)」的行,视为**已采纳行**参与计数——见 Step 4 记账规则。)

**口径分配表(哪个判定用哪个数)**:

| 判定 / 用途 | 口径 | 理由 |
|------------|------|------|
| **收敛触发条件 ①–⑤**(是否再跑一轮) | **merged** | 重复计数会凭空顶到阈值、白跑一整轮(一轮 = Step1 全 Agent + Step3 + Step4 + Step5,是本流程最贵的一项成本)——这是口径分离要解决的核心问题 |
| **Step 3 部署形式**(独立监督 / 转移 Step 5 / trivial) | **raw** | 验证强度类判定一律取保守值。且 merged 由主 Agent 自己合并得出——若用它决定"要不要请独立监督",过度合并(误合)即可逃逸掉唯一能查"误合"的监督第③维,构成循环漏洞 |
| **tier 收敛闸门**(上轮含 P0 → 关键升完整) | **raw** | 同上:阵容加强取保守值(闸门 `p0_raw>0` 比触发条件①的 merged 口径更严,为有意设计) |
| **加强审查子路径的收敛触发**(recipe=[STEP1-2]) | **raw** | 该子路径 STEP3/4/5 全裁,**没有任何独立验证者**复核合并表(**`[拒绝异常]` 子分支除外**——N>0 有例外 Step 3 独立监督、N==0 有例外独立 Step 5,该分支合并表有独立复核)→ merged 无人审计。此处保留 raw **不构成额外防护**(`RAW_COUNT` 仍是主 Agent 自报),只是选择一个**不依赖合并表**的保守默认口径;该路径的真实防护来源是**守恒等式自检(锚点为"通过方可输出 `[CONVERGENCE_CHECK]`",不通过一律标记 `[问题数存疑]`")+ 最终通读的轻量替代** |
| **P0 阻塞判定** | 修复后剩余 `p0` | 阻塞看的是"修没修完",与发现数无关(权威定义见「P0 阻塞规则(权威定义)」节) |
| **Step 5 严重度校准/拒绝理由抽查的触发条件** | raw + 清单计数的混合面(`p0_raw` / `p0_rejected` / `agent_rejected` / `user_rejected`) | 被拒项是压低合并口径的唯一直接通道,触发面须覆盖其最宽范围(任一轴非零即复核)。**各档实际载体**(独立 bullet,见 Step 5):mode=standard(`p0_raw≥3` 或 `N>15`,含 `[拒绝异常]` 强制)→ **Step 3 监督第④维承担**;transferred/trivial(含 `[拒绝异常]` N==0 独立 Step 5)→ **Step 5 第 5 项执行**;加强审查子路径未被 `[拒绝异常]`/N==0 例外覆盖时**无载体**——已知残留(见 ③)。**跨阈值严重度降级不由该触发面负责——由第 4 项误合抽查的恒查部分承载**(兼并模式下无论触发面四轴是否为零都执行降级理由存在性核对,见 Step 5 第 4 项与协议 5) |
| **`[拒绝异常]` 判定** | 分子 `agent_rejected + user_rejected`(**仅计未纳入清单中计入 `Σp*_raw` 的被拒项**——被否决 `sup3` 项不占分子,由 `[补充否决异常]` 单独承接);分母 `Σp*_raw`(四项合计,含 `p3_raw`) | 分子分母同锚 raw 口径(占比不会 >100%);拒绝审计基线不随判定口径变化;分母含 p3 以反映"全部原始发现"的规模 |
| **账本 / `[CONVERGENCE_CHECK]` / `[GATE_PASSED]` / 用户提示** | **四个统计口径都记录**(`p*_raw` / `p*_merged` / `p*_rejected` / `p*_supplement`);Step 4 前置 Gate 的用户豁免 P0 数以独立字段 **`user_exempt_p0`** 单列(`rejected = agent_rejected + user_rejected`,**不含**豁免数;`user_rejected` 仅保留「Step 2 未纳入清单中的用户裁决拒绝数」语义) | 审计需要 raw(基线)与 merged(判定)同时可见,否则无法分辨"真的问题少"与"被合并/拒绝压下去的";supplement 也须可见,否则无法分辨"监督补了多少";豁免数单列避免覆盖 Step 2 清单拒绝数、保证 `rejected` 自洽 |

> **⚠️ 反偷懒硬约束(merged 排除被拒项的代价与补偿)**:合并后问题数排除了被拒绝项,因此"多拒绝几条"就能直接压低收敛判定口径。补偿机制有三(①② + ④ 分母不可得时代触发),残余风险显式声明(③):
> ① **逐条书面理由**——每条 `agent_rejected` / `user_rejected` 必须写明具体事实依据(禁止模板化措辞、禁止批量拒绝);
> ② **[拒绝异常] 强制升级**——未纳入清单中**计入 `Σp*_raw` 的**被拒项(`agent_rejected` 与 `user_rejected`)合计 > 3 条,或占 `Σp*_raw` 比例 > 30% 时标记 `[拒绝异常]`(被否决的监督 `sup3` 项不在 `Σp*_raw` 内、不占分子——由 `[补充否决异常]` 单独承接;其中 `user_rejected` 部分仅核验「用户裁决记录是否存在且理由已如实记录」,不质疑用户判断),**无视合并后档位强制补独立 Step 3(mode=standard)交叉验证**(覆盖规则见 Step 3)。压低口径 ≠ 可以绕过独立验证。
> ③ **已知残余风险**:未达阈值的 1–3 条「有书面理由」的拒绝,其理由成立性由 Step 5 第 5 项严重度校准抽查复核——该复核**仅在 `p0_raw≥1` 或 `p0_rejected≥1` 或 `agent_rejected≥1` 或 `user_rejected≥1` 时执行,且覆盖全部严重度的被拒项**;**加强审查子路径(recipe=[STEP1-2])无此复核**——该区间不保证独立验证,接受此残余风险以换取**该轻量子路径(STEP3/4/5 全裁)的成本设计**——注意区别于 transferred 档位:`mode=transferred_to_step5` **有** Step 5 第 5 项复核,不在本残余风险区间内。**trivial 档位的例外**:`N==0` 且未纳入清单存在被拒项(`agent_rejected + user_rejected ≥ 1`)时,Step 5 **必须由独立 Quick Review Agent** 复核拒绝理由与守恒等式(不输出零问题自执行块);该档位的**误合风险**由最终通读的轻量替代承担(无独立复核,属已知残留)——trivial 档位与加强审查子路径在此并列增列。
> ④ **分母不可得时**:`Σp*_raw` 无法计算(如原始报告被截断)→ 占比判据失效,**视同 `[拒绝异常]` 处理**:以「`agent_rejected` 与 `user_rejected` 合计 ≥ 1」**代触发**强制独立 Step 3(mode=standard)复核拒绝理由,并在报告中标注分母不可得。同时 `N` 与 `Σp*_raw` 同源、亦不可得 ⇒ 档位判定(standard/transferred/trivial)无定义——**无论被拒项是否 ≥1(被拒项=0 时代触发不兜底),一律保守回退 mode=standard**;守恒等式核对按协议 5「截断策略」降级为抽样比对 + 显式记录抽样范围,并输出 `[DEGRADED]`。

---

## 审查流程(全 tier 通用)

### Step 0 — 审查准备与路由

> 注:本节(Step 0-5)适用于所有 tier(关键/完整)和所有对象类型(文档/代码),不仅限于多模型渐进式。

主 Agent 执行以下准备步骤:

**0a. 收集审查经验**

从以下来源收集审查教训,注入审查 Agent prompt:
- 当前会话中前几个 Gate 的审查报告(如 Gate 0 的教训注入 Gate 1)
- 用户在本轮审查中明确指出的偏好或纠正
- 通用最佳实践(如"从 AI 执行视角评判,不以人类流畅性为标准"、"用实际项目名检查占位符是否泄漏")
- 跨会话积累的审查教训从 .specpowers/review-cache.json 中读取(跨会话缓存);会话内跨 Gate 教训从会话上下文账本中读取。新发现的教训在每轮审查结束后追加到会话上下文账本,Gate 退出时写入 review-cache.json。

**0b. 注入审查层级边界**

根据当前 Gate 的审查对象类型,从上方"审查层级边界"独立节中提取对应的审查范围和评论边界,注入每个审查 Agent 的 prompt:

| Gate | 审查对象 | 取值来源(见上方审查层级边界表) |
|------|---------|---------------------|
| Gate 0 | design.md | 取 design.md 行 |
| Gate 1 | proposal + design + specs + tasks | 取 proposal.md / design.md / specs/ / tasks.md 四行(含 tasks.md 行),合并后注入 |
| Gate 2 | `docs/superpowers/plans/<name>.md` | 取 `docs/superpowers/plans/<name>.md` 行 |
| Gate 3 | 代码变更 | 取"代码变更"行(评论边界=无) |

注入格式(附加到每个审查 Agent prompt 末尾):

```markdown
## 审查层级边界(强制)

本轮审查对象类型: <design.md / plan / proposal / specs / 代码>
审查范围(你应关注的): <从边界表中提取的审查范围>
评论边界(审查输出不应越界到): <从边界表中提取的评论边界,代码类填"无">

两层边界规则:
- 分析不受限: 你可以深入代码/实现层面做分析——深层分析是发现深层设计问题的前提
- 评论受限制: 审查输出必须表述为当前层级的语言——发现问题后,以设计/规划层面的术语描述问题和建议,不以代码实现建议的形式输出
```

**0c-pre. 解析调用参数(args)**

父技能(specpowers-apply/design/plan)调用 specpowers-review 时通过 `args` 传递参数。主 Agent 从 args 提取:`gate_id`(Gate 0-3 / standalone)、`file_count`(待审查文件数)、`line_count`(**口径按对象类型固定**:文档类=审查对象总行数 `wc -l`;代码类=修改总行数 git diff——与协议 6 `bucket_doc` 及协议 3「独立调用场景自检」一致,父技能按同一口径传入)、code-review 结果(代码类 Gate 3 由 apply 注入,作为对齐 Agent 的代码质量维度输入)。这些值用于下方 0c gate_id 确定 + 0d tier 路由(file_count/line_count 是路由算法输入)。无 args 时(独立调用)由主 Agent 自行计算 file_count/line_count(files + lines 一次性输出算法、空 diff 回退与 file_count=0 的分桶归属,见 `refs/protocols.md` 协议 3「独立调用场景自检」)。

**0c. 确定 gate_id(轮次隔离)**

按当前触发的 Gate 确定 gate_id(优先用 args 传入的 gate_id)——Gate 0→`gate_0`、Gate 1→`gate_1`、Gate 2→`gate_2`、Gate 3→`gate_3`、独立调用→`standalone`。round 计算基于当前 gate_id 的 rounds(见协议 6),不同 Gate 轮次独立计数。⚠️ 不可对不同 Gate 复用同一 gate_id(会导致轮次跨 Gate 累加、路由错误降级)。

**0d. 执行 tier 路由**

按 `refs/protocols.md` 协议 6 路由算法执行 tier 路由决策(完整算法见 refs/protocols.md 协议 6)。计算完成后,在审查报告开头输出 `[TIER_ROUTING]` 标记,格式:

```
[TIER_ROUTING] tier=<critical|full>, round=<N>, file_count=<N>, bucket=<微小|中等|复杂|大规模>, line_count=<N>, floor=<tier>, convergence=<passed|failed|n/a>, recipe=<加强审查|UltraReview|3视角|文档3Agent|文档2Agent>, reason=<路由路径简述>, expected_steps=[...]
```

`expected_steps` 由 tier recipe 决定,见上方 recipe 表。**`expected_steps` 必须写离散 STEP 列表,禁止区间记法**(recipe 表的 `[STEP1-5]`/`[STEP1-2]` 仅为编排简写)——样例:`expected_steps=[STEP1, STEP2]`(文档2Agent / 加强审查)、`expected_steps=[STEP1, STEP2, STEP3, STEP4, STEP5]`(全 STEP recipe)。路由完成后,按 expected_steps 执行对应 Step。

> expected_steps 仅含 tier recipe 的 STEP(STEP1-5);STEP_FINAL_READTHROUGH 为横切 Gate,独立于 expected_steps 检查(父技能**不**跨边界验证此横切 Gate;由 review 内部主 Agent 自执行 + 独立调用场景 [SELF_VERIFY] 兜底,自检细则见 `refs/protocols.md` 协议 3「独立调用场景自检」)。

> 在启动审查 Agent 前,主 Agent 先完成以下自检——以下列出的每一项合理化都是实际审查中观察到的 Agent 跳过模式。

### 审查纪律自检

#### 合理化表

| 如果你在想… | 为什么这是陷阱 | 正确做法 |
|------------|---------------|---------|
| "三个 Agent 结论一致 → 不需要监督验证" | 一致可能是共识偏见而非正确。监督 Agent 常见在合并判断表中发现审查 Agent 未注意到的遗漏 | Step 3 强制执行,无论 Agent 间结论是否一致 |
| "问题少 → 完全跳过合并验证" | 合并验证的溯源+遗漏维度无论问题多少都须执行——问题少(N∈[1,15] 且 p0_raw≤2,raw 口径)只意味着可由 Step 5 兼并(不启动独立 Agent),不意味着可省略维度;且"问题少"是主 Agent 自统计,压低问题数或把 P0 降级 P1/P3 逃避独立监督是已知偷懒模式(Step 1 RAW_COUNT + 合并表 `sources` 守恒等式核对 + [拒绝异常] 强制升级 + p0_raw≥1 或 p0_rejected≥1 或 agent_rejected≥1 或 user_rejected≥1 时严重度校准抽查,四层捕获) | N∈[1,15] 且 p0_raw≤2:合并验证转移到 Step 5(mode=transferred_to_step5,省独立 Agent 不省维度:溯源+遗漏+守恒等式核对+误合抽查);p0_raw≥3 或 N>15:独立监督完整 4 维 |
| "这轮只是小修复,不需要 Quick Review" | 修复引入新问题是已知模式——"修复→引入问题→遗漏修复"是多轮审查中最常见的失败路径 | Step 5 强制执行,无论修复规模 |
| "用户会发现剩余问题" | 用户审查是后续环节——Gate 审查阶段跳过的偏差在下游 Phase 逐层放大 | 每个 Gate 独立完成全部审查步骤 |
| "退化声明太复杂,跳过" | 无退化声明 → 父技能按标记块缺失处理 → 阻塞 Phase。退化声明的存在性比措辞完美更重要 | 至少输出 (a) 缺失了什么能力 (b) 尝试过什么 |
| "零问题 → 不需要标记块" | 父技能将标记块缺失解释为"Step 未执行"(而非"Step 完成且无问题")| `issues_found: 0` 的标记块同样必须输出 |
| "Step 3 和 Step 4 可以同时启动以节省时间" | Step 4 修复 prompt 依赖 Step 3 审核报告调整后的最终合并判断表。并行执行 = 修复 Agent 拿到过期数据 | Step 4 必须在 Step 3 完成且主 Agent 已更新合并判断表后启动 |
| "[多轮] 这是第N轮审查,只需快速过一遍 / 只查修改部分" | 修改可能引入跨章节副作用且审查盲区在多轮中累积;不同模型在不同轮次可能发现不同问题 | 每轮独立完整审查全部内容,审查深度与第 1 轮相同。主 Agent 执行"多轮审查防偷懒协议(主 Agent 自检)" |
| "[多轮] 尽快进入收敛状态,少一轮是一轮" | 过早收敛 = 隐藏问题进入下游 Phase,修复成本指数增长 | 收敛速度由问题实际减少趋势决定,不由轮次数量决定。每轮审查独立完整执行 |
| "[多轮] 问题已修复,本轮剩余问题很少 → 不需要下一轮" | 阈值判断依据是**本轮合并后问题数**(p0_merged/p1_merged/p2_merged/p3_merged,Step 2 合并判断表口径),既不是修复后剩余数,也不是未去重的原始发现数。合并后问题数大说明本轮变更面广、风险高 | 从账本读取 `p*_merged` 字段计算触发条件,禁止用修复后剩余数(p0/p1/p2)替代;也禁止用未去重的 p*_raw 替代——多 Agent 重复报告会凭空顶到阈值、白跑一整轮(raw 仅作审计基线)(**加强审查子路径例外**:该路径按 raw 口径触发——账本轮次条目记 `caliber=raw`,供下一轮⑤判定口径,见「问题数口径权威定义」) |
| "[新口径] 这些发现多是噪声/重复,我合并时多拒绝几条 → 问题数就下来了 → 不用下一轮" | 合并后问题数排除了被拒绝项,"多拒绝"确实能压低收敛判定——这是该口径的**已知代价**,因此配了两道补偿机制(逐条书面理由 + [拒绝异常] 强制独立验证) | 每条拒绝必须写明具体事实依据(禁批量拒绝、禁模板化措辞);未纳入清单中**计入 `Σp*_raw` 的**被拒项(`agent_rejected` 与 `user_rejected`)合计 > 3 条,或占 `Σp*_raw` > 30%(被否决 `sup3` 项不占分子,由 `[补充否决异常]` 承接)→ 标记 `[拒绝异常]`(`user_rejected` 部分仅核验用户裁决记录的存在性,不质疑用户判断),**无视档位强制补独立 Step 3(mode=standard)**。压低口径 ≠ 绕过独立验证 |
| "[新口径] 同一个问题多个 Agent 都报了 → 按原始条数算更保险" | 重复计数是 raw 口径的固有偏差,不是"更保险"——它会让①–⑤凭空触发、白跑一整轮(一轮成本 = Step1 全 Agent + Step3 + Step4 + Step5) | 收敛触发只用 merged(去重+去噪后的合并表口径);raw 保留为**审计基线**(守恒等式 + 拒绝异常检测),不参与触发计算(**加强审查子路径除外**:该路径按 raw 口径触发,见「问题数口径权威定义」) |
| "上下文太长了,简化流程省 token" | 跳过步骤的代价远远大于 token 节省——一个被跳过的 Step 可能导致 P0 遗漏进入下游 Phase,修复成本指数增长 | Token 消耗不是跳过审查步骤的理由——每个 Step 仍需独立完整执行 |
| "tier 路由降级了,顺便多裁一点" | 搭便车偷懒——tier 路由只裁剪指定 STEP,裁剪超出 recipe 声明范围将导致审查覆盖不足 | 裁剪范围 = recipe 声明的 expected_steps。超出声明范围的裁剪 = 偷懒,按违规处理 |

#### Red Flags 自检清单

每个 Step 完成后,主 Agent 逐条自检:

```
□ Step 1: recipe 声明的全部审查 Agent 都启动了?(数量按 tier recipe:文档3Agent=3 / 文档2Agent=2 / 3视角=3(含 apply 侧 code-review)/ 加强审查=2 / UltraReview=6)任一未完成 → 不可标 complete,不可进入 Step 2
□ Step 2: 每条问题写了具体原因(非模板化措辞)?→ 有模板化措辞 → 重写
□ Step 2: 合并判断表含 `sources` 来源映射列 + 未纳入清单?守恒等式 Σ(所有行的 sources 条数) + Σp*_rejected == Σp*_raw + Σp*_supplement 成立(Step 2 时 Σp*_supplement=0)?→ 不成立 → 标记 [问题数存疑],补齐后重新自检,不可进入 Step 3
□ Step 2: 拒绝项均写明具体事实依据?计入 Σp*_raw 的被拒项(agent_rejected 与 user_rejected,不含被否决 sup3 项)合计 > 3 条或占 Σp*_raw > 30%?→ 是 → 标记 [拒绝异常] 并强制补独立 Step 3(无视档位)
□ Step 3: 满足下列任一形式?→ 都不满足 → 不可进入 Step 4:(a) p0_raw≥3 或 N>15【raw 口径】→ 独立监督 Agent 输出了报告(mode=standard);(b) N∈[1,15] 且 p0_raw≤2【raw 口径】→ 主 Agent 输出了 STEP3_EXECUTED(mode=transferred_to_step5);(c) N==0 → 主 Agent 输出了 mode=trivial;(d) **任意档位**触发 `[拒绝异常]` → 独立监督 Agent 输出 mode=standard(**N==0 时为独立 Step 5 复核**,见 Step 3 覆盖规则)——(b)(c) 在触发 `[拒绝异常]` 时**失效**
□ Step 4: 所有 P0 修复均已逐条校验?→ 不清楚 → 先校验
□ Step 5: Quick Review Agent 非 Step 4 实施者?→ 是同一 Agent → 退化声明
□ 最终通读: 全文术语一致?无废弃引用?→ 不确定 → 全文 grep 验证(详见 Step 4 逐条校验)
□ 本轮判定过测试/命令结果?→ 必须核查原始输出(非摘要代理输出)——摘要工具(如 rtk)可能吞掉尾部 `, N errors`/`FAILED` 后缀;输出尾部含 `N errors`/`FAILED` 或非零退出码即视为失败,不确定时用原始命令重跑或读完整输出文件
□ 本轮有退化场景?→ 有 → 退化声明含三要素(缺失能力|尝试记录|降级依据)且 status 非 complete?
□ 本轮是第 ≥2 轮审查?→ 主 Agent 是否已完成多轮防偷懒自检(合理化表逐条确认 + 自检提醒注入 + Red Flags 全量核对)?检查审查报告中是否有 `[ANTI_LAZINESS_SELF_CHECK] round=<N>, passed=true` 记录
□ 审查 Agent 的报告覆盖了全部章节/文件?→ 执行违规检测(详见下方"多轮审查防偷懒协议 → 违规检测")——逐章/逐文件核对,不可粗略估计
```

### 多轮审查防偷懒协议(主 Agent 自检)

> **⚠️ 本协议针对主 Agent 自身,非子 Agent。** 子 Agent 每次启动拥有干净上下文——它不知道前面进行了几轮审查、不会因为"已审过多轮"而偷懒。真正会偷懒的是已完成多轮审查、上下文已腐化的**主 Agent**——它积累了大量会话上下文,经历过多次"审查→修复→重审"循环,自然倾向于"快速过一遍"或"跳过一些步骤草草结束"。
> 
> 以下协议在审查进入第 2 轮及以后时适用。主 Agent 在每轮开始前逐条自检。
> 
> **第 1 轮的主 Agent 自检**由上方"审查纪律自检"节(合理化表 + Red Flags 自检清单)覆盖——第 1 轮使用合理化表中不依赖"已审过多轮"前提的通用条目(如"三个 Agent 结论一致→不需要监督验证""问题少→完全跳过合并验证""退化声明太复杂跳过"等)+ Red Flags 全部条目。从第 2 轮起追加"多轮审查防偷懒协议"专用自检(含多轮特有陷阱条目)。

**核心原则**: 每一轮审查是独立完整的审查——不以轮次为由缩减审查范围,不以"已审过"为由跳过章节,不以"快收敛了"为由加速流程。

**主 Agent 每轮开始前自检(第 ≥2 轮强制执行)**:

1. 确定当前轮次编号 N(取会话上下文账本中**非 aborted** 轮次的数量 + 1 作为 N——与 `refs/protocols.md` 协议 6 的 `effective` 定义一致;`rounds` 数组中被中止的轮次不计入已完成轮次,当前轮次 = 非 aborted 已完成轮次数 + 1)(此处 N 为轮次编号,区别于 Step 3 的问题总数 N——同名不同义)
2. 当 N ≥ 2 时,主 Agent 在开始调度子 Agent 之前,先在当前输出中打印以下提醒并逐条确认:

> ⚠️ **主 Agent 自检提醒 — 第 <N> 轮**
> 
> 这是我执行的第 <N> 轮审查。逐项核对上方合理化表左列——确认自己当前没有匹配任何偷懒合理化模式。特别警惕:
> - 以轮次为由缩减范围(合理化表行"这是第N轮审查…")
> - 以收敛为由加速流程(合理化表行"尽快进入收敛状态…")
> - 以上下文为由跳过步骤(合理化表行"上下文太长了…")
> 
> 如匹配任一行 → 立即按右列纠正。每个 Step 独立完整执行。

3. **逐项核对合理化表左列**(上方"审查纪律自检 → 合理化表")——检查自己是否计划跳过某步骤、是否计划缩减审查范围、是否计划以轮次为由加速。如匹配任一行 → 立即按右列纠正。
4. **逐项核对 Red Flags 自检清单**(上方"审查纪律自检 → Red Flags 自检清单"),确认每个 Step 的执行前提条件满足。
5. **子 Agent prompt 完整性**:每个审查 Agent prompt 含 Step 1 完整性指令?→ 不含 → 补注后启动
6. 自检完成后,在审查报告中记录: `[ANTI_LAZINESS_SELF_CHECK] round=<N>, passed=true`

**违规检测(主 Agent 检查子 Agent 报告完整性)**: 主 Agent 在 Step 2 合并时,逐章/逐文件检查每个审查 Agent 的报告是否覆盖了审查对象的全部内容。发现章节/文件遗漏 → 该 Agent 的报告标记为不完整,要求该 Agent 补充审查遗漏部分后再进入合并流程。**注意**:子 Agent 不会故意偷懒(干净上下文),但可能因 prompt 中审查对象描述不完整而遗漏章节——主 Agent 的违规检测是捕获这类遗漏的最后防线。

**Step 1 — 审查 Agent 并行执行**(按 tier recipe 启动:关键层=对齐+监督 2 个——「监督」=`supervisor1`,**Step 1 普通独立审查 Agent**(并行启动、只对审查对象产出发现、计入 `Σp*_raw`,见上方「3 独立视角」注与 `supervisor1` 统一定义;四维监督属 Step 3 部署,不在 Step 1);文档类完整层=结构+落地+对齐 3 个;代码类完整层=加强审查(code-review+对齐, 2 个) 或 UltraReview(6 个)。代码类具体 recipe 见上方 recipe 表)

结构审查 Agent、落地审查 Agent、对齐审查 Agent 按 tier recipe 启动,互不感知对方的发现。每个 Agent 独立输出审查报告(问题 + 严重度分级 + 证据)。

**子 Agent prompt 完整性硬约束**:每个审查 Agent 的 prompt 必须包含以下完整性指令(不可省略,多轮审查中尤其关键):

> 请完整评审以下全部内容,逐章/逐节/逐文件审查,不要跳过任何章节、段落或文件,不要省略待评审内容。无论这是第几轮审查,都必须以第 1 轮的标准独立完整评审全部内容。

**RAW_COUNT 强制(反偷懒)**:每个审查 Agent 输出末尾必须带一行结构化计数 `RAW_COUNT: p0=N p1=N p2=N p3=N`(该 Agent 本轮发现的问题数),且其报告中的问题必须**连续编号**(`#1`、`#2`、…),编号总数必须等于 `RAW_COUNT` 四值之和。**加强审查路径特则(硬约定)**:`alignment` 的 `RAW_COUNT` **必须包含 code-review 结论的条数**,且其问题编号连续覆盖 code-review 与对齐两部分的全部条目(code-review 结论并入 `alignment` 编号序列,见下方 `sources` 短名规范)——该路径的 `Σp*_raw`(收敛触发与守恒等式右侧基线)不得因 code-review 并入而漏计。主 Agent 在 STEP1_EXECUTED 标记块中汇总为 `raw_count_sum: p0=N p1=N p2=N p3=N`(所有 Agent 计数求和)(此处的 p0/p1/p2/p3 均为**原始发现数**,对应账本 p*_raw 语义——非修复后剩余的 p0/p1/p2,也非合并后问题数 p*_merged)。编号是 Step 2 `sources` 来源映射列的引用依据,`RAW_COUNT` 求和是守恒等式的右侧基线——两者共同把"合并后问题数"变成可算术校验的导出量(见「问题数口径权威定义」)。**raw 计数不参与收敛触发计算**(**加强审查子路径除外**:该路径按 raw 口径触发,见「问题数口径权威定义」),仅作审计基线;Step 5 兼并合并验证对照的是守恒等式而非简单计数比对(见 Step 3 转移规则)。

**Step 2 — 主 Agent 逐条合并去重**

主 Agent 收集所有审查 Agent 报告后:
- 去重合并:同一问题(同一位置+同一类型)→ 合并为一条。"同一位置"判定:指同一文件的同一段落/章节/代码块内,且问题描述指向同一处文本。不同位置但指向同一概念缺陷的,标记为关联但**不合并**(关联项仍各占一行)。
- **来源映射(强制)**:每条合并行必须列出 `sources` 列,逐条引用被它吸收的原始发现(格式 `<Agent名>#<编号>`,如 `structure#3, alignment#1`)。合并行的 `sources` 条数 = 该行吸收的原始发现条数(1 条=未被合并,≥2 条=合并了重复项)。**禁止无 sources 的行**。
  > **`sources` 短名规范(Step 5 溯源核对的命名空间基准)**:文档类完整层 `structure` / `landing` / `alignment`;关键层 `alignment` / `supervisor1`(Step 1 监督审查 Agent);代码类 UltraReview `build` / `code` / `specs` / `docs` / `deps` / `alignment`;代码类加强审查(recipe=[STEP1-2])`alignment`(对齐 Agent 单审)——**code-review 结论并入 `alignment` 报告的编号序列**(不单独编号),`sources` 引用 `alignment#k` 即涵盖两者(**跨 Agent 不可变约定:加强审查路径下 `alignment` 的 `RAW_COUNT` 必须包含 code-review 结论的条数,且其问题编号连续覆盖 code-review 与对齐两部分的全部条目**——否则该路径 `Σp*_raw` 漏计、守恒等式右侧基线失真,见 Step 1 RAW_COUNT 强制);加强审查的 `code`(specpowers-apply 的 code-review 结论)**不是 sources 短名、不产生 `code#k` 引用**(其结论已并入 `alignment` 编号序列)——**仅用于 `STEP1_EXECUTED` 的 `agents` 字段**(记录 code-review 执行主体),列入 sources 清单徒增误引风险,故移出;主 Agent 自执行 `self`(Step 2 合并表由主 Agent 产出,不产生 `#k` 编号;`self` 仅用于 `STEP<N>_EXECUTED` 的 `agents` 字段,不作为 `sources` 短名);监督补充 `sup3`(Step 3 监督 Agent 的 `[补充]` 项)。`STEP1_EXECUTED` 标记块的 `agents` 列表**必须使用同一套短名**,否则 Step 5 无法核对 sources 真实性。
  >
  > **编号空间隔离(三个互不相关的编号空间)**:① `supervisor1`——关键层 **Step 1** 的监督**审查** Agent(其 `#k` 指向该 Agent 的审查报告,计入 `Σp*_raw`,走 `sources: supervisor1#k`);② `alignment` / `code`(**仅 UltraReview 维度**——加强审查路径的 code-review 结论并入 `alignment` 编号序列,不产生 `code#k`)/ `structure` / `landing` / `build` / `specs` / `docs` / `deps`——各审查 Agent(计入 `Σp*_raw`);③ `sup3`——**Step 3** 独立监督 Agent 的 `[补充]` 项(其 `#k` 指向监督报告的 `[补充]` 清单,计入 `p*_supplement`)。溯源核对时须分别对照对应报告,不得混用;**监督 Agent 在 Step 3 阶段不产出计入 Σraw 的编号报告——其一切新发现均走 sup3 通道计入 `p*_supplement`**。
- **未纳入清单(强制)**:**不构成合并表行**的原始发现逐条登记(`<Agent名>#<编号>(原始严重度 P0-P3)——原因:……|disposition: agent_rejected|user_rejected`),构成 `p*_rejected`。原因分两类:`agent_rejected`(主 Agent 判定不成立)/ `user_rejected`(用户裁决为非问题或跳过)。**严重度取该 Agent 原始报告值,不由主 Agent 改判**(改判属严重度校准问题,须走降级理由流程)。**判为重复而被合并行吸收的项不进未纳入清单**(它们已计入对应行的 `sources`)。
- **守恒等式自检(强制,通过方可进入 Step 3)**:`Σ(所有行的 sources 条数) + Σp*_rejected == Σp*_raw + Σp*_supplement`(Step 2 自检时监督尚未运行,`Σp*_supplement=0`)。不成立 → 合并表不完整(有原始发现没有去向)→ **一律标记 `[问题数存疑]`**(与 Step 3/Step 5 的同名标记同义——该轮合并表不可信,须补齐后重新自检并复算 `[CONVERGENCE_CHECK]` 输入)→ 补齐后重新自检;不得以"大致相符"放行。(**加强审查子路径(recipe=[STEP1-2])无 Step 3——`[拒绝异常]` 子分支除外**(N>0 有例外 Step 3 独立监督复核合并表、N==0 有例外独立 Step 5,见「加强审查」节例外条,该子分支锚点回归标准口径冻结规则):该路径的锚点改为「守恒等式自检通过**方可输出 `[CONVERGENCE_CHECK]`**」——**自检不通过同样一律标记 `[问题数存疑]`**,补齐去向记录后重算,通过前禁止输出 `[CONVERGENCE_CHECK]`。**原始报告被截断致 `Σp*_raw` 不可得时**:自检按协议 5「截断策略」降级为**抽样比对 + 显式记录抽样范围**(抽样发现任何不匹配仍按 [问题数存疑] 升级重审)并输出 `[DEGRADED]`;且 `N` 随之不可得 ⇒ Step 3 档位判定保守回退 mode=standard,见 Step 3 引言。)
- 冲突标注:不同 Agent 给出不同严重度 → 标注冲突,在合并判断表中以 [冲突: AgentA=P0, AgentB=P1] 标注,汇总所有冲突项后在审查报告中统一提请用户裁决(批量列出,逐条等待用户判定)
- 逐条判断:接受 / 拒绝 / 部分接受,每条写原因(不可批量同意/拒绝——每项问题的判定依赖其具体上下文,批量处理忽略差异导致误判)。判断依据:(a) 问题是否确实存在(事实判断);(b) 修复成本与收益(设计文档级 vs 实现细节级);(c) 是否违背文档设计意图。原因需具体到问题本身,不可使用模板化措辞。**拒绝项必须写明具体事实依据**(如"这不是问题,因为 X 处已有 Y 约束"),不可写"误报"/"不重要"等无依据措辞——merged 口径下拒绝会直接压低收敛判定,故拒绝必须逐条有据可查。**「部分接受」的记账规则**:按**原始发现粒度**拆记——被采纳的部分构成合并行(`disposition=agent_accepted`,计入 `p*_merged`),被拒绝的部分登记入未纳入清单(`disposition=agent_rejected` 或按用户裁决为 `user_rejected`,计入 `p*_rejected`),并在清单条目原因中注明「部分接受-拒绝部分」。**不得为部分接受发明新的 `disposition` 值**。
- 输出合并判断表(# | 问题 | **sources** | 严重度 | 判断 | disposition | 原因 | 修改方案)。`disposition` 标注**每行**的处置来源:`user_adjudicated`(用户裁决的冲突项)/ `agent_accepted`(主 Agent 接受)。**被拒绝项不构成表行**——它们登记在未纳入清单中(`disposition=agent_rejected` 或 `user_rejected` 仅用于清单标注)。`#` 列**从 1 开始连续编号**(不得跳号、不得用字母后缀如 `C1b`)——修复子 Agent 与 Step 5 核对均按此编号引用行。
- **记录四个统计口径**:`p*_raw` / `p*_merged` / `p*_rejected` 于 **Step 2** 写入账本与 `STEP2_EXECUTED`;`p*_supplement` 于 **Step 2 记 0**、**Step 3 结束后**按终值更新(定义见「问题数口径权威定义」)。
- **[拒绝异常] 检测(强制)**:未纳入清单中**计入 `Σp*_raw` 的**被拒项(`agent_rejected` 与 `user_rejected`)合计 > 3 条,或占 `Σp*_raw` 比例 > 30% → 标记 `[拒绝异常]`(被否决的监督 `sup3` 项不在 `Σp*_raw` 内、不占分子——由 `[补充否决异常]` 单独承接;其中 `user_rejected` 部分仅核验「用户裁决记录是否存在且理由已如实记录」,不质疑用户判断),**无视合并后档位强制补独立 Step 3(mode=standard)**,并在 Step 5 核对中说明。(**分母口径**:`Σp*_raw` = `p0_raw + p1_raw + p2_raw + p3_raw` **四项合计**,与判档用的 `N`(不计 `p3_raw`)**不是同一个数**——占比一律用四项合计。)(**代触发**:`Σp*_raw` 不可得时(如原始报告被截断),被拒项(`agent_rejected` 或 `user_rejected`)≥ 1 即视同触发 `[拒绝异常]`;且 **`N` 与 `Σp*_raw` 同源、亦不可得 ⇒ 档位判定无定义 ⇒ 无论被拒项是否 ≥1(含被拒项=0),一律保守回退 mode=standard**,守恒等式核对按协议 5「截断策略」降级为抽样比对 + 显式记录 `[DEGRADED]` 与抽样范围。)

> 上下文传递机制和子 Agent prompt 注入模板详见 `refs/protocols.md` 协议 5。

**Step 3 — 合并验证**(部署形式按原始发现总数 N=p0_raw+p1_raw+p2_raw 决定,N 取 Step 1 raw_count_sum 口径【去重前求和】——不取 Step 2 合并表计数,防合法去重导致档位漂移;**本判定属验证强度类,一律用 raw 保守口径**,见「问题数口径权威定义」;加强审查子路径输出 `STEP3_TIER_SKIPPED`,本规则不介入;**N 不可得的保守回退(硬规则)**:`Σp*_raw` 不可得(如原始报告被截断)⇒ N 不可得(二者同源)⇒ 三档判定(standard/transferred/trivial)无定义——**一律保守回退 mode=standard**(启动独立监督 Agent 完整 4 维;被拒项=0、`[拒绝异常]` 代触发不适用时同样回退),并记录 `[DEGRADED]` 与抽样范围——守恒等式核对降级见协议 5「截断策略」与 Step 2 `[拒绝异常]` 检测条)

**前置条件(硬约束)**:Step 2 的守恒等式 `Σ(所有行的 sources 条数) + Σp*_rejected == Σp*_raw + Σp*_supplement` 已成立。不成立 → 回 Step 2 补齐合并表,禁止启动 Step 3(合并表不完整时,任何部署形式都无法保证验证覆盖)。`Σp*_raw` 因原始报告截断而不可得时,等式核对按协议 5「截断策略」降级为**抽样比对 + 显式记录抽样范围**(发现任何不匹配仍按 [问题数存疑] 升级重审),输出 `[DEGRADED]`(注明抽样范围);此时 N 不可得 ⇒ 保守回退 mode=standard(见上方 Step 3 引言)。

阈值判定(N 基于原始发现数 raw_count_sum,非修复后剩余数;P0 即使被用户裁决为非问题,p0_raw 仍计原始发现值;不计 p3_raw):

- **p0_raw≥3 或 N>15 → 独立监督 Agent(完整 4 维)**:主 Agent 将所有审查 Agent 原始审查报告全文 + 最终合并判断表注入监督 Agent prompt,执行交叉比对:①溯源检查(每条问题能否在原始报告找到来源)②遗漏检测(原始报告有但合并表缺失的发现)③合并去重合理性(该合未合/误合)④判断充分性(接受/拒绝理由是否充分+严重度校准);⑤**输出前核对守恒等式** `Σ(所有行的 sources 条数) + Σp*_rejected == Σp*_raw + Σp*_supplement`(含监督自身补充项)——不成立 → 标记 [问题数存疑] 并按重审升级路径处理。输出独立审核报告(每项 [维持/修正/补充] + 理由),主 Agent 据此调整合并判断表输出最终版。输出 `STEP3_EXECUTED`(mode=standard)。仅单一模型可用时同模型执行监督,声明"缺少独立视角"。监督报告的 `[补充]` 项按「问题数口径权威定义」的记账口径统计(发现型计入;更正型不计入)——**发现型**:采纳者以 `sources: sup3#<编号>` 记入合并判断表(计入 `p*_merged`),被否决者登记入未纳入清单(计入 `p*_rejected`)并写明原因(**不计入 `[拒绝异常]` 分子**——分子仅计计入 `Σp*_raw` 的被拒项,`sup3` 否决由 `[补充否决异常]` 单独承接),已采纳的补充不得产生无 sources 行;**更正型**:记入审计说明,不产生 `sup3#` 编号条目,不进 `sources` 也不进未纳入清单(计入会使守恒等式右侧凭空多算)。**补充否决的复核**:主 Agent 否决监督 `[补充]` 项时须逐条写明事实依据(同拒绝项的要求)。若**否决比例 ≥ 50% 或否决条数 ≥ 3**,标记 `[补充否决异常]`,并将否决清单回传监督 Agent 复议一次;复议后监督维持原意见而主 Agent 仍否决的,须把双方理由一并写入报告,且该轮**强制注入 Step 5 复核**(无论 Step 3 为何 mode;**例外——加强审查子路径检出 `[拒绝异常]` 且 N>0 时**:Step 5 保持裁剪、不注入 Step 5 字段组,该复核转移为 Step 3 复议留痕——监督复议结论与双方理由写入 `STEP3_EXECUTED` 的 `notes`(或审计说明),并同步写入 `[CONVERGENCE_CHECK]` 的 `notes`,见「加强审查」节例外条)。

- **N∈[1,15] 且 p0_raw≤2(未达独立监督阈值——Step 5 兼并验证 + p0_raw≥1 或 p0_rejected≥1 或 agent_rejected≥1 或 user_rejected≥1 时严重度校准抽查 + 收敛续轮兜底)→ 转移至 Step 5**:**不启动独立监督 Agent**。合并验证的「溯源+遗漏」2 维 + 守恒等式核对 + 误合抽查转移到 Step 5 的 Quick Review Agent 兼并执行(见 Step 5)。主 Agent 输出 `STEP3_EXECUTED`(agents=self,mode=transferred_to_step5,degradation=none——结构重组非能力损失)。合并判断表为 Step 2 版本。

- **N==0 → trivial**:主 Agent 输出 `STEP3_EXECUTED`(agents=self,mode=trivial)。p3_raw==0 时 Step 4/5 均由主 Agent 自执行输出零问题标记块;**p3_raw>0 时 Step 4 由主 Agent 自执行修复全部 P3**(本档位 STEP4_EXECUTED 的 `issues_found` = 本轮**修复的 P3 项数**(=p3_raw,默认全量修复策略覆盖 P3)——Step 4 字段语义的 trivial 显式例外,见协议 3「issues_found 逐 Step 语义」注),Step 5 常规修复验证——防止"trivial 零修复 + 触发条件④每轮重触发"的零进展循环。**trivial 档位的例外**:`N==0` 且未纳入清单存在被拒项(`agent_rejected + user_rejected ≥ 1`)时,Step 5 **必须由独立 Quick Review Agent** 复核拒绝理由与守恒等式(不输出零问题自执行块);该档位的**误合风险**由最终通读的轻量替代承担(无独立复核,属已知残留)。

- **[拒绝异常] 覆盖规则(无视档位)**:无论 N 落在上述哪个档位,Step 2 检测到 `[拒绝异常]`(未纳入清单中**计入 `Σp*_raw` 的**被拒项(`agent_rejected` 与 `user_rejected`)合计 > 3 条,或占 `Σp*_raw` 比例 > 30%——被否决的监督 `sup3` 项不占分子,由 `[补充否决异常]` 单独承接)时**强制按 mode=standard 启动独立监督 Agent 完整 4 维**——merged 口径排除了被拒项,拒绝是唯一能直接压低收敛判定的通道,必须由独立视角复核;**不得转移至 Step 5**(兼并模式不含"合并合理性/判断充分性"维度,查不出误拒)(**N==0 且触发 `[拒绝异常]` 时**:trivial 的 Step 4/5 主 Agent 自执行不适用——修复仍可由主 Agent 内联,但 **Step 5 必须由独立 Quick Review Agent 复核拒绝理由与守恒等式**)(加强审查子路径的落地形式见「加强审查」节的例外条)。检出 `[拒绝异常]` 或未纳入清单存在 `user_rejected≥1` 时,无论 Step 3 为何 mode,**Step 5 必须注入协议 5 的「合并验证模式」字段组**(原始报告全文 + 合并表 + 未纳入清单 + `raw_count_sum`),否则拒绝理由与守恒等式无法复核。(**加强审查子路径例外**:该子路径**不接受「用户拒绝 P0」**——用户拒绝某项 P0 时转 mode=standard 完整层处理,放弃本子路径裁剪、按完整层 Step 3/4/5 执行,届时本条注入要求按完整层规则适用,见「加强审查」节 P0 修复机制;子路径自身的 Step 5 裁剪与例外形式见该节例外条。)

**口径冻结(gate 输入)**:Step 3 完成后,若监督 Agent 的交叉验证调整了合并判断表(补充遗漏 / 修正判断 / 严重度校准),必须**同步更新 `p*_merged` 为终值(含监督补充行)**并写入账本。该终值是本 Gate 收敛判定的唯一输入,**mode=standard 调整过合并表时须在 `STEP3_EXECUTED` 的 `merged_count_final` 字段重述终值**(transferred/trivial 档位终值等于 Step 2 的 merged_count,可省略;若填则应与 Step 2 值一致,差异须在 notes 说明)(供 Step 5 与审计对账)。收敛判定必须在口径冻结之后计算,禁止用 Step 2 初版合并表的计数算收敛(加强审查子路径的**默认轮**除外:该轮无 Step 3,用 Step 2 值且按 raw 口径;**检出 `[拒绝异常]` 的轮不除外**——N>0 有例外 Step 3,按本段口径冻结规则取终值(raw 口径触发、merged/审计字段仍取冻结终值);N==0 有例外独立 Step 5,账本终值在其复核输出后落定)。

> **反偷懒**:Step 3 部署阈值基于 raw 汇总数 p*_raw(禁止用修复后剩余数替代)。Step 5 兼并验证核对的是**守恒等式**(`Σ(所有行的 sources 条数) + Σp*_rejected == Σp*_raw + Σp*_supplement`)——不再使用"合并表计数 ≥ raw×0.6"这类经验容差:任何一条原始发现没有去向(既不在某行 `sources`,也不在未纳入清单)即判不完整 → 标记 [问题数存疑],触发重审:补独立 Step3(mode=standard)交叉验证 → 对新发现问题重修复(Step4)→ 重 Step5。不重跑 Step1-2(审查报告不变)。注意:**守恒等式不覆盖误合与严重度降级**(降级与合并不改变计数总量),二者分别由第 4 项误合抽查与第 5 项严重度校准抽查拦截。

> **标记块格式**:mode 字段(standard|transferred_to_step5|trivial)独立于 degradation,定义见 `refs/protocols.md` 协议 3。转移/trivial 路径由主 Agent 自执行输出(agents=self),属协议 3 主 Agent 规则的合法例外。

**⚠️ 时序硬约束: Step 4 必须在 Step 3 完成后才能启动。** Step 3 完成 = ①mode=standard → 监督 Agent 完成交叉验证 + 主 Agent 已输出最终版合并判断表;②mode=transferred_to_step5 → 主 Agent 已输出转移声明;③mode=trivial → 主 Agent 已输出 STEP3_EXECUTED。对应档位 Step 3 完成前,禁止启动任何修复子 Agent——并行启动将导致修复 Agent 拿到未经监督审核或合并验证延后的合并判断表。

**Step 4 — 子 Agent 执行修复 + 主 Agent 校验**(加强审查子路径裁剪:输出 STEP4_TIER_SKIPPED)

> **⚠️ 时序硬约束**: Step 3 与 Step 4 禁止同一 turn 启动。须等待 Step 3 完成信号(task-notification 或标记块)后,方可启动 Step 4。

**前置条件(硬约束,逐条确认后方可进入)**:
- [ ] Step 3 已按档位完成(输出 `STEP3_EXECUTED` 标记块,含 mode 字段):mode=standard → 独立监督 Agent 已完成交叉验证 + 主 Agent 已将审核调整应用到合并判断表(最终版已输出);mode=transferred_to_step5 → 主 Agent 已输出转移声明,合并表为 Step 2 版本;mode=trivial → 主 Agent 已输出
- [ ] 修复由独立子 Agent 执行(非主 Agent 内联)(**例外**:recipe=[STEP1-2] 加强审查子路径与 trivial 档位按对应节规则由主 Agent 内联修复——分别见「加强审查」节 P0/P1/P2/P3 修复机制与 Step 3 trivial 档,不适用本条)
- [ ] 修复 prompt 中的修复项来源于合并判断表(mode=standard 路径=Step 3 最终版;mode=transferred_to_step5 路径=Step 2 版本)
- [ ] 【转移路径 mode=transferred_to_step5 独有】修复 prompt 中明确声明"合并验证尚未执行,修复基于 Step 2 合并结果,Step 5 将做合并验证+修复验证双重检查"——让修复子 Agent 知情,若修复过程中发现合并遗漏可主动上报(额外横向检测点;`[疑似合并遗漏]` 上报的处置:转交 Step 5 遗漏检测复核并计入核对范围,Step 5 之后上报则按 `[问题数存疑]` 升级——消费规则见协议 5)

**修复策略(默认全量修复)**:

> **默认行为**: 启动独立修复子 Agent,逐条分析判断并全量修复所有级别问题(P0/P1/P2/P3)。
> - **P0**: 须先经用户逐条确认(问题判定 + 修复方案),确认后纳入修复 prompt
> - **P1/P2/P3**: 默认全量修复,无需逐条用户确认——但需注意:澄清性修改(消除歧义、修正措辞等)直接修复;结构性修改(改变设计意图/架构/接口/数据模型/核心流程)仍需用户审批,与上方「Gate 执行规则」节中「审查修改与审批的关系」保持一致
> - **用户可显式指定跳过**: 如"只修复 P0/P1"、"跳过 P3 风格问题"——以用户显式指令为准。**Agent 不得在未获得用户显式指令的情况下自行跳过任何级别的修复项**
> - **修复方式**: 启动独立修复子 Agent(非主 Agent 内联修复)——主 Agent 在长上下文下内联修复质量不可靠,容易遗漏边界情况和引入新问题
> - **逐条分析**: 修复子 Agent 对每条修复项独立执行 分析→判断→修改 三步,不可批量处理多条修复项——批量修复在长上下文中容易漏修边界情况和引入交叉错误

**前置 Gate — P0 用户确认**(见「P0 阻塞规则(权威定义)」节):合并判断表中标记为"接受"的 P0 项,先提请用户逐条确认(问题判定 + 修复方案)。用户确认后纳入修复 prompt。P1/P2/P3 项直接纳入修复,无需逐条确认(用户可显式指定跳过某些级别)。用户拒绝某项 P0 → 标注"用户拒绝",保留但不修复——该 P0 **不计入修复后剩余 `p0`**(不阻塞循环出口),但须在账本的 **`user_exempt_p0`** 字段中**单列**(独立计数字段——`user_rejected` 仅保留「Step 2 未纳入清单中的用户裁决拒绝数」语义,**不因 Step 4 豁免而更新**;`rejected = agent_rejected + user_rejected`,**不含**豁免数),并在 `[GATE_PASSED]` / `[CONVERGENCE_CHECK]` 的 `user_exempt_p0` 字段与用户提示中体现、输出「用户豁免 P0」说明。(**加强审查子路径例外**:该子路径不接受「用户拒绝 P0」——用户拒绝某项 P0 时转 mode=standard 完整层处理(放弃子路径裁剪,按完整层 Step 3/4/5 执行),见「加强审查」节 P0 修复机制;本条豁免记账规则不适用于该子路径。)

> **记账规则(Step 4 阶段的用户拒绝)**:**不回改 `disposition`、不重算 `p*_merged`**(口径已在 Step 3 冻结;**冻结不因裁决类事由回改**——**Step 5 的误合拆行修正是唯一例外**,见 Step 5 第 4 项);该 P0 **不计入修复后剩余 `p0`**(不阻塞循环出口)。但须:① 在账本该轮的 **`user_exempt_p0`** 字段中**单列**(独立计数字段——`user_rejected` 仅保留「Step 2 未纳入清单中的用户裁决拒绝数」语义,**不因豁免而更新**;`rejected = agent_rejected + user_rejected`,**不含**豁免数),并在 `[GATE_PASSED]`/`[CONVERGENCE_CHECK]` 的 `user_exempt_p0` 字段与用户提示中体现;② 在 `[GATE_PASSED]`、`[CONVERGENCE_CHECK]` 与用户提示中输出「**用户豁免 P0**」说明。
> **表内标注约定**:该行 `判断` 列标注「**用户拒绝(计数保留)**」,`disposition` 不变;审计时以 `user_exempt_p0` 字段与该标注对照,**不得据标注重算 `p*_merged`**。
> **理由**:`p*_merged` 记的是"本轮**发现**了多少不同问题"——被用户裁决为非问题的 P0 确实被**发现过**,保留在计数中更保守(收敛判定不因用户豁免而放松);用户拒绝影响的是**修复义务与阻塞判定**,不是发现计数。

1. 指派修复子 Agent:
   - 模型选择:优先与审查 Agent 不同模型(确保修复视角独立);仅单一模型时用同模型
   - Prompt 注入:最终合并判断表中标记为"接受"的修复项(精确修改指令 + 原文片段 + 新文本 + 修改位置)
   - 职责:修复子 Agent 只执行文件修改,不审查、不输出判断
   - **⚠️ 硬约束 — 同文件不并发**: 不同修复子 Agent **禁止**修改同一文件。即使修改项分布在文件的不同章节/行号,并发写入同一文件将导致编辑冲突和内容丢失。分组时以文件为最小粒度——同一文件的所有修复项必须分配给**同一个**修复子 Agent。具体规则:
     - 单文件变更 → 仅启动 1 个修复子 Agent(无论修复项多少)
     - 单文件修复项 > 10 条时 → 单个修复子 Agent 仍负责该文件,但按批次(每批 ≤10 条)顺序执行,每批完成后主 Agent 校验,确认无误后再执行下一批
     - 多文件变更 → 按文件分组,每文件 1 个修复子 Agent
     - 跨文件语义依赖(如同一术语替换、交叉引用同步)→ 将依赖文件合并到同一修复子 Agent
     - 仅当修复项涉及 ≥2 个无依赖文件时方可并行启动多个修复子 Agent
     - **"无依赖"判定标准**: 两个文件满足以下全部条件视为无依赖,可分配给不同修复子 Agent 并行执行:
       - 无共享符号/术语替换(如同一函数/变量/类名需要同步改名)
       - 无交叉引用(如文件 A 的修改引用了文件 B 的新增/删除内容)
       - 无共享配置值(如两个文件使用同一常量/配置项,需同步修改)
       - 不属同一 import/include 链(如文件 A import 文件 B,修改 B 的导出会影响 A)
       任一条件不满足 → 合并为同一修复子 Agent

2. 主 Agent 逐条校验:
   - 每条修复是否按修改方案正确应用?(原文→新文对比)
   - 修复是否引入了新问题?(残留旧术语、格式破坏、Markdown 语法错误)
   - 全文 grep 验证:废弃概念/术语已清除,无残留占位符
   - 增量审查: 仅检查变更区域及上下文,确认修复未在邻近区域引入新问题

3. 校验不通过 → 标注失败项 → 修复子 Agent 重新修复 → 主 Agent 再次校验(最多重试 3 轮,超过则标注"修复失败"并提请用户裁决)
4. 全部通过 → 进入 Step 5

降级:子 Agent 工具不可用时(极端环境),退回主 Agent 自行修复,报告中声明限制。环境不支持并行 Agent 时,修复子 Agent 改为串行执行,拆分规则不变,报告中声明"串行执行(环境限制)"。降级时 degradation 字段按标准协议输出退化声明。

修复子 Agent 完成后输出 `STEP4_EXECUTED` 标记块。多修复子 Agent 时,主 Agent 收集所有修复子 Agent 的输出后合并为**单个** STEP4_EXECUTED 标记块:issues_found 汇总所有修复子 Agent 发现的新问题数,agents 列表包含所有修复子 Agent 的名称和模型,degradation 取所有修复子 Agent 中最严重的退化状态。

**Step 4 退化补偿规则**:当 Step 4 发生退化时(退化声明按标准协议输出,状态判定见 `refs/protocols.md`),Step 5 的 Quick Review Agent 将执行两轮独立验证(见 Step 5 退化补偿规则),以补偿修复视角独立性的损失。**转移路径(mode=transferred_to_step5)下若 Step 4 退化 → 回退为独立 Step 3**:修复不可靠时合并验证必须在修复前完成(不可延迟到 Step 5),此时放弃转移,重新启动独立监督 Agent 交叉验证后再修复。具体:①不回退已修复文件;②基于已修复产物 + Step2 合并判断表启动独立 Step3(mode=standard)交叉验证;③Step3 输出后对'已修复 + Step3 新发现'合并重新执行 Step4;④标记块处理:在原 STEP3_EXECUTED(transferred_to_step5)后追加新的 STEP3_EXECUTED(mode=standard,标注'回退自 transferred_to_step5'),父技能按 protocols 协议3 多标记块规则识别同轮内最后输出为权威

**Step 5 — Quick Review 收尾**(关键层/完整层强制执行——完整层中的加强审查子路径除外:该子路径 recipe=[STEP1-2],输出 `STEP5_TIER_SKIPPED`。**例外**:该子路径不接受「用户拒绝 P0」——用户拒绝某项 P0 时转 mode=standard 完整层处理(放弃子路径裁剪,按完整层 Step 3/4/5 执行并输出 `STEP5_EXECUTED`,见「加强审查」节 P0 修复机制);检出 `[拒绝异常]` 且 N==0 时例外启动独立 Step 5,见该节例外条)

- 独立 Agent(非 Step 4 实施者)通读修复子 Agent 的输出 + 主 Agent 的校验记录
- **严重度校准/拒绝理由抽查(独立触发条件,非兼并模式专属)**:触发面 `p0_raw≥1` 或 `p0_rejected≥1` 或 `agent_rejected≥1` 或 `user_rejected≥1`(任一轴非零即复核,覆盖全部严重度的被拒项——`user_rejected` 项只核验用户裁决记录存在性,不质疑用户判断)。**各档实际载体**:① mode=transferred_to_step5 或 trivial 档(含 `[拒绝异常]` N==0 例外启动的独立 Step 5)→ 由本 Step 的 Quick Review Agent 执行(即下方兼并模式第 5 项,逐项细则见 `refs/protocols.md` 协议 5「Step 5 合并验证模式注入模板」**强制指令中「`p0_raw≥1` 或 … 时追加第 5 项严重度校准抽查」条目**);② mode=standard(`p0_raw≥3` 或 `N>15`,含 `[拒绝异常]` 强制 standard)→ **由 Step 3 独立监督 Agent 的第④维(判断充分性+严重度校准)承担**——兼并注入门为 transferred ∨ `[拒绝异常]` ∨ `user_rejected≥1`,standard 且 `agent_rejected∈[1,3]`(未达 `[拒绝异常]`)时不触发兼并,第④维即该触发面的实际载体,Step 5 不因 `agent_rejected≥1` 单独注入;③ **加强审查子路径未被 `[拒绝异常]`/N==0 例外覆盖时该抽查无载体**——已知残留(见「问题数口径权威定义」反偷懒硬约束③),由守恒等式自检 + 轻量通读部分补偿。
- **兼并 Step 3 合并验证模式**(当主 Agent 读取到 STEP3_EXECUTED 的 mode=transferred_to_step5,**或本轮检出 `[拒绝异常]`,或未纳入清单存在 `user_rejected≥1`** 时触发本兼并模式):Quick Review Agent 的 prompt 额外注入「所有审查 Agent 原始报告全文(含问题编号与 RAW_COUNT 行)+ 最终合并判断表(含 `sources` 来源映射列、未纳入清单与 disposition 列)+ 账本上轮有效轮次的 `p*_merged`(及 `p*_raw`,上轮 = 协议 6 的 `effective` 序列最后一个,跳过被中止轮)+ Step 1 的 raw_count_sum」(注入模板见 `refs/protocols.md` 协议 5)。在修复验证之外,兼并执行 2 维合并验证(溯源+遗漏)+ 1 项守恒等式核对 + 1 项误合抽查(共 4 项;p0_raw≥1 或 p0_rejected≥1 或 agent_rejected≥1 或 user_rejected≥1 时追加第 5 项严重度校准抽查,防 P0 降级压报逃逸)(`user_rejected` 是压低合并口径的另一条通道,任何存在被拒项的轮次都至少核验用户裁决记录的存在性——见第 5 项复核标准):
  1. 溯源检查:合并表每条问题能否在原始报告找到来源(逐条核对 `sources` 列的 `<Agent名>#<编号>` 是否真实存在且语义对应)?无法溯源 → 标记 `[无法溯源]`,**按 `[问题数存疑]` 升级路径处理**(补独立 Step 3(mode=standard)交叉验证 → 对新发现问题重修复(Step 4)→ 重 Step 5;不重跑 Step 1-2——审查报告不变)
  2. 遗漏检测:原始报告有但合并表缺失的发现(含未纳入清单中无书面理由的项)?逐条标注(区分 disposition=user_adjudicated 的用户裁决项 vs agent_rejected 的主 Agent 拒绝项;**计入 `Σp*_raw` 的**被拒项(agent_rejected 与 user_rejected)合计 >3 条或占比 >30% 时标记 [拒绝异常](被否决 `sup3` 项不占分子——由 [补充否决异常] 承接)——**该情形本应已在 Step 3 强制走独立监督路径,若在此处才发现,说明档位走错,按 [问题数存疑] 升级处理**)
  3. **守恒等式核对(反偷懒,强制)**:重新计算 `Σ(所有行的 sources 条数) + Σp*_rejected` 与 `各 Agent RAW_COUNT 求和 + Σp*_supplement`(从注入的原始报告**重新数编号**,不从 STEP1_EXECUTED 的 raw_count_sum 直接取信——防止主 Agent 篡改),**比对总量**:总量等式不成立 → 标记 [问题数存疑],触发重审:补独立 Step3(mode=standard)交叉验证 → 对新发现问题重修复(Step4)→ 重 Step5。不重跑 Step1-2(审查报告不变)。此核对为**精确算术,无容差**——多 Agent 报同一问题属合法去重,其去向由 `sources` 列承载,故"计数小于 raw"本身不构成异常,"有发现没有去向"才构成异常
  4. **误合抽查+降级理由存在性核对(恒查项——兼并模式下无论如何都执行,不受第 5 项触发面约束)**:抽取 `sources` 条数 ≥2 的行,按**当前 recipe 的合并判据**逐行判断:文档类=同一文件的同一段落/章节/代码块内且问题类型相同;代码类 UltraReview=同一文件+同一符号+同一问题类型(见 `refs/protocols.md` 协议 8)——把不同问题误合为一条会同时压低 merged 计数并掩盖问题,是 merged 口径下的主要新增风险。发现误合 → 要求拆行并标记 [误合],拆行后重算 `p*_merged`。**同时核对每条非 P0 行的最终严重度是否低于其任一 source 的原始严重度——若有降级,必须存在书面降级理由(用户裁决记录或具体事实依据),否则标记 [问题数存疑]**(跨阈值降级即使第 5 项触发面四轴全为零也由此恒查项兜底,细则见协议 5 强制指令「兼并执行合并验证 4 项」条目的 ④)
  5. **严重度校准抽查(触发条件为上方独立 bullet 的判定,非兼并包含条件——兼并模式下在此执行)**:逐项执行细则(对照范围、事实前提核对、跨阈值降级、`user_rejected` 项的专门标准、`[拒绝存疑]` 升级路径)见 `refs/protocols.md` 协议 5「Step 5 合并验证模式注入模板」**强制指令中「`p0_raw≥1` 或 … 时追加第 5 项严重度校准抽查」条目**。
  STEP5_EXECUTED 中新增 `notes: 兼并 Step 3 合并验证(溯源+遗漏+守恒等式核对+误合抽查;p0_raw≥1 或 p0_rejected≥1 或 agent_rejected≥1 或 user_rejected≥1 时含严重度校准抽查)` 字段(独立于 degradation)
- 输出快速检查报告:是否所有问题均已修复?修复是否引入新问题?文档整体一致性是否保持?
- 仅单一 Agent 可用时,在审查报告中声明限制(缺少独立视角)。降级时 degradation 字段须含退化声明三要素
- **收敛判定(强制步骤,不可跳过)**: Step 5 完成后,主 Agent **必须**计算 5 个触发条件(见下方「收敛判定与硬阻止机制」节)并输出 `[CONVERGENCE_CHECK]` 标记。**加强审查子路径**(STEP5 被裁剪)按分支锚定:**默认轮(无 Step 3)在轻量通读完成后**输出此标记(执行顺序:STEP2 合并 → 内联修复 + 对齐复检(P0 清零)→ 轻量通读 → 收敛判定,见「加强审查」节——非 STEP2 合并后立即);**检出 `[拒绝异常]` 的轮**——N>0(有例外 Step 3)在**口径冻结后**输出(同标准路径),N==0(例外独立 Step 5)在该 Step 5 复核输出后输出(见「加强审查」节收敛判定按分支锚定)。基于 Step 2 汇总时记录的 p*_raw——该子路径按 raw 口径,见「问题数口径权威定义」。其余路径使用 **Step 3 冻结后的 `p*_merged` 终值**。无论是否触发,标记必须输出——缺失 = 收敛判定被跳过 = 审查未完成,父技能验证 3 将阻塞。
- 完成后输出 `STEP5_EXECUTED` 标记块
- **退化补偿规则**: 如果 Step 4 发生退化(status: degraded 或 failed),Step 5 的 Quick Review Agent 执行**两轮独立验证**(第一轮: 检查修复质量;第二轮: 独立重新验证修复项)。在两轮之间主 Agent 不干预,以补偿修复视角独立性的损失。两轮验证均在 Step 5 标记块中记录,degradation 字段注明"Step 4 退化 → Step 5 执行两轮补偿验证"。**注意**:转移路径下 Step 4 退化已回退为独立 Step 3(见 Step 4 退化补偿规则),故本两轮补偿不与兼并合并验证叠加

Step 5 在本轮审查层面检查修复质量(本轮问题是否已彻底修复);最终通读 Gate 在跨轮累积层面检查全局一致性(多轮修复之间是否有冲突)。

### Gate Token 输出(Gate 通过后)

Gate 审查最终通过(收敛判定 action=exit + 最终通读 PASS)后,review 主 Agent **必须**输出 Gate Token(两层保障;加强审查子路径时序为:内联修复 + 对齐复检(P0 清零)→ 轻量通读 → 收敛判定 → Gate Token,见「加强审查」节执行顺序):第 1 层会话标记 `[GATE_PASSED] gate=<N>, round=<N>, tier=<tier>, p0_merged=<N>, p1_merged=<N>, p2_merged=<N>, p3_merged=<N>, p0_raw=<N>, p1_raw=<N>, p2_raw=<N>, p3_raw=<N>, supplement=<N>, rejected=<N>, agent_rejected=<N>, user_rejected=<N>, user_exempt_p0=<N>, convergence_triggers=<编号列表|none>`(merged 为判定口径、raw 为审计基线,见「问题数口径权威定义」;完整字段以 `refs/protocols.md` 协议 3 为正本;P0 未清零时输出 `[GATE_BLOCKED]`,现有机制不变);第 2 层文件标记 `.superpowers/.gate-passed-<N>`(`name=<任务标识符>` 绑定 + round + timestamp + tier,跨 Skill 边界/跨上下文压缩后备,首次写入前 `mkdir -p .superpowers`)。完整格式定义、与 `[CONVERGENCE_CHECK]` 的时序关系、guard 调用衔接注释(token 先写、guard 后调)见 `refs/protocols.md` 协议 3「Gate Token 输出」。独立调用(gate_id=standalone)不输出 Gate Token。

### 独立调用场景自检

用户直接调用 specpowers-review(非通过 specpowers-design/plan/apply/archive 的 Gate 路由)时无父技能双层验证,主 Agent 在最后一个 STEP 完成后(加强审查为 STEP2,其他为 STEP5)自行执行标记块完整性检查——按 `[TIER_ROUTING]`.expected_steps 核对每个 STEP 的 `STEP<N>_EXECUTED`/`STEP<N>_TIER_SKIPPED` 标记块 + 最终通读标记块 + `[CONVERGENCE_CHECK]` 标记,以 `[SELF_VERIFY]` 标记输出结果。自检结果格式、无 args 时 `file_count`/`line_count` 的计算方法(口径按对象类型:文档类=审查对象总行数 `wc -l`;代码类=修改总行数 git diff)与降级回退见 `refs/protocols.md` 协议 3「独立调用场景自检」。

---

## 收敛判定与硬阻止机制

### 每 Gate 审查+修复完成后输出

审查完成后,依据本轮 P0/P1 计数输出对应声明。输出模板见 `refs/protocols.md` 协议 7。

### 收敛判定(强制输出 + 默认继续制)

Step 5 完成后(加强审查子路径按分支:默认轮为轻量通读完成后;检出 `[拒绝异常]` 的轮为口径冻结后(N>0)或例外独立 Step 5 复核输出后(N==0)——见「加强审查」节),主 Agent **必须**计算 5 个触发条件并输出 `[CONVERGENCE_CHECK]` 标记。

> **⚠️ 口径硬约束(防偷懒)**: 触发条件**必须**使用**合并后问题数 `p*_merged`**(Step 2 合并判断表口径,Step 3 结束后冻结终值;加强审查子路径例外——该路径用 `p*_raw`,理由见「问题数口径权威定义」)。**禁止**使用修复后剩余计数(`p0`/`p1`/`p2`)——那是最常见的偷懒模式之一;**也禁止**使用未去重的原始发现数(`p*_raw`)——多 Agent 重复报告会凭空顶到阈值、白跑一整轮(一轮成本 = Step1 全 Agent + Step3 + Step4 + Step5)。各口径的权威定义见「问题数口径权威定义」。

5 个触发条件(任一满足即默认继续下一轮,全部基于**合并后问题数**):① p0_merged > 1;② p1_merged > 5;③ p0_merged+p1_merged+p2_merged > 10;④ p0_merged+p1_merged+p2_merged+p3_merged > 20;⑤ p1_merged − 上轮 p1_merged > 3(轮间新增 P1 趋势闸门;两轮必须同口径比对——同口径与否按账本轮次条目的 `caliber` 字段判定,任一轮 `caliber=raw`(加强审查子路径轮)时⑤对两轮同取 `p1_raw` 并在 notes 标注「触发口径切换(merged→raw)」;任一轮缺 `p*_merged` 时按 `refs/protocols.md` 协议 1「⑤(差值型条件)特殊处理」的三差值规则计算(`A = p1_raw(R) − p1_raw(R−1)`、`B = p1_merged(R) − p1_raw(R−1)`、`C = p1_raw(R) − p1_merged(R−1)`,任一 > 3 即触发),不再简单回退取 raw;首轮无上轮基准时⑤不参与判定)。完整输出判定、标记格式及输出模板见 `refs/protocols.md` 协议 7。

#### `[CONVERGENCE_CHECK]` 标记格式

格式定义见 `refs/protocols.md` 协议 7(`[CONVERGENCE_CHECK]` 标记格式节)。字段:triggers(触发条件编号列表|none)、action(continue|exit)、`p0_merged`/`p1_merged`/`p2_merged`/`p3_merged`(合并后问题数——**判定口径**)、`p0_raw`/`p1_raw`/`p2_raw`/`p3_raw`(原始发现数——**审计基线**)、supplement(监督补充数——审计字段,Step 2 时为 0)、rejected=<N> / agent_rejected=<N> / user_rejected=<N> / user_exempt_p0=<N>(未纳入总数 / 其中主 Agent 拒绝数 / 其中 Step 2 清单用户裁决拒绝数 / Step 4 前置 Gate 用户豁免 P0 数——`rejected = agent_rejected + user_rejected`,**不含** `user_exempt_p0`;**仅供审计 `[拒绝异常]` 是否触发**与「用户豁免 P0」声明,与协议 7 一致)、conservation=<pass|fail>(守恒等式核对结果——fail 时不得输出 action=exit,与协议 7 一致)、exit_reason(exit 时填写)、notes=<文本|n/a>(触发口径切换(merged→raw)、回退口径、口径外扣除明细等的标注处)。完整字段以 `refs/protocols.md` 协议 7 为正本。判定与审计口径都必须列出,供审计分辨"真的问题少"与"被合并/拒绝压下去的"。

**无论是否触发,此标记必须输出。** 缺失 = 收敛判定被跳过 = 审查未完成。

> **加强审查子路径覆盖**:加强审查子路径裁剪 STEP5(recipe=[STEP1-2],输出 STEP5_TIER_SKIPPED)。此子路径的 `[CONVERGENCE_CHECK]` **按分支锚定**(见「加强审查」节「收敛判定(按分支锚定)」):**默认轮(无 Step 3)在轻量通读完成后**输出(替代 STEP5 后位置;完整顺序:STEP2 合并 → 内联修复 + 对齐复检(P0 清零)→ 轻量通读 → 收敛判定 → Gate Token);**检出 `[拒绝异常]` 的轮**——N>0(有例外 Step 3)在**口径冻结后**输出(同标准路径,`supplement/rejected/conservation` 须用终值),N==0 在**例外独立 Step 5 复核输出后**输出。且计数**用 raw 口径**(该路径没有任何独立验证者复核合并表——**`[拒绝异常]` 子分支除外**:N>0 有例外 Step 3 独立监督、N==0 有例外独立 Step 5,该子分支合并表有独立复核,见「加强审查」节例外条——merged 无人审计;保留 raw **不构成额外防护**——`RAW_COUNT` 仍是主 Agent 自报——仅为不依赖合并表的保守默认口径,真实防护来源是守恒等式自检+最终通读的轻量替代,见「问题数口径权威定义」)。验证 3 的搜索逻辑不依赖 STEP5 存在——只要找到 `[CONVERGENCE_CHECK]` 标记即可。

#### 默认继续制(action=continue 时)

触发条件满足时,**默认进入下一轮审查**——不询问"是否继续",而是通知即将继续并提供干预窗口。

**执行主体**:review 主 Agent 在同一 Skill 调用内部自动循环——action=continue 时回到 Step 0 启动下一轮(Round N+1)。父技能 Gate 调用仅一次返回:
- 返回 `[GATE_PASSED]` → 循环退出(收敛达标或用户终止),Gate 通过
- 返回 `[GATE_BLOCKED]` → P0 未清零,Gate 阻塞

父技能无需实现循环逻辑——循环完全封装在 review 内部(父技能验证 3 仅检查最终返回的标记存在性与语义)。

**用户交互(知情权 + 干预窗口)**:action=continue 时,review 主 Agent 在开始下一轮前向用户输出:

```
📊 Round <N> 审查完成。合并后问题数 P0:<p0_merged> P1:<p1_merged> P2:<p2_merged> P3:<p3_merged>(原始发现 P0:<p0_raw> P1:<p1_raw> P2:<p2_raw> P3:<p3_raw>,去重前基线)。
触发条件 <编号+描述> 满足,即将开始 Round <N+1>。
如需终止审查,请说明理由。无反馈则继续。
```

这不是"询问是否继续"(退回到原来的问题),而是"通知即将继续 + 给用户干预窗口"——默认行为是继续,用户需主动干预才能终止(模板正本见 `refs/protocols.md` 协议 7)。

#### action=exit 时

触发条件不满足(收敛达标)或用户显式终止后,输出 action=exit + exit_reason,然后执行最终通读 Gate,通过后输出 `[GATE_PASSED]` 标记(格式见 `refs/protocols.md` 协议 3「Gate Token 输出」)。

> **优先级规则**:多条件同时触发时,按条件编号升序显示(1 → 2 → 3 → 4 → 5),列出所有触发条件的编号和描述。

---

## 审查基础设施与协议

> 以下各节定义的协议与数据结构作用于整个审查流程(所有 Gate、所有 Step),非仅收敛判定场景。此处集中放置以便检索。

### 协议与数据结构参考

以下协议和数据结构的完整定义见 `refs/protocols.md`:
- 协议 1:会话上下文账本(结构 + 读写时机 + 跨 Gate 传递)
- 协议 2:跨会话缓存 review-cache.json(格式 + 读写规则 + 尽力而为操作化定义)
- 协议 3:执行标记格式(`STEP<N>_EXECUTED` + 验证规则 + 双层验证原理;含 Gate Token 输出与独立调用场景自检——`[GATE_PASSED]` 标记 + `.gate-passed-<N>` 文件格式 + `[SELF_VERIFY]` 自检)
- 协议 4:退化声明标准协议(三要素格式 + 各 Step 退化位置表 + 模型多样性降级细则)
- 协议 5:上下文传递与注入模板
- 协议 6:两级路由算法(tier routing)
- 协议 7:收敛判定与硬阻止输出模板
- 协议 8:UltraReview 详细协议(Steps A-F + 6-agent 团队定义)
- 协议 9:最终通读 Gate 详细流程

> 审查流程中对这些协议的引用("按退化声明标准协议输出"、"从 review-cache.json 读取")在流程描述中保留上下文。审查流程中任何协议细节不确定时,Read `refs/protocols.md` 获取完整定义。

---

## 最终通读 Gate(横切,全 Gate 适用)

最终通读 Gate 是横切 Gate,不参与 Gate 0-4 编号体系,适用于所有审查(文档类 Gate 0/1/2 与代码类 Gate 3),不可跳过、不设自动循环上限。触发时机:单轮审查在 Step 5 完成后立即执行(加强审查子路径在内联修复 + 对齐复检(P0 清零)后以轻量通读替代——非 STEP2 合并后立即,顺序见「加强审查」节);多轮审查在最后一轮 Step 5 完成后执行。执行后输出 `STEP_FINAL_READTHROUGH` 标记块(`status` 一律取通用枚举 complete|degraded|failed,通读结果由独立字段 `result: pass|fail` 表达——映射见协议 9「输出」节),PASS 方可进入下一环节(Gate 0-4 编号体系之外的横切 Gate,父技能不跨边界验证,由 review 内部主 Agent 自执行)。执行方式(独立子 Agent 通读 / 单模型降级声明 / 跨会话缓存 staleness 检查)、检查项、PASS 四条件(正确应用/无冲突/术语格式一致/无废弃引用)与 FAIL 重通读规则详见 `refs/protocols.md` 协议 9。

Files in this skill

  • evals/cases/anti-laziness-step-skip.yaml657 B
  • evals/cases/conservation-equation.yaml2.3 KB
  • evals/cases/merged-count-convergence.yaml2.5 KB
  • evals/cases/raw-caliber-step3-deployment.yaml2.9 KB
  • evals/cases/reinforced-path-raw-and-trivial-rejection.yaml4 KB
  • evals/cases/rejected-abnormal-upgrade.yaml2.4 KB
  • evals/cases/tier-routing-large.yaml713 B
  • evals/cases/tier-routing-small.yaml645 B
  • evals/eval.yaml666 B
  • refs/protocols.md98.5 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.