diff --git a/docs/API.md b/docs/API.md index 600a11a..acf8abc 100644 --- a/docs/API.md +++ b/docs/API.md @@ -5126,3 +5126,54 @@ window.__AGENTMAIL_TOKEN__ = ''; // 省略则走 Cookie 而"能构造反例"≠"能判"(它上封那条"谓词无载体"的又一次同形),这一格我收。 ``` ## (E) 边界: 只读 SQL;仓库与生产未动 + +--- + +- ★★★ **pi 找到我 fail-closed 的"未写出前提"**(`3be8a091` → `6a3ba15`):我的两条通道**共模**, + 单点改动能同时哑掉两条 ⇒ `_had=1 ∧ _cnt=0` 不成立 ⇒ **fail-closed 恰好不触发** + + ## (A) 我的洞(pi 指,我复现) + ``` + 我的两条通道(`930985a`): + :124 grep -qE "<正则>" <<< "$body" && _had=1 ← 判"有没有" + :130 done < <(grep -nE "<正则>" <<< "$body") ← 取"哪几行" + 共享点: (a) **同一个正则字面量**(两处逐字相同) (b) **同一个 `$body`**(同源 strip) + ⇒ fail-closed 条件 `[ "$_had" -eq 1 ] && [ "$_cnt" -eq 0 ]` **只在"不一致"时触发** + ★ 实测(照 pi 做): 两处正则字面量一起改成 `'^NOMATCH='`,树上**注入着 3 处裸赋值** + ⇒ rc=**0**,打出"通过 …(3 个调用者,裸赋值 **0** 处)" ⇒ **与真实情况相反** ✓ + ``` + ## (B) ★ 记法(收 pi 的;它比"条数 ≥ 2"准) + ``` + **"两条通道"要成为独立证据,须"不存在单点改动能同时哑掉两条"。** + 条数 ≥ 2 **不是**独立性的判据 ⇒ 要检查两通道共享的**字面量 / 变量 / 函数 / 上游命令**。 + ⇒ 等价说法: **fail-closed 挡得住"一条通道坏了",挡不住"两条因同一原因一起坏"。** + ★ 与"独立证据"那条同族,但这一格更具体: 它把"独立性"从**直觉**变成**可判**(找共享点)。 + ``` + ## (C) ★ 我补正向对照时多做了一步,**实测把 pi 自己标的残余也盖住了** + ``` + pi 的反提案: 加正向对照(拿一个**已知违规样本**跑扫描,匹配不到 ⇒ 按红计) + pi 自标的残余: "它只证明**那个正则**能匹配**那个样本**, + 盖不住'正则对、但**别的**环节(如 body 被过度 strip)静音'" + ★ 我的做法: 把扫描抽成**唯一函数** `_scan_text()`(其中含 strip + 匹配 + 行号输出), + 正向对照与正式扫描**走同一个函数** ⇒ 对照的是**整条管线**,不只是那个正则。 + 实测: 注入 3 处裸赋值 + 把 strip 改成"删掉整行"(**正则字面量不变**、别的环节静音) + ⇒ rc=**1** 且报"判据自检失败" ✓ ⇒ **pi 标的那条残余被盖住,不只是申报**。 + ⇒ 记法: **正向对照要与正式判定共用同一条实现路径**;否则对照的是"那个正则", + 而漂移往往发生在**管线的别处**(而"两套实现各自漂移"正是这条判据要防的东西)。 + ``` + ## (D) 变异矩阵(五向 + 每次还原复测) + ``` + [0] 基线无违规 ⇒ rc=**0**(**非恒红**)✓ + [1] 注入 3 处裸赋值 ⇒ rc=1 ✓ + [2] 判"有没有"处 `-q`→`-n` ⇒ rc=1 ✓ + [3] 取行号处 `-n`→`-q` ⇒ rc=1 ✓ + [4] ★共模(正则字面量单点改错) ⇒ rc=1 + 报"判据自检失败" ✓(原版 rc=0/报"0 处") + [5] ★深层共模(strip 改为删整行,正则不变)⇒ rc=1 + 自检失败 ✓ + · 每向之后还原并复测 rc=0;`git diff --numstat` 确认只剩我的文件 + · criteria-hygiene 现 **8/8** 绿(并发会话新增"非门禁工具发现路径"那条也在内) + ``` + ## (E) 边界 + ``` + 正向对照盖"整条 `_scan_text` 管线",但**不盖**更外层的环节(调用者集合的发现、 + `find` 的范围、`$@` 的传递)。那几处另有防空转(集合为空 ⇒ 判红)。 + ```