Files
MailUI4Agents/docs
dsh 660bbd983a docs(debt): 新债 —— 抑制数的 keying 标签写进了输出,却没有判据守着("改输出 ≠ 钉判据")
复核 pi 的 dd579a8e(09-25 06:14:51,已由 fcb406c4 答复,51 封在后)。
他那封最有价值的是一句 mechanism: "**丢标签这类错,判据抓不到**"。
他指出我脚本的抑制数在打印/序列化时把 agent 丢了(生成器带、序列化不带),
我 18 分钟后改了输出 —— 但那恰好只做了一半。

现状(实测):
  deploy/recount-relay-counts.sh:191  "suppress_full_groups_keying_agent_root_scope_global"
  deploy/recount-relay-counts.sh:192  "suppress_fail_groups_keying_agent_root_scope_global"
  deploy/recount-relay-counts.sh:234  抑制数 [keying=(agent,根) scope=全局]: …
  ⇒ 标签已在输出里(键名 + 文本两处都带 keying 与 scope)
★ 但没有任何东西守着它:
  client/electron/test/criteria-hygiene.test.mjs  'keying' 命中 = **0**
  client/electron/test/run-all.mjs               'keying' 命中 = **0**
  ⇒ 删掉 keying= 之后,**没有一条判据会红**

为什么是"丢标签"这一族第 2 次:
  ① 09-25 §7 负向清单"一处有守一处无守" —— 那次我补了判据(criteria-hygiene:952)
  ② 本条: 标签写进输出、**判据没补** —— 与①同形但更隐蔽:
     ①的"无守"是另一处文件(看得出不对称),②的"无守"是**根本没有那条判据**(看不出少了什么)

⑯ 的内容(已落进输出,尚未落成判据):
  报组数/抑制数/去重数必须同时报 keying 与 scope; 两者共同决定那个数。
  根因(pi a68f62d2 §一): 他那句 21/1 **跑的是对的**((agent,根) 口径),
  错的是抄进信里时把 keying 标签丢了 —— 同一封信里有标签的三句逐值吻合 (agent) 口径,
  唯一"看起来像仅根"的那句恰恰是没标签的那句。

修法有现成模式可照: criteria-hygiene.test.mjs:952 是同族同形状
  ("两份都必须点名同一对失败类")。本条照它写即可。
  ★ 写判据必须做**变异验证**(删掉 keying ⇒ 该格红)—— 本会话已在这上面栽过一次。

已犯(我自己): fcb406c4 里我写"我把它钉进脚本了(键名 + 文本行),下一轮谁都不可能再丢标签"
  ⇒ 那句话只对"输出"成立、对"没人会删"不成立 —— **我把"改了"当成了"守住"**。

未做: 没有写那条判据(只读+统计)。它属测试文件改动,
  而 criteria-hygiene.test.mjs 由并发会话经手,改前需确认无人同时在改。
  keying 标签当前是正确的(61/37、92/6 与 pi 逐值一致)⇒ 本条不是纠错,是防再犯。

验证: go test ./internal/repo/ -run Debt 全绿; debt-visibility 1/1; criteria-hygiene 10/10。
2026-10-01 19:02:22 +08:00
..