Add slash.invoke argCount/ephemeral/builtin and bot.install botName/permissionMask
plus bot.message contentLength to span.end for diagnostics and dev-log filters.
Co-authored-by: Cursor <[email protected]>
Reuse public listing and stats snapshots for 12s during light polls so typing and composer focus are not interrupted by repeated discovery.list work and log noise.
Co-authored-by: Cursor <[email protected]>
Add webhookName/channelId on webhook.create, deleted on webhook.delete,
contentLength/hasUsername on webhook.execute, and firstName on slash.register.
Co-authored-by: Cursor <[email protected]>
Add hasColor and permissionMask on role.create/update spans; allowBits and
denyBits on permission.overwrite; deleted on permission.overwrite.delete.
Co-authored-by: Cursor <[email protected]>
Add parentType/threadName on thread.create, parentId on thread.archive,
parentChannelId/messageId on forum.post, and normalize error logs to error:.
Co-authored-by: Cursor <[email protected]>
Add meshHitCount/localHitCount/mesh on search span end and messageId/pinCount
on pin.message and pin.unpin span end.
Co-authored-by: Cursor <[email protected]>
Enrich dm.open, discovery.list, and contacts.accept span.end fields and
normalize error logs to error: for dev-log dm-errors filtering during
Phase 468 discovery and DM depth work.
Co-authored-by: Cursor <[email protected]>
Add leavingIsStage to voice.leave span.end and label to screen.start span.end
so dev-log voice-errors filter and diagnostics clipboard capture richer
voice/stage disconnect context during guild operations.
Co-authored-by: Cursor <[email protected]>
message.send/edit span.end includes contentLength; reaction.toggle
includes removed flag for observability and agentctl verification.
Co-authored-by: Cursor <[email protected]>
Include role name on role.update span.end and targetType on permission.overwrite span.end for P2P permission debugging.
Co-authored-by: Cursor <[email protected]>
Add guildId/channelId to slash.invoke; bot.message and bot.install spans
with structured errors for Phase 461 observability.
Co-authored-by: Cursor <[email protected]>
Add guildId to emoji.upsert span/end/error logs and wrap upsertGuildSticker
in sticker.create span with span.fail for Phase 459 observability.
Co-authored-by: Cursor <[email protected]>
deleteChannel with gossip; thread.create, thread.archive, and forum.post
spans include guildId, span.fail, and structured error logs.
Co-authored-by: Cursor <[email protected]>
Wrap updateGuildSettings and createInvite with timed spans and structured
error logs for settings diagnostics and dev-log filters.
Co-authored-by: Cursor <[email protected]>
Add searchGuildId to guild.search spans via endSearchSpan helper and
guildId metadata on pin.message and pin.unpin spans for diagnostics.
Co-authored-by: Cursor <[email protected]>
Extend notification.open, markAll, markRead, and inbox/thread read spans
so span.end includes guildId for diagnostics and dev-log filtering.
Co-authored-by: Cursor <[email protected]>
Add guildId and channelId to voice.join/leave, stage.join/speaker.*, and
screen.start/stop spans and error logs; standardize error field naming.
Co-authored-by: Cursor <[email protected]>
Phase 449 adds guildId and channelId to message.send/edit/delete and reaction.toggle spans; split read-only participate errors for send vs reactions.
Co-authored-by: Cursor <[email protected]>
Extend role.create/update/delete/reorder/member and permission.overwrite
spans with guildId metadata. Expose channelPermsByChannel and
channelOverwriteCount in view snapshot for UI diagnostics.
Co-authored-by: Cursor <[email protected]>
Call _invalidateSearchCache when markChannelRead completes for thread
channels so stale forum/guild search results refresh after inbox read.
Co-authored-by: Cursor <[email protected]>
Add markNotificationRead wrapper with notification.markRead span and
error logging. Use inbox.mark-read span for non-thread markChannelRead.
Extend notification.markAll span with guildId metadata.
Co-authored-by: Cursor <[email protected]>
Add observability spans and error logs for thread.create, forum.post,
thread.read, and thread.archive, plus thread.archive audit entries.
Co-authored-by: Cursor <[email protected]>
Wrap upsertGuildEmoji and _normalizeStickerNames with timed spans
and structured error logs for emoji-errors diagnostics filter.
Co-authored-by: Cursor <[email protected]>
Wrap voice.join, stage.join, stage.speaker.*, and screen.start/stop
with timed spans and structured error logs for voice-errors diagnostics.
Co-authored-by: Cursor <[email protected]>
Wrap stageAttachment, readAttachmentPreview, and _queueLinkEmbed with log.time
spans and attachment.stage/read + embed.resolve error records on failure.
Co-authored-by: Cursor <[email protected]>
Wrap sendMessage, editMessage, deleteMessage, and toggleReaction with log.time
spans and message.* / reaction.toggle error records on failure.
Co-authored-by: Cursor <[email protected]>
Wrap createChannelWebhook, deleteChannelWebhook, executeChannelWebhook,
registerSlashCommands, deleteSlashCommand, and executeSlashCommand with timed spans
and structured error logs for dev-log webhook-errors and slash-errors filters.
Wrap banMember, kickMember, timeoutMember, and exportAuditLog with timed spans
and structured error logs for dev-log moderation-errors and audit-errors filters.
Persist guild inbound handler as ingestInboundGuildMessage for home view, resolve mentions from DB members when guild mesh is detached, and add structured error logs for mark-all, open notification, and mark-channel-read.
Co-authored-by: Cursor <[email protected]>
deleteSlashCommand with gossip; slash.register/delete/invoke audit entries;
member role checks and ephemeral reply prefix on execute.
Co-authored-by: Cursor <[email protected]>
Wire pearcord-webhooks for local token posts, view.guildWebhooks, gossip
sync, and webhook author display names on messages.
Co-authored-by: Cursor <[email protected]>
Bounded joinMesh wait now logs INFO and completes guild.open instead of
rejecting the session when Hyperswarm join stalls past flushMs + 5s.
Co-authored-by: Cursor <[email protected]>
Emit a dedicated debug line when mesh-enabled refresh reuses cached
search results, alongside the generic refresh cache hit log.
Co-authored-by: Cursor <[email protected]>
Emit cache hit when mesh-off refresh would reuse cached results and
cache miss only when the cache key does not match.
Co-authored-by: Cursor <[email protected]>
When an unchanged setSearch call does not hit cache with mesh disabled,
emit a dedicated debug line with scope and includeMesh false.
Co-authored-by: Cursor <[email protected]>
When an unchanged setSearch call does not hit the search cache with mesh
enabled, emit a dedicated debug line with scope and includeMesh true.
Co-authored-by: Cursor <[email protected]>
When mesh search refresh misses cache with includeMesh true, emit a
dedicated debug line before the mesh-on refresh span.
Co-authored-by: Cursor <[email protected]>
Mirror mesh-on cache hit logging when includeMesh is false so guild
search diagnostics show scope on unchanged cache hits.
Co-authored-by: Cursor <[email protected]>
When refreshSearch is skipped because mesh is off but in-memory cache
would have hit, emit guild.search refresh mesh-off cache miss for diagnostics.
Co-authored-by: Cursor <[email protected]>
When setSearch no-ops with valid in-memory cache and mesh enabled, emit
guild.search setSearch mesh-on cache hit including scope for diagnostics.
Co-authored-by: Cursor <[email protected]>
refreshSearch emits guild.search refresh cache miss before mesh-on
invalidation, both including scope and includeMesh for diagnostics.
Co-authored-by: Cursor <[email protected]>
Log guild.open error when _openGuild fails for diagnostics filtering.
refreshSearch returns immediately on mesh-off with scope in skipped debug log.
Co-authored-by: Cursor <[email protected]>
Log guild.search setSearch mesh-on scope change when includeMesh is on and
search scope changes between channel, forum, and guild.
Co-authored-by: Cursor <[email protected]>
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]>
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]>
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]>
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]>
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]>
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]>
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]>
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]>
Skip cache invalidation when search query/scope/mesh unchanged.
Pass parent channel name into notifications for thread messages.
Co-authored-by: Cursor <[email protected]>
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]>
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]>
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]>
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]>
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]>
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]>
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]>
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]>
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]>
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]>
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]>
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]>
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]>
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]>
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]>
_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]>