_runScheduledAuditExportIfDue now calls pushAuditExportCsvToMesh when
pushSignedCsvToMesh is enabled. View exposes auditExportCsvMeta for the
audit modal HMAC signature badge.
Co-authored-by: Cursor <[email protected]>
- dryRunDigestWebhookRelay and webhook preview on digest-relay hook dry-run
- refreshArchivePeerHealth with persist + GUILD_SYNC mesh push
- syncModDigestGroupDmFromMesh and modDigestGroupDmMeta on GUILD_SYNC bundle
- Signed CSV hook failure digest export with signatureValid
- Ingest mod digest meta for all members; open group DM for mods only
Co-authored-by: Cursor <[email protected]>
Add ensureModDigestGroupDmChannel and _postModDigestGroupDmSummary so hook
failure digest mesh sync can post to an auto-created mod group DM without
leaving guild mode. Requires two other moderators (manage guild/channels).
Restore guild session after DM posts. Extend hook failure notify prefs API
for mod digest group DM toggles.
Co-authored-by: Cursor <[email protected]>
- Sign relay handoffs with guild-derived secret for webhook/smtp plugins
- Verify signature on getLastDigestRelayHandoff (signatureValid)
- Apply health decay in archive peer picker
- Show signature status in server settings UI
Co-authored-by: Cursor <[email protected]>
Record digest relay handoffs, post digest summaries to configured inbox channels,
validate worker versions on announce, sync digestRelayHandoff on GUILD_SYNC,
and expose getLastDigestRelayHandoff (Phase 109 v0.8.73).
Co-authored-by: Cursor <[email protected]>
- listAuditArchiveFetchPeers returns meshConnected per member
- automationDigestExportSchedule timer and snapshot persistence
- GUILD_SYNC slices for schedule and snapshot metadata
- runOverdueAutomationSchedules includes digest export task
Co-authored-by: Cursor <[email protected]>
- fetchAuditExportArchiveFromMesh via RPC 72 request/response waiters
- Respond to audit-export-archive-request when local archive has entries
- getAutomationScheduleDashboard on view state
- runIntegrationWorkerTrial fans out MESSAGE_CREATE and requires sawMessageCreate
- Merge archive ingest resolves pending mesh fetch waiters
Co-authored-by: Cursor <[email protected]>
Expose getAutomationDeliveryMetrics, dryRunAutomodMessage with optional
memberRoles, and automationDeliveryMetrics on view for server settings.
Co-authored-by: Cursor <[email protected]>
Include receiptRetention in guild sync bundles and ingest on join. Expose
dryRunAutomationHook and dryRunAllAutomationHooks for server settings
preview without writing delivery receipts.
Co-authored-by: Cursor <[email protected]>
Wire pearcord-delivery-receipts to run enabled hooks on every APP_EVENT and
bot-bridged messageCreate. Successful deliveries gossip APP_EVENT_RECEIPT;
view exposes automationDelivery stats for server settings UI.
Co-authored-by: Cursor <[email protected]>
Hide channels denied via role or channel overwrite from view().channels,
guard selectChannel with memberCanViewChannel, and reassign activeChannelId
to the first visible text channel when the current selection becomes hidden
after loadGuild or permission gossip.
Co-authored-by: Cursor <[email protected]>
Bundle channelSettings (description + slowmode) and all topic-bearing channel
types in GUILD_SYNC; ingest into ChannelDescriptionStore on peer join. Push
mesh sync after topic/description edits. _participationMask applies channel
overwrites for send, voice join, and view.canPostInActiveChannel.
Integrate pearcord-channel-permissions: list/upsert/delete overwrites,
channel-effective _hasPerm/_myPermissions, GUILD_SYNC bundle, and mesh
ingest handlers. Requires MANAGE_CHANNELS on the active channel to edit.
Add setActivityImageFromBytes (256 KB image cap, __presence__ channel) and
readActivityImagePreview for UI thumbnails. Merges large/small image keys
into the current activity and reuses presence enrichment for P2P gossip.
Async _enrichPresenceActivity resolves large/small image keys via the
local attachments store before PRESENCE_UPDATE broadcast on guild and
contacts meshes. Updates self presence activity after enrichment.
Wire pearcord-activity buildActivityFeed into view(), extend setPresence and
add setActivity for Now Playing. Friend list rows include activity field.
Co-authored-by: Cursor <[email protected]>
Wire pearcord-server-folders into PearcordPlatform: createServerFolder,
assignGuildToFolder, collapse/rename/delete, and buildServerRailLayout on
view() as serverRail with folderColors. Persist via updateUserPrefs
serverFolders and emit user-prefs after saves.
Co-authored-by: Cursor <[email protected]>
joinVoiceChannel auto-upgrades lurkers to listen-only; joinVoiceListenOnly
is explicit. Blocks unmute, soundboard, screen share, and mic capture when
listen-only. View exposes canJoinVoiceListenOnly, voiceMedia.listenOnly,
and listenOnly on voiceStatesByChannel. Audit VOICE_JOIN_LISTEN.
Co-authored-by: Cursor <[email protected]>
Parse pearcord:// URLs, load guild or openGroupDM context, then
jumpToMessage for notification and share-link flows.
Co-authored-by: Cursor <[email protected]>
Add resolveMessageJump and jumpToMessage so the UI can navigate to
reply parents in other text/DM channels before scrolling and highlighting.
Co-authored-by: Cursor <[email protected]>
Wire pearcord-guild-roles for create/update/delete roles, member assignments,
_hasPerm enforcement, GUILD_SYNC role bundles, and view.guildCustomRoles for UI.
Co-authored-by: Cursor <[email protected]>
- _buildGuildSyncBundle includes full members[] from listMembers()
- _ingestGuildSync upserts member rows and emits member for UI refresh
- _pushGuildSyncToMesh runs when messages or members exist (not messages-only)
Late joiners and reconnecting peers receive roster + roles over live mesh.
Co-authored-by: Cursor <[email protected]>