记录本轮两条**新的**判据纪律(都是"前提未校验"这一类,实测得出): ⑨ **"注入"这一步本身要有断言**;⑩ **报读数前要报"那个样本是谁放进树的"**;⑪ 并更正我自己一处措辞错

★ ⑨ "注入"要有断言(我自己踩的): 我每条变异命令先做
     replace('agentmail_require git go npm npx' → 'AGENTMAIL_REQUIRE="x"')
   ★ 而 pi 的污染**已把目标串改掉** ⇒ 实测 inject **没生效**(False),
     但最终 :135 **确实**是 `AGENTMAIL_REQUIRE="x" …`(**pi 提供的**)
   ⇒ 读数**对**,而"违规来自我注入"这个**前提是假的** ⇒ **身份被别人顶替**
   ★★ 危险的是**反方向**: 若变异把违规**改成合规**(目标串消失)⇒ inject 也 no-op
     ⇒ 在"以为注入了违规"的树上测,而那树**其实没有违规** ⇒ 前提**静默失效**,
       输出看起来完全正常("0 处、rc=0")
   ⇒ 纪律: `inject` 后必须断言 **新旧内容不同 ∧ 树上确实有那处违规**;
     否则**前提与结果共用同一个未校验的假设** ⇒ 前提出事时结果看不出来
   ⇒ 与"三格"正交(三格答"我动过哪些行",本条答"违规是谁放的")⇒ 合成格式:
     `文件:行号 → 窗口[t0,t1) → 复原时刻` + `注入确实生效(内容变了 ∧ 违规确实在)`
★ ⑩ 读数"对"要分三种: ①真的没被污染 ②被污染但碰巧对 ③**被别人的东西顶替后碰巧对**
   —— ②③ **不会引起怀疑**,比错的读数**更危险**
   可判做法: 报读数时**同时报"这个样本是谁放进树的"**(我注入的?别人的变更?HEAD 的?)
   ★ 出处: 复核 pi 的读者链时发现它只验了窗口内 2 条(共 15 条);
     逐条查"读哪棵树"后: 14 条 bash 全读**被污染的工作区**,
     但**只有 1 条真的执行了判据**,且被**独立守卫**(下界:只找到 2 个调用者)接住
     ⇒ 结论(未被污染)成立,但**理由要换**: 不是"恰好不覆盖",是"**只读数据、未形成结论**"
     ⇒ 差别实际: 若当时那条也读数据并形成结论,**下界守卫不会响**(它只管集合大小)
★ ⑪ 更正我 23:46:31 的措辞: 我写"域被收窄 ⇒ **应该是假绿**"是**错的** ——
   实测那条 rc=1 是**下界守卫**在响("只找到 2 个调用者(下界 3)"),守卫**接住了**
   ⇒ 教训: 我把"**守卫响了**"说成了"**应该假绿**"(把表现与能力混了)
   ★ 与 ⑰′ 同族但**方向相反**: ⑰′ 高估防线覆盖面;这条**低估**(把"接住了"说成"接不住")
★ 提交前围栏 922(偶,配对 461、未配对无)—— 本次**先数围栏再写**(此前四次都是漏写闭合围栏)
This commit is contained in:
2026-09-25 08:31:24 +08:00
parent 2fe58ce1bf
commit 877961fe07

View File

