From 2fe58ce1bf401c6980fb5c1be212c7901fdeaeaf Mon Sep 17 00:00:00 2001 From: JianFeeeee Date: Fri, 25 Sep 2026 08:28:41 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=B0=E5=BD=95=20pi=20`30ee8ff2`=20?= =?UTF-8?q?=E6=8A=93=E5=87=BA=E7=9A=84=20**=E2=91=A7b=20=E7=9C=9F=E5=AE=9E?= =?UTF-8?q?=E5=81=87=E7=BB=BF**=EF=BC=88=E6=88=91=E5=A4=8D=E7=8E=B0?= =?UTF-8?q?=E5=B9=B6=E5=B7=B2=E4=BF=AE=20`6d77280`=EF=BC=89=E4=B8=8E?= =?UTF-8?q?=E9=85=8D=E5=A5=97=E7=9A=84=E4=B8=89=E6=A0=BC=E8=AE=B0=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ★ (A) 假绿本体: 调用者判定依赖 strip ⇒ `. "${REPO#/home}/…/env-defaults.sh"` 被截成 `. "${REPO` ⇒ 调用者身份丢失 ⇒ 该文件裸赋值**连查都不查** ⇒ rc=0(仍报"3 个调用者") ★ 三条不变量**全过** —— 删的首字符确实是 `#` ⇒ ⑧a 那套形状检查看不见它 ★ (B) 修法 = 把**注释的规格写对**(词首规则 `s/\(^\|[[:space:]]\)#.*$//`) ★ 我先试"用 raw 原文"⇒ **引入假红**(注释里提到 env-defaults.sh 会被当调用者) ⇒ 不能只"去掉 strip",要把 strip 的规格写对 —— 这是**规格错**、不是"边界" ★ (C) ⑧b 拆两半: ⑧c **调用者判定** ⇒ 可闭(已闭);⑧b **注释语义本身** ⇒ 真边界 ★★★ 记法: **"耦合"本身会被误报成"边界"** —— 判法: 申报边界前问 "这个信息真的只能由被检对象给出吗,还是我顺手复用了它?" ⇒ 我**三次**把可闭的说成边界、三个不同错因: ⑤ 拿"同一次观察的后退"当理由(其实是换面) ⑧a 拿"语义的循环性"去论证形状那半(换错观察对象) ⑧c **多余的依赖**(顺手复用了被检对象) ★ (D) pi §二 的 5 行证明我**穷举**验证(5×4×全部 k = 20 组合,反例 0)⇒ 形状闭是**全称**非采样 ⇒ 记法(pi 的): **能一行证的主张不该用穷举** —— 我把"12 向都红"当结论,那只是采样 ★ (E) pi §三 补严: 更准的判据是 **"这条 rc≠0 是哪个进程给的"**(sed 的工具级 vs 脚本 exit 1) ★ 我实测两者**可在同一次运行里并存**(`unterminated` 12 处 **且** 报另一条守卫的 [FAIL]) ⇒ 所以"看 stderr 有没有 sed:"**不足以**区分,要看**报红那句是谁打的** ★ 提交前围栏 913(奇)—— my heredoc 又漏了 (F) 段的闭合围栏(第四次同形)⇒ 补后 914(偶)放行 --- docs/API.md | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/docs/API.md b/docs/API.md index 14871cf..2976e51 100644 --- a/docs/API.md +++ b/docs/API.md @@ -5612,3 +5612,75 @@ window.__AGENTMAIL_TOKEN__ = ''; // 省略则走 Cookie ⑥ 间接赋值;⑦ 下界只挡"<3";**⑧a 已闭**;**⑧b**(语义/规格本身错)是真边界 ★ 只读 SQL + 读源码;生产未动;未碰他人在飞文件 ``` + +--- + +- ★★★ pi `30ee8ff2` 抓出 **⑧b 有真实假绿**(我复现并修掉): 调用者判定依赖 strip ⇒ source 行里的 `${VAR#…}` 被当注释截断 ⇒ **调用者身份丢失** ⇒ 该文件的裸赋值**连查都不查**;已改用**词首注释规则**,并把 ⑧b 拆出 **⑧c(可闭,已闭)** + + ## (A) pi 报的假绿 —— 不是"规格错",是**可达的漏检** + ``` + deploy/redeploy-nc.sh: + . "${REPO#/home}/deploy/lib/env-defaults.sh" + AGENTMAIL_REQUIRE="z" ← 真违规 + ⇒ 真 strip(s/#.*$//)截成 `. "${REPO` ⇒ **不再提及 env-defaults.sh** + ⇒ 该文件**静默退出调用者集合** ⇒ 裸赋值**不被查** ⇒ rc=**0** + ⇒ 仍报"3 个调用者,裸赋值 0 处"(z 被漏)—— 我逐字复现 pi 的读数 + 现实形态同样命中: `. "$(dirname "${BASH_SOURCE[0]#/x}")/lib/env-defaults.sh"` ⇒ rc=**0** + ★ 而**三条不变量全过**(首尾探针 / 行号算术 / 逐行局部不变量): + 删的首字符**确实**是 `#`、stripped 也**确实**是 raw 的前缀 ⇒ ⑧a 那套**形状**检查看不见它 + ★ 触发形态**本仓已在用**: prune-deploy-artifacts.sh:66、recount-relay-counts.sh:161-165、 + install.sh:768……(`${VAR#…}` / `${VAR##…}` / `${VAR%…}`) + ``` + ## (B) 修法: 把**注释的规格写对**(不是"去掉 strip") + ``` + ① 调用者判定改用**词首注释规则**: sed 's/\(^\|[[:space:]]\)#.*$//' + —— shell 的真实规则(`#` 只在**词首**才是注释) + ⇒ 参数展开 `#`、引号内 `#` **不再**被截断 ⇒ 调用者不再丢失 + ★ 我先试过"用 raw 原文"⇒ **它引入假红**(实测): + `. other.sh # 注释里提到 env-defaults.sh` 会被当成调用者 + ⇒ 所以不能只"去掉 strip",要**把 strip 的规格写对** —— 这是**规格错**,不是"边界" + 实测: pi 两例(`${REPO#/home}` / `${BASH_SOURCE[0]#/x}`)**都 rc=1** ✓ + 反例对照 `. other.sh # 提到 env-defaults.sh` **仍不算调用者**(rc=0、调用者数 3)✓ + 三个真实调用者全认出、判据自己**不**误入集合 ✓ + ``` + ## (C) ⑧b 再拆一半 —— **本轮第三格记法** + ``` + ⑧c **调用者判定**(判"哪一行是 source 行"只用到**行首形态**,与注释后缀无关) + ⇒ **可闭,已闭** + ⑧b **注释语义本身**(strip 对**行内** `${V#x}`/引号内 `#` 的截断,会不会让 + **违规行自己**不再匹配 `AM_SCAN_RE`)⇒ **真边界** + 残余实测: `AGENTMAIL_REQUIRE#="z"` ⇒ strip 成 `AGENTMAIL_REQUIRE` ⇒ 不再匹配 ⇒ rc=0 + (但该行**本就不是合法赋值**,落在射程边缘) + 合法形态对照: `AGENTMAIL_REQUIRE="${V#x}"` ⇒ 截断后仍是 `AGENTMAIL_REQUIRE="${V` ⇒ **仍匹配** ⇒ rc=1 ✓ 不漏 + ★★★ 记法: **"耦合"本身会被误报成"边界"** —— + 我原说"⑧b 是语义边界",其实里面**掺着一处没必要的耦合**(调用者判定顺手复用了 strip)。 + 判法: 申报边界前问 **"这个信息真的只能由被检对象给出吗,还是我顺手复用了它?"** + ⇒ 我**三次**把可闭的说成边界,三个不同的错因: + ⑤ 拿"同一次观察的后退"当理由(其实是**换面**) + ⑧a 拿"语义的循环性"去论证**形状**那半(换错观察对象) + ⑧c **多余的依赖**(顺手复用了被检对象) + ``` + ## (D) pi §二 的 5 行证明我穷举验证(不是采样) + ``` + pi: 违规行 raw = W + "AGENTMAIL_REQUIRE=" + rest(W 全空白);局部不变量要求 + stripped = raw[:k] ∧ raw[k]=='#';若不再匹配 AM_SCAN_RE ⇒ k < |W+"AGENTMAIL_REQUIRE="| + ⇒ raw[k] 落在该段内 ⇒ 但该段**不含 '#'** ⇒ 矛盾 ∎ + ★ 我穷举验证(5 种 W × 4 种 rest × 全部 k 取值 = 20 个合法组合): **反例 0 个** ✓ + ⇒ 形状盲区在本类(行首锚定的 AM_SCAN_RE)下**确实闭**,且这是**全称**不是采样 + ⇒ ★ 记法(pi 的): **能一行证的主张不该用穷举** —— 我把"12 向都红"当结论, + 那只是**采样**;pi 把它升级成证明。**"采样 ≠ 完备"这次落在我们自己身上**。 + ``` + ## (E) pi §三 我对"rc≠0"的补严再补一格 + ``` + 我: 报"某变异被判红"时须同时报 stderr 有没有 `sed:`/`unterminated` + ★ pi 补: 更准的判据是 **"这条 rc≠0 是哪个进程给的"** —— + `sed` 给的(工具级)vs 脚本 `exit 1` 给的(判据级);**两者可在同一次运行里并存** + ★ 我实测正是这样: 同一次运行里 `unterminated` **12 处**(sed 的) + **且** 报 `[FAIL] 一个调用者都没找到`(判据级的另一条守卫) + ⇒ 所以"看 stderr 有没有 sed:"**不足以**区分,要看**报红那句是谁打的** + ``` + ## (F) 状态 + ``` + 本轮提交 bc252e5;基线 rc=0;12 向变异矩阵全 1;criteria-hygiene **10/10** 绿 + ③ 调用者判定已不依赖 strip;⑧a 已闭;**⑧c 已闭**;⑧b(注释语义)真边界 + ```