Planning
Goal
When a user opens a channel inside a space (e.g. #general), the right-hand member sidebar must list and count only joined members of that room — like Element, Cinny, and Sable.
Today it shows a deduplicated union of members across the whole space (space room + all visible child channels), which inflates the count (~1780 vs ~743) and can hide room-only members (e.g. bots present only in that channel).
Root cause (confirmed in code)
In app/pages/chat.vue:
<ChatMemberList
v-else-if="selectedSpaceIdRef && spaceMemberGroups.length > 0"
:grouped-members="spaceMemberGroups"
/>
<ChatMemberList v-else :members="memberItems" />
memberItems — correct: selectedRoom.getMembers() for the active room.
spaceMemberGroups — from useSpaceMembers, which iterates rootSpaceId + all visibleRoomsForSidebar IDs, dedupes by userId, and applies space-level custom roles.
Whenever a space is selected and roles exist, the space aggregate wins; room members are never shown.
Scope
Out of scope
Branch
bug/chat-room-member-list
Acceptance criteria
Test checklist
Unit
Manual
Related
Epic
Sub-issue of #3 (Phase 3).
Planning
Goal
When a user opens a channel inside a space (e.g.
#general), the right-hand member sidebar must list and count only joined members of that room — like Element, Cinny, and Sable.Today it shows a deduplicated union of members across the whole space (space room + all visible child channels), which inflates the count (~1780 vs ~743) and can hide room-only members (e.g. bots present only in that channel).
Root cause (confirmed in code)
In
app/pages/chat.vue:memberItems— correct:selectedRoom.getMembers()for the active room.spaceMemberGroups— fromuseSpaceMembers, which iteratesrootSpaceId+ allvisibleRoomsForSidebarIDs, dedupes byuserId, and applies space-level custom roles.Whenever a space is selected and roles exist, the space aggregate wins; room members are never shown.
Scope
selectedRoomIdmembership when a room is open.join, etc.).memberItemsbehavior.Out of scope
Branch
bug/chat-room-member-listAcceptance criteria
#general): count matches Element (~700s), not root space (~1780).Test checklist
Unit
selectedRoomId+ context.Room.getMembers().Manual
#generalmember count with Element.Related
Epic
Sub-issue of #3 (Phase 3).