feat: 暂存工作区载荷并捕获外部 Sync 变更

This commit is contained in:
2026-09-08 16:15:09 +08:00
parent 91ef49442d
commit f08a338ece
11 changed files with 589 additions and 35 deletions
@@ -68,3 +68,14 @@ Core 的独立数据目录目前不等于已授权 Vault。Python 旧笔记写
- Host 提供每 5 秒串行同步,先完成固定拉取窗口再发送本地作业;SQLite schema 6 保存暂停偏好。网络失败使用有界退避并尊重 Retry-After;认证、权限、协议等错误停止自动重试并显示。绑定变化/暂停取消旧轮次。
- 真实本地 HTTP 服务验证 Stronghold 会话存储、强制刷新、关闭重开保险库后复用、退出后旧令牌 401。新增 UI 测试验证密码清空、测试 HTTP 显式传参、确认取消和冲突 CAS 参数。Rust 全目标 43 项与前端全量 95 文件/508 项通过,正式 TypeScript 两项目检查通过。前端测试仍输出既有 KaTeX quirks/localhost:3000 连接警告,没有失败项。
- 尚未完成:后台轮询真实桌面实机验收、初始非空合并预览、外部文件变化捕获、附件流式持久化及全故障矩阵、数据分类和不同身份同路径解决。不能据此标记所有 S/E 验收 ID 已通过。
## 增量:外部编辑捕获与大附件崩溃续传
- Workspace schema 7 将新 write/rename/delete journal 和 outbox 的正文替换为不可变 payload 引用,先 fsync 文件再记录摘要/长度;兼容旧内联正文恢复与上传迁移。100 MiB 不再写入 SQLite 正文列。暂不执行历史 payload GC。
- 独立 sync_observed 保存上次提交快照;文件树/编辑器读取更新 files 缓存不会吞掉外部变更。后台捕获外部新增、编辑、删除,采用快照校验且不向外部编辑器写回。重复扫描不新增 outbox;删除捕获支持重启恢复。
- 当前文件分类允许 Markdown 和 attachments 下常用附件类型,排除隐藏目录、已知缓存/日志/模型目录和可执行包扩展名;普通 JSON/配置不会直接复制。旧/新待发作业均检查分类,未支持的远端类型拒绝应用并保留游标。默认任务/Skill/配置等逻辑记录的白名单尚待实现,不作为 S-08 完整证据。
- 真实本地 HTTP 100 MiB 测试每 10 MiB 在服务端写入后、响应前强杀独立 Rust 客户端,共 10 次。恢复进程复用同一设备会话、查询服务端 offset,最终上传/下载长度、SHA-256、file_id 一致且远端落盘无回流;两个临时 Vault 的元数据文件均小于 5 MiB。最初测试错误地重新登录生成不同设备,按协议无法复用原上传,现已改为通过 stdin 传递同一受控测试会话。
- 此测试尚未覆盖完整 S-02 的每个 pull 边界 kill 20 轮,也不代表四并发服务 RSS 或生产 MinIO 性能验收。外部 rename 的稳定身份识别和目录大规模扫描优化继续实施。
- 本增量 Rust desktop 全目标 46 项通过、1 个受父测试驱动的独立进程辅助入口标记 ignored(父测试实际运行并强杀该入口 10 次);Clippy `-D warnings` 通过。