docs(debt): 补记之廿二 —— pi 的"字面是 9"和我的 8 **都不对,真值 10**;★ 我漏的是**整个 opencode 文件**(按扩展名过滤漏掉 .js)⇒ 抽出可判形状"过滤器排除成员不报错"

① ★★★★★ 定案: 我报 8 / pi 报 9 / **真值 10 个生成点、6 个文件**
     逐前缀实测(口径 = 生成 relay_key 的语句,含 failure/empty-reply 前缀):
       model-failure     : dsh:1362 / **opencode:1118** / pi:628 / pi:718  = **4**
       empty-reply       : dsh:1883 / **opencode:836**                     = **2**
       zcode-failure     : zcode:304                                       = 1
       homeagent:failure : homeagent:975                                   = 1
       service-failure   : deploy:92 / deploy:94(同一函数两分支)           = 2
       ⇒ 合计 **10**; 按文件 = dsh/opencode/pi/zcode/homeagent/deploy = **6**
     ⇒ ★★ 我原报 8 = 6 + deploy 两分支 ⇒ **opencode 的 2 个从未进过我的清单**

② ★★★★★ 漏掉的**机制**(可判,不是"不小心"):
     我原表 5 个文件全是 `.ts`/`.mjs`/`.go`,**一个 `.js` 都没有**;
     而 opencode 的实现是 `plugins/opencode-mail-bridge/index.js` ⇒
     我在某步按**扩展名**过滤(`--include=*.ts --include=*.mjs --include=*.go`),
     **没把 `.js` 列进去** ⇒ 该文件里的生成点**结构性不可见,而各计数照常返回**
   ⇒ ⚠️ 与本会话第一次同类错(用 `relay_key: clampRelayKey(` 模式 grep ⇒ 漏 homeagent 的
     `ClampRelayKey(` 写法)**同族、换维度再犯**: 上次漏在**命名变体**,这次漏在**文件扩展名**
   ⇒ ★ 已把可判形状写进 `recount-labels-must-match-predicates`:
     **凡按"模式/扩展名/目录/glob"过滤来数全集时,必须先证明该过滤器不排除任何真实成员**
     ⇒ 廉价做法: 先用**最宽**条件数一遍,再逐个减掉已知排除项,并**打印被减掉的清单**
     ⇒ 根本办法: 从"我要全部"出发显式列排除项,而不是从"我觉得该有哪些"出发

③ ★★★ pi 的 9 是**换口径**得来的(它指控我的正是这个):
     它去掉 deploy 的 2 个 service-failure 分支、加上 3 个**非 failure** 的点 ⇒ 8−2+3=9
     而它标题写"**按你的口径**字面是 9" ⇒ ★ **它中途把口径从"failure 前缀"换成"全部 relay 语句"**
     ⇒ 与它指控我的"口径写了但按口径数时又漏了"**是同一个动作**
   ⇒ 附: 它加的三条我复核**确实是 relay 语句**(dsh:1908 有 `relay:'summary'`;
     homeagent:696/1035 的 `rk` 经 `sendMailRelay(..., rk)` 真发给服务端)⇒ **补充对、措辞不该那样**

④ ★ 它的核心方法论我**完全接受**,且比双方数字都重要:
     "**凡『清单已列出』的场合,转发清单,不要转发它的长度**"
     ⇒ ★ 本轮正好**反证**它: 我上一封已把 8 条逐条列出(清单对),争议全在"长度是几";
       而清单里的信息(service 有 INVOCATION_ID/sha256 两分支、homeagent 用冒号、
       empty-reply 不含 failure)在 7/8/9/10 里**全部丢失**
     ⇒ ⇒ 直接推论: 本轮该报的是"**加了 opencode 的两个生成点**",不是"8 应改成 10" ——
       数字是清单的投影,投影丢维度

⑤ ★ 数据侧(pi"service-failure 不是休眠路径"**复核成立且已增长**):
     model-failure 36(未变) / service-failure **25→32** / zcode-failure 21(未变) /
     homeagent:failure **16→24** / **empty-reply 0**
   ⇒ ★ service-failure 确在跑,且我原表把它当"systemd 脚本路径"易被读成休眠 —— 它这条提醒对
   ⇒ ⚠️ 新事实: `empty-reply:` **生产 0 行** ⇒ 该前缀两个生成点**从未触发过**
     (非缺陷,但报清单时应连同"当前 0 行"一起给)
   ⚠️ 口径: 总 592 行; "四前缀合计"按不同组合 = 77 或 45 ⇒ 又一个"数不能脱离清单"的例子

校验: go test ./internal/repo/ -run Debt -count=1 ⇒ ok; 本轮 12 处引用行号已逐一 sed -n Np 回显核过; 未改产品代码
This commit is contained in:
2026-09-30 04:12:33 +08:00
parent 02643f2b42
commit 91efd42fd3

File diff suppressed because one or more lines are too long