---
name: comp-review
description: "数学建模竞赛·逻辑对抗复核。在编程实现后、论文撰写前，用独立视角挑'方向反/重复计量/外推过硬/漏变量/跨问矛盾'这类自查看不见的硬错。触发词：逻辑复核、对抗审查、模型审查、方向反/漏变量/跨问矛盾排查。Use between comp-code and comp-paper."
argument-hint: [problem-context]
allowed-tools: Bash(*), Read, Grep, Glob, Agent
---

# 竞赛·逻辑对抗复核（独立视角，专挑自查盲区）

**为什么需要这一步**：建模/编程用的是同一个"心智模型"，如果它在建模阶段就把某个方向想反了（如把上界当下界）、或把某项算了两次，**自查时用的还是那个反的脑子，永远看不见**。这一步换一个独立视角，只干一件事——挑那五类"数值合法但逻辑错"的硬伤。

## ⚡ 链路开关 + FAST_MODE 二级保险（开头先跑）

📌 **链路实况**：引擎 `template_resolver.resolve_template` **默认把本步包含在链中**（comp_cumcm/comp_huawei 的 S07 均含本步）；要省额度跳过时由用户/编排方显式传 `skip_review=true`（或 `skip_comp-review=true`），本步才会从链中移除——不出现在链里就不启动进程，这才是真省额度。

```bash
# 二级保险：即便在链中，FAST_MODE 下仍跳过（速度优先场景），产占位不阻塞。
if grep -q 'MH_FAST_MODE=1' AGENTS.md 2>/dev/null; then
  echo "⏭ FAST_MODE：逻辑对抗复核跳过。确定性闸(logic_audit/cross_problem_check)已在 comp-code 兜底。"
  printf '# 逻辑对抗复核\n\nFAST_MODE 跳过（省额度）。确定性逻辑闸仍在 comp-code 阶段跑过。\n' > COMP_REVIEW.md
  exit 0
fi
```
> ⛔ 本步是**唯一多花一次 AI 调用**的环节。默认在链中，`skip_review=true` 可整体移除、FAST_MODE 仍可跳。跳过时确定性闸(logic_audit/cross_problem_check)已在上一步兜底，不影响主流程。

## 输入（只读摘要，禁整读大 JSON）

- `PROBLEM_ANALYSIS.md`（题面/逐句表/硬约束）、`DATA_FACTS.json`（数据事实台账）
- `MODELING_REPORT.md`（假设/`LOGIC_CONTRACT_MACHINE`/`CROSS_PROBLEM_LEDGER`）
- `RESULTS.md` + `AUDIT_REPORT.md`（前面各闸的结论）
- `figures/*_results.json` 用 `_utils` 下的 summarize 或 `Grep`/`Read` 局部看，**⛔ 禁 `cat` 整包大 JSON**（吃光 context）

## Step 1: 先看确定性闸的既有结论（不重复劳动）

```bash
# logic_audit / cross_problem_check 已在 comp-code 阶段跑过，先复用它们的裁定作锚点
[ -f AUDIT_REPORT.md ] && grep -nE "外推|特征完整性|重复计量|跨问|矛盾|❌|⚠" AUDIT_REPORT.md | head -30
```

## Step 2: 逐条对撞五类缺口（核心，用证据说话）

对每一类，找**具体代码行/具体数值**当证据，不泛泛而谈：

1. **方向/界反没反**：核对 `LOGIC_CONTRACT_MACHINE.bounds` 声明的上/下界与代码实现是否一致。凡有删失/封顶/反解，代入观测值验证不等号方向。（这是确定性闸抓不到、最需要独立视角的一类）
2. **重复计量**：任何"总量=A+B"，查 A 的拟合/标定是否已吸收 B（如截距用含某分项的总量拟合、又显式加该分项）。
3. **外推口吻过硬**：预测点落在 `DATA_FACTS` 观测区间外的，正文是否用了确定性口吻当"数据结论"（应标"情景模拟、需现场标定"）。
4. **漏真实变量**：`DATA_FACTS` 里 `role=observed` 的关键变量，是否都进了模型；被当"不重要"丢掉的要质疑。
5. **跨问矛盾**：某问算出的关键结论（如峰值/边界）是否与另一问的优化约束/结论冲突。
6. **任务理解 vs 题目原文（⛔ 最该由你独立视角兜的一类）**：拿 `PROBLEM_ANALYSIS.md` 的**关键概念对齐表**和 `MODELING_REPORT.md` 的**目标/约束原文溯源**，逐条核对——建的目标函数/约束/关键量，和题目**原句**要的是不是同一件事？重点抓：求 A 做成了求 B（如覆盖宽度→面积）、最优化方向反（min↔max）、约束理解反、关键量物理含义错、漏做某个明确要求。⛔ **这是"赛题读歪"唯一的独立防线**——下游所有确定性闸都只核"是否忠于建模者的理解"，核不了"理解本身对不对"，只有你带着题目原文重看才可能发现。发现"任务读歪/目标搞错"属 **fatal**（方向全错，回炉重来）。

