Skip to content

[R2-10][持久化] 恢复会话配置、窗口与工作区并处理迁移损坏 #33

Closed

Description

@JavaZeroo

当前正式路线(2026-10-28)

用户已确认自主 C++ 终端核心+当前 Qt Widgets GUI+随包固定微软 ConPTY,依据见 ADR-0008。第一批整合由 #115 / PR #116承接。

已关闭的配置格式、迁移/损坏保护及旧工作区恢复结果保留。可复用业务与持久化逻辑,但 Qt 客户端的集成/重启恢复须另验;当前 #115 不声明已迁移工作区恢复。

以下原合同与固定检查点保留各自来源;路线确认不替代实现、完整R2或性能验收。

用户结果

重启 TermForge 后可按明确范围恢复本地会话配置、窗口、标题、比例、缩放和工作区,而不是只恢复少量布局值。

工作范围

  • 定义保存/不保存的数据、保存时机和隐私边界;明确“重新启动进程”与“恢复原进程”的区别。
  • 持久化本地会话定义、窗口/工作区、标题、比例、缩放和启动会话集,延续原子替换与版本化格式。
  • 覆盖旧版本迁移、未知字段、截断/损坏、写入失败和回退,确保测试配置与个人配置隔离。

验收

  • 新进程实际恢复合同中的配置与布局,并启动正确类型/目录/参数的新会话。
  • 原子替换、版本迁移、损坏回退和写入失败测试通过,不泄露个人路径或秘密到公开证据。
  • 文档与 FEATURES 精确列出恢复范围;R1 默认启动和既有布局兼容回归通过。

父项:#7。真实前置:#32。

Activity

  1. added
    enhancementNew feature or request
    blocked有明确未完成前置;见原生 blocked-by
    on Oct 24, 2026
  2. added
    ready-for-agent范围明确且真实阻塞已解除,可开始实施
    and removed
    blocked有明确未完成前置;见原生 blocked-by
    on Oct 24, 2026
  3. JavaZeroo commented on Oct 25, 2026

    @JavaZeroo
    OwnerAuthor

    已推送 c284c86 的独立配置模型切片(尚未完成产品恢复)。\n\n- Windows/Ubuntu 均验证有界 v2 往返、Unicode 标题/路径、v1 迁移、空会话、损坏/未知版本分类、所有截断前缀、非法 UTF 与原子写入失败保留。\n- 默认完整 CTest 为 39/40;候选完整 CTest 为 37/42,新增 workspace_state 在两者均通过。其余失败归 #29/#36/#38 等既有问题,不算该模型通过。\n- 证据:validation.json。\n\n仍待完成:将白名单 ShellLaunch 描述符和快照接入 Workspace,实际重启创建正确类型/目录/参数的新进程并验证窗口/焦点/分屏/缩放。未知版本禁止覆盖属于该整合切片。因此本 issue 保持 OPEN。

  4. JavaZeroo commented on Oct 25, 2026

    @JavaZeroo
    OwnerAuthor

    后续已推送 36d695a:固定 cmd / PowerShell 5.1 / PowerShell 7 / WSL 工厂的可恢复描述符与精确往返,只保留类型、必要 distribution 和工作目录。自定义 executable/arguments/prefix、非法 kind/缺失 WSL 参数及目录引号注入均拒绝。\n\nshell_launch、layout_state、workspace_state 为3/3通过。此提交仍不声称产品恢复完成;下一步接入 Workspace 快照和真实双进程场景,issue 保持 OPEN。

  5. JavaZeroo commented on Oct 25, 2026

    @JavaZeroo
    OwnerAuthor

    已推送 1f82a2d834c30a69a4990d0f8e1154c932b62ab1 的单会话恢复切片。\n\n- 原 ui-edit/ui-restore 两轮和 ui-main 两轮通过;Windows/Ubuntu 配置模型通过,聚焦 CTest 为3/3。\n- 真实新 cmd 恢复 Unicode 标题、默认窗口/布局;白名单描述符进入 Tab,启动恢复抑制写入,关闭先保存最终快照再回收。v1 入口已改为严格 v2 读取,不再把解析失败误判为通过。\n- 证据:validation.json。\n\n仍未完成:多类型会话/显式目录/split/非默认 zoom 和窗口的真实恢复、真实 v1/空配置/损坏/写失败与最终关闭失败验收。主区通过不抵消 #38 的其他失败。本 issue 保持 OPEN。

  6. JavaZeroo commented on Oct 25, 2026

    @JavaZeroo
    OwnerAuthor

    已推送 8bfc41e3c8cf15ae4b01aa6691eaea41359756d1 的多会话恢复切片。\n\n- 两轮真实双进程验证通过:cmd、PowerShell(实际主版本5)、独立目录、Unicode 标题、100%/150%/75% zoom、split 成员/底部焦点和非默认窗口/布局。实际尺寸、HWND/网格及恢复前后配置逐字段一致,旧输出不注入新屏幕。\n- 修复模型将右焦点错误等同于 main_active == split_index 的约束;可见 split 现要求两个成员不同,并允许底部焦点。\n- 原有 restore/main/split 各两轮通过;默认聚焦3/3、候选 Vim/模型聚焦2/2、Ubuntu 模型通过。仅新 data-only 场景不生成位图。\n- 证据:validation.json。\n\n真实 v1/空配置/损坏/未知版本/写失败及最终关闭失败仍待验收;完整 CTest 的既有 #29/#36/#38 不因此关闭,#33 保持 OPEN。

  7. JavaZeroo commented on Oct 25, 2026

    @JavaZeroo
    OwnerAuthor

    已推送 71a32893bb0135d6f0325ec9f0b6c70432831e5d 的迁移与回退切片。\n\n- 两轮真实验证:v1 启动不立即改写,提交后完整迁移 v2;删除最后会话后保存有效空配置,重启不再生成默认 cmd;损坏 v2 整体默认回退;v3 在保存尝试和关闭后保持原文。\n- 修正删除最后会话后的焦点,新增 data-only 场景及独立 Python 配置检查。真实 v1/空/损坏/未来版本的进程均回收,未读取个人配置。\n- 完整默认 CTest 为39/40;normal/resize 属 #36,另有一次多会话标记等待间歇超时。重跑 shell 多会话两轮通过,但未宣称该间歇问题已根治。候选聚焦2/2、Ubuntu模型通过。\n- 证据:validation.json。\n\n写入失败/成功重试及最终关闭失败仍待验收,#33 保持 OPEN。

  8. JavaZeroo commented on Oct 25, 2026

    @JavaZeroo
    OwnerAuthor

    限定验收已完成并推送 2b623108cf993300947d898847cdeecc164ae95c。\n\n- 多类型真实新进程恢复目录/标题/zoom/split/窗口;v1 延迟迁移、有效空会话、损坏回退、未知版本保护均有独立验证。\n- 真实原子写入失败保留原文,成功重试清除错误;最终关闭失败保留窗口和会话,显式 Ctrl+Shift+W 放弃保存才退出,未把放弃保存写成已保存。\n- R1 默认启动和布局回归、7项 Workspace 场景、候选聚焦和菜单负例通过;完整默认 CTest 为39/40,剩余 normal/resize 归 #36。证据:validation.json。\n\n本 issue 只关闭上述明确范围。多会话间歇标记等待仍由 #38 跟踪,#29/#31/#35、#7 和 R2 路标均未关闭。

  9. removed
    ready-for-agent范围明确且真实阻塞已解除,可开始实施
    on Oct 26, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions