补: 第六件 —— 我把"读者未读集合"分母只按 to_name 取,代码是 to_name OR CCHas(cc_list)
复核 pi 那张"逐读者最老是否在 gap"的表时发现自己的口径欠账:
`ListInboxScoped` 的 `WHERE (m.to_name = $1 OR db.CCHas("m.cc_list", 1))`(`repo.go:599`)
⇒ **抄送方也在集合里**,我先前只用 `to_name` ⇒ 分母少算。
用代码原样谓词(`json_each` + `json_extract`)重量:
读者 我先前 to_name 代码口径 to|cc 最老那封变了?
dsh 14 16 否 f3aeae81
pi 113 114 否 19a9d489
zcode 15 15 否
homeagent 3 3 否
jianf 24 24 否
★ **承重结论不变**:五个读者"最老是谁、在不在 gap"全部不变 ⇒ 档③判断不受影响。
我漏的是**分母**,不是**排序**。
⇒ 纪律:**"集合有多大"与"谁在最前面"是两个问题**;
基数错可以让正确的排序看起来可疑,反之亦然。
⇒ 与"第五件(判据挂哪一列)"并列,是**第六件**:
第五件问"用哪个**列**判状态",第六件问"哪些**行**属于这个读者"。
This commit is contained in:
21
docs/API.md
21
docs/API.md
@ -605,6 +605,27 @@ curl -X POST {host}/api/v1/mail/read -H "Authorization: Bearer $AGENT_KEY"
|
||||
**档 ②③ 会随部署自动收敛**(部署后不再漏末位 ⇒ 下次列出即标上)。
|
||||
⇒ 我先前那句"缺口是流量不是库存"在这里**有了确定的机制**:①永久、②流动。
|
||||
|
||||
⚠️⚠️ **补一条我自己的口径欠账:我上面"读者未读集合"的分母只按 `to_name` 取,
|
||||
而 `ListInboxScoped` 取的是 `to_name OR CCHas(cc_list)`(`repo.go:599`)。**
|
||||
⇒ **抄送方也在集合里,我做那一列时漏了它。** 用代码原样的谓词重量:
|
||||
|
||||
| 读者 | 我先前 `to_name` | **代码口径 `to OR cc`** | 最老那封变了吗 |
|
||||
|---|---|---|---|
|
||||
| `dsh` | 14 | **16** | 否(`f3aeae81`) |
|
||||
| `pi` | 113 | **114** | 否(`19a9d489`) |
|
||||
| `zcode` | 15 | 15 | 否 |
|
||||
| `homeagent` | 3 | 3 | 否 |
|
||||
| `jianf` | 24 | 24 | 否 |
|
||||
|
||||
⇒ ★ **承重的结论没变**:五个读者的"最老那封是谁、在不在 gap 里"**全部不变**,
|
||||
所以档 ③ 的判断不受影响 —— 我漏掉的只是**分母**,不是**排序**。
|
||||
⇒ 但这条仍要记:**"数一个集合有多大"与"这个集合里谁在最前面"是两个问题**;
|
||||
前者我答错了(少算 1~2),后者我答对了。
|
||||
**一个错的基数可以让对的排序看起来可疑** —— 反过来也一样。
|
||||
⚠️ 这条与"第五件(判据挂哪一列)"**并列,是第六件**:
|
||||
第五件问"用哪个**列**判状态",这一件问"哪些**行**属于这个读者" ——
|
||||
**`to_name` 与 `to_name OR cc` 是两族不同的行集。**
|
||||
|
||||
- ★★ **回填 SQL 的覆盖面比"40 行"这个数小得多(2026-09-21 量到)**。
|
||||
现在商定的回填是:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user