第三例(最该记): 判据存在、运行、答对 —— 但 commit 照样执行 ⇒ 判据没接线

★★★ 事实(从 git 与我的日志两侧核):
   commit 21f6af9 的 docs/API.md 围栏 = **419(奇)**,未配对在第 2850 行。
   同一 tool/call 内命令串顺序(日志 10:15:59 逐字): 改文档 ; **围栏自检** ; git add ; git commit
   ⇒ 判据在 commit **之前**跑、**输出"奇"**,而 commit **仍然执行**。

★ 与 3f91800 **不是同一种失败**(我先前把它当"又犯一次",那是把两种错并成一种):
   3f91800: **没有**判据            ⇒ 修法 = 写判据
   21f6af9: 判据在、跑了、答对,却**没有 gate 动作** ⇒ 修法 = **让判据决定是否提交**
   ⇒ 即"**写了自检就必须接线**"—— 而我只写了 print(输出),没写 exit code。
     print 的读者是**人**;exit code 的读者是**流程**。前者依赖"我看见了就停",
     而这一步**恰好是我反复栽的地方**。

★★ 与本轮另两条**同一根因的第三个载体**:
   adf8eee  量词作用域: 前提 pi-scoped ⇒ 结论 universe-scoped ("全程只读")
   7519481  量词作用域: 本案成立 ⇒ 全称成立 ("L3 不可用")
   21f6af9  **判据作用域**: 判据**打印**了 ⇒ 我当作"判据**生效**了"
   ⇒ 共同结构: **"存在"被当成"生效"**。

★ 可操作修法(载体是**流程**): 凡自检必须具备 ①可判定谓词 ②**出口码** ③**与动作串联**(set -e/&&)。
   三者缺一即退化为"打印"。★ 验证边界: 只在本次实例确认"缺②③导致提交照走";
   **未**验证加上后能拦住下一次 ⇒ 仍是**候选规则**。
   ★ 本次即为其第一次执行: 该 gate **当场拦下了一次真的奇围栏**(431),补围栏后才通过。
This commit is contained in:
2026-09-21 10:17:49 +08:00
parent 21f6af959d
commit cf3156c46e

View File

@ -2828,10 +2828,11 @@ window.__AGENTMAIL_TOKEN__ = '<user_key>'; // 省略则走 Cookie
⇒ 若两次读数取自互不为祖先的提交,相减**没有区间解释** ⇒ 该"恒等式"不成立
⚠️ 端点约定那一层**已在上方 (3) 更正**:那是**我**的缺陷,不计入 pi 的缺失。
⇒ ★★ 所以"陈旧幅度 ≡ 区间提交数"这句话要写成:
**在上述两个约定都固定且 t1 是 t2 祖先时**才恒等 —— 它**不是**一条无条件等式。
**在 `count(t)` 用祖先定义、且 t1 是 t2 的祖先时**才恒等 —— 它**不是**一条无条件等式。
⇒ 而这与我这一轮反复栽的是**同一形状**(把有前提的命题写成无条件)。
⚠️ 注意:**pi 的结论方向仍成立**(它是在**降级**这条检查,不是在升格);
缺前提这一层**不影响**它"这是自洽式而非独立见证"的判断 ✓
```
## (4) ✅ §四 它自曝的两处我复核成立,且第二处我独立算了
```
@ -2847,4 +2848,51 @@ window.__AGENTMAIL_TOKEN__ = '<user_key>'; // 省略则走 Cookie
而我第一次解析又用错了时间字段名(`time` epoch 毫秒 vs `createdAt`/ISO)⇒ 读成 0
⇒ 所以"三关"至少要扩成四关: **源存在 / 源可见(未被压缩等遮蔽)/ 范围完整 / 换算与字段正确**
—— 而这四关的失败**都表现为同一个 0**(或同一个看起来合理的数)
```
```
- ★★★ **我这一轮的第三例,也是最该记的一例:判据存在、判据运行、判据答对 —— 但 commit 照样执行。**
## (1) 事实(从 git 与我自己的日志两侧核)
```
commit 533e39c("更正归属错"): docs/API.md 围栏 = **419(奇)**,未配对在第 2850 行
同一个 tool/call 内的命令串顺序(日志 10:15:59 逐字):
python3 …改文档… ; python3 …**围栏自检**(打印"围栏=419 (奇) 未配对=[2850]") ; git add ; git commit
⇒ 判据在 commit **之前**跑、且**输出"奇"** ⇒ 而 commit **仍然执行** ✓
```
★ 这与 `94b75ae` **不是同一种失败**(我先前把它当成"又犯一次",那是把两种错并成一种):
```
94b75ae: **没有**判据(我没在提交前数围栏) ⇒ 修法 = 写判据
533e39c: 判据**在**、跑了、答对,但**没有 gate 动作** ⇒ 修法 = **让判据决定是否提交**
```
⇒ 这正是我自己早就记过的那条 **"写了自检就必须接线"** —— 而我这次**写了一条打字的自检**:
```
我写的: print("围栏={} …".format(…)) ← 只是**输出**
我该写的: sys.exit(1) if n%2 else … ← **出口码 gate**
⇒ 一条只**打印**的判据,读者是人;一条**改变控制流**的判据,读者是流程。
前者依赖"我看见了就停",而这一步**恰好是我反复栽的地方**(认识没接到动作上)。
```
## (2) ★★ 所以这与本轮另两条是**同一根因**的第三个载体
```
8ae2ea5 量词作用域: 前提 pi-scoped ⇒ 结论 universe-scoped (我写"全程只读")
780a40a 量词作用域: 本案成立 ⇒ 全称成立 (我写"L3 不可用")
533e39c **判据作用域**: 判据**打印**了 ⇒ 我当作"判据**生效**了" (同一形状第三次)
⇒ 共同结构: **"存在"被当成"生效"** —— 前提里存在的东西,结论里被当成起了作用。
```
## (3) 可操作的修法(与上两条同一族,但这次载体是**流程**不是**措辞**)
```
凡自检,必须**同时**具备:
① 可判定的谓词(n 是否为偶)
② **出口码**(失败 ⇒ exit 1)
③ **与动作串联**(`set -e` 或 `&&`,使失败**阻止** commit)
⇒ 三者缺一即退化为"打印"。而我这次缺 ②③。
★ 本条的验证边界:我只在**这一次实例**上确认了"缺 ②③ 导致提交照走";
**未**验证加上 ②③ 后能拦住下一次(需要将来的实例)⇒ 与上一条并列,仍是**候选规则**。
```
## (4) 顺带:这一例把 pi 那条元教训又坐实了一层
```
pi: "认领一条规则不能防止当场触发它"
⇒ 而我这次**不是**在认领时触发的:我是在**执行一个已经写好的判据**时,把它当成"已经生效"。
⇒ 所以病灶不只是"认领之后仍会犯",还有**"执行了检查之后仍会犯"** ——
只要那个检查的输出**不改变控制流**。这比"认领无效"更强一格。
只要那个检查的输出**不改变控制流**。这比"认领无效"更强一格。
```