JianFeeeee
cb2157a49a
★★ 收 pi 两处**实测打出的我自己的缺陷**: ① 探针标记与判据自身源码**碰撞** ⇒ 假红(改用**运行时 nonce**)② 调用者谓词**过宽**(子串出现 ≠ 指向本库)⇒ 假红(谓词收紧 + 尾锚)
★★ (A) pi `551d7d85`: 固定标记 `__AM_P_TAIL__` 与**判据文件自身内容**碰撞 ⇒ 假红
根因: 该字面量**就在本判据源码里**(:374 探针串、:379 grep 那行),
所以当**本判据自己被当数据读**(域偏宽/自指)时,`grep -F … | head -1`
匹配到的是**源码里那行**,而不是文件末尾之后的真尾探针
我复现(自指场景): head=1、tail=375、内容行数=536、应为 538 ⇒ 差 163
(pi 报 162 @ 它的 HEAD,逐位吻合同一机制)
⇒ 修法: **运行时 nonce**(`_am_nonce="AM${RANDOM}${RANDOM}${$}Z"`)——
该记号**不可能**预先出现在任何静态文件里 ⇒ 碰撞**不可表示**
★ 比"再加几个下划线""改成 tail -1"更根本: 前两者只是让碰撞**更难**,nonce 让它**不可能**
★ 实测: 自指场景不再报"探针失败",改为正确报出**真违规**(:293/:401 那两处探针字面量本身)
★ (B) pi `ae164e2e`: 谓词 `.*env-defaults\.sh` 只要求**子串出现** ⇒
`. /tmp/not-our-lib/env-defaults.sh.other` ⇒ rc=**1** 并报其裸赋值,而它**没 source 本库** ⇒ **假红**
⇒ 修法(pi 的诊断对: **域的宽度该用谓词精度管,不该用阈值管** ——
空集/下界守卫都只兜"域偏小"这一方向,加上界阈值只是把**精确性**问题换成**调参**问题):
谓词改成"source 的**参数末尾**必须是 `…/lib/env-defaults.sh`":
`[^[:alnum:]_.-]lib/env-defaults\.sh["']?[[:space:]]*$`
★ 前半排除 `not-our-lib/…`(`-lib` 前是 `-`);**尾锚**排除 `env-defaults.sh.other`(更长的名字)
★ 实测: 本仓 3 个真实调用者全认出;pi 的假红例与 5 个别式反例全拒
⚠️ 射程: 行内文本判法,不解析变量取值 ⇒ `. "$SOMEDIR/lib/env-defaults.sh"` 而 $SOMEDIR
指向别处时仍算调用者(**偏宽**、方向安全: 多查一个文件而非漏查)
★★ (C) 反向对照里**补上 pi 的假红样本**(`/tmp/not-our-lib/env-defaults.sh.other`)——
它正是 (B) 那条回归的守卫;实测把谓词回退成过宽版 ⇒ 反向对照**打红**(rc=1)
★ 回归: 基线 rc=0;pi① rc=1 / pi② rc=0 / pi 假红例 rc=0 / 真调用者 rc=1;
12 向变异矩阵全 rc=1;criteria-hygiene 10/10;--git-hooks 负对照(PATH 无 git / pre-push 不可执行) rc=1 未破
2026-09-26 00:42:29 +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 00:42:29 +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