Commit Graph
100 Commits
Author SHA1 Message Date
Raven ScottandCursor 9e61a270ae feat(v0.8.278): refreshSearch cache hit debug logging
Skip invalidate when search cache is still valid and log guild.search refresh
cache hit with scope at debug level.

Co-authored-by: Cursor <[email protected]>
2026-05-23 08:54:24 -04:00
Raven ScottandCursor 18ba1e597d fix(search): log debug when setSearch unchanged hits cache
Emit guild.search unchanged cache hit with scope before the generic
unchanged log for mesh-on and mesh-off duplicate queries.

Co-authored-by: Cursor <[email protected]>
2026-05-23 08:48:48 -04:00
Raven ScottandCursor 953147d8f1 fix(search): log debug on refreshSearch with mesh disabled
Emit guild.search refresh mesh-off before cache invalidation when
includeMesh is false to aid diagnostics during local-only refresh.

Co-authored-by: Cursor <[email protected]>
2026-05-23 08:43:15 -04:00
Raven ScottandCursor dc3ffd78f7 fix(search): log mesh-off when setSearch query unchanged
Emit guild.search unchanged mesh-off at debug when duplicate search
runs with mesh disabled to distinguish from mesh-on no-ops.

Co-authored-by: Cursor <[email protected]>
2026-05-23 08:39:04 -04:00
Raven ScottandCursor 0fb10c4927 fix(search): log debug when refreshSearch is skipped
Emit guild.search refresh skipped with reason and query length for short
or missing queries to aid diagnostics during mesh-off refresh flows.

Co-authored-by: Cursor <[email protected]>
2026-05-23 08:33:49 -04:00
Raven ScottandCursor 2f88791593 feat(search): log guild.search unchanged at debug on setSearch no-op
Helps diagnose redundant search IPC and cache hits during light view
polling without spamming info-level guild.search spans.

Co-authored-by: Cursor <[email protected]>
2026-05-23 08:26:30 -04:00
Raven ScottandCursor 5188f6ea28 fix(search): clear searchUnchanged at start of every view()
Move the one-tick searchUnchanged flag to the top of view() so full and
light polls both consume it once before async work begins.

Co-authored-by: Cursor <[email protected]>
2026-05-23 08:21:16 -04:00
Raven ScottandCursor 7ebb5b945c fix(search): clear searchUnchanged after one view() tick
Expose duplicate setSearch as a single-view flag so UI and agentctl can
detect no-op searches without the flag sticking across polls.

Co-authored-by: Cursor <[email protected]>
2026-05-23 08:16:28 -04:00
Raven ScottandCursor 756b789ec5 fix(search): honor in-memory cache on unchanged setSearch and full view
Repeated setSearch with the same query now marks searchResultsCached when
the resolve cache is still valid, and cache hits apply to full view() polls
so agentctl and headless sessions do not re-run guild.search every tick.

Co-authored-by: Cursor <[email protected]>
2026-05-23 08:10:46 -04:00
Raven ScottandCursor 06db01f632 feat(search): setSearch no-op when unchanged; thread notify parent
Skip cache invalidation when search query/scope/mesh unchanged.
Pass parent channel name into notifications for thread messages.

Co-authored-by: Cursor <[email protected]>
2026-05-23 08:03:11 -04:00
Raven ScottandCursor 1389cdb172 fix(send): @here/@everyone use parent perms in threads
Thread channels inherit mention permissions from the parent text
channel. refreshSearch no-ops when the query is shorter than two chars.

Co-authored-by: Cursor <[email protected]>
2026-05-23 07:57:44 -04:00
Raven ScottandCursor 84dc333b6f fix(search): scope-aware refresh and forum cache invalidation
refreshSearch validates channel/forum scope before invalidating cache.
Forum archived toggle only busts search cache when forum scope is active.

Co-authored-by: Cursor <[email protected]>
2026-05-23 07:52:49 -04:00
Raven ScottandCursor 45bdab1fda fix(search): channel scope uses messages.history and cache guards
Prefer aligned messages.history for channel search, fall back to db
with channelId filter, and invalidate stale cache on channel switch.

Co-authored-by: Cursor <[email protected]>
2026-05-23 07:46:53 -04:00
Raven ScottandCursor 23ceb91db0 feat(platform): Phase 303 channel search rank and forum refresh (v0.8.265)
Rank channel-scoped search hits with pearcord-search; refreshSearch on
forumIncludeArchived toggle; debug log when light view skips listMembers.

