Skip to content

创建子区后创建者自己看不到(关注 Tab 不出现)—— 后端应为创建者无条件补 thread ext 行,全端根治 #557

Description

@pkuWMH

现象

iOS 客户端手工创建子区(thread)后,新建的子区不出现在创建者自己的「关注」Tab 里。web 端已通过 octo-web #293useFollowSidebar 客户端补 follow)缓解,但:

  1. 该修复是纯前端 web 的,iOS / Android / PC 无对应逻辑;
  2. 即便在 web 上,feat(incomingwebhook): cache the push hot-path lookups (#284 item 2) #293 也只在父频道已关注时才补 follow,覆盖不到「创建者未关注父频道」这一场景。

因此这是一个跨端普遍存在的后端行为缺口,需要在 server 侧根治。

根因

子区能否进入某用户的关注 Tab,唯一依据是 user_conversation_ext 里是否有该子区的行。落这行的两条路径:

  1. 创建时modules/thread/service.goCreateThread —— 只给创建者写 thread_member(IM 发消息权限)+ 把创建者加进 IM 频道 subscribers,没有为创建者写任何 user_conversation_ext
  2. fanoutmodules/conversation_ext/service.goOnThreadCreated —— 只给满足 target_type=group AND auto_follow_threads=1(即已明确关注父频道)的成员补子区行。创建者不被特殊对待

结论:只要创建者本人没有关注父频道,无论用哪个客户端建子区,这个子区都不会进创建者自己的关注 Tab。

期望行为(propriety)

创建者对自己刚创建的子区,天然应当可见——用户执行了「创建」这个动作,系统就应让结果对他可见,不应依赖他事先关注了父频道。

建议修复

在 server 的 thread 创建 hook(CreateThread / 触发 OnThreadCreated 的同一提交路径)里,无条件为创建者补一条子区 user_conversation_ext(等价于把创建者视为该子区的 follower),与现有 fanout 写入走同一套 version bump / ext 落行逻辑,保证幂等。

优点:一处改动,iOS / web / PC / Android 全端统一生效,不必每个客户端各修一遍。

注意事项

  • 只给创建者本人落子区行,不要同时清父群的 group_unfollowed flag 或把父群拉回关注(这是 octo-web feat(incomingwebhook): cache the push hot-path lookups (#284 item 2) #293 第一版被 reviewer 拒的 P1:不应因创建子区这个动作,副作用地把用户显式取关过的父群拖回关注 Tab)。
  • 落行需带正确的 space_id / follow_version,与 OnThreadCreated 现有写入口径一致,保证幂等(重复触发不产生脏行)。
  • 建议补回归测试:创建者未关注父群时创建子区 → 创建者关注 Tab 出现该子区;且父群 group_unfollowed flag 不被改动。

关联

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions