diff --git a/deploy/check-require-declaration.sh b/deploy/check-require-declaration.sh index 925d800..4796570 100755 --- a/deploy/check-require-declaration.sh +++ b/deploy/check-require-declaration.sh @@ -186,6 +186,32 @@ AGENTMAIL_REQUIRE="git go"' || true)" esac unset _pc + # ★ 反向对照(2026-09-25 我补,pi 的 §五 让我去看这一维) + # ⚠️ **我实测后降级了它的说法 —— 它不改门禁判定,只改"报的是哪一句"**: + # 把 `AM_SCAN_RE` 放宽到能匹配**合规**行(例如 `'='`)时: + # 旧版(无反向对照): rc=**1**,但报的是"deploy/install.sh:135 裸赋值" —— + # **指错了地方**(树上那条是**合规**的 `agentmail_require …`), + # 运维会去改一个**没有错**的地方。 + # 新版: rc=**1**,报"判据自检失败(反向):**合规**样本被判成违规 —— 匹配太宽(假红)"。 + # ⇒ ★ 退出码**两者相同** ⇒ 按我自己收的 ⑰′ 标准("被别的守卫顺手抓住 ≠ 这条路径有守卫"), + # 这条**不算新防线**,只算**诊断改进**(把"指错地方"变成"指对地方")。 + # 我**不**声称它补了一个洞。 + # ⚠️ 它**盖不住** pi 标的 §五 残余(`strip_text` 吞违规 ∧ 自检失败分支被打平): + # 那一对的成因是"**匹配太窄**",而反向对照管的是"**匹配太宽**" ⇒ 方向相反、互不覆盖 + # (我实测: 那一对仍 rc=0 静默)。⇒ 我把 §五 记为**边界**,见文件末尾。 + _nc="$(_scan_text 'x=1 +agentmail_require git go' || true)" + case "$_nc" in + "") + : ;; # 反向对照通过:合规样本**不**被匹配 ✓ + *) + printf ' [FAIL] 判据自检失败(反向):**合规**样本被判成了违规 —— 匹配太宽(假红)。\n' >&2 + printf ' ⇒ 上面若也报了"裸赋值",那几处**不是真违规**,先查 `AM_SCAN_RE`。\n' >&2 + exit 1 + ;; + esac + unset _nc + # 正式扫描:**先 strip 一次**(唯一实现 `strip_text`),两条通道都用这同一份结果。 _stripped="$(strip_text "$(cat "$f")")" _had=0 @@ -222,3 +248,20 @@ fi awk -v n="$n_callers" 'BEGIN{printf " 通过 调用者声明全走 `agentmail_require` 动作(%d 个调用者,裸赋值 0 处)\n", n}' exit 0 + +# ══════════════════════════════════════════════════════════════════════════════ +# 申报的边界(不是"待修项",是**今天不判**的地方) +# ══════════════════════════════════════════════════════════════════════════════ +# ①②③ 是"判据读输入之后"的失效;④ 是"哪些对象进入判据";⑤ 是"谁来验验证器"。 +# +# ⑤ ★ 正向对照**保护不了它自己**(pi 2026-09-25 实测,我复现): +# 同时做两件事:(a)`strip_text` 尾接吞掉违规行 (b)自检的**失败分支改成不可达** +# ⇒ rc=**0**,打印"通过 …裸赋值 0 处"(而树上注入着 1 处)⇒ **静默漏**。 +# 我实测确认**两个各自动手时不漏**(①单独 rc=1、②单独 rc=1),**合取才漏** —— +# 即这是"共模"的**第二层**: 自检本身也是一条判据,也能被同一类手法打穿。 +# ⚠️ 我**不能**闭它: 要闭需一条**独立于本文件**的检查(例如 install.sh 里旁路断言), +# 而那只是把问题推给"那条断言自己会不会被静默"(无限后退)。 +# ⇒ 记为**边界**,与下面的"间接赋值"同级。 +# ⑥ 间接赋值不判(eval/read/env 注入),只判**字面裸赋值**。 +# ⑦ 下界守卫只挡"收到 <3 个调用者";"恰好 3 个但换掉其中一个"不判(需会漂的名单)。 +# ══════════════════════════════════════════════════════════════════════════════