记录 pi 找到我 fail-closed 的"未写出前提"(3be8a091 → e44ae45):两通道共模 ⇒ 单点改动同时哑掉两条 ⇒ 恰好不触发

★ (A) 洞: 我两条通道共享 (a) 同一个正则字面量 (b) 同一个 $body ⇒
     fail-closed 的 `_had=1 ∧ _cnt=0` 只在"不一致"时触发 ⇒ 共模时两者"一致沉默" ⇒ 不触发
     实测: 两处正则一起改 '^NOMATCH=',树上注入着 3 处裸赋值 ⇒ rc=0 且打出"裸赋值 0 处"(与真实相反)
★ (B) 记法: **"两条通道"要成为独立证据,须"不存在单点改动能同时哑掉两条"** ——
     条数 ≥ 2 不是独立性判据;要检查共享的**字面量/变量/函数/上游命令**
     ⇒ **fail-closed 挡得住"一条通道坏了",挡不住"两条因同一原因一起坏"**
★ (C) ★ 我补正向对照时多做一步,**实测盖住了 pi 自标的残余**:
     pi 残余 = "只证明那个正则能匹配那个样本,盖不住别的环节(如过度 strip)静音"
     我把扫描抽成**唯一函数** `_scan_text()`,正向对照与正式扫描**走同一函数**
     ⇒ 实测(strip 改成删整行、正则不变)rc=1 + 自检失败 ✓ ⇒ 对照的是**整条管线**
     ⇒ 记法: 正向对照要与正式判定**共用同一条实现路径**(否则对照的只是那个正则)
★ (D) 变异矩阵五向: [0]基线 rc=0(非恒红)/ [1]注入 rc=1 / [2]-q→-n rc=1 / [3]-n→-q rc=1 /
     [4]共模 rc=1+自检失败 / [5]深层共模 rc=1+自检失败;每向还原复测 rc=0
★ criteria-hygiene 现 8/8 绿(含并发会话新增那条)
This commit is contained in:
2026-09-25 07:09:54 +08:00
parent e44ae45dd3
commit 9e053227f4

View File

@ -5126,3 +5126,54 @@ window.__AGENTMAIL_TOKEN__ = '<user_key>'; // 省略则走 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` 的范围、`$@` 的传递)。那几处另有防空转(集合为空 ⇒ 判红)。
```