Commit Graph
735 Commits
Author SHA1 Message Date
Raven ScottandCursor ce0001c8c3 feat(platform): Phase 673 member heal, presence dedupe, and audit spans
Extend partition heal with member list and voice occupancy recovery,
presence gossip dedupe via _gossipPresenceIfNew, kick span metadata, and
member.role.add/remove audit on custom role assignment.

Co-authored-by: Cursor <[email protected]>
2026-06-02 22:05:03 -04:00
Raven ScottandCursor 6fcabcae33 Phase 672 platform: thread rate limit, gossip dedupe, heal, lock, tag filters
Add thread create rate limiting, idempotent thread metadata gossip, partition
heal on rejoin, lockThread with audit, spanKind on thread.create, and
multi-select forumTagFilters with toggle IPC support.

Co-authored-by: Cursor <[email protected]>
2026-06-02 21:54:09 -04:00
Raven ScottandCursor 5093bd6ca7 feat(v0.8.646): Phase 671 pin/search mesh hardening and jump fetch
Pin rate limits, gossip dedupe, partition heal, audit entries, announcement
pin fanout, search index remove/heal on edit/delete, mesh jump fetch via
GUILD_SYNC_REQUEST, and thread-root channel search scope.

Co-authored-by: Cursor <[email protected]>
2026-06-02 21:09:52 -04:00
Raven ScottandCursor 2a6c782693 feat(v0.8.645): Phase 670 sticker/GIF mesh hardening and platform spans
Sticker and GIF rate limits, gossip dedupe, partition heal, pack reorder,
announcement sticker fanout, DM sticker notifications, and extended
sticker.send/sticker.create span metadata.

Co-authored-by: Cursor <[email protected]>
2026-06-02 20:59:53 -04:00
Raven ScottandCursor 88c3b4bbdd Phase 669: reaction rate limit, gossip dedupe, and partition heal.
Add removeMemberReaction with audit, emojiName span metadata, notifyOnReaction
DM path, frequent-reaction pref recording, and reactionTotalsByMessage for
thread badges.

Co-authored-by: Cursor <[email protected]>
2026-06-02 20:44:47 -04:00
Raven ScottandCursor e50d317aa4 Phase 668: composer embed preview and mesh embed guards.
Add prefetchComposerEmbed, clearComposerEmbedPreview, guild resolve rate
limit, DM gossip bandwidth cap, URL-hash dedupe, and domain policy gates.

Co-authored-by: Cursor <[email protected]>
2026-06-02 20:34:17 -04:00
Raven ScottandCursor 295f233bfb Integrate markdown unfurl policy into embed queue and edit flows.
Skips hub and emoji-only layouts, refreshes embeds when edit changes URL,
filters linkEmbedsByMessage by layout, and logs markdown-embed suppressions.

Co-authored-by: Cursor <[email protected]>
2026-06-02 20:22:26 -04:00
Raven ScottandCursor 743f6bfb37 Phase 666: DM embed queue, gossip, retry, and IME prefetch gate.
Wire DM link-embed ingest, conversation-scoped cache lookups, retryLinkEmbedForMessage,
and document slowmode-safe read-only embed resolve path.

Co-authored-by: Cursor <[email protected]>
2026-06-02 20:16:30 -04:00
Raven ScottandCursor 09e254432a feat(embeds): exportEmbedDiagnostics, prefetch coalesce, embed heal (P666)
Extend _queueLinkEmbed for DM mode, embed.prefetch spans, multi-embed view
slice, embed.clear on message edit, and partition heal stale cache entries.

Co-authored-by: Cursor <[email protected]>
2026-06-02 20:01:39 -04:00
Raven ScottandCursor 13aecb1211 feat(attachments): forward, heal, preview reads for Phase 665 batch 2
Add forwardAttachment, cancelAttachmentDownload, _healOrphanedAttachmentRefs,
read-only stageAttachment gate, and extended readAttachmentPreview for video
and modern image formats.

Co-authored-by: Cursor <[email protected]>
2026-06-02 19:50:52 -04:00
Raven ScottandCursor 0eb4922790 Phase 665: attachment diagnostics, fetch progress, group DM quota
Add exportAttachmentDiagnostics, attachment.fetch spans with setFetchProgress,
groupDmAttachmentMaxBytes on stageAttachment, and slowmode gate on staging.

Co-authored-by: Cursor <[email protected]>
2026-06-02 19:36:02 -04:00
Raven ScottandCursor c7e10d09dd Phase 664: voice-note fetch, forward, heal, and group DM quota.
Add fetchVoiceNoteBlob, forwardVoiceNote, failed-commit heal on partition
sync, group DM byte caps on stage, and extended diagnostics export.

