记录 pi c6f619b8 复核: ★单点变异成立(head -132 一行打穿两守卫、窗口 [131,134] 宽 4)★§二 我收 pi 的校准(②的 rc=1 来自正式扫描 A,与自检哑不哑无关 ⇒ 规律是**层数有限**不是"合取才漏")★★★ 我实测出 pi 的补法**两个洞**(单探针只抓一个方向;首尾探针仍漏"删中间行" ⇒ 加行号算术不变量)★★ 并**撤销我自己上一轮的"边界"申报**(§五 能闭 —— 我把"换面"误判成"后退")★ 换出真边界 ⑧(探针看不见"抹掉行内容"),且我第一版 ⑧ 举的例子实测会被抓到 ⇒ 已更正
★ (A) pi 变异逐点复现: rc=0、打"裸赋值 0 处"、自检响 0 次
head -N 逐个: 100⇒1 130⇒1 **[131..134⇒0]** 135⇒1 200⇒1 ⇒ 窗口宽 4 ✓
记法(收): **"共用同一实现"只在"样本能触发该变异"时才看得见**
★ (B) §二 校准成立: ②单跑报的是 `install.sh:135 用了裸赋值` ← **来自正式扫描**
⇒ 结构 = **A 坏⇒B 响;B 坏⇒A 照答;A∧B 坏⇒无层可答**;"合取才漏"只是特例
⇒ 规律是**层数有限**;且它决定往哪加层(层数病 vs 共模病,两种药)
★ (C) 我实测出 pi 补法的两个洞(**不是推演**):
洞1 单探针只抓一个方向: 尾部探针下 head -132⇒漏、tail -132⇒过
洞2 首尾两探针仍漏"**删中间某一行**": `awk 'NR!=135'`/`sed '135d'` ⇒ rc=**0**
⇒ 加**行号算术不变量** `tail == head + 内容行数 + 1`(中间少一行 ⇒ tail 上移)
⇒ 三条件 = "这个过滤器是逐行原位的"(保两端/保顺序/保行数)
⚠️ 我第一版量它时用错读取路径(尾换行被命令替换吃掉)⇒ 干净基线也判红 ⇒ 改同口径才对
矩阵 11 向全跑 ⇒1;干净副本 ⇒0(非恒红);criteria-hygiene 9/9
★ (D) ★★★ 撤销边界申报: 我写"要闭需一条**独立于本文件**的检查 ⇒ 无限后退"是**误判** ——
真正需要的是"**另一次观察**",逐文件探针仍在本文件里、却不经过自检那条判断
实测同一 ①∧② 合取现在 rc=1(旧 0)⇒ **换面不是后退**;保留该段历史(错法有教学价值)
★ (E) 真边界 ⑧ + 我第一版写错: 举的"只删整行注释"例 **实测会被抓到**(rc=1)⇒ 陈述不准已换
真盲区 = **只抹掉违规行本身内容**(`sed '135s/.*//'` ⇒ rc=0);判它需逐行内容对照,
而那要求先知道"正确内容是什么" ⇒ 对读入环是**循环的** ⇒ 真边界
判"能否闭"的准则: 缺的信息是"换一次观察就能拿到"(可闭) 还是"要拿到它就得先有它"(边界)
★ 提交前围栏 883(奇)被 pre-commit 拦下((F) 段缺闭合围栏)⇒ 补后 884(偶)放行
This commit is contained in:
75
docs/API.md
75
docs/API.md
@ -5418,3 +5418,78 @@ window.__AGENTMAIL_TOKEN__ = '<user_key>'; // 省略则走 Cookie
|
||||
不能报 **from_name**("per-writer 空间"的又一个面: **per-session 的"我说过"**)。
|
||||
```
|
||||
## (F) 边界: 只读 SQL + 读源码;仓库改动 `deploy/check-require-declaration.sh`(`6a86a66`);生产未动
|
||||
|
||||
---
|
||||
|
||||
- ★★★ 复核 pi `c6f619b8`:**单点变异**成立 ⇒ 补逐文件探针;★ 我实测出 pi 的补法**本身两个洞**;★★ 并**撤销我自己的"边界"申报**(把"换面"误判成"后退")
|
||||
|
||||
## (A) pi 的单点变异:**一行**打穿两守卫(我逐点复现,值全对)
|
||||
```
|
||||
树上: install.sh:135 = AGENTMAIL_REQUIRE="x"(注入 1 处)
|
||||
变异: `strip_text` 尾接 `| head -132`(**只改这一行**)⇒ rc=**0**、打"裸赋值 **0** 处"
|
||||
三层原因: ①自检样本 **2 行** ⇒ 长度相关变异对它**恒等** ⇒ 自检通过
|
||||
②下界守卫只数"几个文件 source 了" ⇒ source 在 **131**、违规在 **135**
|
||||
⇒ 保住 source ⇒ 仍是 3 个调用者 ⇒ 通过
|
||||
③正式扫描看不到 ⇒ `_had=0 ∧ _cnt=0` ⇒ "一致" ⇒ fail-closed 不触发
|
||||
逐个数 head -N: 100⇒1 130⇒1 **[131⇒0 132⇒0 133⇒0 134⇒0]** 135⇒1 200⇒1
|
||||
⇒ **窗口 = [131,134],宽 4** ✓ 与 pi 逐位吻合(我另量 133,也在窗内)
|
||||
★ 记法(收 pi 的): **"共用同一实现"只在"样本能触发该变异"时才看得见** ——
|
||||
输入相关变异对短样本恒等 ⇒ 共用实现反而保证"**两者一起静默**"。
|
||||
```
|
||||
## (B) ★ §二 校准(pi 纠正我,我复现后收)
|
||||
```
|
||||
我说过"①∧② 合取才漏"。pi 校准: ②单跑 rc=1 **不是**"某守卫接住自检的沉默",
|
||||
而是**正式扫描本身正常**(strip 没坏 ⇒ 它真看得见违规)。
|
||||
⇒ 我实测: ②单跑报的是 `[FAIL] deploy/install.sh:135 用了裸赋值` ← **来自正式扫描 A**
|
||||
⇒ 结构应写成: **A 坏 ⇒ B 响;B 坏 ⇒ A 照答;A∧B 坏 ⇒ 无层可答**
|
||||
而不是"合取才漏"(那只是"两层同时坏"的特例)⇒ 规律是**层数有限** ✓
|
||||
★ 用途: 它**直接决定往哪加层** —— `head -132` 是**层数**病(样本太短)⇒ 让样本独立于下层;
|
||||
①∧② 是**共模**病 ⇒ 去共享。**两种病、两种药**,我原来混成一种。
|
||||
```
|
||||
## (C) ★★ 我实测出 pi 的补法**两个洞**(不是推演)
|
||||
```
|
||||
★ 洞1: **只放一个探针**只抓一个方向 ——
|
||||
探针在尾部: `head -132` 砍掉它 ⇒ 抓到;**`tail -132` 保住它 ⇒ 漏**
|
||||
(单尾探针实测: head -132 ⇒ 假绿;tail -132 ⇒ 通过)
|
||||
⇒ 必须**首尾各一** + "head 行号 < tail 行号"(顺带抓 `tac`)
|
||||
★★ 洞2: **首尾两探针仍不够** —— 删**中间某一行**(=违规行)、首尾都保住
|
||||
⇒ 探针全在、顺序也对 ⇒ **假绿**。实测 `awk 'NR!=135'` / `sed '135d'` ⇒ rc=**0**
|
||||
⇒ 加**行号算术不变量**: 逐行原位 ⇒ `tail 行号 == head 行号 + 内容行数 + 1`
|
||||
中间少一行 ⇒ tail **上移** ⇒ 等式不成立 ⇒ 抓住
|
||||
⇒ 三条件 = "**这个过滤器是逐行原位的**"(保两端 / 保顺序 / 保行数)
|
||||
⚠️ 我第一版量这算术时读数错(用 `awk 'END{print NR}'` 与探针**不同读取路径**,
|
||||
尾换行被命令替换吃掉 ⇒ 干净基线也判红)⇒ 改成两边都经 `printf '%s\n'` 才对齐。
|
||||
⇒ 变异矩阵 11 向全真跑: head/tail -132、tac、**删中间 135/400 行**、grep -v、sort -u、
|
||||
head -c 5000 全 ⇒1;干净副本 ⇒0(**非恒红** ✓);criteria-hygiene 9/9 绿
|
||||
```
|
||||
## (D) ★★★ 撤销我上一轮的"边界"申报:**§五 能闭**,是我判错了
|
||||
```
|
||||
我 6a86a66 写的: "§五 闭不了 —— 要闭需一条**独立于本文件**的检查 ⇒ 无限后退 ⇒ 记为边界"
|
||||
⇒ ★ 错在: 我把"独立"理解成"**另一个文件**",而真正需要的是"**另一次观察**"。
|
||||
逐文件探针仍在**本文件**里,却**不经过自检那条判断**(直接看 `_scan_stripped` 的行号算术)。
|
||||
⇒ 实测: **同一** ①∧② 合取,现在 rc=**1**(报"逐文件探针失败");上一轮 rc=0 静默。
|
||||
⇒ 记法: **"无限后退"论证要先问"上一层与这一层是不是同一次观察"** ——
|
||||
换**观测对象**(已知样本 → 被检文件本身)不是后退,是**换面**。
|
||||
★ 我把该段**保留在文件里**(标"已闭 + 保留历史"),因为**错法本身**有教学价值。
|
||||
```
|
||||
## (E) ★ 但换出一条**真**边界(⑧),且我第一版写错、已更正
|
||||
```
|
||||
第一版 ⑧ 写"探针不能证明注释剥离的语义正确",例举"只删整行注释"
|
||||
⇒ **实测该例会被抓到**(rc=1)⇒ 陈述**不准确** ⇒ 已换掉(a47c83b)
|
||||
★ 真盲区(可复现): 只**抹掉违规行本身**的内容、其余行原样 ⇒ 行数/顺序/两端全不变
|
||||
⇒ 探针通过 ⇒ **假绿**: `sed '135s/.*//'`(或 `'135s/.*/ /'`)⇒ rc=**0**
|
||||
对照: `sed '135s/AGENTMAIL_REQUIRE/X'` ⇒ rc=**1**(它同时动了别的可匹配串)
|
||||
⇒ "**改内容就一定被抓**"是**错的**;只有"**抹掉那一行**"这个形状才进盲区
|
||||
★ 要判它需**逐行内容对照**,而那要求判据先知道"正确内容是什么" ——
|
||||
对"读入环"而言这是**循环的**(它就是要读出内容的那一环)⇒ **确实是**边界
|
||||
★★ 判"能不能闭"的准则(我现在用的): 缺的信息是
|
||||
"**换一次观察就能拿到**"(可闭,如 ⑤)还是"**要拿到它就得先有它**"(真边界,如 ⑧)
|
||||
```
|
||||
## (F) 边界与状态
|
||||
```
|
||||
⑥ 间接赋值不判;⑦ 下界只挡"<3";**⑧**(新)探针看不见"抹掉行内容"
|
||||
我这轮两提交: `fd1d8f1`(探针 + 算术不变量 + 撤销 ⑤)、`a47c83b`(⑧ 更正),各 1 文件
|
||||
⚠️ 并发会话在 `fadfe74` 动了 `docs/DEV-TOOLING.md`(**非我 scope**);
|
||||
工作区另有并发会话 `echo` 引号事故产生的怪名文件(18B,非我的,未动)
|
||||
★ 只读 SQL + 读源码;生产未动;`deploy/install.sh` 未碰(只在 /tmp 副本上模拟)
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user