红不了的闸门不是闸门
上级:structure
infra/scripts/ 下五十五个 check-* 条目(2026-09-07 数的)里有十个只干一件事:攻击另外四十五个。它们共同的开头就是那条学说 —— 一个从没红过的闸门不是闸门。
做法
种下这道闸门明确禁止的那个东西 → 断言它变红 → 删掉。check-routes-via-dispatcher-test 种的是一个 internal/routes 下的新文件(不在棘轮基线里),直接 import 域的门面 —— 正是这道闸门存在的那个逃逸口。种下的文件不参与编译,也不留在树上。
小一些的闸门把自检做在自己身体里,并且印进成功那一行,于是一次绿跑说得出它证明了什么:check-one-corpus-href 种一个坏 URL,check-secrets 在被豁免的目录里种一把钥匙。
这不是多疑
一个守卫失效的样子,跟它成功的样子长得一模一样:
- 它不再看得见。
grep --include在 alpine 上会静默失明 —— 扫描器什么都没返回,然后报告 clean。扫描器必须自证看得见,而不只是"我没找到"。 - 它的诱饵不再咬钩。 镜像密钥扫描原本种的是
aws_secret_access_key,而那条规则带熵阈值;随机串总有一部分落在阈下,于是自检零星失败——而自检失败会挡住整条发布。换成私钥块(结构性规则,不看熵)才稳。 - 它的对象搬走了。 一道按路径限定的闸门,对搬出这个路径的代码就不再覆盖,而搬家这件事什么都不报。
- 它扫的不是那个东西。 一次绿跑如果不印覆盖量,就说明不了覆盖。镜像扫描现在会印扫描面:N 个文本文件 / 跳过 M 个二进制 —— 因为 backend 镜像里我们自己 COPY 的东西是六个 Go 二进制加一个 shell 脚本,那道闸门实际扫的是一个 shell 脚本,而它跟 app 镜像(整个
.next都是文本)印的是同一个词 clean。同一个词,背后的证据量差三个数量级。
一般规则
看一个守卫扫的是什么,不要只看它绿不绿。 一台不可能失败的仪器给出的绿灯不携带信息 —— 这在验证上等价于"一条失败不可达的断言"(judgment-audit)。所以这里每一道守卫自己也被一道守卫审计,而那次审计是一个实验(种下、期望红),不是一次检视。
这跟 owner 自己那条 audit-the-artifact 是同一个本能 —— 读真实产物、不读断言 —— 只是往上抬了一层:闸门声称自己在工作,这句话本身也是一个断言,于是它享受同样的待遇。