Commit Graph
206 Commits
Author SHA1 Message Date
Raven ScottandCursor 9dcc4a751a docs: v0.8.154 combo bucket beats heavy plain on guild open
Document guild channel pick when mention+plain parent score exceeds
a higher plain-only bucket; smoke test:guild-combo-beats-plain-bucket.

Co-authored-by: Cursor <[email protected]>
2026-05-22 20:30:19 -04:00
Raven ScottandCursor 846aae78cd docs: v0.8.153 plain bucket wins equal combo on minPos tie
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]>
2026-05-22 20:26:35 -04:00
Raven ScottandCursor 3e09637234 docs: v0.8.152 dual plain-only parent bucket pick
Document guild-open selection when two plain-only categories compete by
unread total.

Co-authored-by: Cursor <[email protected]>
2026-05-22 20:22:06 -04:00
Raven ScottandCursor 98a7a92733 docs: v0.8.151 plain-only bucket beats lighter combo on guild open
Document parent-bucket selection when plain unread total exceeds a
mention+plain combo bucket score.

Co-authored-by: Cursor <[email protected]>
2026-05-22 20:20:01 -04:00
Raven ScottandCursor 1aeeb97887 docs: v0.8.150 triple combo bucket highest total wins
Document guild-open selection among three mention+plain parent buckets.

Co-authored-by: Cursor <[email protected]>
2026-05-22 20:17:35 -04:00
Raven ScottandCursor 28b4ae4c81 docs: v0.8.149 equal combo bucket minPos tie-break
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]>
2026-05-22 20:15:24 -04:00
Raven ScottandCursor 557d4d6a35 docs: v0.8.148 combo beats plain-only at equal plain unread
Document guild-open bucket selection when mention weight breaks a tie
between equal plain-unread totals across categories.

Co-authored-by: Cursor <[email protected]>
2026-05-22 20:13:03 -04:00
Raven ScottandCursor a644eb1e49 docs: v0.8.147 dual combo bucket pick smoke
Document that the higher mention+plain parent-bucket total wins when two
categories both have combined unread.

Co-authored-by: Cursor <[email protected]>
2026-05-22 20:10:16 -04:00
Raven ScottandCursor 6c17e43a6c docs: v0.8.146 mention+plain bucket pick smoke
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]>
2026-05-22 20:07:05 -04:00
Raven ScottandCursor 143d63f345 docs: note root plain bucket beats dual mention categories (v0.8.145)
Co-authored-by: Cursor <[email protected]>
2026-05-22 19:57:18 -04:00
Raven ScottandCursor 67b935e7fe docs: note mention triple-bucket beats plain totals (v0.8.144)
Co-authored-by: Cursor <[email protected]>
2026-05-22 19:54:52 -04:00
Raven ScottandCursor 63166b1e5f docs: note three-way equal bucket minPos pick (v0.8.143)
Co-authored-by: Cursor <[email protected]>
2026-05-22 19:52:49 -04:00
Raven ScottandCursor 936f835c97 docs: note equal minPos bucket order tie-break (v0.8.142)
Co-authored-by: Cursor <[email protected]>
2026-05-22 19:50:15 -04:00
Raven ScottandCursor 33fc374096 docs: note equal bucket minPos tie includes root (v0.8.141)
Co-authored-by: Cursor <[email protected]>
2026-05-22 19:47:03 -04:00
Raven ScottandCursor f7ff17718f feat(platform): removeSearchRecent and root mention bucket pick (v0.8.140)
Expose removeSearchRecent to drop guild-scoped recent queries from prefs.
Document root mention bucket beating higher plain category unread.

