同步文件阶段只读验证(2026-10-27)
行为
- 同步状态与只读状态分开。连接、上传、下载和等待响应时恢复编辑及文件操作;同步按钮仍避免重复启动同一任务。
- 后台 isolate 在本地文件阶段开始前请求主 isolate 授权。主 isolate 设置只读、等待已有用户操作、串行完成草稿保存,再允许后台访问文件。
- 本地阶段结束后先刷新打开笔记,再解除只读;读取失败、网络失败和保存失败也会释放屏障,未保存草稿不被磁盘内容替换。
- 上传操作保持不可变正文快照。网络期间的新修改在后续扫描发送;最后一轮扫描之后的修改留待下次同步。
- 同步后的列表刷新在本地处理结束后进行,不把旧正文重新写回正在编辑的标签。
- 同步中心、工具栏、正文、新建/移动/删除、拍照和录音入口使用文件阶段状态;同步图标继续表示整个任务。
- 删除或移除仓库的确认可在网络阶段发起,真正删除等待本轮任务完成,避免后续同步重建目录。
- 历史缓存损坏且同步仍在进行时,差异查询报告错误并保留缓存,避免联网重建排在当前同步后又反向阻塞文件阶段;同步完成后可重试。
验证
- 全量
flutter test:571 项通过。 - 真实 HTTP 服务和生产后台 isolate:连接期间编辑、授权前等待已有操作、上传期间继续编辑并新建文件、下载期间新编辑与远端冲突、HTTP 401 后保存新编辑及解除只读。
- 协调器:同步完成后的远端列表交换期间继续输入,不被旧磁盘快照覆盖。
- 同步中心:网络期间可克隆,文件阶段禁用克隆;同步按钮仍避免重复同步。
- 保留现有草稿保存、库切换、退出登录、冲突副本和断线恢复回归。
- 全量后移除无用的整轮切库屏障字段,相关协调器和真实 worker 测试 19 项通过;最后的标签关闭/固定保护回归 6 项通过。
- 最终
flutter analyze仅保留既有test/mp3/mp3_refresh_view_test.dart:37大括号 info,无新增问题。 - 使用项目规定的 Java socket 临时目录后,
flutter build apk --debug --target-platform android-arm64,android-x64构建成功。
限制
- 本轮未在真实手机或模拟器重新测量耗时与帧率;此前性能报告对应
aa9f1aa,不能视为本次阶段切换的性能结果。 - 安装更新后的 APK 后需要重启应用。
