修正: 我 8903ce5 注释里那三个数是**用我自己刚记下的那个坑算出来的**(pi 指出算术不自洽)

pi 指出:注释里写「基线 22/1、shim 16/9」,而 `total` 恒为 22 —— **22/1 和 16/9 都凑不出 22**,
算术不自洽。他说得对,而且错因正好是本提交自己在下面第 33 行记下的那个坑:

    那三个数是用 `grep -c '失败'` 数出来的,而"失败"这两个字也出现在**样本名**里
    (`坏样本(rm 删不动):必须打出那句点名失败的 [FAIL]`)和 fake-rm 的 stderr
    ⇒ 基线多数 1、shim 多数 3。

**我在同一段注释里既写下了这个坑、又用它算出的数当成了实测值。**

## 按行首标记 `^\s*(通过|失败)\s` 精数(实测)

    基线              ⇒ 通过 22 / 失败 0   (合计 22)
    shim(全 rm)     ⇒ 通过 16 / 失败 6   (合计 22)
    shim(只该目标)  ⇒ 通过 16 / 失败 6   (合计 22)

"两种 shim 一样"这条结论**原来只是抄的** —— 这次把"只该目标"那一种也**真的跑了**
(在 `$T/rm` 里只对 `agentmail-gateway.bak-20260101-000000` 失败),确认同为 16/6。

自检仍 rc=0 全绿;`bash -n` OK。
This commit is contained in:
2026-09-21 06:16:41 +08:00
parent 1e0af51a24
commit d9c4946cd7

View File

@ -104,9 +104,17 @@ del() {
# 自检夹具建的就是 `$T/agentmail-gateway.bak-20260101-000000`(`mktree`),
# 而「窗口外那一个」恰恰也是它 —— 于是任何"对 `20260101-000000` 失败"的 shim
# 会连**夹具自己的清理**一起打掉。实测(两种 shim 都试过):
# 基线 ⇒ 通过 22 / 失败 1
# shim(全 rm) ⇒ 通过 16 / 失败 9
# shim(只该目标)⇒ 通过 16 / 失败 9 ← 与全量 shim **一样**,因为目标就是夹具
# 基线 ⇒ 通过 22 / 失败 0 (合计 22)
# shim(全 rm) ⇒ 通过 16 / 失败 6 (合计 22)
# shim(只该目标)⇒ 通过 16 / 失败 6 ← 与全量 shim **一样**,因为目标就是夹具
#
# ⚠️ 这三个数**第一版是错的**(写成 22/1、16/9),pi 2026-09-21 指出"total 恒 22,
# 22/1 与 16/9 都凑不出 22 ⇒ 算术不自洽"。他说的对,而且错因就是**本提交下面
# 第 33 行那段自己刚记下的坑**:那三个数是用 `grep -c '失败'` 数出来的,
# 而"失败"这两个字也出现在**样本名**里
# (`坏样本(rm 删不动):必须打出那句点名失败的 [FAIL]`)和 fake-rm 的 stderr
# ⇒ 基线多数出 1、shim 多数出 3。**我在同一段注释里既写下了这个坑、
# 又用它算出的数当成了实测值。** 现已按**行首标记** `^\s*(通过|失败)\s` 精数。
# 红的六条还都是【干净样本】("窗口外没了、窗口内还在"等)—— 即 shim 把
# **本应绿的样本**打红,测到的是"夹具坏了"而不是"删除失败被报出来了"。
#
@ -264,7 +272,8 @@ if [ "${1:-}" = "--self-check" ]; then
# ★ 但"让 rm 失败"必须走**注入点**,不能走 PATH shim:shim 的作用域是整个进程,
# 而下面这些夹具(`mktree`)活在同一个进程里、且用的**就是** `20260101-000000`
# 这个时间戳 ⇒ shim 会把夹具自己的清理一起打掉,红的全是【干净样本】。
# 实测:基线 22 通过/1 失败;两种 shim 都退化成 16 通过/9 失败(详见 `del()` 里的注释)。
# 实测:基线 22 通过/0 失败;两种 shim 都退化成 16 通过/6 失败(合计恒 22,
# 详见 `del()` 里的注释 —— 那里也记了这三个数**第一版为什么是错的**)。
T2="$(mkdtree_fail)"
cat > "$T2/fake-rm" <<'FAKERM'
#!/usr/bin/env bash