fix(sync): 持久化冲突决定前验证复制目标

This commit is contained in:
2026-09-09 07:09:23 +08:00
parent 3ef4766da4
commit 195ee9de84
5 changed files with 107 additions and 6 deletions
@@ -710,3 +710,13 @@ Core 的独立数据目录目前不等于已授权 Vault。Python 旧笔记写
- 前端人设定向 6 项、Python 人设定向 7 项通过;完整前端 101 文件/529 项通过,日志 .build/persona-import-frontend.log。完整后端与类型检查结果另列。
- 此流程是用户明确选择的复制导入,不是自动所有权推断;没有实现旧来源清除。完整导入进程中断矩阵、独立设备 UI 与发布兼容验收仍需继续,完整生产化目标保持未完成。
- 最终后端全套 904 通过、1 项依赖弃用警告,81.49 秒;前端 type-check 通过。日志 .build/persona-import-python.log、.build/persona-import-types.log。本轮无 Rust 生产代码改动,未重复 Rust 全套;用户 Vault 修改保持原状。
## 增量:副本路径预检与逻辑记录文本副本
- 发现 sync_resolve 会先持久化 copy 决定,再由写入路径校验逻辑记录;无效目标可使 pending 决定无法应用且不允许改选。现于 INSERT 前检查目标同步白名单,并针对记录目标流式验证原始快照及目标记录 schema,不在验证失败时冻结选择。
- 新增真实 Workspace 故障测试:人设同改后,copy.json(不在同步白名单)与 layout/sidebars(错误记录身份)均被拒绝,sync_resolutions 行数仍为 0,本地内容保留;随后改选 attachments/persona-copy.txt 成功,重开后文本副本是完整本地记录、活动人设是远端记录,冲突已关闭。定向测试通过,日志 .build/record-copy-preflight.log。
- SyncSettings 对逻辑记录提供 attachments/settings-copy.txt 路径提示,并说明文本副本用于查看恢复而不自动应用。
- 真实 HTTP 双客户端测试扩充为人设、布局各 60 轮同改冲突,三种选择各 20 轮。副本分支额外要求两端副本正文/摘要一致,副本 file_id 在两端一致且不同于活动记录。最终执行结果另列。
- 生产代码完整 Rust 回归 139 通过、12 ignored,日志 .build/record-copy-full-rust.log;随后单独运行扩充后的 60 轮/类别 HTTP 用例通过,38.97 秒,日志 .build/record-copy-http-final.log。Clippy 首次发现新测试重开变量多余 mut,已移除,最终全目标 -D warnings 通过(.build/record-copy-clippy-final.log)。前端 529 项及 type-check 通过,日志 .build/record-copy-frontend.log、.build/record-copy-types.log。
- 上述结果证明本机双客户端同改的三种选择与文本副本,不代替完整 S-03 改对删/rename/历史恢复、独立硬件 UI 或发布验收。本轮未更改用户 Vault 数据,完整目标仍未完成。