Expose boot/switch loading state, always emit session-ready in finally,
ignore stale loadGuild via generation counter, and cancel load on openHome.
Co-authored-by: Cursor <[email protected]>
Expose server-wide age-restricted gate toggle through updateGuildSettings and
include nsfwGateEnabled in guild view snapshots for UI gate logic.
Co-authored-by: Cursor <[email protected]>
Expose activeChannelLastReadAt from pre-mark read cursor for unread
divider UI and add reorderGuildCustomRoles with ROLE_UPSERT gossip.
Co-authored-by: Cursor <[email protected]>
Expose category reorder for MANAGE_CHANNELS holders with audit logging
and mesh gossip for each moved category row.
Co-authored-by: Cursor <[email protected]>
Wire guild channel reorder for MANAGE_CHANNELS holders, gossip
CHANNEL_UPDATE per moved channel, and audit channel.reorder events.
Co-authored-by: Cursor <[email protected]>
Document guild channel pick when one heavy plain-only category outscores
three mention+plain combo categories; smoke test:guild-plain-beats-triple-combo.
Co-authored-by: Cursor <[email protected]>
Document guild-open bucket selection when mention+plain and plain-only
totals match and lower channel position breaks the tie.
Co-authored-by: Cursor <[email protected]>
Document guild-open selection when two mention+plain buckets share the same
total score and lower minimum channel position wins.
Co-authored-by: Cursor <[email protected]>
Document guild-open bucket selection when mention weight breaks a tie
between equal plain-unread totals across categories.
Co-authored-by: Cursor <[email protected]>
Document that the higher mention+plain parent-bucket total wins when two
categories both have combined unread.
Co-authored-by: Cursor <[email protected]>
Document that a category with one mention plus plain unread beats a higher
plain-only bucket in another category on guild open.
Co-authored-by: Cursor <[email protected]>
When unread spans categories or uncategorized channels, select the
parentId bucket with the highest summed unread score before position
tie-break within the bucket.
Co-authored-by: Cursor <[email protected]>
Filter message rows by channelId in _unreadForChannel after HyperDB find.
When every unread channel shares one category parentId, limit
_selectGuildChannelWithUnread to that category before position tie-break.
Co-authored-by: Cursor <[email protected]>
Clarify _selectGuildChannelWithUnread order in README: unread/mention score,
then lastChannelByGuild, then first text. Reference smokes
test:guild-unread-over-last-channel and test:guild-unread-channel-jump.
Co-authored-by: Cursor <[email protected]>
selectChannel calls _persistLastGuildChannel for savable channel types.
_selectGuildChannelWithUnread falls back to lastChannelByGuild when no
unread channels qualify, after permission check via _canViewChannel.
Unread-weighted channel pick from v0.8.115 remains unchanged when unread > 0.
Co-authored-by: Cursor <[email protected]>
_openGuild clears stale activeChannelId and calls _selectGuildChannelWithUnread
to open the text/thread/announcement channel with the highest mention-weighted
unread count before falling back to the first text channel.
setSearch records queries of at least two characters into user prefs via
_recordSearchRecent. view() exposes searchRecentQueries for the active guild.
Co-authored-by: Cursor <[email protected]>
Phase 146 (v0.8.111): setDiscoveryFilter is async and saves query,
sort, minMembers, and tag to discoveryExploreFilter prefs. Restore
on boot via _ingestDiscoveryExploreBaselineFromPrefs. Emits discovery
after filter updates.
Co-authored-by: Cursor <[email protected]>