修复管理工具窗口居中与会话删除残留 - #1806
Conversation
|
已按 #1619 的反馈基于 v1.2.45 重做为最小补丁,仅处理首次启动居中,不再修改窗口生命周期逻辑。当前 |
8f36b01 to
0742100
Compare
根因:普通删除流程只要任一正文数据库删除成功就会返回成功,但不会继续清理其他 SQLite 中的 local_thread_catalog 和 thread_timeline_ledger,导致正文及 rollout 已不存在时侧栏标题仍然保留。 修改内容: - 普通删除遍历正文库与 thread-reference 数据库,备份并删除相同 thread ID 的目录和时间线行,正确递增 catalog revision; - 部分数据库失败时返回部分成功及失败原因,保留可撤销备份;撤销前统一预检冲突; - 将旧 session_index 清理升级为历史已删除会话清理,综合 threads、自动化记录、消息正文、活动及归档 rollout 判断真实来源; - 预览显示标题、更新时间、工作区及 catalog/timeline/session_index/global-state 残留来源;默认不选择,并在执行前二次确认; - 使用快照哈希和 catalog revision 防止预览后覆盖新数据,执行前要求完全退出 Codex App/ChatGPT; - 结构化清理 session_index 和 global-state,仅移除 thread 专属键、精确 ID 绑定与数组元素,保留普通文本; - 每批创建包含数据库行、原文件、哈希和删除统计的 manifest 备份,并提供冲突安全的撤销入口; - 增加正常删除、历史空壳、归档保护、远程主机保护、并发变化、写入失败和撤销冲突测试。 验证: - cargo test -p codex-plus-data:68 项通过; - cargo test -p codex-plus-manager --lib:50 项通过; - npm run check:通过; - npm run test:56 项通过; - npm run vite:build:通过。
BigPizzaV3
left a comment
There was a problem hiding this comment.
这组改动目前有两个会让用户难以恢复的阻塞问题:
-
历史清理先逐个改写三个 JSON/JSONL 文件,再逐个提交多个 SQLite 数据库。任一后续数据库失败时,前面的文件或数据库已经永久修改,函数只返回
partial_result,不会自动回滚。更关键的是,后端失败响应虽然带回backupDir,前端却只在isSuccessStatus(cleanup.status)分支调用setHistoricalCleanupBackupDir。因此真实的部分失败发生后,界面不会出现“撤销最近一次残留清理”,用户拿不到这份专门创建的恢复入口。至少应在成功或失败响应带有backupDir时都保留撤销入口,并补一个“第 N 个数据库失败后可从 UI 撤销已完成文件/数据库修改”的测试;更稳妥的是失败时自动按 manifest 回滚。 -
正常会话删除在数据库提交成功、rollout 文件删除失败时仍返回
DeleteStatus::Failed。新的delete_local_from_paths只把LocalDeleted | Partial计入deleted_count,所以这种情况下会向上层报告“失败”,实际正文数据库及目录行已经删除,并且组合撤销 token 也不会被收集。请把这种“数据库已删、文件未删”的结果标记为Partial,保证聚合结果和撤销 token 与真实状态一致,并补对应回归测试。
PR 同时包含窗口定位、普通删除和 1100 多行历史清理,当前没有 GitHub CI 结果。上述问题修复后还需要完整跑前端、Rust 和三平台构建检查。
失败响应保留历史清理备份入口,并允许从部分执行状态安全恢复未改动的同值文件和目录行。数据库已删除但 rollout 删除失败时返回 Partial,聚合撤销令牌与真实状态保持一致。
|
@BigPizzaV3 已按评审中的两个阻塞问题完成修复,提交为
本地验证:
macOS Intel / Apple Silicon 构建请由 GitHub CI 继续验证。 |
问题与根因
本 PR 现在包含两组相互独立的管理器修复。
修改内容
管理器窗口
正常会话删除
历史已删除会话清理
备份与撤销
用户影响
验证
严格 Clippy 仍会被 markdown、provider_sync 和 storage 中 14 个既有警告阻断;本次新增 historical_cleanup 模块没有剩余 Clippy 报错。