Co-authored-by: Cursor <[email protected]>
2026-06-02 19:26:04 -04:00
Raven ScottandCursor ec14ac1dc0 Phase 664: voice note diagnostics, gate in view, and gossip idempotency.
Adds exportVoiceNoteDiagnostics, voiceNoteGate in view, voiceNote.commit span, max duration guard on stage, and _ingestVoiceNoteGossip for duplicate VOICE_NOTE_CREATE payloads.

Co-authored-by: Cursor <[email protected]>
2026-06-02 19:15:28 -04:00
Raven ScottandCursor aac8cb4da3 Docs: Phase 654 partition-heal batch 2 README note.
Co-authored-by: Cursor <[email protected]>
2026-06-02 19:03:30 -04:00
Raven ScottandCursor db94b6ee26 Phase 654 batch 2: extend partition heal with sparse ACK resume, hyperbee rebuild, and sync fanout.
Adds heal hooks for member roles, forum/search, settings device sync, and extended voice/emoji/automod slices; wires retryWire on host mesh join and adaptive guild.create mesh caps.

Co-authored-by: Cursor <[email protected]>
2026-06-02 19:03:25 -04:00
Raven ScottandCursor acd9cbbb6b Phase 654 mesh resilience: diagnostics, auto-heal, joiner attach.
Per-channel replication lag in exportMeshReplicationDiagnostics; zero-peer auto-heal; partition heal channel metadata; discovery refresh on peer retry; adaptive retry span; gossip replay watermark; multi-guild sync QoS; rail replicating/healing state.

Co-authored-by: Cursor <[email protected]>
2026-06-02 17:43:28 -04:00
Raven ScottandCursor 93dae1cac4 Complete Phase 658 DM video, screen share, and stage bridge.
Stage speaker to DM bridge API, attach-mesh video tile ingest, dmScreenShare view + screen-frame broadcast, dmVideoTiles snapshot.

Co-authored-by: Cursor <[email protected]>
2026-06-02 17:30:29 -04:00
Raven ScottandCursor 2a48f91877 Wire DmPollStore sync and scenario fixtures into platform.
Sync poll rows on create/vote/edit/close/delete, expose export/import APIs and dmPollEngine in view.

Co-authored-by: Cursor <[email protected]>
2026-06-02 17:17:55 -04:00
Raven ScottandCursor a62b63b918 Harden DM scheduled message queue delivery for Phase 659.
Add per-channel queue limits, blocked-peer guards, exponential retry,
recurrence re-queue, stale prune, audit log entries, and dm.schedule spans.

Co-authored-by: Cursor <[email protected]>
2026-06-02 17:09:14 -04:00
Raven ScottandCursor 60fe33356b Add compose.draft.save telemetry span for draft persistence.
Surfaces draft save duration and payload size in platform logs to support
Phase 660 composer draft flush debounce verification.

Co-authored-by: Cursor <[email protected]>
2026-06-02 16:58:55 -04:00
Raven ScottandCursor 93bd5d7cfb Add composerPostBlockReason and updateDmScheduledMessage APIs.
Expose announcement vs lurker block reason in view; allow editing queued
DM scheduled messages before send.

Co-authored-by: Cursor <[email protected]>
2026-06-02 16:48:13 -04:00
Raven ScottandCursor 96f5893aad Complete Phase 409 platform perf, integrity, and mesh hardening.
Add adaptive poll helpers, discovery frame dedupe, poll DB read budget,
view integrity (draft prune, pin fallback, cross-ref audit, prefs checksum),
mesh quiet mode, topic merge counters, and discovery local-only guard.

Co-authored-by: Cursor <[email protected]>
2026-06-02 16:41:37 -04:00
Raven ScottandCursor ca50f20639 feat(platform): screen share refresh and presence stale reaper
Add refreshScreenSharePreview for frozen stream recovery and invoke
presence.reapStalePeers during view() so ghost peers are cleared.

Co-authored-by: Cursor <[email protected]>
2026-06-02 16:32:16 -04:00
Raven ScottandCursor fc344fac87 Phase 408: GUILD_SYNC replay and mark-read fanout hardening
Add guild-sync-replay tracker with syncBundleId on export bundles to skip
duplicate message applies after partial ingest. Coalesce rapid channel/thread
mark-read through MarkReadFanoutQueue with stall watchdog. Reject oversized
automation hook payloads via sanitizeAutomationEventPayload.

