diff --git a/deploy/check-require-declaration.sh b/deploy/check-require-declaration.sh index c1e8b56..925d800 100755 --- a/deploy/check-require-declaration.sh +++ b/deploy/check-require-declaration.sh @@ -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 …`(我第一版就是):