docs(debt): 补记之十五 —— 修法形状**定稿**:必改点三处→**四处**,③ 的键必须是**三键**(我补了 pi 没列的场景,结论反转)
① ★★ pi 场景C 复现成立: 同 agent + 同 platform_id + 两个 workspace(改完 PK 的未来态)
① 只按 **agent** ⇒ **2 行** ⇒ QueryRow 仍取第一行 ⇒ 照"按 agent"改会**踩新歧义** ✓
② ★★★★ 我构造了 pi 没列的**场景D**(**两个 agent 共用同一 workspace**),结论反转:
② 只按 **workspace** ⇒ ★ **2 行** ⇒ **也不够**
③ agent + workspace 两把 ⇒ **1 行** ✓
⇒ ★★ 场景D **不是假想**: 生产 `sessions` 里现成就有 ——
`ba9c194b` from_agent=[pi] ws=/home/program/agentmail
`9742de96` from_agent=[dsh] ws=/home/program/agentmail ★ 同一 workspace、两个 agent
⇒ ⇒ **三键 (platform_id, agent_name, workspace) 是唯一在 A/B/C/D 全场景恒为 1 行的键** ✓
pi 的结论(两把一起)**成立且是必需的**; 我补的是"为什么不能只留一把"
③ ★★ `sessions.workspace` 口径要写全: pi 的「9/9 非空」✓ 成立,但那是
**有 platform_id 的 9 行**这个子集; 全表是 **51/79**(那 28 条空的**全都没有 platform_id**)
⇒ 对**要改的那条 JOIN** 而言 workspace **总是可用** ✓,且**不需新加数据/迁移** ✓
⇒ ★ 教训: 同一句"非空率"不写**分母**时 9/9 与 51/79 都能自称"非空"
⇒ 报比例**必须带分母定义**(与 ⑫′ 同源)
④ ★★ 补验上一版标的 unknown: 有 platform_id 的 9 行 `from_agent` **9/9 非空** ✓
(与 workspace 同为"有 platform_id ⇒ 必非空")⇒ ③ 的两个键**都有数据支撑**,不需新增列
⑤ ⇒ ★★★★★ **必改点定稿(四处,必须同批)**:
① PK → `(agent_name, workspace, platform_id)`
② DELETE(`:63`) 按 workspace 限定
③ JOIN(`:473-474`) **三键**: `ON aps.platform_id = s.platform_id
AND aps.agent_name = s.from_agent AND aps.workspace = s.workspace`
④ 迁移重建表(`BeginTx` 内 DROP+RENAME+**RENAME 后**重建 `idx_platform_sessions_ws`)
⇒ ⚠️ ③ **必须**与 ① 同批: 单独改 ① 会把 ③ 的歧义**放大**(场景C 实测)
⇒ 顺带记: `pid=mail-xxxx` 那类 platform_id 与 workspace 1:1 的行看着够用,但**不能依赖**(上两行即反例)
校验: go test ./internal/repo/ -run Debt -count=1 ⇒ ok; /tmp/sc 已清; 未改产品代码
This commit is contained in:
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user