From f3bd9d6f3be82948126245008296a2465e6ad1fb Mon Sep 17 00:00:00 2001 From: JianFeeeee Date: Fri, 25 Sep 2026 06:56:44 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=B0=E5=BD=95=E9=87=87=E7=BA=B3=20pi=20?= =?UTF-8?q?=E5=8F=8D=E6=8F=90=E6=A1=88=EF=BC=88d562f55=EF=BC=89+=20?= =?UTF-8?q?=E5=88=A4=E6=8D=AE=E8=87=AA=E8=BA=AB=E4=B8=A4=E4=B8=AA=20bug?= =?UTF-8?q?=EF=BC=9B=E2=98=85=20=E6=96=B0=E8=AE=B0=E6=B3=95:=20=E5=81=87?= =?UTF-8?q?=E7=BB=BF=E5=8F=AF=E4=BB=A5=E6=9D=A5=E8=87=AA"=E5=88=A4?= =?UTF-8?q?=E6=8D=AE=E8=AF=BB=E8=BE=93=E5=85=A5=E7=9A=84=E9=82=A3=E4=B8=80?= =?UTF-8?q?=E6=AD=A5"=EF=BC=88=E7=AE=A1=E9=81=93=E5=B1=82=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ★ (A) 采纳: 声明动作化 agentmail_require ⇒ "声明了但没检查"从表示上消失(我原判"记为边界",pi 换掉了前提) ★ (B) 判据 bug① 假红: 我按 `deploy/**/*.sh` 划范围 ⇒ 把 `agentmail_require()` 体内的 `AGENTMAIL_REQUIRE="$*"`(**动作自己的实现**)判成违规 ⇒ 改为按性质划: "调用者"= **真的 source 了本库**的文件(身份由 source 定义,不由目录猜) ★ (C) 判据 bug② **假阴且不稳定**: `sed | grep -q` 在 pipefail 下 ⇒ grep 早退 ⇒ sed 收 SIGPIPE(141) ⇒ 管道整体 141 ⇒ if 判假 ⇒ 文件被静默漏掉;实测两次分别 2 个/1 个调用者(实际 3 个) ⇒ 集合偏少且不稳 ⇒ "裸赋值 0 处"是**假绿**;改为收集到变量再 grep <<< ⇒ 修后 10 次稳定 3 ★ 但机制不是"凡管道皆危险"(实测): 多行 sed ⇒ 141;单巨行 sed ⇒ 0; tr/cat/awk/sort ⇒ 不是 141;grep -o 作生产者 ⇒ 141 ⇒ 真条件 = **"生产者还有东西要写" ∧ "消费者早退"** ★ (C') 本仓已有同族先例(非我发现): check-sandbox.sh:57 注释写着同形状("'被拒'和'被拒判据本身炸了'长得一模一样") ⇒ 记为**同一族的第二个实例**(那次在沙箱判据,这次在集合枚举) ★ 记法: ⑨ 是**命令层**(命令不在≠输出为空);这条是**管道层**(判据读输入那一步可以是假绿来源)—— 不报错、不稳定、且**偏向"看起来更干净"的那一侧** ★ 验证: 四向变异 + 累积通道隔离测(未中止 + RC=1 + 后续诊断在)+ criteria-hygiene 7/7 + env-guard 17/17 --- docs/API.md | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/docs/API.md b/docs/API.md index cf875a1..d36d840 100644 --- a/docs/API.md +++ b/docs/API.md @@ -4965,3 +4965,61 @@ window.__AGENTMAIL_TOKEN__ = ''; // 省略则走 Cookie ⇒ 我建议并进清单: **报"某一行与实测不符"前,先把那一行的样本逐字节复现出来**。 ``` ## (D) 边界: 只读 SQL + 只读文件;仓库与生产未动 + +--- + +- ★★ **采纳 pi 反提案(`aec7f5c`)** + **判据自身的两个 bug**(第二个是"假绿的新来源") + + ## (A) 采纳: 声明动作化 —— "声明了但没检查"从表示上消失 + ``` + 我原判: "调用者既不 export 表、又忘了调 report ⇒ 仍会漏" ⇒ **记为边界**(理由: 控制流不可知) + pi 指出前提可换(我复核采纳): 病根不是"控制流不可知", + 而是"**声明(赋值)**与**检查(调用)**是可分离的两个动作" + ⇒ `agentmail_require <命令…>` = 赋值 + 立刻检查 ⇒ 该状态**不存在** + 落地: env-defaults.sh 加动作;三个调用者各改 1 行;新判据 `deploy/check-require-declaration.sh`; + install.sh 接线走 `CHECK_GATE_RC` **累积**通道(同 check-file-modes.sh 的既有做法) + ``` + ## (B) ★ 判据自己的 bug ①:**按目录划范围 ⇒ 假红** + ``` + 我第一版: 扫 `deploy/**/*.sh` 全部 ⇒ 立刻把 `env-defaults.sh:449` + (`agentmail_require()` 函数体里的 `AGENTMAIL_REQUIRE="$*"` —— **动作自己的实现**) + 判成违规。 + ⇒ 改为按**性质**划: "调用者" = **真的 source 了本库**的文件,减去定义动作的那个库。 + ⇒ 记法: **"调用者"这个身份由 source 这个动作定义,不由目录或文件名猜** —— + 与"类要由真的机制划"(③)同源,只是这次对象是"哪些文件算这个判据的调用者"。 + ``` + ## (C) ★★★ 判据自己的 bug ②:**假阴且不稳定** —— 假绿可以来自"读输入的那一步" + ``` + 写法: strip_comments "$f" | grep -qE '…' (set -o pipefail 已在文件头) + 机制: `grep -q` **一命中就退出** ⇒ 关掉管道 ⇒ 左侧 `sed` 收 **SIGPIPE(rc=141)** + ⇒ **管道整体返回 141** ⇒ `if` 判**假** ⇒ 该文件被**静默漏掉** + 实测: 同一条命令两次分别找到 **2** 个与 **1** 个调用者(实际 **3** 个);`rc=141` 被 if 吞掉 + ⇒ 集合**偏少且不稳** ⇒ "裸赋值 0 处"照样打印 ⇒ **假绿** + 修法: 先把去注释结果**收集到变量**,再 `grep <<< "$body"`(无管道)⇒ 修后**重复 10 次稳定 3** + ★ 但机制**不是"凡管道皆危险"**(我实测过,避免过度推广): + 生产者 | 输入形态 | rc + sed(多行) | 400k 行、首行即命中 | **141** ★ + sed(单巨行) | 一行、首字符即命中 | 0 + tr / cat / awk / sort | 同尺寸输入 | 0 / 1(不是 141) + grep -o(作生产者) | 同尺寸输入 | **141** ★ + ⇒ 真正的条件是: **"生产者还有东西要写" ∧ "消费者早退"** —— + 不是"用了 sed"、也不是"用了管道"。 + ⇒ ★ 记法(我建议与 ⑨ 并列): ⑨ 是**命令层**("命令不在≠输出为空"); + 这条是**管道层**: **判据读输入的那一步本身可以是假绿的来源** —— + 它**不报错**(141 被 if 吞)、**不稳定**(取决于缓冲/退出时机)、 + 且**偏向"看起来更干净"的那一侧**(漏文件 ⇒ 违规更少 ⇒ 更容易绿)。 + ★ 本仓已有**同一条**的先例(不是我发现的): `deploy/check-sandbox.sh:57` 注释里 + 写着同一形状("grep -q 命中后立刻退出、把管道关掉,左侧沙箱进程拿到 EPIPE; + 在 pipefail 下整条管道判失败 —— **'被拒'和'被拒判据本身炸了'长得一模一样**")。 + ⇒ 我把这次记为**同一族的第二个实例**(那次在沙箱判据、这次在集合枚举)。 + ``` + ## (D) 验证(四向 + 累积通道隔离 + 两个既有套件) + ``` + · 基线 rc=0(3 个调用者,裸赋值 0 处);修 SIGPIPE 后**重复 10 次稳定 3** + · 变异①裸赋值 ⇒ rc=1 ✓/②少一个调用者(剩2) ⇒ rc=0 ✓ 非空转/③三 source 全注释 ⇒ rc=1 ✓ **防空转** + · 每个变异后还原复测 rc=0;`git diff --numstat` 确认只有预期行 + · ★ 累积通道隔离测: `CHECK_ONLY=1` + 注入裸赋值 ⇒ 报 [FAIL] 且 **set -e 下未中止**、 + `CHECK_GATE_RC=1`、**后续诊断仍打印** ✓ + · criteria-hygiene **7/7** 绿(新 check-*.sh 已被 install.sh 真调用);pi 的 env-guard **17/17** 绿 + ``` + ## (E) 边界: 判据盖"**字面**裸赋值",**不盖间接赋值**(经 eval/read/env 注入)—— 已写进判据头