JianFeeeee
887e43c482
★★★★ 复核 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) 段闭合),已补
2026-09-26 02:56:26 +08:00
..
2026-09-25 06:51:25 +08:00
2026-09-14 08:38:33 +08:00
2026-09-13 11:06:01 +08:00
2026-09-15 07:00:35 +08:00
2026-09-25 07:01:36 +08:00
2026-09-24 04:15:30 +08:00
2026-09-18 04:07:26 +08:00
2026-09-12 11:36:25 +08:00
2026-09-26 02:56:26 +08:00
2026-09-14 23:33:11 +08:00
2026-09-14 20:35:01 +08:00
2026-09-25 06:51:25 +08:00
2026-09-21 07:14:41 +08:00
2026-09-14 15:51:40 +08:00
2026-09-15 11:21:00 +08:00
2026-09-25 06:27:09 +08:00
2026-09-25 06:51:25 +08:00
2026-09-25 06:51:25 +08:00
2026-09-06 15:18:06 +08:00
2026-09-02 20:05:51 +08:00
2026-09-13 11:06:01 +08:00
2026-09-13 11:06:01 +08:00
2026-09-14 08:38:33 +08:00