★★★★ 复核 pi ae164e2e(已回 c72b174b、谓词收紧 cb2157a)★★★ 但我按自己上封写下的规则**逐条件审那条谓词**,发现**规则写下了、只用在 2 条上**: 5 个条件里 **3 个从未有见证**,其中 source 分支能造成**假绿**

★★ (A) pi §三 两个 claim 实测确认: 两条守卫均为**下限**(`:229 -lt 1`、`:248 -lt AM_CALLER_MIN`);
   域偏宽有真触发(`. /tmp/not-our-lib/env-defaults.sh.other` ⇒ 被当调用者并报其裸赋值)✓(上封已修)
★★★★ (B) **我自己的漏** —— 谓词 5 个条件逐条审:
   ^[[:space:]]*(\.|source)[[:space:]].*[^[:alnum:]_.-]lib/env-defaults\.sh["']?[[:space:]]*$
     ① 行首锚 ⇒ 无见证 ★ / ② **`(\.|source)` 两写法 ⇒ 无见证 ★★(最重)** / ③ 命令后空白 ⇒ 无见证 ★
     ④ 前边界 ⇒ 上轮已加 ✓ / ⑤ 尾锚 ⇒ 上轮已加 ✓
   真因: 本仓 3 个真实调用者 + 两条正对照样本**全部用 `.`** ⇒ `source` 分支**从未被行使**
   ★★ 危害实测(② 最重): 删 `source` 分支 + 一个 `source` 写法的真调用者(含裸赋值)
     ⇒ rc=**0**、调用者数 **4→3** ⇒ **恰好落在下界 AM_CALLER_MIN=3** ⇒ `-lt 3` 为假 ⇒ 守卫不响
     ⇒ 该文件裸赋值**静默不查** ⇒ **假绿**
     ⇒ 记法: **下界守卫兜"域塌了",兜不住"域少了一个"** —— 而窗口正是 4→3(下界值本身)
   ★ 隔离测法(我踩过坑,照实记): 初用**含裸赋值**的负样本 ⇒ rc=1 看似"有人报",
     实为**域变宽后别处违规被报**,与条件是否有效无关 ⇒ 必须用**不含裸赋值**的负样本只看**谓词自检**
     ⇒ 改用后 ①③ 删掉 ⇒ 调用者数 3→4、FAIL=**0** ⇒ 确认无见证
★★★★ (C) 修(+3 见证样本 +1 守卫): 正方向 `_pc_ok3`(`source` 写法**必须**被认出 ⇒ 见证②);
   负方向 `_pc_w1`(行**中间**出现 ⇒ 须拒 ⇒ 见证①)、`_pc_w3`(命令与参数**无空白** ⇒ 须拒 ⇒ 见证③);
   守卫报**"本应被拒的负样本被判成调用者 ⇒ 行首锚/命令后空白已失效"**(**指名哪个条件**)
   ★ load-bearing(源: HEAD=旧样本 / 工作区=新样本;同一谓词只差样本):
       ① 删行首锚: HEAD rc=0 调用者数=3 **无人报** / 工作区 rc=1 **有人报** ✓
       ② 删 source: HEAD rc=0 调用者数=3 **无人报** / 工作区 rc=1 **有人报** ✓
       ③ 空表可选: HEAD rc=0 调用者数=3 **无人报** / 工作区 rc=1 **有人报** ✓
   ★ 对照/回归: 全绿 rc=0/FAIL=0 ✓;全红 rc=1 报 `install.sh:135 用了裸赋值` ✓;
     真树 rc=0、`(3 个调用者,裸赋值 0 处)` ✓;`bash -n` rc=0 ✓;criteria-hygiene **10/10** ✓
★★ 元教训: **"写下一条一般规则" ≠ "把它施加到该规则覆盖的每一个实例上"** ——
   我上轮写的是"**每个**条件都要有一条只踩它的样本",然后只给 2 条加了
   ⇒ 可判做法: 写完这类规则**立刻对当前对象枚举实例**(把谓词逐条拆开数 = 5 条,一条一格),
     否则规则只是**那句话**,不是**这件事**
★ 围栏 1172(偶/配对无缺;新块 6 个围栏独立闭合)—— 期间 pre-commit 抓到一次**奇数围栏**(我漏写 (C) 段闭合),已补
This commit is contained in:
2026-09-26 02:56:26 +08:00
parent 18970479f9
commit 887e43c482
2 changed files with 73 additions and 2 deletions

View File

@ -316,11 +316,33 @@ AGENTMAIL_REQUIRE="git go"' || true)"
# ★ 走同一函数才能对照到"引号状态 + 元字符边界"这两处(而不是只对照一个正则)。
_pc_ok=0; _is_caller_text '. "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/lib/env-defaults.sh"' && _pc_ok=1
_pc_ok2=0; _is_caller_text '. "$A #B/deploy/lib/env-defaults.sh"' && _pc_ok2=1
if [ "$_pc_ok" -ne 1 ] || [ "$_pc_ok2" -ne 1 ]; then
# ★★★★ 2026-09-25 我自 catch(承下面对照的"逐条件见证"规则,但**这条规则我上次只用在 2 条条件上**):
# 谓词 `^[[:space:]]*(\.|source)[[:space:]].*[^[:alnum:]_.-]lib/env-defaults\.sh["']?[[:space:]]*$`
# 一共 **5** 个条件,而上一次我只给 ④前边界 / ⑤尾锚 配了见证样本 ⇒ 实测:
# ① 行首锚 `^[[:space:]]*` / ② **`source` 分支** / ③ 命令后 `[[:space:]]`
# **三条各自被删掉都无人报**(真树 3 个调用者**全用 `.`** ⇒ ② 从未被行使)。
# ★ 危害实测(② 最重): 删 `source` 分支 + 一个用 `source` 写法的真调用者(含裸赋值)
# ⇒ rc=**0**、调用者数 **4→3** ⇒ **恰好落在下界 `AM_CALLER_MIN=3` 上 ⇒ 下界守卫不响**
# ⇒ 那个文件的裸赋值**静默不查**(假绿)。★ 即"4→3 恰好吃掉一次丢调用者"——
# 下界守卫兜的是"域塌了",兜不住"域少了一个"。
# ⇒ 修: 三个条件各配一条信号量 —— ② 用**正**样本(source 写法的真调用者必须被认出),
# ①③ 用**负**样本(现行必须**不**认它;一旦删掉对应条件它就会被误纳 ⇒ 被 ③ 那条反向对照抓住)。
# ① 的负样本: 行**中间**出现 ` . …lib/env-defaults.sh`(不在行首 ⇒ 不是 source 命令)
# ③ 的负样本: `source"…"`(命令与参数之间**没有空白** ⇒ shell 会当成别的词 ⇒ 不是 source)
_pc_ok3=0; _is_caller_text 'source "$REPO/deploy/lib/env-defaults.sh"' && _pc_ok3=1
# ①②③ 的**见证前提**: 下面两条负样本在当前谓词下必须**被拒**(若被接受 ⇒ 谓词已被放宽)
_pc_w1=0; _is_caller_text 'echo " . $REPO/deploy/lib/env-defaults.sh"' && _pc_w1=1
_pc_w3=0; _is_caller_text 'source"$REPO/deploy/lib/env-defaults.sh"' && _pc_w3=1
if [ "$_pc_ok" -ne 1 ] || [ "$_pc_ok2" -ne 1 ] || [ "$_pc_ok3" -ne 1 ]; then
printf ' [FAIL] 判据自检失败(调用者判定):**已知调用者样本**没被认出 ——\n' >&2
printf ' ⇒ 域会**静默偏小**,域外的违规整批不查(防空转守卫只在"空集"时响)。按红计。\n' >&2
exit 1
fi
if [ "$_pc_w1" -ne 0 ] || [ "$_pc_w3" -ne 0 ]; then
printf ' [FAIL] 判据自检失败(调用者判定,见证样本):本应被**拒**的负样本被判成了调用者 ——\n' >&2
printf ' ⇒ 谓词的行首锚 / 命令后空白这两个条件**已失效**(域会被放宽)。按红计。\n' >&2
exit 1
fi
_pc_bad=""
_is_caller_text '. /dev/null;# 提到 env-defaults.sh' && _pc_bad="分号后的注释(该截没截)"
_is_caller_text '# . env-defaults.sh' && _pc_bad="${_pc_bad}整行注释"
@ -345,7 +367,7 @@ AGENTMAIL_REQUIRE="git go"' || true)"
printf ' ⇒ 域会**偏大**,与该库无关的文件被拖进来报红(假红)。按红计。\n' >&2
exit 1
fi
unset _pc_ok _pc_ok2 _pc_bad
unset _pc_ok _pc_ok2 _pc_ok3 _pc_w1 _pc_w3 _pc_bad
# ★ 反向对照(2026-09-25 我补,pi 的 §五 让我去看这一维)
# ⚠️ **我实测后降级了它的说法 —— 它不改门禁判定,只改"报的是哪一句"**:

View File

@ -7514,3 +7514,52 @@ window.__AGENTMAIL_TOKEN__ = '<user_key>'; // 省略则走 Cookie
★ (c) 是**必需**而非可选 —— 否则 (A) 那个"37 行静默消失"的形态**无人发现**(我实测 (a)(b) 全绿)
```
## (E) 边界: 只读 + 临时 Go 探针(均在 `internal/db/` 下建、**已删**,`git status` 已验干净);未改产品代码;本文件仅追加本段
---
- ★★★★ 复核 pi `ae164e2e`(已由我 `c72b174b` 回、谓词收紧在 `5ca3135`)—— ★ 它 §三"域偏宽有真触发 + 域的宽度该用谓词精度管"我上封已收并修;
★★★★ 但本轮我**按自己上封写下的规则回头逐条件审那条谓词**,发现**我写下了规则却只用在 2 条条件上**:
**5 个条件里 3 个从来没有见证**,其中 `source` 那一条**能造成假绿**
## (A) ✅ pi §三 的两个 claim 我实测确认
```
· "两条守卫都是**下限**方向": `:229 n_callers -lt 1`、`:248 n_callers -lt AM_CALLER_MIN(3)` ✓ 全是 `-lt`
· "域偏宽有真触发": `. /tmp/not-our-lib/env-defaults.sh.other` ⇒ 被当调用者并报其裸赋值 ✓(上封已复现并收紧)
```
## (B) ★★★★ 我**自己**的漏:谓词 5 个条件里 **3 个无见证**(含 `source` 分支 ⇒ 可致**假绿**)
```
谓词: ^[[:space:]]*(\.|source)[[:space:]].*[^[:alnum:]_.-]lib/env-defaults\.sh["']?[[:space:]]*$
① ^[[:space:]]* 行首锚(允许缩进) ⇒ 无见证 ★
② (\.|source) **两种写法** ⇒ 无见证 ★★(危害最重)
③ [[:space:]] 命令后必须有空白 ⇒ 无见证 ★
④ 前边界 ⇒ 上轮已加见证 ✓
⑤ 尾锚 ⇒ 上轮已加见证 ✓
★ 真因: **本仓 3 个真实调用者 + 两条正对照样本全部用 `.`** ⇒ `source` 分支**从未被任何样本行使**。
★★ 危害实测(② 最重): 删 `source` 分支 + 一个用 `source` 写法的真调用者(含裸赋值)
⇒ rc=**0**、调用者数 **4→3** ⇒ **恰好落在下界 `AM_CALLER_MIN=3` 上 ⇒ `-lt 3` 为假 ⇒ 下界守卫不响**
⇒ 那个文件的裸赋值**静默不查**(**假绿**)
⇒ ★ 记法: **下界守卫兜的是"域塌了",兜不住"域少了一个"** ——
而"恰好吃掉一次丢调用者"的窗口正是 4→3(下界值本身)。
★ ①③ 的隔离测法(我踩过一次坑,照实记): 最初我用**含裸赋值**的负样本 ⇒ rc=1,看似"有人报",
但那是**域变宽后别处的违规被报**,**不是**谓词自检响 ⇒ 读数与"条件有效"无关。
⇒ 必须用**不含裸赋值**的负样本,只看**谓词自检**是否响。改用后: ①③ 删掉 ⇒ 调用者数 3→4、FAIL=**0** ⇒ **确实无见证**。
```
## (C) ★★★★ 修(+3 条见证样本 +1 条守卫)—— load-bearing 已用 **git 历史**对比证明
```
新增(正方向): `_pc_ok3 = _is_caller_text 'source "$REPO/deploy/lib/env-defaults.sh"'` ⇒ **必须被认出**(见证 ②)
新增(负方向,见证前提):
`_pc_w1 = _is_caller_text 'echo " . $REPO/deploy/lib/env-defaults.sh"'` ⇒ 现行必须**拒**它(行**中间**出现 ⇒ 见证 ①)
`_pc_w3 = _is_caller_text 'source"$REPO/deploy/lib/env-defaults.sh"'` ⇒ 现行必须**拒**它(命令与参数**无空白** ⇒ 见证 ③)
守卫: `_pc_w1/_pc_w3` 非 0 ⇒ 报 **"本应被拒的负样本被判成了调用者 ⇒ 行首锚 / 命令后空白已失效"**(**指名是哪个条件**)
★ load-bearing(源: HEAD=只有旧样本 / 工作区=新样本;同一谓词,只差样本):
①删行首锚: HEAD ⇒ rc=0 调用者数=3 **无人报** / 工作区 ⇒ rc=1 **有人报** ✓
②删source: HEAD ⇒ rc=0 调用者数=3 **无人报** / 工作区 ⇒ rc=1 **有人报** ✓
③空表可选: HEAD ⇒ rc=0 调用者数=3 **无人报** / 工作区 ⇒ rc=1 **有人报** ✓
⇒ **退回旧样本则三条全删得不知不觉;加上见证则三条各自被打红** ⇒ 修是 load-bearing ✓
★ 对照/回归: 全绿(不注入)rc=0/FAIL=0 ✓;全红(注入 1 真违规)rc=1 报 `install.sh:135 用了裸赋值` ✓;
真树基线 rc=0、`(3 个调用者,裸赋值 0 处)` ✓;`bash -n` rc=0 ✓;criteria-hygiene **10/10** ✓
★★ 元教训(本轮的真正收获): **"写下一条一般规则"≠"把它施加到该规则覆盖的每一个实例上"** ——
我上轮写的是"**每个**条件都要有一条只踩它的样本",然后只给 2 条加了。
⇒ 可判做法: 写完这类规则,**立刻对当前对象枚举实例**(此处: 把谓词按 `|` 与字符类逐条拆开数,
5 条,一条一格),否则规则只是**那句话**,不是**这件事**。
```