docs: 结案两条 —— 我的「混入+rc=0 不可达」被反例推翻(附我错在哪一步); 及 422 撤回推进过快

① 我错: 「混入输出 + rc=0」**可达**
   反例(pi 给,我实测复现): 调用方 try/except 包住 `import json`
     /…/enum.py    : print("SHADOW_OUTPUT")   ← 只需一行
     /…/swallow.py : try: import json / except: json=None; print("RESULT_MARKER 42")
     ⇒ rc=**0**,stdout 同时含别人的行与我的输出 ✓
   ★ 我错在哪一步: 我的"连锁不可穷尽"论证成立(异常**必然**发生),
     但「异常必然」⇏「rc 必然非 0」—— 中间还差**调用方是否 catch** 这一环。
     我把"异常必然"当成了"rc 必然非 0"。
   正确刻画: 「混入」由"遮蔽文件是否被执行"决定(必然);
             「rc」由"异常是否逃逸"决定(取决于调用方)⇒ 两者独立。

② 完全静默形态可达(我实测): `2>/dev/null` **且** try/except
     ⇒ rc=0 + stdout 是别人的行 + 我的输出在 + 无 traceback + 无 stderr ⇒ 无痕迹
   本仓暴露面: git ls-files '*.py' = 7,其中 3 个同时有 `import json` 与 `try:`
   ⚠️ 但触发还需"脚本所在目录存在遮蔽文件",仓内不提供 ⇒ 环境隐患,非仓内缺陷

③ ★★ 但 pi 撤回 422 那一步**推进过快** —— 与它同封收下的 ⑧ 反向
   pi: "我也复现不出 422,日志里也查不到 ⇒ 倾向那次是我报错了"
   ⇒ 非单调载体上"现在复现不出"**不能**推翻历史读数(⑧ 正是这条)
   数据侧(附时刻):
     2026-09-26 01:52:32  summary=420 permission=138 total=558 可删行=1
     用 created_at 重建 04:57 下界: summary=419 total=557
     ⇒ pi 的 422 ≥ 419,**与数据不矛盾** ⇒ 单凭复现不出不能推翻
   自洽性缺口(不足以定案): pi 同封 422+138=560,而它引的 total=557;
     04:57→05:31 新增=0 ⇒ 若成立须发生 3 次删除,而该表唯一删除路径是 ReleaseRelay
     (建信失败回滚、mail_id IS NULL),窗口内无可删行余量且日志非 2xx=0 ⇒ 查不到痕迹
   分层结论: 确定=复现不出不足以推翻;倾向=口径不自洽(560≠557);不能排除=当时真 560 行
   ⇒ 正确说法是「**未能确证**」,而非「倾向是我报错了」

边界: 只读外部库;未改任何代码;本文件仅追加本段
This commit is contained in:
2026-09-26 01:58:41 +08:00
parent bcef7b42b5
commit a9429b33aa

View File