Co-authored-by: Cursor <[email protected]>
2026-05-23 07:33:57 -04:00
Raven ScottandCursor 1d07463e01 feat(platform): Phase 302 search cache, channel scope, thread perms (v0.8.264)
Invalidate forum search cache on forum channel switch; add channel-scoped
_resolveSearchResults, forum archived hidden count, parentChannelPermissions,
cache-hit guild.search debug span, and skip listMembers during guild loading.

Co-authored-by: Cursor <[email protected]>
2026-05-23 07:29:13 -04:00
Raven ScottandCursor 167f0991cf feat(platform): guild-switch search cache safety and voice labels
Bust search cache at loadGuild/openHome/createGuild and on superseded
loads. Track guild id on cache entries; expose searchResultsCached.
Log cache misses at debug. Clear refreshing in refreshSearch finally.
Voice roster includes streamingLabel from screen share gossip.

Co-authored-by: Cursor <[email protected]>
2026-05-23 07:22:42 -04:00
Raven ScottandCursor 082929693b feat(platform): search cache invalidation and voice streaming state
Invalidate search cache on refresh, guild load, and forum archived toggle.
Log light-view cache hits at debug. Distinct @here permission error.
Expose streaming flag on voice roster from active screen shares.

Co-authored-by: Cursor <[email protected]>
2026-05-23 07:15:26 -04:00
Raven ScottandCursor fab95833fd fix(platform): forum search from post thread + light search cache
Resolve forum parent when active channel is a forum post thread so
forum-scoped search works after creating or viewing a post. Cache search
results for view(light), expose searchMs on mesh meta, and log superseded
guild loads at info.

Co-authored-by: Cursor <[email protected]>
2026-05-23 07:10:32 -04:00
Raven ScottandCursor 821d90afa5 feat(v0.8.260): guild search spans, superseded load, mention gate
Log guild.search around _resolveSearchResults, abort stale guild opens
after mesh join when load generation advances, and require MENTION_EVERYONE
for @everyone/@here sends.

Co-authored-by: Cursor <[email protected]>
2026-05-23 07:03:51 -04:00
Raven ScottandCursor 593dcd2b94 Complete Phase 297 observability spans and thread mentions (v0.8.259).
Log guild.open.selectChannel; pass mentionAlerts into buildThreadsPanel; deep-link guildId fallback.

Co-authored-by: Cursor <[email protected]>
2026-05-23 06:53:03 -04:00
Raven ScottandCursor 410193e080 Diagnostics JSONL meta line and view.light list timing spans.
writeDiagnosticsJsonl prepends diagnostics-meta with composerTraceCount; light view logs listChannels and listMembers separately.

Co-authored-by: Cursor <[email protected]>
2026-05-23 06:45:53 -04:00
Raven ScottandCursor 4d429a0985 Add guild.open listChannels and listMembers timing spans.
Parallel fetch during _openGuild is logged separately for load diagnostics in pearcord.log.

Co-authored-by: Cursor <[email protected]>
2026-05-23 06:40:26 -04:00
Raven ScottandCursor 6ce8575404 Expose formatSettingsDeepLink on platform API.
Wraps shared buildSettingsDeepLink for pearcord://settings URLs used by the settings copy-link button.

Co-authored-by: Cursor <[email protected]>
2026-05-23 06:33:51 -04:00
Raven ScottandCursor 4aa0e85c32 Handle pearcord://settings in navigateDeepLink.
Opens user or guild settings panels via deep-link-result without requiring guild load.

Co-authored-by: Cursor <[email protected]>
2026-05-23 06:27:39 -04:00
Raven ScottandCursor 3ae5581460 Add writeDiagnosticsJsonl for UI diagnostics panel export.
Persists filtered JSONL lines from the renderer to storage so agents and support can attach logs without clipboard limits.

Co-authored-by: Cursor <[email protected]>
2026-05-23 06:22:20 -04:00
Raven ScottandCursor b35f407106 docs(platform): note v0.8.252 search skip and prefetch guards
Co-authored-by: Cursor <[email protected]>
2026-05-23 05:32:50 -04:00
Raven ScottandCursor 2afaff3426 feat(platform): skip guild search and warm emoji when channels locked
When guild open has no viewable channels, skip mesh search refresh and
resolve empty results with skip metadata. Emoji batch prefetch honors the
negative miss cache; sticker gossip prefetch waits for attachments module.
Session startup logs INFO when initial guild mesh flush was bounded.

