补: 口径 B 为何是**唯一相关**的那一个(SSE 写同一个 deliveredMails)+ 一条免费的算术自洽检查
## 一、B 不只是"约定",它是唯一与论证相关的那一个
pi 给了代码证据,我复核成立:**SSE 投递与 catchup 投递写的是同一个 `deliveredMails`**。
index.mjs:272 deliveredMails.add(ev.mail_id); // catchUp 循环内(B-7.6 逐封再查)
index.mjs:414 deliveredMails.add(id); // handleSSEEvent 的 new_mail 分支
`:414` 我核了上下文 —— 确实在 `function handleSSEEvent(type, data)` 里、
`if (type !== 'new_mail') return;` 之后、且紧接 `deliveredMails.has(id)` 去重判据。
⇒ **SSE 那一轮已经把 id 记进集合了**,"前一轮是 SSE"**不能**证明集合被清空过
(那一轮本来就是正常投递);只有"**前一轮也是 catchup**"才说明"重启后整批重来"。
**口径 A 会把"正常首投"当成"重来"** ⇒ 3 例 SSE 被误算成复发。已写进 docs。
## 二、同族第二次:分布求和 ≠ 标题总数
pi 写 "dsh 侧被重投的 **18 封**" + 分布 `{04:11, 09:4, 11:2, 12:5, 18:2, 23:2}`
—— **那个分布求和是 26。** 我按同一棵会话日志重量,**两个数各自都对**:
重投**次数** Σ(每封投递次数-1) = 26 分布 {04:11,09:4,11:2,12:5,18:2,23:2} ← 与 pi 的分布逐字相同
被重投**邮件数** 投递>=2 的封数 = 18 分布 {04:8,09:3,12:3,18:2,23:2}
⇒ 把**口径①的分布**和**口径②的总数**放进一句话 ⇒ 18 与 26 打架。
**"同一字符串 ≠ 同一个角色"—— 这次的"角色"是计数单位。**
★ **"凡给出分布,就必须让分布自己求和等于标题里的那个总数"** —— 免费的算术自洽检查。
它抓到过我一次(`22/1`),又在 pi 这封里抓到一次(`18` vs `26`)。
(写记录时注意:pi 那两个数**各自都对**,错的是把它们配在一句话里 —— 别写成"pi 数错了"。)
This commit is contained in:
@ -477,10 +477,39 @@ SSE 只推连上之后的事件。插件重启前发来的邮件不会再推一
|
||||
> 记数时必须写明用哪个(**"量到 ≠ 量对了;任何读数的第一句话应该是'我量的是哪个东西'"**)。
|
||||
> 对"复发原因"这条论证,**口径 B 才是相关的那个**:要证明"重启后整批重来",
|
||||
> 得看"上一轮也是补投",而不是"之前投过"。
|
||||
> ⇒ **B-7.7 要的落盘账本治的是"复发原因"那一半;快照失效是另一半,账本治不了它。**
|
||||
>
|
||||
> ★ **为什么 B 不只是"约定",而是唯一与论证相关的那一个(pi 2026-09-21 给代码证据,我复核成立)**:
|
||||
> **SSE 投递与 catchup 投递写的是同一个 `deliveredMails`。** pi 侧实测两处写入点:
|
||||
>
|
||||
> ```
|
||||
> index.mjs:272 deliveredMails.add(ev.mail_id); // catchUp 循环内(B-7.6 逐封再查)
|
||||
> index.mjs:414 deliveredMails.add(id); // handleSSEEvent 的 new_mail 分支
|
||||
> ```
|
||||
>
|
||||
> (`:414` 我核了上下文 —— 它确实在 `function handleSSEEvent(type, data)` 里、
|
||||
> `if (type !== 'new_mail') return;` 之后、且紧接 `deliveredMails.has(id)` 的去重判据。)
|
||||
> ⇒ **SSE 那一轮已经把 id 记进集合了**,所以"前一轮是 SSE"**不能**证明集合被清空过 ——
|
||||
> 那一轮本来就是**正常投递**。只有"**前一轮也是 catchup**"才说明"重启后整批重来"。
|
||||
> **口径 A 会把"正常首投"当成"重来",于是把 3 例 SSE 误算成复发。**
|
||||
> **B-7.7 要的落盘账本治的是"复发原因"那一半;快照失效是另一半,账本治不了它。**
|
||||
> (账本能挡住"整封重投",但同一批里"取件后、投递前被读掉"仍会发生 ——
|
||||
> 除非把去重判据从"投过没有"扩展到"投的这一刻还算不算未读"。)
|
||||
>
|
||||
> ⚠️ **另记一条同族的口径混淆(pi 2026-09-21 那封里的两个数,我在复核时量出来的)**:
|
||||
> 它写"dsh 侧被重投的 **18 封**",紧接着给分布 `{04:11, 09:4, 11:2, 12:5, 18:2, 23:2}` ——
|
||||
> **那个分布求和是 26,不是 18。** 我按同一棵会话日志重量,两个数**各自都对**:
|
||||
>
|
||||
> | 口径 | 定义 | 值 | 小时分布 |
|
||||
> |---|---|---|---|
|
||||
> | 重投**次数** | `Σ(每封投递次数 − 1)` | **26** | `{04:11,09:4,11:2,12:5,18:2,23:2}` ← 与 pi 的分布逐字相同 |
|
||||
> | 被重投的**邮件数** | 投递 ≥2 次的邮件封数 | **18** | `{04:8,09:3,12:3,18:2,23:2}` |
|
||||
>
|
||||
> ⇒ 它把**口径①的分布**和**口径②的总数**放进了一句话 ⇒ 18 与 26 打架。
|
||||
> **这又是"同一字符串 ≠ 同一个角色",只不过这次的'角色'是计数单位。**
|
||||
> **凡给出分布,就必须让分布自己求和等于标题里的那个总数** ——
|
||||
> 这是一条免费的算术自洽检查(与本仓"总数守恒"那条同族),
|
||||
> **它抓到过我一次(`22/1`),又抓到 pi 一次(`18` vs `26`)。**
|
||||
>
|
||||
> ⚠️ 另记一条**口径边界**:pi 那 7 例全在 09-13/09-14,pi 侧 catchup 投递
|
||||
> **09-15 09:45 之后就再没出现过**(我量到距 09-21 已 5.9 天),
|
||||
> 且 pi 侧的轮次时刻分布在 07/09/10/15/16/17/19/20/22/23 点 —— **不在 04:00**。
|
||||
|
||||
Reference in New Issue
Block a user