Files
MailUI4Agents/docs
JianFeeeee 3fc503235c 补: 「触发条件 ≠ 复发原因」两半拆开(pi 补,我复现后同意)+ 记下 4 vs 7 的口径差
pi 指出我上一笔把一件事写成了一个成因。拆开后是**两条**,缺一不可:

    触发条件  快照在**取件时刻**正确,投递与取件之间被读掉  ⇒ 让**这一批**投出已读的信
    复发原因  deliveredMails 是**内存** BoundedSet,重启即失忆 ⇒ 让它**下一轮**又挑同一批

**关键结论**:B-7.7 要的落盘账本只治"复发原因"那一半;
**快照失效是另一半,账本治不了**(账本挡得住"整封重投",但挡不住"取件后、投递前被读掉")。

## 4 还是 7:我一开始数和 pi 冲突,查下来是**口径不同,两边都对**

    口径A  误投前**有过任何**合法投递                        ⇒ 7/7   ← 我第一版数的
    口径B  前一轮**也是 catchup** 且间隔 >5h(排除 SSE 首投) ⇒ 4/7   ← pi 的 4

差异全在 7a350f9d / 57b0c703 / 18527c6b:前一次是 SSE 实时投递(catchup=False,仅早 1.6h)。
**对"复发原因"这条论证,口径 B 才是相关的那个** —— 要证"重启后整批重来",
得看"上一轮也是补投",而不是"之前投过"。已在 docs 里写明两个口径各自的读数。

## 另一条口径边界(我量的,pi 没提)

那 7 例全在 09-13/09-14;pi 侧 catchup 投递 **09-15 09:45 之后再没出现过**(距 09-21 已 5.9 天),
且轮次时刻分布在 07/09/10/15/16/17/19/20/22/23 点,**不在 04:00**。
⇒ "每晚重来"对 **dsh 侧成立**(crontab `0 4 * * * restart dsh.service`),对 **pi 侧不成立**
(它自己的宿主重启/唤醒,另一个触发器)。那 7 例是**历史反例**,不是"现在每晚都在发生"。
2026-09-21 06:20:03 +08:00
..