Co-authored-by: Cursor <[email protected]>
2026-05-22 19:41:52 -04:00
Raven ScottandCursor 924e9fdb61 docs: note mention bucket beats plain root unread (v0.8.139)
Co-authored-by: Cursor <[email protected]>
2026-05-22 19:37:16 -04:00
Raven ScottandCursor 6f84d0a095 docs: note mixed parent-bucket guild channel pick (v0.8.138)
Co-authored-by: Cursor <[email protected]>
2026-05-22 19:34:00 -04:00
Raven ScottandCursor 2b1d810ca2 docs: note dual-category guild channel isolation pick (v0.8.137)
Co-authored-by: Cursor <[email protected]>
2026-05-22 19:30:08 -04:00
Raven ScottandCursor 3ac71d4a01 docs: note mention wins in single-category guild channel pool (v0.8.136)
Co-authored-by: Cursor <[email protected]>
2026-05-22 19:26:44 -04:00
Raven ScottandCursor 5376970c4b docs: document single-category guild channel pool pick (v0.8.135)
Co-authored-by: Cursor <[email protected]>
2026-05-22 19:23:33 -04:00
Raven ScottandCursor 3e5407bd73 docs: note uncategorized bucket guild channel pick (v0.8.134)
Co-authored-by: Cursor <[email protected]>
2026-05-22 19:20:07 -04:00
Raven ScottandCursor 255b2bd542 docs: note bucket total wins over minPos for guild channel pick (v0.8.133)
Co-authored-by: Cursor <[email protected]>
2026-05-22 19:15:50 -04:00
Raven ScottandCursor 76e9f3991e docs: note mention-in-bucket guild channel pick behavior (v0.8.132)
Co-authored-by: Cursor <[email protected]>
2026-05-22 19:12:44 -04:00
Raven ScottandCursor cfee2f8713 docs: note in-bucket position tie-break for guild channel pick (v0.8.131)
Co-authored-by: Cursor <[email protected]>
2026-05-22 19:08:36 -04:00
Raven ScottandCursor f9e50cab77 docs: document bucket minPos tie-break for guild channel pick (v0.8.130)
Co-authored-by: Cursor <[email protected]>
2026-05-22 19:05:32 -04:00
Raven ScottandCursor aea5485baf docs: mention-weighted parent bucket pick (v0.8.126)
Document that bucket totals use mention × 1000 + unread scores.
Smoke: test:guild-mention-bucket-pick.

Co-authored-by: Cursor <[email protected]>
2026-05-22 18:37:38 -04:00
Raven ScottandCursor eea4ce0187 feat(platform): pick guild channel by parent unread bucket total
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]>
2026-05-22 18:34:52 -04:00
Raven ScottandCursor f7c795259f fix(platform): category-scoped unread pick and channel unread counts
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]>
2026-05-22 18:32:14 -04:00
Raven ScottandCursor 19188c725c docs: note equal-unread position tie-break (v0.8.123)
Document that _selectGuildChannelWithUnread prefers lower channel.position
when mention/unread scores tie; smoke test:guild-unread-position-tie.

Co-authored-by: Cursor <[email protected]>
2026-05-22 18:25:09 -04:00
Raven ScottandCursor 43ac01b305 docs(platform): mention×1000 channel pick on loadGuild (v0.8.120)
Document mention-weighted scoring in _selectGuildChannelWithUnread and reference
test:guild-mention-channel-pick smoke.

Co-authored-by: Cursor <[email protected]>
2026-05-22 18:08:00 -04:00
Raven ScottandCursor 9629d1769b docs(platform): document loadGuild channel pick priority (v0.8.119)
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]>
2026-05-22 18:05:54 -04:00
Raven ScottandCursor 723627aa9a feat(platform): persist and restore last guild channel (v0.8.116)
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]>
2026-05-22 17:21:25 -04:00
Raven ScottandCursor 995469292a feat(platform): guild unread channel pick and search history (v0.8.115)
_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]>
2026-05-22 17:17:22 -04:00
Raven ScottandCursor 356f6fd9e3 feat(platform): persist discoveryExploreFilter in USER_PREFS
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]>
2026-05-22 15:54:51 -04:00
Raven ScottandCursor 9bf4d3c64f feat(platform): persist voice roster expanded channel ids in USER_PREFS
Phase 145 (v0.8.110): setVoiceRosterChannelExpanded stores
voiceRosterExpandedChannelIds across sessions. Ingest on boot from
user prefs alongside thread filter and voice roster filter prefs.

Co-authored-by: Cursor <[email protected]>
2026-05-22 15:23:47 -04:00
Raven ScottandCursor 911ade8aec feat(platform): createGuild publicListing toggle for discovery opt-out
Phase 144 (v0.8.109): createGuild accepts publicListing (default true).
recordGuild stores listing preference; announceGuild runs only when listed.
Unlisted servers stay invite-only until enabled in server settings.

Co-authored-by: Cursor <[email protected]>
2026-05-22 15:06:02 -04:00
Raven ScottandCursor 7d28f57d7f feat(platform): Phases 142–143 discovery, onboarding Explore, thread/voice prefs
Phase 142 (v0.8.107):
- navigateDeepLink explore kind with preserveBaseline and USER_PREFS ingest
- formatDiscoveryExploreBaselineDeepLink for shareable listing snapshots

