JianFeeeee
9336fa768b
更正: 「catchUp 从不重投已读邮件」是**我自己写宽的泛化** —— pi 侧量到 7 个真反例
我在 `ecf98d7` 往 B-7.7 里写了一句泛化:
「这 107 次投递中『投递时该读者已有已读行』= 0 次。也就是说 **`catchUp` 从不重投
已读邮件**」。**前半(我量的那 108 次里没有)成立;后半(机制上不会)是错的。**
## 反例(pi 侧,用同一个正确口径量出来的)
带 `catchup:true` 标记的投递共 63 次,其中 **7 次投递时 pi 的已读行已存在**:
1868127e 投 09-14 09:25:31 | read_at 09:22:25 | +186s
e211b554 投 09-14 09:26:29 | read_at 09:22:25 | +244s
2fce271d 投 09-14 09:27:14 | read_at 09:22:25 | +289s
c3638d4e 投 09-14 09:27:57 | read_at 09:22:25 | +332s
7a350f9d 投 09-14 15:19:21 | read_at 15:16:12 | +189s
57b0c703 投 09-14 15:20:44 | read_at 15:16:12 | +272s
18527c6b 投 09-14 15:21:38 | read_at 15:16:12 | +326s
## 根因不是"未读判定写错",是"快照 + 串行"
`catchUp` 先取一份 `status=unread` **清单快照**,再**逐封串行**投(每封起一轮模型)。
这 7 封同属一批快照,而模型投完第 1 封后调了一次 `read_inbox`(`01:22:25`/`07:16:12`)
**把剩下几封一次标成已读** —— 快照早已取好,后面的照投不误。
⇒ **判据"投递时是否已有已读行"测不出这条**:它测"当下快照对不对",
而这里快照**当时是对的**,只是**投的时候过期了**。
**"判据没答 ≠ 判据答错了"** —— 0/108 没答错,它答的是另一个问题。
⇒ 这让"每天重投"多出**第三条**独立成因(前两条:`read_mail` 不标 / `markReadFor` 错位)。
也说明"修好 (b) 重投就会停"是一个**新的假绿期待**。
## 顺带:两个数会一直涨,别当阈值
107/81 → 同一条命令当天下午就是 **108/82**(每来一封新信 +1)。
已改成钉**关系**(重投次数 ≥ 该会话真邮件数;时刻聚在 04:00 整点),
并注明别当验收阈值 —— 与我删掉 `check-deploy-drift.mjs` 里"133 个文件"是同一条教训。
★ 纪律提醒也补了一句:那条"别只看当前 `mail_reads`"的注意事项
**只说明会漏判/误判,不等于不存在真反例** —— 同一口径既排除了 11 个假反例,
也捞出了这 7 个真反例。
2026-09-21 05:59:20 +08:00
..
2026-09-19 14:01:21 +08:00
2026-09-21 04:26:49 +08:00
2026-09-20 22:35:35 +08:00
2026-09-15 06:33:54 +08:00
2026-09-19 12:47:32 +08:00
2026-09-14 16:11:00 +08:00
2026-09-15 11:17:23 +08:00
2026-09-19 14:01:21 +08:00
2026-09-15 11:21:00 +08:00
2026-09-13 06:16:59 +08:00
2026-09-08 19:16:35 +08:00
2026-09-08 19:16:35 +08:00
2026-09-14 23:50:35 +08:00
2026-09-21 05:59:20 +08:00