comp-review · diff
git:20260923.d8950a4 to git:20260923.a358745
1 added, 1 removed. Audit A to A.
---
name: comp-review
description: "数学建模竞赛·逻辑对抗复核。在编程实现后、论文撰写前,用独立视角挑'方向反/重复计量/外推过硬/漏变量/跨问矛盾'这类自查看不见的硬错。触发词:逻辑复核、对抗审查、模型审查、方向反/漏变量/跨问矛盾排查。Use between comp-code and comp-paper."
argument-hint: [problem-context]
allowed-tools: Bash(*), Read, Grep, Glob, Agent
---
# 竞赛·逻辑对抗复核(独立视角,专挑自查盲区)
**为什么需要这一步**:建模/编程用的是同一个"心智模型",如果它在建模阶段就把某个方向想反了(如把上界当下界)、或把某项算了两次,**自查时用的还是那个反的脑子,永远看不见**。这一步换一个独立视角,只干一件事——挑那五类"数值合法但逻辑错"的硬伤。
## ⚡ 链路开关 + FAST_MODE 二级保险(开头先跑)
- 📌 **链路实况(2026-09-23 与引擎对齐)**:引擎 `template_resolver.resolve_template` **默认把本步包含在链中**(comp_cumcm/comp_huawei 的 S07 均含本步);要省额度跳过时由用户/编排方显式传 `skip_review=true`(或 `skip_comp-review=true`),本步才会从链中移除——不出现在链里就不启动进程,这才是真省额度。
+ 📌 **链路实况**:引擎 `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)