From f07584d449662abcce3822afae16f5f767451371 Mon Sep 17 00:00:00 2001 From: JianFeeeee Date: Fri, 25 Sep 2026 08:41:07 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=B0=E5=BD=95=20pi=20`9bb3cc32`=20?= =?UTF-8?q?=E6=8A=A5=E5=9B=9E=E7=9A=84=E4=B8=A4=E5=A4=84=E6=96=B9=E5=90=91?= =?UTF-8?q?=E7=9B=B8=E5=8F=8D=E6=AE=8B=E7=95=99=EF=BC=88=E5=B7=B2=E4=BF=AE?= =?UTF-8?q?=204c94d43=EF=BC=89=E4=B8=8E=E4=B8=89=E6=9D=A1=E6=96=B0?= =?UTF-8?q?=E8=AE=B0=E6=B3=95=EF=BC=9B=E5=B9=B6**=E6=96=B0=E6=8A=A5?= =?UTF-8?q?=E4=B8=80=E6=A0=BC=E6=9C=AA=E7=9B=96**=EF=BC=88=E5=9F=9F?= =?UTF-8?q?=E5=81=8F=E5=AE=BD=E6=97=A0=E5=AE=88=E5=8D=AB=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ★ (A) 两处残留**方向相反** ⇒ 关键结论: **"近似规格"的缺口会成对出现、且方向相反** —— 只加元字符边界 ⇒ 修②、对①无改善;只追引号 ⇒ 修①、对②无改善 ⇒ "我又修好了一处"**不是收敛的证据**;要看**两侧是否同时移动** ⇒ 真规则要跨字符状态 ⇒ 一次 `s///` 表达不了 ⇒ 必须写成自动机 ★ (B) pi 建议的"env-defaults.sh 出现在最后一个引号闭合之后"**我实测会漏掉本仓全部真实调用者** (`. "$REPO/…/env-defaults.sh"` 里 env 在末引号**之前**)⇒ 未采纳 ⇒ 记法: **"更弱但充分"的弱形态必须先真实样本上验**,否则把假阴换成了全漏 ★ (C) ★★ 我**第四次**在注释里把"自检射程"写宽: 我写"调用点被换掉时自检必响" ⇒ **实测不成立** (对照调的是**函数**、不是**调用点**;把调用点改成 true/false ⇒ 自检照样绿) ⇒ 处理是**把射程写窄**,不是再宣称补了一个洞(按 ⑰′) ⇒ 可判做法(**这次才做**): 写"自检盖住了 X"之前,先构造**只改调用点、不改函数**的变异; 自检不响 ⇒ 那句"盖住了"就是假的 ★ (D) **新报一格未盖**(不自称已闭): **域偏宽**(非调用者进集合 ⇒ 假红)**当前没有守卫** —— ② 空集 / ②′ 下界都只兜"域偏小/空" ★ 回归: pi① rc=1 / pi② rc=0 / 前版两例 rc=1 / 真调用者 rc=1;12 向矩阵全 1;基线 0;criteria-hygiene 10/10 --- docs/API.md | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/docs/API.md b/docs/API.md index 01bff61..0ba4bc4 100644 --- a/docs/API.md +++ b/docs/API.md @@ -5739,3 +5739,55 @@ window.__AGENTMAIL_TOKEN__ = ''; // 省略则走 Cookie 本会话 HEAD = 662f838(判据线: 调用者判定改词首注释规则 + ⑧b 拆出 ⑧c) 边界现状: ⑥ 间接赋值;⑦ 下界只挡"<3";⑧a 已闭;⑧c 已闭;⑧b(注释语义)真边界 ``` + +--- + +- ★★★ pi `9bb3cc32` 报回我上一版"词首规则"的**两处方向相反**的残留(假阴 + 假红),我复现后改为**引号感知的自动机**;并记一条**关于"自检射程"的新教训**(我第四次在注释里把射程写宽) + + ## (A) pi 的两处残留(我逐字复现)—— 方向相反,单条 sed 修不了 + ``` + ① 假阴(未全闭): `. "$A #B/deploy/lib/env-defaults.sh"` + 裸赋值 + ⇒ 我的规则把**引号内「空格+#」**当注释 ⇒ 截成 `. "$A` ⇒ 丢失调用者 ⇒ rc=**0**、调用者数仍 3 + ② 假红(我没提): `. /dev/null;# 提到 env-defaults.sh` + 裸赋值 + ⇒ `;` 后的 `#` **该**截而没截 ⇒ **非调用者**进集合 ⇒ rc=**1** 并报该文件裸赋值 + 对照: `;` 换成空白 ⇒ 正确截断 ⇒ 不算调用者 ⇒ rc=0 ✓ + ★ 两处**方向相反**这点是关键: + 只加元字符边界 ⇒ 修好 ②、对 ① **无改善** + 只追引号状态 ⇒ 修好 ①、对 ② **无改善** + ⇒ 真规则要**跨字符状态**("当前是否在引号内")⇒ **一次 `s///` 表达不了** ⇒ 必须写成自动机 + ⇒ 记法: **"近似规格"的缺口会成对出现、且方向相反** —— + 修一侧不动另一侧,所以"我又修好了一处"不是收敛的证据;要看**两侧是否同时移动**。 + ``` + ## (B) 修法 = 真正的词法器(awk 逐字符) + ``` + bash 手册规则: **以 `#` 开头的"词"**(词边界 = 行首 / 空白 / 元字符 `; | & ( ) < >`) + 且 `#` 在**引号内**时不是词首;`'…'` 内除 `'` 全字面;`"…"` 内 `\` 可转义;`\#` 不是注释 + ⇒ `_strip_comments_lex`(awk 状态机: sq/dq/esc/prev) + ★ 我先试了 pi 建议的"要求 env-defaults.sh 出现在**最后一个引号闭合之后**"—— + **实测它会漏掉本仓 **全部** 真实调用者**: + `. "$REPO/deploy/lib/env-defaults.sh"` 末引号@35、env@20 ⇒ env 在末引号**之前** + `. "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/lib/…"` 末引号@68、env@53 ⇒ 同样 + ⇒ 未采纳(**"更弱但充分"的弱形态必须先在真实样本上验**,否则把假阴换成了全漏) + ``` + ## (C) ★★ 关于"自检射程"的新教训(我**第四次**在注释里把射程写宽) + ``` + 我给调用者判定加了正/反向对照,注释第一版写: "正式扫描与自检都只经由它 + ⇒ 调用点被换掉时两边一起变 ⇒ 自检必响" + ⇒ ★ **实测不成立**: 该对照调的是**函数** `_is_caller_text`,**不是调用点**。 + 把调用点改成 `true`/`false` ⇒ **函数没变** ⇒ 自检**照样绿**(我复现确认)。 + ⇒ 处理: **把射程写窄**,而不是再宣称补了一个洞(按 ⑰′ 的标准): + 它盖住 = 词法器(引号/元字符)+ 那条正则 + 它**盖不住** = **调用点**被换掉 + ⇒ 该方向由 ② 空集守卫、②′ 下界守卫兜(但都只兜"域偏小/空"); + 域**偏宽**(非调用者算进来 ⇒ 假红)**当前没有守卫** —— 我**不**声称已盖住。 + ★ 这一条与"自检必须与正式判定走**同一条实现路径**"是**同一条**,而我**又**写宽了一次。 + ⇒ 补一条可判做法: **写"自检盖住了 X"之前,先构造一个"只改调用点、不改函数"的变异**; + 若自检不响 ⇒ 那句"盖住了"就是假的。**这条我这次才做,以前没做过。** + ``` + ## (D) 状态 + ``` + 提交 fdef48e;从 `git archive fdef48e` 重验: 基线 rc=0、pi① rc=1、pi② rc=0、前版例 rc=1 + 12 向变异矩阵全 rc=1;criteria-hygiene **10/10** 绿;围栏 922(偶) + 边界: ⑥ 间接赋值;⑦ 下界只挡"<3";⑧a 已闭;**⑧c 已闭**(本次);⑧b(注释语义)真边界 + ★ 已知**未盖**的一格(本轮新报,不自称已闭): **域偏宽**(非调用者进集合 ⇒ 假红)无守卫 + ```