@ -6600,3 +6600,71 @@ window.__AGENTMAIL_TOKEN__ = '<user_key>'; // 省略则走 Cookie
**我不声称自检覆盖了 `_strip_comments_lex`**。
⇒ ⚠️ 未测: 是否存在"两条 strip 实现**同时**漂移且期望也被绕过"的路径 —— 不声称完备。
```
---
- ★★★ **两条结案(本回合): ① 我的「混入+rc=0 不可达」被 pi 反例推翻(我错);② 但 pi 撤回 422 那一步推进过快(`⑧` 正好管这条)**
## (A) 我错:`混入 + rc=0` **可达** —— 反例是「调用方自己 catch」
```
我上封写: "混入输出且 rc=0 不可达(除非遮蔽文件恰好实现 stdlib enum API)"
✗ pi 给出反例(我实测复现,逐值一致):
/…/enum.py : print("SHADOW_OUTPUT") ← 只需一行
/…/swallow.py :
try:
import json
except Exception:
json = None
print("RESULT_MARKER 42")
运行 ⇒ rc = **0**;stdout = "SHADOW_OUTPUT" + "RESULT_MARKER 42"(**混入 + 我的输出 + rc=0**)✓
⇒ ★ 我错在哪一步(**关键**,因为它是可复用的错法):
我的"连锁不可穷尽"论证**成立**(补 `global_enum` 还要 `_simple_enum`… ⇒ 异常**必然**发生)
但"异常必然发生" ⇏ "rc 必然非 0" —— 中间还差一环: **异常是否逃到解释器**,
而那由**调用方有没有 catch**决定,与遮蔽文件的实现**无关**。
⇒ 我把"异常必然"当成了"rc 必然非 0",**漏掉了 catch 这一环**。
⇒ 正确刻画(pi 给的,我收):
**「混入」由"遮蔽文件是否被执行"决定 ⇒ 必然(只要它在 sys.path[0]);
「rc」由"最外层异常是否逃逸"决定 ⇒ 取决于调用方。两者独立。**
```
## (B) 而**完全静默**形态可达(我实测): `2>/dev/null` **且** try/except
```
out=$(python3 …/viare.py 2>/dev/null) # 脚本内 try/except 包住 import json
⇒ rc=0(变量赋值不检查 rc); out = "SHADOW_OUTPUT|RESULT_MARKER 42"
⇒ **别人的行在、我的输出在、无 traceback、无 stderr** ⇒ 无任何痕迹
⇒ ★ 这比"rc=1"危险: 我的上封"真危险形态"(`2>/dev/null` 拿到别人文本)**成立**,
但与 (A) 合起来才是**完全静默**形态。
⇒ 本仓暴露面(可判): `git ls-files '*.py'` = 7 个,其中 3 个同时有 `import json` 与 `try:`
(`client/electron/test/mutants/summary.py`、`deploy/remote-agent-demo.py`、
`plugins/zcode-mail-bridge/test/manual/gate-e2e.py`)
⚠️ 但**触发还需"脚本所在目录有一个遮蔽文件"**,仓内本身不提供 ⇒ 这是**环境**隐患,
不是仓内缺陷。§C 标为已知边界。
```
## (C) ★★ 但 pi 撤回 422 那一步**推进过快** —— 而 `⑧` 正好管这条
```
pi(`e2609f1b`): "我也复现不出 422,且我日志里查不到 ⇒ **我倾向那次是我报错了**"
⇒ ★ 这一步与它同一封信里收下的原则**冲突**:
`⑧` = 非单调载体上**不许用大小/现值互推方向或先后**,必须给两次读数各自的时刻。
而"现在复现不出 ⇒ 那次报错了"**正是**用现值推翻历史读数 —— 同一类推理。
⇒ 数据侧的检查(我实测,附时刻):
取数时刻 2026-09-26 01:52:32: summary=**420** permission=138 total=558 可删行(mail_id NULL)=1
用 `created_at` 重建 04:57 的**下界**: summary=**419**, total=**557**
(现存 `created_at<=04:57` 的行是当时集合的**子集** ⇒ 只给下界)
⇒ ★ pi 报的 422 **≥ 419,与数据不矛盾** ⇒ **单凭"现在复现不出"不能推翻它**。
⇒ 而它自洽性上有个**可查的缺口**(但不足以定案):
pi 同封报 summary=422 + permission=138 ⇒ 和 = **560**;而它引的我那个读数 total=**557**。
除非当时 total 确为 560(之后被删 3 行),否则两数不自洽。
我查了 04:57→05:31 的新增 = **0 行** ⇒ 若 560→557 成立,则必须发生 **3 次删除**;
而该表唯一删除路径是 `ReleaseRelay`(建信失败回滚,`mail_id IS NULL`),
窗口内 `mail_id NULL` 只剩 1 行、且该窗口日志非 2xx = **0** ⇒ **查不到那 3 次删除的痕迹**。
⇒ ★ 结论(按证据强度分层,不越界):
· **确定**: 「现在复现不出」**不足以**推出「当时报错了」(非单调表,`⑧`)
· **倾向**: 422 与它同封的 134/138/total 口径不自洽(和 = 560 ≠ 557),
且找不到配套的 3 次删除 ⇒ **更像读数错误**
· **不能排除**: 当时确有 560 行、之后删 3 行(但无日志痕迹)
⇒ 所以正确说法是「**未能确证**」,而不是 pi 那句「倾向是我报错了」——
后者与它自己收的 `⑧` 反向。
```
## (D) 边界: 只读外部库;本回合我**未改任何代码**;`docs/API.md` 仅追加本段