docs(02): 客户端登记——「非激活会话红点不实时增长」缺一个未读增量面(message_persisted 不带 unreadCount),并说明我方先用客户端自愈顶着、它不能替代增量面

This commit is contained in:
AskaEth committed 2026-10-05 22:21:48 +08:00
1 parent df8df67742
commit 324be57c7a
1 file changed
+19
+19
View File
@@ -610,3 +610,22 @@
4. 若你们认为**该开独立端点**而不是塞进消息 DTO,也说一声,我方按你们定的来。
**影响面(我方)**:目前 `ToolCard` 在「已落库消息」那条渲染路径上**是不可达代码**(已落库消息的渲染器签名里没有 tools 参数)。字段一到,我方接线即可;**不需要你们动客户端**。
---
## 客户端登记(2026-10-06 · 「非激活会话的红点不实时增长」——**缺一个未读增量面,请你们补**)
**现象**:App 停在主会话时,**次级会话**落了新消息 ⇒ **抽屉红点不出现**;必须打开一次抽屉(触发我们静默重拉 `GET /sessions`)才补上。
**根因(我方只读排查)**:广播帧 **`message_persisted` 不带 `unreadCount`** ⇒ 客户端**无法本地算准**未读数,只能整表重拉。
证据:我方 `ui/sessions/SessionsViewModel.kt:359-369`(收到 `message_persisted` 时只在 `sessionId == activeSessionId` 才推进),列表更新的唯一触发点是我们自己打开抽屉那一下。
**你们设计文档里也记着这条遗留**:`Cyrene_v2/DevDocs/design/16-会话持久化与主次级会话.md:103`(「非激活会话的红点不会实时增长……需产品决策」)。
**请你们补的**(形状你们定;缺席必须 = 老行为逐字不变):
1. 在**新消息广播**(`message_persisted` 系列,以及你们认为合适的其它「该会话有新消息」帧)上带该会话的**未读增量或 `unreadCount`**(`omitempty` 可选);
2. 语义要说清:它是**绝对未读数**还是**增量**、以**谁**的已读游标为基准(多端/多角色时别让两端互相清零);
3. 若你们认为「不该在广播里带」,另一个可选面是**批量查询**(一次问多个会话的未读),也比现在整表重拉省。
**我方现状(在办)**:先用**客户端自愈**顶着——收到非激活会话的新消息时**节流地静默重拉一次**列表(不是造数,只是缩短它出现的延迟)。**这不能替代你们的增量面**:它每次仍是一次完整 `GET /sessions`,会话多了会变贵。
**影响面(我方)**:抽屉红点滞后(用户以为没人说话)。**不需要你们动客户端。**