@ -5684,3 +5684,58 @@ window.__AGENTMAIL_TOKEN__ = '<user_key>'; // 省略则走 Cookie
本轮提交 bc252e5;基线 rc=0;12 向变异矩阵全 1;criteria-hygiene **10/10** 绿
③ 调用者判定已不依赖 strip;⑧a 已闭;**⑧c 已闭**;⑧b(注释语义)真边界
```
---
- ★★★ 本轮两条**新的**判据纪律(都是"前提未校验"这一类,我实测出来的): ⑨**注入要有断言** / ⑩**点名要报"是谁顶替了它"**
## ⑨ ★★★ "注入"这一步本身要有断言 —— 前提与结果不能共用同一个未校验的假设
```
场景(我 2026-09-25 实测,我自己踩的):
我每条变异命令都先做一步"注入 1 处违规":
replace('agentmail_require git go npm npx' → 'AGENTMAIL_REQUIRE="x"')
★ 而 pi 的污染**已经把那个目标串改掉了**(:135 已是 `AGENTMAIL_REQUIRE="x" …`)
⇒ 实测(复现):
pi 污染后 :135 = AGENTMAIL_REQUIRE="x" node curl systemctl flock
我的 inject 是否改变文件 = **False** ← 没生效
最终 :135 = AGENTMAIL_REQUIRE="x" node … ← 而那处违规**确实在**(**pi 提供的**)
⇒ 即: 读数**对**(树上确有 1 处违规、rc=1),但**"违规来自我注入"这个前提是假的** ——
我量的是**别人的**变异,却当成**我的**实验样本 ⇒ **身份被顶替**。
★★ 危险的是**反方向**(我实测): 若某次变异把违规**改成合规**(目标串消失),
inject 也 `no-op` ⇒ 我会在"**以为注入了违规**"的树上测,而那树**其实没有违规**
⇒ **前提静默失效**,而输出看起来**完全正常**("0 处违规、rc=0")
⇒ ★★★ 纪律: **`inject` 之后必须断言** `新旧内容不同` ∧ `树上确实有那处违规`;
否则"实验前提"与"实验结果"**共用同一个未校验的假设** ⇒ 前提出事时结果**看不出来**。
★ 与"三格"正交: 三格答"我动过哪些行",本条答"**我实验里的违规是谁放的**"。
⇒ 合成报账格式:
`文件:行号 → 窗口[t0,t1) → 复原时刻` **+** `注入确实生效(内容变了 ∧ 违规确实在)`
```
## ⑩ ★★ 报"某处读数是 X"之前,先报"那个 X 是**谁**给的" —— 会让"碰巧对"过关
```
同一事故里,我的读者链**复核 pi 的报账**时发现:
pi 只验了窗口内 **2 条**命令(read + 行数),而窗口内共 **15 条**
★ 逐条查"读了哪棵树"后: 14 条 bash 全部读**被污染的工作区**,但
其中**只有 1 条真的执行了判据**(其余只量行数/原型)
⇒ 所以它结论(未被污染)**成立**,但**理由要换**:
不是"那几条恰好不覆盖",而是"**它们读数据、没形成判据结论**"
—— 唯一形成结论的那条,被**独立守卫**(下界:只找到 2 个调用者)接住了
★ 差别很实际: 若当时那条也读数据并得出结论,**下界守卫不会响**(它只管集合大小)
⇒ 纪律: **"读数对"要分三种**: ①**真的没被污染** ②**被污染但碰巧对** ③**被别人的东西顶替后碰巧对**
—— ②③ 都**不会引起怀疑**,所以**比错的读数更危险**
⇒ 可判做法: 报读数时**同时报"这个样本是谁放进树的"**(我自己注入的?别人的变更?HEAD 的?)
```
## ⑪ ★ 一处**我自己措辞错**(同轮更正)
```
我 23:46:31 的注释写: "域被收窄 ⇒ **应该是假绿**"
⇒ **错**。实测(`6a86a66` + 收窄 find): 那条 rc=1 是**下界守卫**在响
("只找到 2 个调用者(下界 3)"),**不是**假绿 —— 守卫**接住了**。
⇒ 教训: 我把"**守卫响了**"说成了"**应该假绿**" —— 把"判据的表现"与"判据的能力"混了。
★ 与 ⑰′("被别的守卫顺手抓住" ≠ "这条路径有守卫")**同族但方向相反**:
⑰′ 是**高估**防线的覆盖面;这条是**低估**(把"接住了"说成"接不住")。
```
## 状态
```
本轮只读 + /tmp 复现;源一律 `git archive <commit>`;工作区 0 处已跟踪改动
本会话 HEAD = 662f838(判据线: 调用者判定改词首注释规则 + ⑧b 拆出 ⑧c)
边界现状: ⑥ 间接赋值;⑦ 下界只挡"<3";⑧a 已闭;⑧c 已闭;⑧b(注释语义)真边界
```