medium
协议错误
群主解散群时,尚未到发送时刻的群消息在 messages 上改为 completed(正确),但写入 receipts 的消息级回执 state 为 completed。协议规定回执 state 只能是 accepted / expired / dropped / rejected。SDK 按枚举分支时会忽略或行为未定义,发送方可能收不到「因解散而作废」的回执。
messages
completed
receipts
state
internal/app/group/void.go
INSERT INTO receipts(..., state, ...) VALUES(..., "completed", reasonGroupDissolved, ...)
internal/app/identity/lifecycle.go
rejected
endpoint_id
state=rejected
I5.2 已经把 completed 回执标成与 6.4 不一致的旧写法,并选择 rejected。这不是产品要增加一种回执状态,是同一语义两条 SQL 没对齐。
voidGroupAllTx 消息级回执改为 rejected,reason 仍为 group_dissolved,与 I5 及 DEVELOPMENT 6.4 对齐。补一条解散群 + 定时未到点 + 回执的测试。
voidGroupAllTx
group_dissolved
已合入并推送 main 4059a1576bc97879b840ec5200defd80bc9eb3f0。 解散群作废 scheduled 消息时,消息级回执 state 改为 rejected(reason 仍为 group_dissolved)。消息行仍为 completed。
4059a1576bc97879b840ec5200defd80bc9eb3f0
No dependencies set.
The note is not visible to the blocked user.
严重级
medium
分类
协议错误
现象
群主解散群时,尚未到发送时刻的群消息在
messages上改为completed(正确),但写入receipts的消息级回执state为completed。协议规定回执state只能是 accepted / expired / dropped / rejected。SDK 按枚举分支时会忽略或行为未定义,发送方可能收不到「因解散而作废」的回执。路径
internal/app/group/void.go第 141–147 行:INSERT INTO receipts(..., state, ...) VALUES(..., "completed", reasonGroupDissolved, ...)internal/app/identity/lifecycle.go中 I5 对停用/删除导致的 scheduled 作废把回执写成rejected(DEVIATIONS I5.2)文档条款
endpoint_id为空、state=rejected,reason 说明原因(含 group_dissolved)completed(这是 messages.state),要回执的写消息级回执——回执状态仍受 6.4 约束为何不是故意设计
I5.2 已经把 completed 回执标成与 6.4 不一致的旧写法,并选择 rejected。这不是产品要增加一种回执状态,是同一语义两条 SQL 没对齐。
建议方向(不实现)
voidGroupAllTx消息级回执改为rejected,reason 仍为group_dissolved,与 I5 及 DEVELOPMENT 6.4 对齐。补一条解散群 + 定时未到点 + 回执的测试。已合入并推送 main
4059a1576bc97879b840ec5200defd80bc9eb3f0。解散群作废 scheduled 消息时,消息级回执 state 改为
rejected(reason 仍为 group_dissolved)。消息行仍为 completed。