fix(deploy): recount 脚本的两个标签**漏写了 mail_id is not null** —— 标签与它打印的数不是同一个谓词
## 这个错的形状(本脚本最不该有的一类) ``` 行210 标签: 类: kind<>'failure'(空真)=557;真判据(permission OR key NOT LIKE %failure%) = 459 行80 NAIVE: ... where mail_id is not null and kind<>'failure' 行81 REAL : ... where mail_id is not null and (kind='permission' or relay_key not like '%failure%') ⇒ 标签**省掉了 `mail_id is not null`** ⇒ 按标签字面算得 **558 / 460**,脚本却打 **557 / 459** (差的正是那 1 行未绑定 —— 两个标签口径都收它,而两个变量都不收) ★ 本脚本存在的全部理由就是"把口径写下来"(见文件头「口径声明」节), 而标签省掉限定符 ⇒ 读的人拿这个数去对话里对账**必然对不上** ⇒ 已实际发生过一轮。 ``` ## 实测证据: 同一个数字 459 在两天指称不同集合 ``` 09-25 讨论: 459 = **loose**(pi 82c0f5a9: 349+69+25+15=458 已绑定 + 1 未绑定 = 459) 09-26 脚本: 459 = **bound**(REAL 带 mail_id is not null) ⇒ 各 +1(09-25 09:26 新增一行真实投递 723493b7)后**恰好撞上同一个数** ⇒ 所以"脚本打 459"与"讨论里说 459"看起来一致,实为两个集合 ⇒ 是对账分叉的温床 ``` ## 修法(含一处我自己先写错又改回的地方) ``` ① 标签写进限定符: `已绑定 ∧ kind<>'failure'` / `已绑定 ∧ 真判据(...)` ② **同时打印 loose 口径**(新查两个变量 NAIVE_LOOSE / REAL_LOOSE), 让"这个数是 bound、那个是 loose"在**输出里看得见**,不靠读源码才知道 ★ 我第一版图省事写成 `loose = bound + 占位` —— **撤回**: 那等式只在"占位行恰好都满足该谓词" 时成立(今天占位行 kind='permission' 所以成立),而那是**当下数据的性质、不是不变量**; 占位行将来若是 failure 形状,`+占位` 就会算错。本文件 24-27 行记的正是这一类错 ("把瞬时量当断言")⇒ 改为各查一次,不搞代数捷径。 ``` ## 边界与验证 ``` · 输出改动仅两处(标签 + 新增一行说明); rc 修前=1、修后=1(既有 FAIL 来自"占位行年龄",非本次引入) · 标签字面现可复现: 已绑定∧空真=557、已绑定∧真判据=459、loose∧空真=558、loose∧真判据=460 ✓ · bash -n 通过; **未改任何断言/阈值/判据语义** —— 只修"标签与数不一致" ```
This commit is contained in:
@ -79,6 +79,12 @@ KFAIL=$(q "select count(*) from relayed_mails where kind='failure';")
|
||||
KIND_BAD=$(q "select count(*) from relayed_mails where kind not in ('permission','summary');")
|
||||
NAIVE=$(q "select count(*) from relayed_mails where mail_id is not null and kind<>'failure';")
|
||||
REAL=$(q "select count(*) from relayed_mails where mail_id is not null and (kind='permission' or relay_key not like '%failure%');")
|
||||
# ★ 2026-09-26: 这两个是上面两条的 **loose 口径**(去掉 `mail_id is not null`)。
|
||||
# 为什么要单独查: 会话里对账时用的"459"/"557"是 loose,而上面两条是 bound ——
|
||||
# 同一个数字在两天里指称不同集合(09-25 的 loose 459 与 09-26 的 bound 459 是巧合撞上)。
|
||||
# 把两个口径**同时打进输出**,这一类"数字撞车"才在默认路径上看得见。
|
||||
NAIVE_LOOSE=$(q "select count(*) from relayed_mails where kind<>'failure';")
|
||||
REAL_LOOSE=$(q "select count(*) from relayed_mails where kind='permission' or relay_key not like '%failure%';")
|
||||
SUBSTR_N=$(q "select count(*) from relayed_mails where mail_id is not null and relay_key like '%failure%';")
|
||||
PREFIX_N=$(q "select count(*) from relayed_mails where mail_id is not null and (relay_key like 'model-failure%' or relay_key like 'service-failure%' or relay_key like 'zcode-failure%');")
|
||||
HOMEAGENT=$(q "select count(*) from relayed_mails where mail_id is not null and relay_key like 'homeagent:failure:%';")
|
||||
@ -207,8 +213,21 @@ printf ' ── 当下读数 ──\n'
|
||||
printf ' total=%s 已绑定=%s 占位=%s\n' "$TOTAL" "$BOUND" "$PLACE"
|
||||
printf ' distinct kind = [%s];kind 非 permission/summary = %s;kind="failure" = %s\n' \
|
||||
"$KINDS" "$KIND_BAD" "$KFAIL"
|
||||
printf ' 类: kind<>'"'"'failure'"'"'(**空真**)=%s;真判据(permission OR key NOT LIKE %%failure%%) = %s\n' \
|
||||
# ★★ 2026-09-26 修: 下面两个标签原先**省掉了 `mail_id is not null`**,于是标签与它打印的
|
||||
# 数不是同一个谓词 —— 按标签字面算得 558/460,脚本却打 557/459(差的就是那 1 行未绑定)。
|
||||
# 这是本脚本**最不该有的**一类错: 它存在的全部理由就是"把口径写下来",
|
||||
# 而标签省掉限定符 ⇒ 读的人拿这个数去对话里对账,**必然对不上**(实测已发生过一轮)。
|
||||
# ⇒ 现在把限定符写进标签本身(`已绑定 ∧ …`),并**顺带打印去掉限定的那个口径**,
|
||||
# 让"这个数是 bound 口径、那个是 loose 口径"在输出里**看得见**,
|
||||
# 而不是靠读脚本源码才知道。
|
||||
# ⚠️ loose 值**必须各查一次**,不能写 `bound + 占位` —— 那等式只在"占位行恰好都满足该谓词"
|
||||
# 时成立(占位行今天 kind='permission' 所以两条都成立,但那是**当下数据的性质**,
|
||||
# 不是不变量;占位行将来若是 failure 形状,`+占位` 就会算错)。本文件第 24-27 行
|
||||
# 记的正是"把当下性质当不变量"这一类错。
|
||||
printf ' 类: 已绑定 ∧ kind<>'"'"'failure'"'"'(**空真**)=%s;已绑定 ∧ 真判据(permission OR key NOT LIKE %%failure%%) = %s\n' \
|
||||
"$NAIVE" "$REAL"
|
||||
printf ' ★ 上面两数都是**已绑定**口径;**去掉该限定**则分别为 %s / %s(差 %s = 那批占位行里满足该谓词者)\n' \
|
||||
"$NAIVE_LOOSE" "$REAL_LOOSE" "$((REAL_LOOSE - REAL))"
|
||||
printf ' failure 边界: %%failure%% 子串=%s;三前缀(无 homeagent)=%s;homeagent:failure: =%s(差 %s)\n' \
|
||||
"$SUBSTR_N" "$PREFIX_N" "$HOMEAGENT" "$((SUBSTR_N - PREFIX_N))"
|
||||
printf ' 测试残留=%s(其中未绑定=%s)\n' "$RESIDUE" "$RESIDUE_UNBOUND"
|
||||
|
||||
Reference in New Issue
Block a user