feat(session): 删除扁平 legacy store,init(appId) 必填 - #1344
Conversation
4280ad9 to
bc360a6
Compare
6bf84e2 to
a26249b
Compare
bc360a6 to
f9708d7
Compare
|
独立复核(相对 #1342 head a26249b 的 diff),并已 rebase 到 #1342 最新 head:唯一冲突是 结论:方向与设计 §5 A-8 一致,没有超范围;可合。 生产侧删得干净:跨进程读取面不依赖 复核里发现并已在 3a9b155 处理的:
复核后不改、留记录的:
描述里的数字已订正:实际是 35 个测试文件、99 处无参 验证(rebase + 修复后): |
f9708d7 to
6e24cb1
Compare
|
本机 dogfooding( |
e161e88 to
ee25027
Compare
扁平 store 早于 v2.16.1、生产零调用;从 A+B 拆出以免约 20 个测试文件的夹具改写淹没协议删除审查。 Co-authored-by: Cursor <cursoragent@cursor.com>
A-8 后写路径必须先 init(appId);CI 里 card-handler / worker-pool / VC 等仍走未初始化的内存夹具,并去掉扁平 store 播种。 Co-authored-by: Cursor <cursoragent@cursor.com>
- getSessionFresh 在未 init 的进程里(BOTMUX_WORKFLOW=1 的 worker)与 load() 一致返回 undefined,不再因 getDbPath 抛错;persistRow 的错误信息在未初始化时不再调用 getDbPath - init(appId) 拒绝空串 - readSessionRowFromDisk / runUnownedRowTxn / readSessionRowUnowned / applySessionCommandUnowned 的 larkAppId 收紧为必填,删除运行时兜底;缺 larkAppId 的判定只在调用方(cli / whiteboard)做,文案统一为 SESSION_ROW_MISSING_APP_ID - whiteboard 解绑对无 larkAppId 的行前置早退并带 reason - 模块头注释与 loadAllSessionsSnapshot 注释改为只认 SQLite、无胜出顺序;fs-policy 一处过时注释 - 测试:恢复「导入源损坏时不留空壳 .db」的断言(per-bot 形态);新增「磁盘上残留的扁平 sessions.db / sessions.json 被完全忽略」;删除与 :381 重复的中毒恢复用例;去掉依赖 readdir 顺序的重复 id 断言;session-resume 的 store appId 与行身份对齐
6e24cb1 to
27f24e5
Compare
摘要
docs/design/2026-08-12-session-restage-store-first.md§5 A-8:init(appId: string)必填,删除扁平sessions.db/sessions.json的 8 处支持点,以及 host / CLI / whiteboard 上「无larkAppId走扁平库」的分支。无larkAppId的行直接放弃(读不到、写不了、离线关闭报缺字段),不回落扁平 store。init(appId),并删掉依赖扁平 store 的用例(含writeLegacySessions、无 appId 写扁平库、从扁平sessions.json按 bot 过滤导入)。一次性导入 / 文件锁 / 中毒恢复仍保留(C-15)。影响面
session-store.ts(路径解析、listStoreRefs/listUnmigratedAppIds/loadAllSessionsSnapshot/readSessionRowFromDisk/runUnownedRowTxn)、session-command-host.ts(HostTarget.larkAppId必填)、cli.ts(hostTarget/abandonSessionAuthoritatively)、whiteboard-store.ts(无larkAppId直接 unresolved)、resolve-session-by-id.ts(不再认空 appId 为 unmigrated)。larkAppId,行为与 A+B 相同;缺larkAppId的行不再有离线关闭特例。grep -rnE "sessionStore\.init\(\s*\)" test | wc -l在本 PR 为 0(A+B 允许非 0)。测试
未
switch:here、未重启 live daemon。验证止于 build + 单测。复核跟进(2026-09-09)
init()(含 9 个原本未 init、需要补的文件);设计 §2.2 列的 8 处扁平支持点中 7 处在本 PR,第 8 处(loadFromFrozenJson的 legacy 分支)已随 feat(session): 收口跨进程会话库协议并补齐升级可见性 #1342 删除。readFrozenSnapshotForImport不再回落扁平sessions.json,中毒库恢复的快照佐证只认sessions-<appId>.json(实现未动,两条用例的播种文件名随之调整;该套件本机因 bun 版本钉死全量失败,依赖 CI 验证)。cli.ts里 cmdResume 等 6 处「行缺 larkAppId」分支在快照无条件补齐larkAppId后已不可达,不在本 PR 范围。