Phase 143 (v0.8.108):
- onboardingExplorePending after first guild create; markOnboardingExploreShown
- joinInvite accepts pearcord://explore URLs (Join modal baseline paste)
- setThreadsPanelFilter persists threadsPanelFilter in USER_PREFS
- view exposes onboardingExplorePending for renderer auto-open Explore

Co-authored-by: Cursor <[email protected]>
2026-05-22 14:48:38 -04:00
Raven ScottandCursor 627f7fe492 feat(platform): setVoiceRosterCombinedFilter for voice roster preset
Single API toggles voiceRosterMutedOnly and voiceRosterDeafenedOnly
together for Phase 141 combined sidebar filter chip.

Co-authored-by: Cursor <[email protected]>
2026-05-22 14:17:32 -04:00
Raven ScottandCursor f5b4efa1ba feat(platform): setVoiceRosterDeafenedOnly API and view field
Add voiceRosterDeafenedOnly pref ingest, setter with USER_PREFS gossip,
and view export for Phase 140 deafened-only sidebar roster filter.

Co-authored-by: Cursor <[email protected]>
2026-05-22 14:08:46 -04:00
Raven ScottandCursor 6956e47db4 feat(platform): voice roster muted filter and explore baseline timestamp
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]>
2026-05-22 14:04:58 -04:00
Raven Scott 3693248166 docs: full module READMEs (v0.8.103 platform audit) 2026-05-22 13:39:50 -04:00
Raven ScottandCursor 910866b8fd feat(platform): self voice roster mute, prefs explore baseline (v0.8.103)
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]>
2026-05-22 13:11:12 -04:00
Raven ScottandCursor eebede9eb9 feat(platform): voice mute mesh roster, explore baseline, pinned-muted filter (v0.8.102)
Phase 137 platform depth:
- Ingest VOICE_MEDIA_MUTE into _voiceMuteMesh and expose muted/deafened on
  voiceStatesByChannel rows (local media peers + mesh gossip).
- markDiscoveryExploreOpened() snapshots discovery listing count; view adds
  discoveryNewSinceExplore for Explore +N badge while modal is closed.
- Allow threads panel filter pinned-muted; gossip self mute into mesh cache.

Co-authored-by: Cursor <[email protected]>
2026-05-22 12:53:10 -04:00
Raven ScottandCursor 8d88fdfe9a feat(platform): Phase 135 speaking roster, folder color, pinned filter (v0.8.100)
- voiceStatesByChannel.speaking from voiceMedia snapshot
- setServerFolderColor and threads panel pinned filter
- setThreadsPanelFilter accepts pinned

Co-authored-by: Cursor <[email protected]>
2026-05-22 12:07:36 -04:00
Raven ScottandCursor db54620007 feat(platform): Phase 134 thread pin/mute and discovery diff banner (v0.8.99)
- toggleThreadPinned and setThreadNotificationMuted APIs
- _wireDiscoveryEvents at init; discoveryDiffHint on listing ingest
- Pass pinned/muted maps into buildThreadsPanel

Co-authored-by: Cursor <[email protected]>
2026-05-22 11:53:33 -04:00
Raven ScottandCursor f0884ebdbb feat(platform): Phase 133 threads sort, discovery refresh, view fields (v0.8.98)
- setThreadsPanelSort and threadsPanelSort in view
- refreshDiscoveryListingsFromMesh on setDiscoveryFilter
- discoveryMeshRefreshAt for Explore freshness

Co-authored-by: Cursor <[email protected]>
2026-05-22 11:38:59 -04:00
Raven ScottandCursor 43d440e170 feat(platform): Phase 132 threads, voice presence, forum search refresh (v0.8.97)
- setThreadsPanelParentFilter and view.threadsPanelParentFilter
- voiceStatesByChannel rows include presenceStatus from guild mesh
- maybeRefreshStaleSearch on selectChannel for forum channel switches

Co-authored-by: Cursor <[email protected]>
2026-05-22 11:22:41 -04:00
Raven ScottandCursor 87cc613e38 feat(platform): auto-refresh stale mesh search on guild focus (v0.8.96)
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]>
2026-05-22 11:08:17 -04:00
Raven ScottandCursor 12360f4288 feat(platform): Phase 130 search refresh and presence prefs sync (v0.8.95)
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]>
2026-05-22 10:57:00 -04:00
Raven ScottandCursor be400a043a feat(platform): Phase 129 companion guild persist and presence summary
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]>
2026-05-22 10:44:38 -04:00