返回 DeepSeek-Reasonix
HISTORICAL_SESSION_MIGRATION_ON_DEMAND.zh-CN.md
根目录 / docs / HISTORICAL_SESSION_MIGRATION_ON_DEMAND.zh-CN.md
1 # 历史会话按需迁移
2
3 ## 范围
4
5 Desktop 启动不再转换所有旧版 transcript 或 canonical v4 目录。启动阶段
6 只恢复少量、非历史会话的生命周期保留记录。后台读取目录项、已发布的 head
7 索引和持久化账本,发布元数据快照;普通列表只查询该快照,不重放历史正文。
8 旧版 transcript 和 canonical v4 来源同时出现在侧栏和历史搜索中,用户打开
9 某一行时才准备内容,提交成功后由原有导航流程激活准确的目标会话。
10
11 重启恢复尚未准备的旧标签时,保留标题并显示“导入并打开”,不显示损坏提示,
12 也不自动启动转换或控制器。明确点击后进入侧栏、历史搜索共用的导航流程。
13 空的 canonical 探测目录不作为历史会话展示;损坏但仍有会话产物的来源继续保留,
14 供用户明确重试。
15
16 批量准备入口位于“设置 → 存储 → 历史数据”;回收站只管理归档和删除。
17
18 ## 所有权与生命周期
19
20 - 导入获取按源隔离的跨进程锁;canonical 源在完整复制和提交期间持有共享目录
21 所有权锁。
22 - 如果源正在被其他 CLI 或 runtime 使用,立即显示阻塞状态,不会排队等待
23 Desktop runtime rebuild 锁。
24 - 同一源的重复请求加入同一个带修订号的准备任务。交互请求和批量任务分别
25 持有需求;取消批次不会误伤仍被用户打开的会话。
26 - 批量导入按顺序执行,支持取消和继续。关闭时先等待队列 worker 退出,保留
27 当前项和剩余选择;重启后暂停,等待手动继续。取消保留 `prepared`、
28 `content_ready` 记录,下一次显式请求可以继续。
29 - 已有 `content_ready` 的操作校验持久化目标和生命周期边界后直接提交,不要求
30 旧来源仍存在或能够获得其所有权锁,也不会再次转换成第二个会话。
31 - 归档和删除状态具有最终权威性;目录重新扫描不会让会话复活。
32 - 标题和置顶覆盖项在搜索、排序前生效,迁移提交时转移到目标。
33 - 侧栏和历史共用准备入口;取消响应必须匹配导航意图、操作 ID 和修订号。
34 新分支准备期间切换页面,其完成结果不能抢回焦点。
35 - 来源更新以真实内容版本为准;用户明确导入后创建独立分支,保留原映射。
36
37 批量 worker 使用独占的跨进程租约;sidecar 的每次修改在写锁内读取最新值,
38 只更新所属字段并原子替换。队列写入检查修订号,不允许旧快照覆盖其他实例
39 的更新。展示属性写入不覆盖队列,也不覆盖其他来源的标题和置顶。
40
41 ## 兼容性
42
43 源文件保持不变。已有 source mapping、恢复记录、未知字段、展示信息和保留
44 产物都会保留。旧版按路径打开的入口仍是当前 DAG head 的别名;有效的 head
45 索引会把其他 head 暴露为独立的按需源,但列目录时不会重放事件日志。
46
47 | 数据 | 兼容行为 |
48 | --- | --- |
49 | 生命周期账本 | 不新增操作类型和阶段;目标 ID 与提交映射仍由原账本决定。 |
50 | v1 调度 sidecar | 可选 `queueRevision` 缺失时按零处理;已有队列以暂停状态载入;保留根对象和展示项的未知字段。 |
51 | 回退至尚无 sidecar 的版本 | 调度暂不可用;原始来源和已提交会话仍可读取。 |
52 | 与旧 sidecar 写入器同时运行 | 旧实现不遵守新 worker 租约和修订号;应先升级所有 Desktop 实例,避免混版本批量写入。 |
53
54 准备状态不进入模型提示或 transcript 消息。
55
56 ## 验证
57
58 已加入启动不迁移、跨进程冷导出争用、重复请求与取消、prepared/content_ready
59 恢复、归档/删除隔离,以及列表、重试、提交后打开和批量控制的真实浏览器交互测试。
60 新增回归覆盖全局/项目来源在占用时仍可发现、普通列表中的标题和置顶、迁移去重、
61 提交期间退出并重启、双实例 sidecar 写入、未知字段保留、来源无关恢复,以及
62 取消和分支完成的迟到导航响应。测试使用一次性夹具,不修改个人历史数据。
63
63 lines MARKDOWN