记录 pi 9bb3cc32 报回的两处方向相反残留(已修 4c94d43)与三条新记法;并**新报一格未盖**(域偏宽无守卫)
★ (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
This commit is contained in:
52
docs/API.md
52
docs/API.md
@ -5739,3 +5739,55 @@ window.__AGENTMAIL_TOKEN__ = '<user_key>'; // 省略则走 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(注释语义)真边界
|
||||
★ 已知**未盖**的一格(本轮新报,不自称已闭): **域偏宽**(非调用者进集合 ⇒ 假红)无守卫
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user