⛔ **诚实认知（天花板）**：本复核 AI 与答题同源，有共同盲区，**显著降漏网率但非万无一失**（尤其"任务理解"这类：你也可能和答题时一样误读同一句话）。机器可判的部分已由 logic_audit/cross_problem_check 确定性拦截，本步只兜"确定性查不了的语义残余"。发现存疑处要给出"哪行代码/哪个数/哪句原文"支撑，不做无证据的断言。机器可判的部分已由 logic_audit/cross_problem_check 确定性拦截，本步只兜"确定性查不了的语义残余"。发现存疑处要给出"哪行代码/哪个数"支撑，不做无证据的断言。

**范例对照维度（按需加载，2026-09-23 试点批新增）**：除上述五类对撞外，可加载 [`references/oral-practices-bridge.md`](references/oral-practices-bridge.md) 做"对照优秀论文范例"检查——七项做法（研究张力/贡献增量/证据对应主张/有解释力比较/条件紧随结论/资源交付说明/有边界认识）经 10 篇国赛优秀论文摘要页实证验证的本土化清单，含高分加分形态 5 条；默认对稿件提 **≤3 条**改进建议，每条注明"哪项做法+语料形态+稿件现状+具体改法"。

## Step 3: 产出裁定（人读 + 机器读）

当通过只读审稿子 Agent 执行时，子 Agent 仅在会话回复中提供报告与 JSON；主 Agent 负责原样、受控地写入以下工作区文件，并在最终复审时登记该会话证据。不要要求只读子 Agent 直接编辑文件。

```bash
# 人读报告
cat > COMP_REVIEW.md <<'EOF'
# 逻辑对抗复核报告
（逐条：问题描述 / 严重性(fatal|major|minor) / 定位(文件:行或数值) / 证据 / 建议）
EOF
```

机器可读裁定 `COMP_REVIEW_VERDICT.json`：
```json
{"findings":[
  {"category":"bound_direction|double_count|extrapolation|missing_feature|cross_problem",
   "severity":"fatal|major|minor","where":"calibrate.py:L692 或 Q1峰值","evidence":"...","fix":"..."}
],"fatal_count":0}
```


## STEP_MANIFEST 产出声明

本步骤完成后，必须调用 `engine.step_manifest.write_manifest`（或经 bridge/common 等价入口）在工作区根目录写入 `STEP_MANIFEST.json`，至少包含：stepName / backend（含版本）/ config / inputFiles / outputFiles（含 SHA-256）/ commands / dependencies。质量门禁 `step_manifest` 将校验其存在性与完整性；缺失或无效将导致本步骤无法通过（fail）。

建议额外记录：审稿人模型、session_id、审查轮次。

## Step 4: 硬门禁（⛔ 有 fatal 不许放行）

```bash
FATAL=$(python3 -c "import json;d=json.load(open('COMP_REVIEW_VERDICT.json'));print(d.get('fatal_count',0))" 2>/dev/null || echo 0)
if [ "$FATAL" -gt 0 ]; then
  echo "❌ 逻辑对抗复核发现 $FATAL 处致命逻辑错 — 必须回 comp-modeling/comp-code 修正后重跑，不许进论文撰写。"
  echo "   (fatal 类：方向反、同一项算两次、跨问硬矛盾——这些会系统性歪曲结论)"
else
  echo "✅ 逻辑对抗复核通过（无 fatal；major/minor 见 COMP_REVIEW.md，写论文时注意）。"
fi
```
> - `fatal`（方向反/重复计量/跨问硬矛盾）= 退出前必修，回炉重跑。
> - `major/minor`（外推口吻、可疑假设）= 不硬拦，但必须在论文里如实标注为"情景模拟/假设"，禁确定性口吻。

## 退出判据（Verification）

本步完成前逐项自检（不达标即视为未完成）：

- [ ] 由只读子智能体执行并留真实会话证据
- [ ] 发现项按 fatal/major/minor 分级且逐条给依据
- [ ] 每条依据指向具体文件与位置（不是印象）
- [ ] 前轮已闭环项不复述，只列新增项

## 常见合理化（Common Rationalizations）

| 合理化 | 现实 |
|---|---|
| "总体没问题" | 无分级清单＝没审；本步产物必须能被逐条核对。 |
| "我自己写的我最清楚" | 作者对自己的假设是盲的：本项目实测独立审稿首轮抓出 2 fatal + 1 major。 |
| "先跳过，时间紧" | 审核是防伪造防线的核心；跳过会让后续所有证据链失去意义。 |

> 本段与 `skills/_utils/anti_rationalization.md`（全局版）配套：本表是本步专属，
> 全局版覆盖跨步骤通用借口。新增借口时优先落到本表（更贴岗位），能泛化再上升。

## 补充参考

- `references/mml-skills/championship-review-method.md`：冠军模式模拟审稿方法（championship 多轮独立审稿闭环）——高强度审稿轮读。（来源 Math-model-skills，MIT，溯源见同目录 UPSTREAM.md）
