docs(debt): 登记「平台镜像的替换域过宽」—— agent 级整表替换 vs per-project 上报者
现象(实测,可复现):
agent_platform_sessions 在 10 个状态间轮换,每次差的恒为一个 project 的会话数
(/tmp=49 /root=38 am-mcp-probe=23 agentmail=37 TrueAgent=100 llmsproxy=18
facemodule=7 Liquid=7 NextAgent=2 空),同状态内 reported_at span = 0.0ms
⇒ 每次都是**整表替换**,而每个上报者只知道一个 directory
⇒ 后一个把前一个的清单整体擦掉
危害(口径已修正):
候选 = 来源1(本侧 sessions, 实测 6) + 来源2(该镜像, 实测 37)
镜像被擦时该 workspace 的候选 ~43 → ~6(掉 37 条),**不是归零**
(先前写 37→0 是漏了来源1)
★ 为什么记的是「到期前提」而不是「修法」:
它是**带顺序约束**的: 若只给 DELETE 加 workspace 而 PK 不动,则
「同一 platform_id 出现在两个 workspace」⇒ UNIQUE constraint failed (1555)
⇒ INSERT 无 ON CONFLICT(grep=0) + defer Rollback ⇒ **整个 DELETE 回滚**
⇒ agents.go:186 降级 -1、桥不读该字段(grep=0) ⇒ 三重静默
⇒ 从「间歇擦除」变成「永不自愈的静默停滞」(更难查)
故到期前提写死为: **先 PK 加 workspace,再 DELETE 加 workspace**
三个已被推翻的根因(留作反面材料,见 note):
① 「读域 vs 擦除域,且 [] 是 truthy」——非主因(80% 是非空替换)
② 「擦除在语义上不必要」——错,整表替换有意且有 TestReplacePlatformSessionsIsFullReplace
③ 「今天不撞靠 session.id 全局唯一」——因给错了,实测同 id 换 workspace 也不撞,
真正原因是「全量 DELETE + seen 去重」两处代码结构
校验: go test ./internal/repo/ -run Debt ⇒ PASS(余额 27,新条已计入)
This commit is contained in:
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user