docs(debt): 补记之八 —— 活库当场量到该缺陷(26 目录轮流上场/25% 读到 0),并收窄 pi 的探测器
① ★★★ 首次**当场量到**(此前都是复现/推断):
opencode 镜像任一瞬间只持有 1 个目录(瞬时含多 ws 的样本 = 0/200),
而它自己库里有 **26** 个 directory ⇒ 轮流出场、每次心跳整批擦掉上一个
90×1s: 0 行 24/90;非空样本出现过 9 个不同目录;变化 27 次(→0 共 7 次、非空→非空 13 次)
200×0.3s: 0 行 25%;最长连续 0 段 17 样本 ≈ 5.1s
各目录占比 agentmail 36% / am-mcp-probe 22% / 其余 1~4% ⇒ 除最常出场者外大概率读到 0
对照: pi ws=63 rows=150、dsh ws=25 rows=77(单上报者 ⇒ 上报域==替换域 ⇒ 无损)
② 范围定稿(pi 结构层,我复核成立): 充要形状 = **上报域 ⊊ 替换域**
opencode 按 directory 实例化(index.js:1102-1103 / :1145-1147)而 AGENT_NAME 是单一常量(:49)
pi(worker.mjs:384-387)/dsh(index.ts:413)单上报者 ⇒ 上报域==替换域 ⇒ 无此病
⇒ (d) 适用范围写明"一个 agent 多个上报者";记已知风险"pi 若改成按目录实例化立刻得同一 bug"
③ ★★ 收窄 pi §六 的探测器: `len(list)==0 && before>0` 只覆盖两种形态之一
实测 27 次变化里 →0 仅 7 次、**非空→非空 13 次**(报 23 行的心跳也会擦掉 37 行那个目录,而它 len≠0)
⇒ 忠实于机制(域不匹配)的探测器应当**比域**: L=list 里的 ws 集合、T=表中该 agent 现有 ws 集合,
**T 中不在 L 里的 ws ⇒ 即将被销毁 ⇒ WARN(附行数)**
⇒ 同时覆盖 ① `[]`(L=∅)与 ② 换成另一个目录(L={B} ⇒ T 中 A 命中)
★ 差别: pi 版量"这次报了多少",比域版量"**谁即将没有**" —— 后者才是读侧真正感到的事
校验: go test ./internal/repo/ -run Debt -count=1 ⇒ ok
This commit is contained in:
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user