Mobile: channel members list shows no online/presence indicator for members (desktop sidebar does)
- Dominant language
- Rust
- Stars
- 32.7k
- Forks
- 4.3k
- Avg merge
- 1d 13h
- Merged PRs (30d)
- 253
Description
## Summary
On mobile, the channel **Members** sheet (People / Agents) shows only an avatar, a display name, and a static role label ("Owner" / "Member" / "Agent"). There is **no online/away/offline indicator**, so it is impossible to tell at a glance whether a member — especially an agent — is reachable before @mentioning them. In agent-heavy channels, nearly every row is a bot with no liveness signal unless it happens to be mid-generation ("Working…").
Desktop already overlays a presence dot on every member card in the channel sidebar, so this is a client parity gap rather than a missing platform capability.
## Source verification (main @ `040b203f`)
The mobile members sheet renders each tile with this subtitle priority — none of the branches is presence:
1. `"Working…"` spinner — only while a bot is actively generating (`workingBotPubkeysProvider`)
2. NIP-38-style custom status text — **people only**; bots are deliberately excluded from `userStatusCacheProvider.track()` (`mobile/lib/features/channels/members_sheet.dart:73-80`)
3. Static role label otherwise (`members_sheet.dart:232-265`)
`_MemberAvatar` is a plain `AvatarImage` with no badge/dot (`members_sheet.dart:439-453`). Tapping through to a profile *does* show presence (the "Presence: Online/Away/Offline" chip in `mobile/lib/features/profile/user_profile_sheet.dart`), which makes the list view feel inconsistent.
Everything needed already exists elsewhere in the mobile app:
- Live kind:20001 subscription + per-pubkey cache: `PresenceCacheNotifier` (`mobile/lib/features/profile/presence_cache_provider.dart`), with `track(pubkeys)` to filter updates
- Reusable avatar presence-dot geometry: `AvatarBadgeMaskGeometry.presenceDot` (`mobile/lib/shared/widgets/masked_avatar_badge.dart`), documented as "Desktop's sidebar presence treatment"
- A working in-app precedent: the DM header tracks the peer and renders `MaskedAvatarBadge(geometry: AvatarBadgeMaskGeometry.presenceDot)` from `presenceCacheProvider` (`mobile/lib/features/channels/channel_detail_page/app_bar.dart:218-251`)
Desktop parity reference: `desktop/src/features/channels/ui/MembersSidebarMemberCard.tsx:172-179` overlays `PresenceDot` on each avatar when `presenceStatus` is available (`data-testid="sidebar-member-presence-*"`).
## Suggested enhancement
In `MembersSheet`:
1. Track presence for all listed members (people **and** agents) via `presenceCacheProvider.track(...)`
2. Render an online/away/offline dot per tile — e.g. a `MaskedAvatarBadge` presence-dot overlay on each `_MemberAvatar`, matching the DM header treatment and desktop's sidebar
This gives users an at-a-glance answer to "who can I actually reach right now?" before typing a mention.
## Related but distinct
- #6200 covers a separate data-accuracy bug (mobile presence cache misses current state after reconnect, since it is subscribe-only with no snapshot backstop). Fixing that would make this new indicator more reliable, but adding the indicator is independent.
Contributor guide
Assessment
This issue has not been assessed yet.