Files
MailUI4Agents/deploy
JianFeeeee df836e4ef7 ★★ pi c6f619b8 的 head -132 单点变异成立(一行打穿自检+下界守卫)⇒ 补**逐文件探针**;★ 且我实测出 pi 的建议**本身有洞**(删中间行)⇒ 再加**行号算术不变量**;★★ 并**撤销我上一轮"闭不了"的边界申报**(我当时把"换面"误判成"后退")
★ pi 的变异我复现: `strip_text` 尾接 `| head -132`(**一行**)⇒ rc=**0**、打"裸赋值 0 处"(树上注入 1 处)
   根因三层: ①自检样本只有 **2 行** ⇒ 长度相关变异对它**恒等** ⇒ 自检通过
             ②下界守卫只数"几个文件 source 了" ⇒ source 在 131、违规在 135 ⇒ 保住 source ⇒ 通过
             ③正式扫描看不到违规 ⇒ `_had=0 ∧ _cnt=0` ⇒ "一致" ⇒ fail-closed 不触发
   窗口精确: 逐个 head -N 实测 **打穿区间 = [131,134],宽 4**(source 行, 动作行)
   ⇒ 记法(收 pi 的): **"共用同一实现"只在"样本能触发该变异"时才看得见** ——
     输入相关变异(head/truncate/长度/locale)对短样本恒等 ⇒ 共用实现反而保证"一起静默"

★ 补法一: **逐文件探针**(拿"真文件 + 首尾已知注入"当样本 ⇒ 样本形状 = 被检对象形状)
★★ 但 pi 的建议只放**一个**探针 ⇒ **我只能抓到反方向的截断**(我逐条实测):
     单探针在**尾部**: `head -132` 砍掉它 ⇒ 抓到;`tail -132` 保住它 ⇒ **漏**
     ⇒ 所以**首尾各一**,且要求 head 行号 < tail 行号(顺带抓 `tac`)

★★★ 补法二(**pi 的建议里没有,是我实测出来的洞**): 首尾两探针**仍然不够** ——
   把**中间某一行**(=那条违规行)删掉、首尾都保住 ⇒ 探针全在、顺序也对 ⇒ **假绿**
   实测: `awk 'NR!=135'` / `sed '135d'` ⇒ rc=**0**
   ⇒ 再加**行号算术不变量**: 逐行原位 ⇒ `tail 行号 == head 行号 + 内容行数 + 1`
     中间少一行 ⇒ tail **上移** ⇒ 等式不成立 ⇒ 抓到
   ⇒ 三条件(两端都在 / 顺序对 / 算术成立)合起来 = "**这个过滤器是逐行原位的**"

★★ 撤销上一轮的边界申报(`2e8d5aa` 那个文件的末尾):
   我当时写"§五 闭不了 —— 要闭需一条**独立于本文件**的检查 ⇒ 无限后退 ⇒ 记为边界"。
   ⇒ ★ 错在: 我把"独立"理解成"**另一个文件**",而真正需要的是"**另一次观察**"。
     逐文件探针仍在**本文件**里,却**不经过自检那条判断**(直接看 `_scan_stripped` 的行号算术)。
     ⇒ 实测: 同一 ①∧② 合取,现在 rc=**1**(报"逐文件探针失败")。
   ⇒ 记法: **"无限后退"论证要先问"上一层与这一层是不是同一次观察"** ——
     换了**观测对象**(已知样本 → 被检文件本身)不是后退,是**换面**。
     我把"换面"误判成"后退",于是把一个**可闭**的点申报成了边界。
   ⇒ 该段改为"已闭 + 保留历史(因为错法有教学价值)"
   ⇒ 新增 ⑧ 申报**新探针的射程**: 它证"读入逐行原位",**不**证"注释剥离的语义正确"
     (探针只查行号与两端,不查"哪一列被删")

★ 变异矩阵(11 向,全部真跑):
   [0] 注入违规无过滤器 ⇒1  [1] cat ⇒1  [2] ★pi head -132 ⇒1  [3] tail -132 ⇒1
   [4] tac ⇒1  [5] ★★删中间 135 行 ⇒1  [6] ★★sed 135d ⇒1  [7] 删中间 400 行 ⇒1
   [8] grep -v '^$' ⇒1  [9] sort -u ⇒1  [10] head -c 5000 ⇒1
   非恒红: 干净副本(三调用者全合规)⇒ rc=**0**、报"3 个调用者,裸赋值 0 处" ✓
   criteria-hygiene **9/9** 绿
★ 并发: 全程未碰别人的在飞改动(`install.sh` / `criteria-hygiene.test.mjs` 的临时变异
   都只在我 `/tmp` 的副本上模拟)。
2026-09-25 07:51:36 +08:00
..