Bot 模式会话列表排序
Web、桌面、iOS、Android 共用以下规则:
pinned 为 true 的会话优先。
- 同一置顶分组内,按
lastMessageAt 倒序;缺失时使用 createdAt,数值 0 不算缺失。
- 时间相同按会话 ID 升序。服务端 UUID 使用确定性的字符顺序,不使用用户界面语言相关排序。
列表时间也取相同的会话时间,不使用配置修改时间 updatedAt,也不使用本机当前选择的群聊任务时间。任务选择与文字预览仍可保留本地状态。
执行位置
- 服务端常规列表与首次/重连快照复用
compareWorkspaceConversations。
- Web 与桌面共享
WorkspaceTranscriptStore,每次替换会话数组均排序;页面读取排序后的数组。
- iOS 在快照、刷新、会话增量事件三处执行
WebWorkspaceConversation.precedes。
- Android 在快照、刷新、会话增量事件三处执行
workspaceConversationOrder。
- 三端刷新期间若游标已因新事件推进,丢弃旧列表响应,避免回退刚同步的置顶或时间。
- 同步范围仍由服务端与账号决定;本次不修改账号隔离、置顶持久化或事件协议。
验证
- Web:40 项相关测试通过;服务端测试同时检查列表接口、快照接口和两个独立状态仓库接收置顶/新消息事件后的顺序。客户端覆盖反向初始数组、时间并列、空会话、时间为 0、置顶/取消置顶、新会话与重复事件。
- iOS:51 项 WorkspaceChatTests 通过,覆盖快照与刷新一致、增量重排、新会话、旧任务时间不影响列表、旧刷新响应不能覆盖新置顶事件。
- Android:51 项 core:model 测试通过,包含同一组跨端排序数据;app Debug Kotlin 编译通过。
- Web 生产构建通过。以上为代码、隔离用例和构建验证,未修改线上会话,未发布新版本或安装到真实设备。