Co-authored-by: Cursor <[email protected]>
2026-06-02 16:24:13 -04:00
Raven ScottandCursor 0fdf35e7d8 Phase 408: mesh peer quality scores and platform capability APIs
Add mesh-peer-quality helpers (RTT, drop rate, stale cursor) for selective
sync prioritization and rejoin jitter on mesh peer retries. Expose
meshStatusSummary, platformCapabilities, and ipcContractVersion on view;
exportActiveChannelTopicPreview now passes guildId to getChannelSettings so
descriptions resolve correctly for automation smokes.

Co-authored-by: Cursor <[email protected]>
2026-06-02 16:17:35 -04:00
Raven ScottandCursor 28cd09b38c feat(platform): gossip lane alerts and mesh bounded hints (Phase 408)
Expose gossipLaneAlerts thresholds in meshStabilityStats and add
boundedStage/boundedStatusHint on guildSyncHealthRail for clearer UI.

Co-authored-by: Cursor <[email protected]>
2026-06-02 16:09:48 -04:00
Raven ScottandCursor 7f754eb295 perf(platform): skip pin/reaction list spans on cache hits (Phase 408)
Stop emitting pin.list and reaction.list timing spans when serving
cached rows; expose viewBuildStats counters in the view payload.

Co-authored-by: Cursor <[email protected]>
2026-06-02 16:05:31 -04:00
Raven ScottandCursor 6ff4def1ed feat(platform): invite preview and guild create templates (Phase 663)
Add previewJoinInvite for join preview metadata and templateId channel
presets on createGuild for friends/club onboarding branches.

Co-authored-by: Cursor <[email protected]>
2026-06-02 16:01:17 -04:00
Raven ScottandCursor c3caa74566 feat(attachments): staged list, meta sync, and send-time UI fields
Expose stagedAttachments in view, reorder/updateMeta APIs, and apply
attachmentUiById caption/spoiler on send (Phase 662).

Co-authored-by: Cursor <[email protected]>
2026-06-02 15:49:49 -04:00
Raven ScottandCursor dad7d3badb feat(voice-notes): sendVoiceNote and voiceNotesByMessage in view
Complete voice note send path, gossip enrichment, and per-message
voice note metadata for timeline rendering (Phase 662).

Co-authored-by: Cursor <[email protected]>
2026-06-02 15:40:14 -04:00
Raven ScottandCursor 2271419f8d Wire voice note staging, view draft field, and mesh gossip.
Integrate pearcord-voice-notes with stage/discard/commit APIs, permission
gates, and voiceNoteDraft in view payloads for composer UI parity.

Co-authored-by: Cursor <[email protected]>
2026-06-02 15:31:24 -04:00
Raven ScottandCursor cafcf95979 Phase 410: orphan pin repair, unread audit, webhook burst guard.
Repair orphan pin rows during channel consistency audit, run periodic
unread map sanity checks, and enforce webhook execute burst limits via
pearcord-bot-limits before relay execution.

Co-authored-by: Cursor <[email protected]>
2026-06-02 15:02:58 -04:00
Raven ScottandCursor 51c4a8daa1 Gate joinInvite and navigateDeepLink with shared paste validation (P410-30).
Reject malformed invites and deep links at the platform layer using
validatePastedNavigationInput before mesh join or navigation side effects.

Co-authored-by: Cursor <[email protected]>
2026-06-02 14:47:05 -04:00
Raven ScottandCursor 5c387d416d Wire user prefs startup recovery into session boot and view (P410-19).
Call ensurePrefsRecoveredOnStartup after settings ready, log
userPrefs.startup-recovery spans, and expose userPrefsRecovery in view().

Co-authored-by: Cursor <[email protected]>
2026-06-02 11:43:51 -04:00
Raven ScottandCursor 7a86efac40 fix(view): recover active channel when it disappears mid-build
Resolve stale activeChannelId against the visible channel list during
view finalize and channel-delete gossip, clear mismatched message slices,
and expose activeChannel plus activeChannelRecovery in the view payload.

Co-authored-by: Cursor <[email protected]>
2026-06-02 11:37:50 -04:00
Raven ScottandCursor 985dcdef06 fix(view): audit channel pin/reaction/message consistency
Run _auditChannelViewConsistency during view() to detect orphan rows
and pin/reaction cache mismatches, auto-invalidate stale list caches,
and expose channelConsistencyAudit in the view payload.

Co-authored-by: Cursor <[email protected]>
2026-06-02 11:31:31 -04:00
Raven ScottandCursor 47732f25db fix(mesh): evict stale guild peers with health metrics
Track per-peer lastSeenAt, sweep idle hyperswarm sockets on an interval
and before peer-retry, and expose peerRetryAttempt, lastPeerSeenAt, and
eviction totals on guildSyncHealthRail.

