★ 我自己实测出判据的**第五个洞**: 防空转只判"集合空",**收窄发现域**(find)时集合非空 ⇒ 假绿且自检看不见;补**下界守卫**(调用者 ≥ 3)

★ 洞(pi 没报,是我顺着 pi 那句"_scan_text 内部再调 strip_comments 会共模"往下试出来的):
   ② 防空转判的是 `n_callers -lt 1`(**集合空**)
   ⇒ 把发现域**收窄**时集合**非空**(2 个)⇒ ② **不响**
   ⇒ 而收窄让**域外的违规整批消失** ⇒ 报"裸赋值 0 处"
   实测(树上 install.sh:135 恰是裸赋值 `AGENTMAIL_REQUIRE="x"`):
     把 `find deploy -name '*.sh'` 收窄成 `find deploy -name 'redeploy*.sh'`
       ⇒ rc=**0**、打"(2 个调用者,裸赋值 **0** 处)"
       ⇒ 且**"判据自检失败"出现 0 次** ⇒ 自检**看不见**域的问题
       ★ 自检看不见是**必然**的: 它用**自带样本**跑管线,走的是"匹配"那一层,
         而**域**在它**上游**(哪些文件进入循环)⇒ 上游被削,下游自检无从察觉。
★ 补法: **下界守卫**(`AM_CALLER_MIN=3`,与 criteria-hygiene 的 `gates.length >= 3` 同一做法)
   ⇒ 修后同一变异 rc=**1** 并报"只找到 2 个调用者(下界 3)—— 发现域被**收窄**了" ✓
★ ⚠️ 残留(已写进判据注释,不声称完备): 下界只挡"收到 3 个以下";
   若有人收到**恰好 3 个但换掉其中一个**,本守卫仍看不出 ——
   补它需要"已知调用者名单"这种**会漂**的硬编码,我选择不写、只申报。
★ 变异矩阵(六向,全部真跑 + 还原复测):
   [0] 三处违规(现状)          ⇒ rc=1 ✓
   [1] ★收窄 find(域变小)      ⇒ rc=1 ✓(**新增守卫抓到**)
   [2] ★域收到全空              ⇒ rc=1 ✓
   [3] 共模(正则单点改错)      ⇒ rc=1 ✓
   [4] pi 的漂移(尾接吃违规行) ⇒ rc=1 ✓
   [5] 匹配实现单点静音          ⇒ rc=1 ✓
   非恒红: 在临时纯净副本上(三个调用者都合规)⇒ rc=**0**、报"3 个调用者,裸赋值 0 处" ✓
★ 记法: 我前四轮都在修"**判据读输入之后**"的洞(管道/通道/实现路径);
   这一轮是"**哪些对象进入判据**"(域)—— 与 pi 的 ⑯′ 同族,但对象是**发现动作**而非谓词域:
   ⇒ **域不写死时,域的错误不会被任何下游守卫发现**(因为下游只看域内的东西)。
★ 另: 我没有动 `deploy/install.sh`(它现在是**并发会话**的变异现场 `AGENTMAIL_REQUIRE="x"`),
   只在临时副本上做非恒红验证 ⇒ 全程未碰别人的在飞改动。
This commit is contained in:
2026-09-25 07:31:32 +08:00
parent 2cc3a17ae5
commit a432ae6637

View File

@ -112,6 +112,27 @@ if [ "$n_callers" -lt 1 ]; then
exit 1
fi
# ②′ ★★ **下界守卫**(2026-09-25 我自己实测出来的洞,不是 pi 报的):
# ② 只判"集合**空**",而**把发现域收窄**(例如把 `find deploy -name '*.sh'`
# 改成 `find deploy -name 'redeploy*.sh'`)时集合**非空**(2 个)⇒ ② 不响。
# 而收窄会让**域外的违规整批消失** ⇒ 判据报"裸赋值 0 处" ⇒ **假绿**。
# 实测: 树上 install.sh:135 是裸赋值,把 find 收窄到 `redeploy*.sh` ⇒
# rc=**0**、打"(2 个调用者,裸赋值 0 处)",且**自检 0 次**(自检看不见域的问题)。
# ⇒ 与 ② 的关系: ② 管"**全丢**"(集合空),本守卫管"**部分丢**"(域被收窄)。
# ⇒ 判法用**下界**: 调用者 ≥ 3(现状: install.sh / redeploy-gateway.sh / redeploy-plugin.sh)。
# 与 `client/electron/test/criteria-hygiene.test.mjs` 里 `gates.length >= 3` 同一做法。
# ⚠️ 残留(如实记): 下界只挡住"收到 3 个以下";若有人收到**恰好 3 个但换掉其中一个**
# (比如只扫 install.sh + 两个不存在的东西),本守卫仍看不出 —— 补它需要
# "已知调用者名单"这种**会漂**的硬编码,我选择不写,改在这里申报。
AM_CALLER_MIN=3
if [ "$n_callers" -lt "$AM_CALLER_MIN" ]; then
echo " [FAIL] 只找到 ${n_callers} 个调用者(下界 ${AM_CALLER_MIN})—— 发现域被**收窄**了。" >&2
echo " 本判据的域是「deploy/ 下所有 source env-defaults.sh 的 *.sh」;" >&2
echo " 域一收窄,域外的违规就整批消失,而集合仍非空 ⇒ **防空转守卫看不见** ⇒ 假绿。" >&2
echo " (实测: 收窄 find 后 rc=0 且打'裸赋值 0 处',而树上确有违规。)" >&2
exit 1
fi
fails=0
for f in "$@"; do
# ★★ 这里**也不能**写成 `strip_comments "$f" | grep -nE …`(我第一版就是):