fix(sync): 修复移动端详情消息缓存与同步时序 - #3338
Conversation
f914a5e to
c9e6e38
Compare
|
| Filename | Overview |
|---|---|
| apps/desktop/drizzle/scripts/0096_session_message_sync_token.ts | 新增会话消息 epoch/revision 字段和覆盖插入、更新、删除及清空操作的 SQLite 触发器;迁移脚本具备列存在性保护。 |
| apps/desktop/src/main/localDb/ipc/messages.ts | 新增原子消息同步查询与合并后的 token 广播,并确保导入副作用发生在快照读取之前。 |
| apps/desktop/src/main/device-link/dispatch.ts | 将同步响应纳入消息清洗和超帧压缩逻辑,同时保留 reset 响应包装及裁剪标记。 |
| apps/mobile/app/sessions/[sessionId].tsx | 详情页改为订阅确认后执行 token 对账,并保留旧 Desktop 的列表同步兼容路径和历史分页入口。 |
| apps/mobile/src/session/remoteSessionStore.ts | 增加消息缓存 covered token 管理和同步窗口替换语义,使缓存新鲜度与 session 元数据版本分离。 |
| apps/mobile/src/device-link/DeviceLinkContext.tsx | 订阅调用新增远端 ACK 状态校验,继续通过按 owner 引用计数保护共享 topic。 |
| packages/maker-shared/src/deviceLinkContract.ts | 定义消息同步 token 与 reset/not-modified 协议,并加入移动端远程调用通道集合。 |
Sequence Diagram
sequenceDiagram
participant M as Mobile 详情页
participant L as Device Link
participant D as Desktop
participant DB as SQLite
M->>L: "订阅 session:<id>"
L->>D: subscribe
D-->>M: subscription ACK
M->>D: messages:sync(covered token)
D->>DB: 单条查询读取 token 与最新消息窗口
alt token 相同
DB-->>D: not-modified
D-->>M: token,无消息正文
else token 不同
DB-->>D: reset 快照
D-->>M: token + 最新消息窗口
M->>M: 替换缓存并更新 covered token
end
DB-->>D: 后续消息写入推进 revision
D-->>M: sessions:patched(new token)
M->>M: known 与 covered 不一致,触发再次对账
Reviews (1): Last reviewed commit: "fix(sync): 修复移动端详情消息缓存与同步时序" | Re-trigger Greptile
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c9e6e381b9
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
c9e6e38 to
bd427b5
Compare
反馈已处理已处理:
变更:
验证:
备注:
|
Signed-off-by: DavidShen <david@xd.com>
Signed-off-by: DavidShen <david@xd.com>
Signed-off-by: DavidShen <david@xd.com>
d669ecf to
3bd9259
Compare
这次改了什么
摘要
修复移动端出现“列表已经有新消息,但进入详情仍显示旧消息”以及重开详情同步变慢的问题。Desktop 为消息变更维护持久、权威的版本号并提供原子同步快照;Mobile 缓存已覆盖版本,在订阅确认后对账,发现版本落后时合并触发补拉。
变更类型
feat新功能fix缺陷修复refactor/perf重构或性能优化docs/test/chore文档、测试或工程维护范围
messages:sync协议、device-link 兼容与响应收口、Mobile 消息缓存和 known/covered 双水位同步messages:list;旧 Mobile 的既有通道语义不变UI 变化
不涉及:虽然调整了详情页的数据装载逻辑,但界面结构、样式、交互和文案均未改变。
怎么验证的
自动验证
手工验证
未执行 Mobile 实机或模拟器联调;本次通过协议、数据库迁移、缓存、store 和竞态相关自动测试覆盖核心行为。
未执行的验证
__DEV__build label 证据pnpm test:unit;仓库提交门禁要求的是pnpm test:unit:related,本 PR 已通过该门禁风险
风险分类
影响与回滚
messages:sync时自动回退到既有列表接口提交前检查
git commit -s)