解散群时 scheduled 消息的消息级回执 state 写成 completed,违反协议枚举 #6

Closed
opened 2026-09-30 10:28:16 +08:00 by nixevol · 1 comment
Owner

严重级

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)

文档条款

  • DEVELOPMENT 6.4:消息级作废 endpoint_id 为空、state=rejected,reason 说明原因(含 group_dissolved)
  • DEVELOPMENT 7.6:解散群时 scheduled 消息改 completed(这是 messages.state),要回执的写消息级回执——回执状态仍受 6.4 约束
  • DEVIATIONS I5.2:明确 I4 解散群曾写 completed,I5 按 6.4 改为 rejected;I4 的 void 路径未改

为何不是故意设计

I5.2 已经把 completed 回执标成与 6.4 不一致的旧写法,并选择 rejected。这不是产品要增加一种回执状态,是同一语义两条 SQL 没对齐。

建议方向(不实现)

voidGroupAllTx 消息级回执改为 rejected,reason 仍为 group_dissolved,与 I5 及 DEVELOPMENT 6.4 对齐。补一条解散群 + 定时未到点 + 回执的测试。

## 严重级 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) ## 文档条款 - DEVELOPMENT 6.4:消息级作废 `endpoint_id` 为空、`state=rejected`,reason 说明原因(含 group_dissolved) - DEVELOPMENT 7.6:解散群时 scheduled 消息改 `completed`(这是 **messages.state**),要回执的写消息级回执——回执状态仍受 6.4 约束 - DEVIATIONS I5.2:明确 I4 解散群曾写 completed,I5 按 6.4 改为 rejected;I4 的 void 路径未改 ## 为何不是故意设计 I5.2 已经把 completed 回执标成与 6.4 不一致的旧写法,并选择 rejected。这不是产品要增加一种回执状态,是同一语义两条 SQL 没对齐。 ## 建议方向(不实现) `voidGroupAllTx` 消息级回执改为 `rejected`,reason 仍为 `group_dissolved`,与 I5 及 DEVELOPMENT 6.4 对齐。补一条解散群 + 定时未到点 + 回执的测试。
Author
Owner

已合入并推送 main 4059a1576bc97879b840ec5200defd80bc9eb3f0。
解散群作废 scheduled 消息时,消息级回执 state 改为 rejected(reason 仍为 group_dissolved)。消息行仍为 completed。

已合入并推送 main `4059a1576bc97879b840ec5200defd80bc9eb3f0`。 解散群作废 scheduled 消息时,消息级回执 state 改为 `rejected`(reason 仍为 group_dissolved)。消息行仍为 completed。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: nixevol/NixMsg#6