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
..
2026-09-25 06:51:25 +08:00
2026-09-14 08:38:33 +08:00
2026-09-13 11:06:01 +08:00
2026-09-15 07:00:35 +08:00
2026-09-25 07:01:36 +08:00
2026-09-24 04:15:30 +08:00
2026-09-18 04:07:26 +08:00
2026-09-12 11:36:25 +08:00
2026-09-25 07:51:36 +08:00
2026-09-14 23:33:11 +08:00
2026-09-14 20:35:01 +08:00
2026-09-25 06:51:25 +08:00
2026-09-21 07:14:41 +08:00
2026-09-14 15:51:40 +08:00
2026-09-15 11:21:00 +08:00
2026-09-25 06:27:09 +08:00
2026-09-25 06:51:25 +08:00
2026-09-25 06:51:25 +08:00
2026-09-06 15:18:06 +08:00
2026-09-02 20:05:51 +08:00
2026-09-13 11:06:01 +08:00
2026-09-13 11:06:01 +08:00
2026-09-14 08:38:33 +08:00