Co-authored-by: Cursor <[email protected]>
2026-05-23 05:32:25 -04:00
Raven ScottandCursor caec052e0b feat(platform): session startup INFO on bounded mesh and emoji prefetch
Log session.startup at info when guild mesh flush was bounded, skip forum
stale search until a forum channel is active, batch-prefetch emoji attachments
after guild open, and guard sticker prefetch until attachments exist.

Co-authored-by: Cursor <[email protected]>
2026-05-23 05:22:13 -04:00
Raven ScottandCursor 172407468d fix(platform): guild load/search polish and bounded-mesh log levels
Downgrade slow guild.open and guild.load spans to info when mesh flush
was bounded, skip stale search refresh until a channel is selected, and
defer sticker attachment prefetch until the emoji registry is initialized.

Co-authored-by: Cursor <[email protected]>
2026-05-23 05:13:15 -04:00
Raven ScottandCursor 3fce1d4c94 fix(platform): always surface guild slash commands in view
Init registry and ensure builtins when the command list is empty so the
composer picker has /help and /ping after guild open.

Co-authored-by: Cursor <[email protected]>
2026-05-23 05:05:51 -04:00
Raven ScottandCursor e2bf604bff fix(platform): guild.open INFO when no viewable channels (v0.8.249)
Avoid slow-open WARN when the user lacks view permission on all text
channels by passing logLevel info on the guild.open span.

Co-authored-by: Cursor <[email protected]>
2026-05-23 04:56:17 -04:00
Raven ScottandCursor 2c87352a8d fix(platform): guild access hints and deferred module init (v0.8.248)
Defer guild module wiring until after channel pick, expose no-viewable-channel
state on the view, and clear emoji miss cache when mesh prefetch succeeds.

Co-authored-by: Cursor <[email protected]>
2026-05-23 04:50:04 -04:00
Raven ScottandCursor 130c2c4528 fix(v0.8.247): viewable channel pick, emoji/sticker prefetch, perf
_selectGuildChannelWithUnread skips channels without view permission.
Prefetch emoji/sticker bytes on gossip, parallel listChannels+members
in view(), joinMesh span INFO when flush is bounded.

Co-authored-by: Cursor <[email protected]>
2026-05-23 04:43:08 -04:00
Raven ScottandCursor 4d871dfafc feat(v0.8.246): parallel session meshes and emoji miss cache
Join discovery, contacts, and settings meshes in parallel after guild
load. Cache negative emoji attachment lookups with TTL to avoid
retry storms.

Co-authored-by: Cursor <[email protected]>
2026-05-23 04:37:17 -04:00
Raven ScottandCursor 8954916895 feat: light view() polls with cached devices list
view(opts) accepts { light: true } to reuse deviceSync.listDevices()
for up to PEARCORD_VIEW_DEVICES_CACHE_MS on hot poll paths.

Co-authored-by: Cursor <[email protected]>
2026-05-23 04:31:18 -04:00
Raven ScottandCursor 00a8869663 fix(emoji): sync attachment meta from gossip; graceful image miss
Ensure EMOJI_UPSERT rows hydrate attachments store, return null from
readEmojiImage when bytes are missing, and log mesh flush timeout at INFO.

Co-authored-by: Cursor <[email protected]>
2026-05-23 04:23:16 -04:00
Raven ScottandCursor dfe370d72d perf(guild): bounded mesh flush, open sub-spans, defer heavy init
Cap Hyperswarm flush at PEARCORD_GUILD_SWARM_FLUSH_MS, log sub-spans for
leave/join/voice, defer guild modules and discovery touch off critical path.

Co-authored-by: Cursor <[email protected]>
2026-05-23 04:15:24 -04:00
Raven ScottandCursor 1813708714 fix(compose): silent setComposeDraft without local prefs notify
Co-authored-by: Cursor <[email protected]>
2026-05-23 04:10:24 -04:00
Raven ScottandCursor ccedd20edf feat(log): platform session and guild load spans
Wire pearcord-log for ready(), session startup, loadGuild, and openGuild
with stale-load warnings and structured errors.

