> 没人过得去的闸门会被手动放行,而放行一次它就不再是闸门
一道「零容忍」的质量闸门,如果它的通过条件在结构上就达不到, 结局不是质量变好,是你学会绕过它。
结论先行¶
一道「零容忍」的质量闸门,如果它的通过条件在结构上就达不到, 结局不是质量变好,是你学会绕过它。
真实记录:某篇论文的自审闸门连续四轮 BLOCKED,四轮卡的都是同一本账—— 29 条残余缺陷,全部是严谨审稿必然浮现的已披露局限。最后用户手动覆盖了闸门。 从那次覆盖起,这道闸门对这个项目就不再有约束力了, 因为「手动覆盖」已经被证明是可行且必要的动作。
修法不是放松标准,是分级:区分「没披露的缺陷」和「披露了、也认了的局限」。 前者阻断,后者列出来但不阻断。
为什么¶
零容忍的设计假设是「缺陷都能修」。对论文不成立: 一部分局限是方法本身的边界,你能做的只有在论文里写清楚,修不掉。 把这两类算在同一本账上,闸门就要求作者做一件做不到的事。
但只要作者自己勾一个「已披露」就放行,等于把闸门交给被检查者, 那是另一个方向的失效——一键逃生口。
所以分级要配一个可核验的地址:
- 探针答案里必须写
disclosed_at(披露在哪一节),不能只写disclosed: true。 - 闸门拿这个地址去论文的结构树里核:那一节存不存在、那段文本里有没有
limitation 类措辞。位置不存在、或者指向的是一节跟局限无关的内容,
就把
disclosed降级为 false,照旧阻断。 - 猜一个地址的代价是失去这次让步,比不填还差。
同一批修改里还补了一个相关的洞:闸门的 PASS 要有保质期。 之前发生过「当天改完论文直接按旧的评审结论发出去」的事。 现在闸门记录 panel 运行时论文内容的指纹,论文改过就不再是 PASS, 而是 INCONCLUSIVE,要求重开评审。
怎么用¶
设计任何自动闸门时,先问三个问题:
- 通过条件是结构上可达的吗? 如果某类不合格项按定义无法清零(方法边界、已知权衡、外部依赖), 它就不能和可修项算同一本账。
- 让步是谁批的?被检查者自己吗? 如果是,让步必须附一个能被机器核对的地址(章节、行号、commit、日志路径), 而不是一个布尔字段。核不上就当没让步。
- PASS 有保质期吗? 判定依据的产物(论文、代码、数据)改了之后,旧的 PASS 必须失效。 最省事的实现是记内容指纹,改动敏感到未提交的编辑。
一个信号:如果你发现自己在给某道闸门写「覆盖」「跳过」「--force」, 问题多半在闸门的分级,不在这次的具体情况。 把覆盖的理由写下来,攒够三次就去改闸门。
配套的另一半是 自审的失效模式不是"没发现",是"发现了没执行":闸门太松会漏,太紧会被绕, 而「发现了但没人去做」是这两者之外的第三种失效,占比最大。
出处¶
~/Tools/self-review/self_review.py,evaluate_gate/verify_disclosure(2026-09-06)- 5 个夹具:
~/Tools/self-review/tests/run_gate_tests.sh(已披露不阻断 · 已披露但仍威胁 claim 照旧阻断 · 地址指向无关章节则拒绝 · 论文改一个字节即 INCONCLUSIVE · 不带--paper即 INCONCLUSIVE) - 政策:
~/.claude/skills/.submission-pipeline.md