This repository was archived by the owner on May 22, 2026. It is now read-only.
v1.6.1
跨端只读 awareness 与全自动同步上线。
主要变化
跨端只读 awareness
一台设备正在运行番茄时,其他已登录设备打开应用会自动进入只读镜像,禁用 Start 按钮。实现为一份 30 分钟 TTL 的 KV 标记,由番茄启动、手动跳过缓冲、番茄结束三处客户端写入,并由 /api/push/fire 在每次推送链路推进时刷新。其他设备每 30 秒轮询此标记,读到非自身会话即渲染只读视图。
未引入心跳协议:推送链路本身已是天然心跳源,30 分钟 TTL 在最坏情况下也只让一份失效标记滞留半小时。
全自动同步(LWW snapshot)
登录后 Token 余额或集合长度变化将触发 2 秒防抖的 saveToCloud;应用打开时执行一次 loadFromCloud,按 savedAt 时间戳判断云端是否较新,是则全量覆盖本地。Settings 页折叠为一行状态加两个 escape hatch(立即推送 / 立即拉取),不再保留自动同步开关。
未采用事件溯源:单用户场景下"双端同时修改同一字段"的真实概率极低,事件去重与排序的工程复杂度不与之匹配。LWW 快照 + lastSavedAt 水位足以处理常见路径。
持久化 schema v3 → v4
新增 lastSavedAt 水位用于 LWW 仲裁。旧数据自动迁移,无需手动操作。
修复
- prerender
/_not-found阶段访问useStore.persist时返回 undefined 导致 TypeError,使 release-deploy workflow 首次得以走完 tag → Vercel prod 部署的全链路。
工程
- 测试套从 mock-heavy 迁移到 smoke 范式:删除
lib/kv.test.ts,app/actions/sync.test.ts改连真 Upstash,新增lib/snapshot-schema.test.ts与app/actions/active-session.test.ts。 - UI 版本号经 release workflow 注入
NEXT_PUBLIC_APP_VERSION,告别手动维护lib/version.ts。 - README 重写为中文技术写作风格,加入"为何不用现有番茄钟"、"代币经济学"等设计取舍说明。