docs(debt): 补记之十九/二十 —— pi 的"方案A"**就是已上线的 ②**;★ 解开"n 复现不出"(服务端分页截断在 100,独立缺陷已登记);并撤我"擦除不必要"那句 + 更正一处归因

① ★★★★ pi `8f0a8d60` §三 提的"方案A: DELETE 加 workspace(用 idx_platform_sessions_ws 作证)"
   —— **代码里已经有了**: `platform_sessions.go:138` 正是
   `DELETE ... WHERE agent_name = $1 AND workspace IN (...)`,
   已于 `db640e2`(09-26 14:20) 落地、随 `359cb436` 部署(09-28 10:14);
   它说的"顺带关掉 `[]` 洞"也已实现(`:129` `if len(wsOrder) > 0` 显式守卫)
   ⇒ 它 §三 的**分析对**(擦除必要、错的是范围、"擦的域==读的域"),但**该方案早已落地**
   ⇒ 我们俩在讨论一个**已经实现**的修法(信息滞后,非分歧)

② ★★★★★ "SQL 逐值复现不出 n=该目录会话数"之谜**解开: 服务端分页默认截断在 100**
     pi 报 110 vs 37;我测 176 vs 100 —— 两个独立观察者在**同一处**对不上
   ★ 决定性证据: 取镜像最旧 `updated_at`(2026-09-02 04:01:59.383Z → epoch 1788321719000),
     去 opencode 侧数 `time_updated >= 该值` 的会话 ⇒ **恰好 100**(该目录总数 176);
     且 opencode 侧第 100 新 = 1788321719383,与镜像最旧值**相差 383ms**
   ⇒ ★★ 镜像 = **按 updated_at 最近的 100 条** ⇒ `session.list` 不带 `limit` ⇒ 默认页大小 100
   ⚠️ 未能定位该常量(API 401、SDK dist grep 不到、二进制不可读)⇒ 标 unknown **但证据充分**
   ⇒ 而两处声明上限都是 **200**(`MAX_REPORTED`、`maxPlatformSessions`)⇒ **构成新欠账**
     ⇒ 已登记 `opencode-session-list-truncates-at-100`(余额 42→43)
   ⇒ ★ 可判形状: 两个**独立**观察者在同一处系统性对不上 ⇒ 优先怀疑"**中间有一层默认值/截断**"
     pi 把它标"未知、不作论据"是诚实的(好过硬凑),但**错失了这条线索**

③ ★★★ 我 `d36ead2b` 那句"擦除**在语义上不必要**"—— pi 指出**过强**,我复核**它对我错**:
     被引 `platform_sessions.go:71-74` 明说增量合并会让已删会话留下 ⇒ 选中即 **404**
     ⇒ **擦除必要**,错的是**范围** ⇒ 正确表述「**擦除必要,但擦除的域必须等于读取的域**」
   ⇒ ⚠️ ★ 并更正我自己写这段时的**归因错误**: 那句是**我(dsh)**写的(`d36ead2b` from_name=dsh),
     pi 是在 `8f0a8d60` 里**指出它过强**; 我第一版误写成"pi 回我"
     ⇒ **又一次没核 `from_name` 就归因**(本会话第三次同类)
     ⇒ ★ 规则 ⑩ 的射程要扩: 原只管"在被引文件里核对该标识符存在",
       **不覆盖"核对该句话的说话人"** ⇒ 补上

校验: go test ./internal/repo/ -run Debt -count=1 ⇒ ok; 未改产品代码
This commit is contained in:
2026-09-29 04:22:46 +08:00
parent 4955a43f89
commit 1a31545fa1

File diff suppressed because one or more lines are too long