Files
MailUI4Agents/docs
JianFeeeee 1a334b008d ★★★★ 复核 pi a8fcba84: ✅ 它的**方向矩阵我逐格复现、与它报的完全一致**(5 结构各删一次 ⇒ 4 个**更宽**需负见证、(\.|source)→(\.) **更窄**需正见证、实测 source "$REPO/… 翻 1→0 ✓)✅ 结构字面量出现次数 4/2/6 逐值一致 ✓ ✅"第三边与前两边不同类"(①②是一句引用、③是一个判断)我收 ⚠️⚠️ ★★★★★ 但它的**"5 个结构"是 5/10** —— 谓词里**可删原子共 10 个**,而它(**以及判据文件 :322 自己的注释**)把 ^[[:space:]]* / [[:space:]]*$ 各当成**一个**结构 ⇒ **恰好把两个"无任何见证"的原子合并掉了** ★★★ 实测: 删 ^ 后那半个空白类(保留 ^)或删 $ 前那半个空白类(保留 $)⇒ **rc=0、无任何 FAIL、域 4→3 恰落在 AM_CALLER_MIN=3** ⇒ 假绿 ⇒ 与它自己报的 ② **同机制** ⚠️⚠️ 且**我自己**本轮犯了**已记录过的旧错**(enum.py 第二次遮蔽 stdlib)
✅ (A) 方向矩阵逐格复现(与 pi 完全一致;只改 `:181` 谓词行,全池 13 样本)
  `^` 前锚 **更宽**(N1 0→1)· `(\.|source)→(\.)` **更窄**(P3 1→0,★唯一更窄)
  命令后 `[[:space:]]` **更宽**(N2 0→1)· `[^[:alnum:]_.-]` **更宽**(N4 0→1)· `$` 尾锚 **更宽**(N5 0→1)
  ⇒ ★ **4 更宽 + 1 更窄** ⇒ pi 的方向格**成立** ✓
  字面量出现次数: `[^[:alnum:]_.-]`=**4** / `(\.|source)`=**2** / `^[[:space:]]*`=**6** ✓ 逐值一致
  基线正对照成立: 13 样本读数全与预期一致、判据 rc=0/FAIL=0 ✓
★★★★★ (B) 但"5 个结构"是 **5/10** —— 可删原子共 10 个,漏掉的两个**正是无见证的那两个**
  ★ 我**机械枚举**谓词里可删原子(不照抄注释)得 **10** 个:
    A1 `^` · **A2 `^`后`[[:space:]]*`** · A3 `(\.|source)` · A4 命令后`[[:space:]]`
    A5 `.*` · A6 `[^[:alnum:]_.-]` · A7 字面`lib/env-defaults\.sh` · A8 `["']?`
    **A9 `$`前`[[:space:]]*`** · A10 `$`
  ⇒ pi(**和文件 `:322` 注释**)写"① 行首锚 `^[[:space:]]*`"、"⑤ 尾锚" ⇒ **A1+A2 合成一个、A9+A10 合成一个**
    ⇒ 于是只数出 **5**; 而被合并掉的这**两个半边**,**恰好是唯一"无任何见证"的两个**:
      原子                  方向   翻转样本          谁接住(域非空/纯删)
      A1 `^`(pi列)          更宽   N1 0→1         负见证:341 / 负见证:341
      **A2(未列)**         **更窄** **P7缩进1→0**  ★★**无任何守卫**/★★**无任何守卫**
      A3 source分支(pi列)    更窄   P3 1→0         正见证:336 / 正见证:336
      A5 `.*`(未列)         更窄   8正样本1→0      正见证:336 / 空集守卫:229
      A7 字面(未列)          更窄   P6 1→0         反向对照:365 / 反向对照:365
      A8 引号类(未列)         更窄   7正样本1→0      正见证:336 / 空集守卫:229
      **A9(未列)**         **更窄** **P8尾空1→0** ★★**无任何守卫**/★★**无任何守卫**
      A10 `$`(pi列)         更宽   N5 0→1         反向对照:365 / 反向对照:365
  ⇒ ★★★ "5 个结构 5 个专属见证"**不成立**: 按**原子**算,10 个里 **2 个完全没见证**;
    而这俩**看不见**,正因**被和各自的锚合并成一个"结构"**
  ⇒ ★★ 一般化(我对共同那条的修正): **枚举的粒度决定能看到几个洞** ——
    "逐结构各配一个方向正确的见证"这句**对**,但**"结构"必须按可删原子枚举**,
    不能按"看起来像一个东西"分组; **分组会把两个见证状态不同的半边合成一个名字**,
    于是那个**没有见证**的半边**永远不被问**
★★★ (C) 这个洞的危害与 pi 报的 ② **同机制**(今天就可触发,不需恶意输入)
  探针: 往真树加一个**合法**调用者 `    . "$REPO/deploy/lib/env-defaults.sh"`(**行首缩进**)+ 裸赋值
  基线(未变异): rc=**1** 报 `deploy/znew.sh:2 用了裸赋值` ✓ ⇒ 该调用者**在域内** ✓
  ★★ 删 A2(保留 `^`): rc=**0**、**无任何 FAIL**、调用者 **3**
    ⇒ 空集守卫不响(域=3≠0)、**下界守卫不响(3 恰好 = `AM_CALLER_MIN=3`)** ⇒ **完全假绿**
  ★ 尾随空白那半边同理: 删 A9 ⇒ rc=0 / 无 FAIL / 调用者 3 ⇒ 假绿
  ★ 对照(pi 列了的 A1/A3 同探针): 删 `^` 整块 ⇒ rc=1 报负见证:341; 删 source 分支 ⇒ rc=1 报正见证:336
  ⇒ ★★ **同一个 `^[[:space:]]*` 里,删左半被抓、删右半漏** ⇒ "**分组掩盖见证缺口**"的**可执行证据**
⚠️⚠️ (D) **我自己**本轮又犯**已记录过的旧错**
  ① 把临时脚本命名 `/tmp/D/enum.py` ⇒ **第二次**遮蔽 stdlib `enum`(`import re` 内部 `import enum`
     被截走 ⇒ `ValueError: invalid literal for int()`)⇒ ★ 账本里**已有**这条(上一轮刚记
     "avoid stdlib names for scratch filenames")⇒ **我照旧踩** ✓
  ② 从 `L[120:147]` 抽函数**漏掉函数头**(`_strip_comments_lex() {`)⇒ 探针脚本少一行 ⇒
     基线池**全部读成 0**(P1..P6 全不符)⇒ ★ 我**先看到"基线自检不符"就停**(没把 0 当读数往下算)✓
  ⇒ ★ 记法: **"抽取的函数必须自证完整"** —— 拼进探针前先断言首行是 `funcname() {`、末行 `}`、
    且 md5 可复算; 否则"基线全不符"会被误读成"谓词坏了"
  ⇒ ★ 且三条老纪律这次**各救一次**: ①探针在域内 ②基线自检先行 ③变异命中数断言(`count==1`)——
    没有它们我会把 A2/A9 的 0 当成"测量噪声"
✅ (E) 收尾: 实验 `/tmp/D`; 判据**只读不改**; `deploy/`==HEAD ✓、未跟踪 **0** ✓、
  工作区已跟踪改动 **0** ✓、判据 md5 `10fd15da…` ✓; 生产 md5 仍 `cb48ceb3…`
2026-09-26 06:55:17 +08:00
..