离线
没有网络时什么还能用,以及网络回来时会发生什么。
拾记是本地优先的。最近看过的看板、任务、评论和笔记仍然可读,新的工作立刻被接受,排队的写入会在网络恢复时按顺序到达服务器。
读取
- 无网络冷启动时,每个账号加载过的页面会显示最后一次成功的数据 —— 最多七天前。
- 快照属于写下它的账号。换一个账号会清掉它,而不是继承别人的数据;切换工作区则各自保留历史。
- 附件图片不会离线存储;页面里列出的其他内容都可用。
写入
记录、任务编辑、标签移动、归档/删除、完成/重新打开、评论与回复,以及笔记的创建、重命名、保存、移动和删除,都会先在本地被接受并排队。界面不用等服务器就更新。
- 队列按写入顺序重放。
- 离线创建的任务会得到临时 id;之后的编辑跟着它走,服务器的 id 到达后会在所有地方替换临时 id。
- 重复的编辑会合并成你最新的意图。
- 创建请求带幂等键,重试的创建会返回同一个任务,而不会重复创建。
- 永远不可能成功的写入会被报告并移出队列,而不是无限重试。服务器已经执行过的写入视为成功。
附件和“用交付页面解决”需要联网,因为文件或页面要对着服务器的记录上传。应用会说明这一点,而不是悄悄失败。
冲突
任务字段编辑采用最后写入优先:重放时只发送你改过的字段。
笔记保存会声明版本和起始文本。如果期间另一台设备保存过,拾记会按行合并两边的修改。兼容的修改会静默合并;只有真正重叠时才会让你选择保留我的或使用对方的。
状态
两个客户端都暴露同一个状态 —— { online, pending, syncing, failures }。网页版在头部显示胶囊;手机版显示带待同步数量的横幅,以及一个可以重试的同步设置区。退出登录不会丢弃队列:它仍绑定写下它的账号和工作区。
每个请求都有 20 秒期限。永远不响应的连接会变成可重试的失败,而不是让同步一直停在“进行中”。