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]>
Single API toggles voiceRosterMutedOnly and voiceRosterDeafenedOnly
together for Phase 141 combined sidebar filter chip.
Co-authored-by: Cursor <[email protected]>
Expose setVoiceRosterMutedOnly with USER_PREFS persistence, ingest
voiceRosterMutedOnly and discoveryExploreBaselineAt from prefs, and
record baselineAt when markDiscoveryExploreOpened runs. View adds
discoveryExploreBaseline, discoveryExploreBaselineAt, and
voiceRosterMutedOnly for Phase 139 UX (v0.8.104).
Co-authored-by: Cursor <[email protected]>
Phase 138 platform changes:
- Apply local voiceMedia mute/deafen to self roster row via myVoiceChannelId
(no protomux roundtrip required for sidebar indicators).
- Persist discoveryExploreBaseline through updateUserPrefs on Explore open.
- Ingest discoveryExploreBaseline from USER_PREFS on boot and prefs events.
Co-authored-by: Cursor <[email protected]>
- setThreadsPanelSort and threadsPanelSort in view
- refreshDiscoveryListingsFromMesh on setDiscoveryFilter
- discoveryMeshRefreshAt for Explore freshness
Co-authored-by: Cursor <[email protected]>
- setThreadsPanelParentFilter and view.threadsPanelParentFilter
- voiceStatesByChannel rows include presenceStatus from guild mesh
- maybeRefreshStaleSearch on selectChannel for forum channel switches
Co-authored-by: Cursor <[email protected]>
Add maybeRefreshStaleSearch() to re-run guild/forum mesh queries when
searchMeshMeta.fetchedAt is older than 90s and mesh is enabled.
Invoke after loadGuild so switching servers refreshes stale P2P search
hits without requiring a manual ↻ click.
Co-authored-by: Cursor <[email protected]>
Add refreshSearch() to re-run guild/forum mesh queries and stamp
searchMeshMeta.fetchedAt for stale UI indicators.
Persist guild online counts to USER_PREFS.guildPresenceCache (debounced
gossip) and merge remote cache on prefs ingest so companion rail presence
stays consistent across linked devices.
Expose presence row timestamps on guildPresenceSummary in view().
Co-authored-by: Cursor <[email protected]>
Persist USER_PREFS.companionLastGuildId on every loadGuild so the
companion restores the last server the user opened on any device.
Restore companionLastGuildId on companion session startup instead of
always picking the first guild in the list.
Track per-guild online counts in _guildPresenceSummary (updated on
presence gossip) and expose guildPresenceSummary on platform.view()
for the companion guild rail presence dots.
Co-authored-by: Cursor <[email protected]>
Add searchForumPostsWithMesh and _forumPostsFromMeshMessages to merge
local forum haystack hits with guild MESSAGE_SEARCH mesh responses via
pearcord-search.mergeForumSearchHits.
_resolveSearchResults uses mesh for forum scope and records
_lastSearchMeshMeta with scope forum for the desktop search UI.
Co-authored-by: Cursor <[email protected]>
mergeSearchHits accepts query for ranked enrichment; DB fallback uses
rankAndEnrichSearchHits. linkDevicePairCode accepts an external Hyperswarm
for smoke/live pairing without destroying the guest swarm early.
Co-authored-by: Cursor <[email protected]>
Builds guildSearchIndex into GUILD_SYNC payloads from memory or the
persisted GuildSearchIndexStore, and merges inbound slices into local
indexes on join so multi-device search stays warm after mesh connect.
Co-authored-by: Cursor <[email protected]>
Integrate GuildSearchIndexStore on platform startup and debounced persist
after message ingest. Expose getGuildSearchIndexMeta and view.searchIndexMeta
for smokes and UI diagnostics.
Co-authored-by: Cursor <[email protected]>