Co-authored-by: Cursor <[email protected]>
2026-06-02 11:23:54 -04:00
Raven ScottandCursor eb9122b7ad fix(mesh): coalesce guild mesh joins across open/retry paths
Route guild.open, mesh-bounded bootstrap, create, and peer-retry joins
through _requestGuildMeshJoin so startup/switch races skip stale loadGen
attempts and share one in-flight join per guild instance.

Co-authored-by: Cursor <[email protected]>
2026-06-02 11:19:28 -04:00
Raven ScottandCursor 95ba2a2272 Space guild mesh peer retries by last peer contact staleness.
Add _computeGuildMeshPeerRetryDelayMs keyed off lastPeerSeenAt with RTT and env min/max bounds, record peer contact on join, and emit spacingSource diagnostics for bounded retry scheduling.

Co-authored-by: Cursor <[email protected]>
2026-06-02 11:10:33 -04:00
Raven ScottandCursor 0e69175eb5 Expose mesh bounded retry timing in guild sync health rail.
Track per-guild mesh retry attempt metadata and publish countdown fields in view.guildSyncHealthRail so UI can present bounded-mode retry guidance without parsing logs.

Co-authored-by: Cursor <[email protected]>
2026-06-02 11:06:28 -04:00
Raven ScottandCursor 5440d8ff25 Add explicit platform view detail-level selection.
Introduce `opts.detail` support for minimal/light/full/diagnostic polling with legacy light-mode compatibility and expose the resolved detail level in view diagnostics metadata.

Co-authored-by: Cursor <[email protected]>
2026-06-02 10:45:55 -04:00
Raven ScottandCursor fe5c3d087a Harden view-list caching diagnostics and coalescing.
Add cache-hit/source metadata for pin, reaction, and discovery list spans, coalesce in-flight discovery list fetches, and batch view lookups to reduce redundant reads during render bursts.

Co-authored-by: Cursor <[email protected]>
2026-06-02 10:41:09 -04:00
Raven Scott 73075b6bd6 sync 2026-06-02 10:29:06 -04:00
Raven ScottandCursor efca048c2f Add strict pearcord module dependency guards for platform imports.
This introduces CI-enforced checks that compare index.js pearcord-* requires against declared dependencies and smoke-resolve imported modules, preventing undeclared module regressions in local file-link and attached runtime environments.

Co-authored-by: Cursor <[email protected]>
2026-06-02 09:27:52 -04:00
Raven ScottandCursor 0c73d63c78 Sync all pending local changes.
This commit captures the current working tree state as requested, including code, docs, dependency, and lockfile updates present in this repository.

Co-authored-by: Cursor <[email protected]>
2026-06-02 09:24:06 -04:00
Raven ScottandCursor 48e8b70d98 Declare DM voice runtime dependency for platform module graph integrity.
Add the missing `pearcord-dm-voice` local dependency so Bare-based attached/headless agentctl sessions can resolve platform imports reliably, and document the stabilization in the platform README for future module-graph maintenance.

Co-authored-by: Cursor <[email protected]>
2026-06-02 07:58:53 -04:00
Raven ScottandCursor da576d3f95 feat(platform): add DM scheduled message queue and due runner
Introduce DM scheduled-message APIs with shared payload validation,
command parsing integration (`/schedule`, `/sendlater`), send-now/cancel
operations, and a periodic due-message executor using existing DM send paths.

Co-authored-by: Cursor <[email protected]>
2026-06-02 04:11:22 -04:00
Raven ScottandCursor 658fd05973 feat(platform): make DM poll vote apply idempotent
Extend `voteDmPoll` with desired-state semantics so duplicate gossip or
retries no-op safely, and include explicit non-impact metadata for unread
and mention behavior during poll reaction updates.

Co-authored-by: Cursor <[email protected]>
2026-06-02 03:58:05 -04:00
Raven ScottandCursor 8340c62ae2 feat(platform): add DM poll deletion permission path
Introduce `deleteDmPoll` in DM mode with poll-shape validation and existing
message-delete permission checks, covering 1:1 and group DM contexts while
keeping message deletion semantics peer-local and P2P.

Co-authored-by: Cursor <[email protected]>
2026-06-02 03:43:20 -04:00
Raven ScottandCursor 77164a4595 feat(platform): add DM poll expiry and explicit close-state enforcement
Add poll expiry defaults/command pass-through, close-state metadata handling,
and `closeDmPoll` so vote/edit paths reject closed or expired polls consistently
in DM mode while preserving existing P2P reaction transport.

Co-authored-by: Cursor <[email protected]>
2026-06-02 03:36:41 -04:00