补: 归因要用**不相交的结构条件**,不是两个计数相减(pi 提出,我复核成立)

我这轮在"同一组数、不同口径/不同时刻"上打转**三次**(113/116、82/85、105),
三次的解法其实是同一条 —— pi 把它写成了判据形式,我复核并落地:

## 一、两条过滤器各自滤掉哪个集合,且两集合不相交

| 集合 | 定义(**纯结构**) |
|---|---|
| **J** | 会话 `archived` ∧ 有孩子 —— 只可能被 `join` 滤掉 |
| **M** | 会话**非** `archived` ∧ 孩子**全是**机器模板 —— 只可能被"排机器"滤掉 |

    J ∩ M = 0                          ← **定义**带来的(互斥),不是测出来的巧合
    J 里"孩子全是机器模板"的 = 0 / 31     ⇒ 排机器对 J 零效果
    M 里"会话非 archived"的  = 9 / 9      ⇒ join 对 M 永远不动

⇒ 归因干净可证:**dsh 那一列的差全部来自 `join`**(dsh 那些邮件孩子全是真回信)。

★ **为什么这比"数四个格"硬**:`J ∩ M = ∅` **不受漂移影响**,而 31/9/112 每分钟在动。
⇒ **判据从"数是多少"改成"集合怎么定义"。**

## 二、口径要在量词上写准

第二条量的是"**孩子全是**机器模板",**不是**"有机器孩子"——
**并存**(既有真回信又有机器通知)那一类,`EXISTS(… NOT LIKE …)` 仍命中 ⇒ **滤不掉它**。
⇒ **"有机器孩子"与"全是机器孩子"是两个集合**(同族:同一字符串 ≠ 同一个角色,这次差别在量词)。
(该并存类在本 `unread` 基集里当前 0 封;早前提的 2 封是 `status='read'`,不在基集内。)

## 三、免费的算术交叉验证

**一次计算内**(无跨调用漂移)验证恒等式:
`基集 − |J| − |M|` 必须 = 直接算的 (join=是, 排机器=是) 格。
实测 `114−31−9 = 74 = 74`;几分钟后再量 `115−31−9 = 75 = 75` ——
**左式三个数都变了、等式仍成立** ⇒ 这是"钉关系不钉数"的最好例证。
This commit is contained in:
2026-09-21 07:15:55 +08:00
parent dbdef99b27
commit 9c2f11b654

View File

@ -643,6 +643,46 @@ curl -X POST {host}/api/v1/mail/read -H "Authorization: Bearer $AGENT_KEY"
⚠️ 另:连 82/85 那一格本身也在动(**现在 81**,`to=dsh` 那 8 封现只剩 2 ⇒ pi 报的 4、我报的 8 都过期了)。
⇒ **在这组数上唯一站得住的做法:只比较"同一时刻、同一口径"的两个数,
跨口径比较必须先并排重算,绝不引用记忆里的读数。**
★★ **但"数四个格再相减"本身就是错的解法 —— 换成结构判据(pi 提出,我复核成立):**
归因不该靠**两个计数相减**(那要求双方在同一刻测同一个库),
而该靠**两个过滤器各自滤掉哪个集合、且这两个集合不相交**:
| 集合 | 定义(**纯结构,不含任何计数**) |
|---|---|
| **J** | 会话 `archived` ∧ 有孩子 —— 只可能被 `join` 滤掉 |
| **M** | 会话**非** `archived` ∧ 孩子**全是**机器模板 —— 只可能被"排机器"滤掉 |
三条**决定性**读数(同一刻量,但结论**不依赖**这一刻):
```
J ∩ M = 0 ← 定义带来的(J 要 archived、M 要非 archived,互斥)
J 里"孩子**全是**机器模板"的 = 0 / 31 ⇒ 排机器对 J **零效果**
M 里"会话非 archived"的 = 9 / 9 ⇒ join 对 M **永远不动**
```
⚠️ **口径要写准**:第二条量的是"**孩子全是机器模板**"(即"一个真回信都没有"),
**不是**"有机器孩子"。差别是**并存**那一类:
一封**既有真回信又有机器通知**的信,`EXISTS(… NOT LIKE …)` **仍然命中** ⇒ **排机器滤不掉它**。
⇒ 只有"**全是**机器模板"才落进 M。**"有机器孩子"与"全是机器孩子"是两个集合** ——
这正是我们反复撞的"同一字符串 ≠ 同一个角色",只不过这次差在**量词**上。
(本基集里"并存"那一类**当前是 0 封**;上面提过的 2 封并存样例是 `status='read'`,
不落在这个 `unread` 基集内 —— **差别是语义上的,不是计数上的**。)
⇒ 归因**干净且可证**:**J 那一半的差只可能来自 `join`;M 那一半只可能来自"排机器"。**
⇒ **`dsh` 那一列的差全部来自 `join`** —— dsh 那些邮件的孩子**全是真回信**
(J 里 `to=dsh` 的 29 封,机器孩子数 0),排机器过滤器**一个都没动手**。
⇒ **为什么这条更硬**:`J ∩ M = ∅` 是**定义**带来的、**不是测出来的巧合** ⇒
**不受漂移影响**;而 `31`/`9`/`112` 每分钟都在动。
⇒ **判据要从"数是多少"改成"集合怎么定义"。**
(我们这轮在"同一组数、不同口径/不同时刻"上打转三次,**三次的解法都是这一条**。)
★ 另做了**恒等式交叉验证**(**一次计算内**,无跨调用漂移):
`基集 − |J| − |M|` 必须等于直接算出的 (join=是, 排机器=是) 格。
实测该等式**成立**(某一刻 `114−31−9=74=74`;几分钟后再量 `115−31−9=75=75`)
—— **注意左式三个数都变了、等式仍成立**,这就是"钉关系不钉数"的最好例证。
—— **又一条免费的算术自洽检查**(与"总数守恒"同族)。
⇒ **只落回填不动部署,重投不会停**:回填清的是 (b),而把这些信持续留成"未读"的是 (a)
(`read_mail` 本就不标已读 ⇒ 契约缺口、不是可修的 bug;其语义已写进
`docs/PLUGIN-CONTRACT.md` 的 T-12 条目)。