JianFeeeee
02643f2b42
docs(debt): 补记之廿一 —— pi 的"三种语义"分类对但②够不着;★ 文档(agents.go:40-41)说 [] **清空镜像** 而实现+测试是**什么都不删**(决定性探针实证);顺带查出死字段 heartbeatRequest.Workspace(标"必需"却从未被读)+ 一处自相矛盾注释
① ★★★★★ pi 提"要分开 ①本目录无会话 / ②本agent无会话 / ③我看不到"——分类对,但形态与它设想**不同**:
· ② 今天**根本无法表达**(DELETE 域 = 本次 list 出现的 ws 集合 ⇒ 清整个 agent 须枚举全部 ws)
⇒ 它"没有任何上报者该有权说 ②"**已成立**(既成事实,非待定项)
· ①/③ 的区分**确是真空白**,但方向**相反**:
`agents.go:40-41` 文档明说"**空数组 = 平台侧确实一条会话都没有(清空镜像)**"
而 `platform_sessions.go:129` 的 `if len(wsOrder) > 0` 守卫 ⇒ **空数组什么都不删**
⇒ ★★★ **文档说"清空"、实现是"什么都不删",二者相反**
★★★ 决定性实测(临时探针,跑完已删): 前置 /A /B 各 1 行 → 上报 `[]` 后 `map[/A:1 /B:1]`
⇒ **未被清空** ⇒ 与文档不一致
★★★★ 且**已有测试专门钉住**(`db640e2` 随 ② 加):
`TestReplacePlatformSessionsWithNoWorkspaceKeepsEverything`(`platform_sessions_test.go:449`)
断言"不带 workspace 时必须什么都不删" ⇒ **实现与自己的新测试一致、与心跳端点文档矛盾**
② ★★★★ 「必须先定的语义」据实测改写:
今天 `[]` 实际语义 = "本次上报没给我 workspace 信息 ⇒ 无从判断该清谁 ⇒ 什么都不动"
⇒ 安全侧(不误删),但代价是"**该目录会话全没了**"**永远无法表达**
⇒ 平台侧某目录会话全删后,镜像旧行**永不清除**(除 `DeleteAgent` 破坏性路径)
★ 现网陈旧行实测: opencode 100 行 + homeagent 49 行逐 id 回查 ⇒ **已消失 = 0**
⇒ 该空洞**未被观测到触发**
⇒ 建议(供人类裁): 心跳加**显式**"本次覆盖的 workspace 清单",把"覆盖了哪些目录"与
"这些目录里有几条会话"**分成两个字段** ⇒ `covered=[/w1], sessions=[]` 唯一表达
「/w1 确实空了」,且**不需**枚举整个 agent
③ ★★★★ 顺带两个独立发现:
· **死字段**: `heartbeatRequest.Workspace`(`agents.go:32`)注释写"**必需**",
但 `grep -rn "req\.Workspace" server/` ⇒ 心跳 handler **一次都没读**
(唯一命中的 `mail.go:823` 是**另一个** struct)
· **自相矛盾注释**: `:30` 称"pending_mails **按它[Workspace]算**",
而 `:179` 称"pending_mails 是**全局**未读数(跨工作区)" ⇒ 代码实际用全局
(`UnreadWorkspaces(ctx, agentName)`)⇒ `:30` 那句是**陈的**
⚠️ 边界: 我**未**核历史上是否读过 ⇒ 只标"当前未读",不标"从未读"
④ ★ pi 其余各条:
· "11/12 次候选=0 比你测的更重" ⇒ 与我今天实测(恒 100 行/ws=1)**不符**,但它观测(09-26)在
② 部署(09-28)**之前** ⇒ 不冲突、是不同前置条件 ⇒ 我只认领"**② 之前**的形态",不认领"更重"
· "频次极不均匀 ⇒ 危害由频率决定" ⇒ ★ **对且重要**(我此前只报"轮换"未量化频率)
· "am-mcp-probe 高频可能被我们自己的调试拉高" ⇒ ⚠️ **好的自我怀疑**,无历史快照 ⇒ 保持未知
· "project 表 13 行 / 10 个有会话" ⇒ ★ **实测完全吻合**(13 行;worktree 去重 11;有会话 10)
· "FullReplace 测试钉着整表替换是有意设计" ⇒ ★ **对**,已复核
⑤ ★ 我本轮 3 处引用失误(同一模式第 3 次,且都在"正在记录'要核行号'"的补记里)
· `agents.go:43-45` → 实为 **`:40-41`**
· 写"含会话的 project 数**见附表**"而**本轮没有附任何表** ⇒ 指涉凭空
· 写"worktree 去重 **12** 个" ⇒ 实为 **11**
⇒ 处置: (a) 行号/数字**只在当场回显/算过之后**才写进文档;
(b) **不写"见附表"**除非同一条内确有该表
⇒ 本轮 8 处引用已逐一 `sed -n Np | grep -c` 核过(`:43-45` 即由此发现)
校验: go test ./internal/repo/ -run Debt -count=1 ⇒ ok; 临时探针已删除; 未改产品代码
2026-09-29 04:35:20 +08:00
..
2026-09-28 11:14:17 +08:00
2026-09-28 08:46:02 +08:00
2026-09-27 04:11:38 +08:00
2026-09-26 07:44:33 +08:00
2026-09-29 04:35:20 +08:00
2026-09-25 07:47:13 +08:00
2026-09-19 12:47:32 +08:00
2026-09-14 16:11:00 +08:00
2026-09-15 11:17:23 +08:00
2026-09-24 10:10:32 +08:00
2026-09-15 11:21:00 +08:00
2026-09-13 06:16:59 +08:00
2026-09-08 19:16:35 +08:00
2026-09-08 19:16:35 +08:00
2026-09-14 23:50:35 +08:00
2026-09-21 07:04:04 +08:00