Co-authored-by: Cursor <[email protected]>
2026-05-23 04:02:53 -04:00
Raven ScottandCursor c4146fa079 fix(platform): sessionReady and guildLoading view fields (v0.8.237)
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]>
2026-05-23 03:37:42 -04:00
Raven ScottandCursor c36c5799e4 feat(platform): updateGuildSettings nsfwGateEnabled (v0.8.174)
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]>
2026-05-22 22:48:40 -04:00
Raven ScottandCursor 25a4a48a1e Add setChannelNsfw for age-restricted channel marking
Manage Channels permission updates nsfw flag with audit log and channel gossip.

Co-authored-by: Cursor <[email protected]>
2026-05-22 22:35:53 -04:00
Raven ScottandCursor df0060623c Expose slowmode remaining and voice user limit APIs
Compute slowmodeRemainingSec for composer UI, setChannelUserLimit, and capacity checks on voice/stage join.

Co-authored-by: Cursor <[email protected]>
2026-05-22 22:25:38 -04:00
Raven ScottandCursor aa91e1a0ff Expose emoji-only layout and renameChannel for GUI
messageLayoutKind returns emoji-only; renameChannel gossips category/channel name updates for inline sidebar rename.

Co-authored-by: Cursor <[email protected]>
2026-05-22 22:17:44 -04:00
Raven ScottandCursor 21a5f7984b feat(platform): include custom role names in mentionNames (v0.8.170)
Role @mentions in composer autocomplete highlight in message rendering.

Co-authored-by: Cursor <[email protected]>
2026-05-22 22:05:57 -04:00
Raven ScottandCursor 45cf74ec42 feat(platform): moveChannelToParent with gossip and audit (v0.8.168)
Expose channel parent moves for Manage Channels permission holders.

Co-authored-by: Cursor <[email protected]>
2026-05-22 21:55:29 -04:00
Raven ScottandCursor dff4064efe feat(platform): setChannelMuteDuration and notification level cleanup
Wire timed mute IPC and clear channelMuteUntil when setting permanent
notification levels.

Co-authored-by: Cursor <[email protected]>
2026-05-22 21:45:06 -04:00
Raven ScottandCursor 91d7e3abc9 feat(platform): channel open read snapshot and role reorder API
Expose activeChannelLastReadAt from pre-mark read cursor for unread
divider UI and add reorderGuildCustomRoles with ROLE_UPSERT gossip.

Co-authored-by: Cursor <[email protected]>
2026-05-22 21:37:58 -04:00
Raven ScottandCursor c768d9fe3b feat(platform): setChannelNotificationLevel for guild channel prefs
Wire per-channel notification overrides with mutedChannelIds sync and
mesh gossip via notification prefs.

Co-authored-by: Cursor <[email protected]>
2026-05-22 21:20:30 -04:00
Raven ScottandCursor 7d899fb655 feat(platform): reorderCategories with permissions and gossip
Expose category reorder for MANAGE_CHANNELS holders with audit logging
and mesh gossip for each moved category row.

Co-authored-by: Cursor <[email protected]>
2026-05-22 21:08:23 -04:00
Raven ScottandCursor 8bfae6e3c2 feat(platform): reorderChannelsInParent with permission and gossip
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]>
2026-05-22 21:03:25 -04:00
Raven ScottandCursor 3438c3d252 docs: v0.8.158 dual combo buckets highest on guild open
Document guild channel pick when two mention+plain parent buckets compete;
smoke test:guild-dual-combo-buckets-highest.

Co-authored-by: Cursor <[email protected]>
2026-05-22 20:42:16 -04:00
Raven ScottandCursor d4a5b1afc3 docs: v0.8.157 plain bucket beats triple combo on guild open
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]>
2026-05-22 20:39:22 -04:00
Raven ScottandCursor 1c2f03d031 docs: v0.8.156 triple combo buckets highest on guild open
Document guild channel pick when three mention+plain parent buckets compete;
smoke test:guild-triple-combo-buckets-highest.

Co-authored-by: Cursor <[email protected]>
2026-05-22 20:37:05 -04:00
Raven ScottandCursor fb3df3d835 docs: v0.8.155 triple plain bucket wins on guild open
Document guild channel pick when three plain-only parent buckets compete;
smoke test:guild-triple-plain-bucket-pick.

Co-authored-by: Cursor <[email protected]>
2026-05-22 20:33:11 -04:00
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