Commit Graph
482 Commits
Author SHA1 Message Date
Raven ScottandCursor 90ee832555 feat(platform): support DM thread archive/unarchive path v0.8.638
Extend `archiveThread` so DM threads can be archived/unarchived without a guild context:
- update `@pearcord/channels` + `THREAD_META` in `guildId: dm`,
- keep active DM thread state in sync,
- gossip updated DM channel metadata to peers,
- preserve existing guild-thread archive behavior.

Co-authored-by: Cursor <[email protected]>
2026-06-02 02:58:04 -04:00
Raven ScottandCursor 4eababf959 feat(platform): DM threads batch 2 + dm-call-history v0.8.638
This completes the Phase 658 batch 2 platform layer for Discord-like DM threads and call history.

- Enrich DM conversations with `dmThreads` + `threadUnread` rollups for inbox badges.
- Load persisted DM call history (`dm-call-history`) and expose `dmCallHistory` + `dmCallHistoryEngine` in view.
- Implement blocked-participant guard when forking a `dm_thread` from the parent DM.
- Wire DM call history entries into DM message search stubs.

Tests:
- npm run test:phase658-batch2
- npm run test:agentctl-forum-dm-bridge-phase658

Co-authored-by: Cursor <[email protected]>
2026-06-02 02:45:28 -04:00
Raven ScottandCursor 0b8ee0ecfc feat(platform): DM threads, forum bridge, parent E2E seal v0.8.637
createDmThread/openDmThread, threads panel in DM mode, bridgeForumToDm, and seal using parent channel id.

Co-authored-by: Cursor <[email protected]>
2026-06-02 01:48:14 -04:00
Raven ScottandCursor e6a32094f7 feat(platform): DM call history, pins store wiring v0.8.636
Track in-memory call history for search stubs; route DM pin/unpin through dm pins store.

Co-authored-by: Cursor <[email protected]>
2026-06-02 01:32:58 -04:00
Raven ScottandCursor 63c1cef962 feat(platform): avatar mesh, DM video/screen-share, rekey prefs v0.8.635
Peer avatar image IPC, live screen-share on video calls, toggleDmVideoCall,
readPeerAvatarPreview, and dismissed rekey channel id persistence.

Co-authored-by: Cursor <[email protected]>
2026-06-02 01:23:41 -04:00
Raven Scott 8671f1e250 feat(platform): live DM video, voice mute, accept span v0.8.634
setDmVoiceMute, startDmVideoCall non-stub, dm.voice.accept span,
setVoiceMute routes to DM call when in dm voice session.
2026-06-02 01:13:31 -04:00
Raven Scott 8765fe8160 feat(platform): DM session rekey notice and contact avatarHash
Set dmSessionRekey on group participant change, expose in view,
clearDmSessionRekeyNotice API, enrich listContacts with mesh avatarHash.
2026-06-02 01:06:38 -04:00
Raven Scott cb22d66a87 feat(platform): live DM voice calls and group member management
Phase 656 — PearcordDmVoice integration, dmCall view snapshot, start/end/accept
voice APIs, addGroupDmMember/removeGroupDmMember platform facades.
2026-06-02 01:01:38 -04:00
Raven ScottandCursor 795076498e Wire dm meta store, global presence snapshot, and prefs mesh toggle.
Platform view exposes globalPresence and dmMetaEngine; contacts mesh
respects globalPresenceMeshEnabled from synced user prefs.

Co-authored-by: Cursor <[email protected]>
2026-06-02 00:49:55 -04:00
Raven ScottandCursor b6fa2c3c58 feat(platform): DM pins, reaction gossip, and heal-open metadata (v0.8.629)
Add _pinDmMessage/_unpinDmMessage, DM reaction gossip via pearcord-dm,
load pins in DM view, and dm.open span fields for guild heal context.

Co-authored-by: Cursor <[email protected]>
2026-06-02 00:36:14 -04:00
Raven ScottandCursor c3f07793dc feat(platform): DM voice/video call stubs and group rename API (Phase 655)
Add renameGroupDM, startDmVoiceCall, startDmVideoCall spans and dm.open
sidebarFilterActive metadata for inbox telemetry and P2P call groundwork.

Co-authored-by: Cursor <[email protected]>
2026-06-02 00:25:16 -04:00
Raven ScottandCursor 5c941bf38e fix(platform): RTT-scaled adaptiveBurstDelays for guild mesh peer retry (P654-1)
Use swarm-manager backoff arrays indexed by retry attempt instead of passing
attempt count as RTT, keeping discovery refresh on non-owner retries.

Co-authored-by: Cursor <[email protected]>
2026-06-02 00:06:10 -04:00
Raven Scott ea62743d2d feat(platform): Phase 654 mesh resilience — adaptive guild peer retry + discovery aid (P654-1)
- Use adaptiveBurstDelays from swarm-manager for progressive backoff in _scheduleGuildMeshPeerRetry (fallback to prior fixed delays).
- Non-owners now trigger this.discovery.refreshMesh on retry attempts to improve peer discovery for replication/sync under churn/0-peer (addresses observed 'guild mesh peer retry' logs).
- Added defensive isOwner2 guard and comments tying to P654-1 / production mesh.
- Minor: preserves existing max 8 attempts, _clear, host wiring, logging.

This is a targeted swarm connection / replication improvement per core rules (focus on swarm, replicating data, syncing). Part of 50-item Phase 654 (global mesh resilience soak) generated after assessing vs Discord centralized instant sync (our eventual + heal must be rock-solid).

Verified:
- Manual non-automated pearcord-agentctl headless + mesh-live runs (AGENTCTL_*_OK).
- pear run boot gate (BOOT_OK) pre/post.
- No new errors in pearcord.log (retries still surface as expected; improvement exercised on next live).

Platform change only; renderer/UI + docs in sibling commits.

Refs: PLATFORM_ROADMAP.md Phase 654 P654-1, P654-11 (wire retry), swarm-manager adaptive, platform:12322, log 'guild mesh peer retry'.
2026-06-01 23:53:46 -04:00
Raven ScottandCursor 30480c2af6 fix(platform): wait for discovery mesh ingest when opening Explore
Remote peers only see public servers after DIRECTORY_LISTING gossip; block up to PEARCORD_DISCOVERY_MESH_WAIT_MS on explore open and scoped refresh.

Co-authored-by: Cursor <[email protected]>
2026-06-01 22:47:48 -04:00
Raven ScottandCursor 405786b8d8 fix(platform): await session startup before register IPC returns
Register was racing pushState ahead of sessionReady, leaving the UI on the session-restore shell instead of onboarding.

Co-authored-by: Cursor <[email protected]>
2026-06-01 22:35:43 -04:00
Raven ScottandCursor 9561e68ac3 fix(platform): cap session startup so UI does not hang on mesh joins
Time-box discovery/contacts/settings mesh, DM topic sync, and device sync; run mesh joins in background; add PEARCORD_SESSION_STARTUP_MS watchdog; parallelize register bootstrap module ready().

Co-authored-by: Cursor <[email protected]>
2026-06-01 22:33:47 -04:00
Raven ScottandCursor 96562199c4 feat(platform): mesh federation live diagnostics span (v0.8.625)
Log federation live metadata when exporting mesh replication diagnostics.

Co-authored-by: Cursor <[email protected]>
2026-06-01 22:25:40 -04:00
Raven ScottandCursor ed149f02cf Phase 652: mesh churn scale spans and federation heal aggregate refresh.
Add guild.mesh.churn.scale logging on partition heal and topic pool cap,
hub-ingest composer focus in view, and federation aggregate timestamps for Explore.

Co-authored-by: Cursor <[email protected]>
2026-06-01 22:07:55 -04:00
Raven ScottandCursor 12ca37eb2d feat(platform): swarm topic pool and scoped mesh discovery refresh (v0.8.623)
Track guild mesh peers in GuildTopicPool, export mesh replication diagnostics,
and use per-guild listing refresh after partition heal and offline recovery.

Co-authored-by: Cursor <[email protected]>
2026-06-01 21:59:46 -04:00
Raven ScottandCursor c0d7097112 feat(platform): scoped Explore refresh and federation hub ingest (v0.8.622)
Add listing LWW ingest path, refreshDiscoveryExploreScoped, hub-ingest spans,
async federation diagnostics with hub subscriptions, and listing TTL view.

Co-authored-by: Cursor <[email protected]>
2026-06-01 21:53:10 -04:00
Raven ScottandCursor 7f163b7764 feat(platform): federation sync diagnostics and listing TTL refresh (v0.8.621)
Add discovery.mesh.federation spans, per-guild public listing refresh on guild
focus without stalling other meshes, and exportFederationSyncDiagnostics for
multi-guild plus discovery observability.

Co-authored-by: Cursor <[email protected]>
2026-06-01 21:47:19 -04:00
Raven ScottandCursor 73307e11ef feat(platform): per-guild mesh heal isolation and multi-guild diagnostics (v0.8.620)
Phase 648 adds per-guild mesh bounded flags, partition heal cooldown/in-progress maps,
exportMultiGuildSyncDiagnostics, guildSyncHealthRail for the UI, and guild.mesh.multi-scale spans.

Co-authored-by: Cursor <[email protected]>
2026-06-01 21:41:30 -04:00
Raven ScottandCursor a374078e38 Phase 647: partition heal cooldown and diagnostics export.
Add PEARCORD_PARTITION_HEAL_COOLDOWN_MS throttling, exportPartitionHealDiagnostics, and durationMs on heal spans so production soak runs can be rate-limited and inspected without a full guild sync dump.

Co-authored-by: Cursor <[email protected]>
2026-06-01 21:34:18 -04:00
Raven ScottandCursor d14fbb6ad0 feat(platform): CRDT partition heal orchestration (v0.8.618)
Add runPartitionHealSync with presence vector at-tie-break on equal
vectorSeq, read receipt/sparse/sidecar/member-page reconcile, gossip
flush, push halt clear, discovery refresh, and guild.mesh.partition-heal
span for mesh split recovery.

Co-authored-by: Cursor <[email protected]>
2026-06-01 21:17:33 -04:00
Raven ScottandCursor f646e8f7ca feat(platform): large guild member roster sync scale (v0.8.617)
Add member page burst limiter, roster-scaled bandwidth cap, roster sync
progress helpers, ingest health patches, and diagnostics memberSync for
partial GUILD_SYNC member pages on large guilds.

Co-authored-by: Cursor <[email protected]>
2026-06-01 21:09:47 -04:00
Raven ScottandCursor 5fdd7e8c4e feat(platform): compact thread sparse core on archive
Add compactThreadSparseCore with guild.replication.compact span, mesh
ingest hook, lastReplicationCompact view field, and await replicator append
on sendMessage to avoid store races.

Co-authored-by: Cursor <[email protected]>
2026-06-01 21:00:54 -04:00
Raven ScottandCursor bf14d15b68 Add mesh churn observability and reaction list light-poll cache.
Emit guild.mesh.churn spans on peer join/leave, push slot rotation, and gossip outbox flush; refresh discovery after offline recovery; cache reactions during light view polls to cut HyperDB load.

Co-authored-by: Cursor <[email protected]>
2026-06-01 20:48:45 -04:00
Raven ScottandCursor aa62cd6562 Add sparse ACK QoS, mesh stability stats, and RTT-adaptive bandwidth (Phase 642).
getMeshStabilityStats and diagnostics export; guild.sync.sparse-qos span; bandwidth defer jitter; push halt clear on peer leave; RTT-scaled sparse pull backoff and adaptive cap; gossip drop metrics on outbox overflow.

Co-authored-by: Cursor <[email protected]>
2026-06-01 20:27:36 -04:00
Raven ScottandCursor 0b6743fb3f Add mesh stability sync recovery and bandwidth fair-share (Phase 641).
Expose requestGuildSyncBurst, runOfflineRecoverySync, and clearGuildSyncPushHalt for ACK halt recovery; divide bandwidth cap by mesh peer count; opt-in msg-index auto-migrate on loadGuild; span guild.mesh.stability.

Co-authored-by: Cursor <[email protected]>
2026-06-01 20:07:47 -04:00
Raven ScottandCursor 9994564bc4 Wire guild audit sidecar, msg-index migration, and presence vector sync.
GUILD_SYNC.auditSidecar replicates export cursors; exportAuditSidecar IPC;
PRESENCE_VECTOR_SYNC on settings mesh; view auditSidecar and read receipt rows.

Co-authored-by: Cursor <[email protected]>
2026-06-01 19:54:33 -04:00
Raven ScottandCursor 86a12724e5 Gossip guild sync health and read receipts on settings mesh.
Broadcast debounced GUILD_SYNC_HEALTH on health patches, merge remote device
read cursors, expose syncSettingsMesh and view.settingsMeshStats for UI.

Co-authored-by: Cursor <[email protected]>
2026-06-01 19:47:10 -04:00
Raven ScottandCursor c36b22d694 feat(sync): discovery join sync wait and mesh peer-drop recovery
Await guildSyncHealth settle after explore join, refresh discovery listings
on success, recover mesh with gossip outbox flush on peer leave, and flush
before sync requests. Span discovery.join.sync-wait and guild.mesh.recover.

Co-authored-by: Cursor <[email protected]>
2026-06-01 19:41:23 -04:00
Raven ScottandCursor 78bc48ae22 feat(guild-sync): Phase 637 sparse ACK batch, stage roles, gossip lanes
Batch sparse Hypercore pulls behind ACK gate with per-channel cursors and
eager core open; priority gossip outbox lanes; stageRoles GUILD_SYNC slice;
member churn delta, visible-only reactions, search index version bump, and
delta forum palettes plus inactive core key filtering.

Co-authored-by: Cursor <[email protected]>
2026-06-01 19:32:52 -04:00
Raven ScottandCursor 8f313933f8 feat(guild-sync): Phase 636 read receipts, thread archive, member page debounce
Add readReceiptVector export/ingest with LWW merge clamped to message tail,
threadArchiveSlice and forumTagPalettes on GUILD_SYNC bundles, voice occupancy
ingest, debounced MEMBER_PAGE auto-chain, RTT-scaled zlib threshold, and push
peer round-robin metadata on guildSyncHealth.

Co-authored-by: Cursor <[email protected]>
2026-06-01 19:25:32 -04:00
Raven ScottandCursor 52ad05ddd7 feat(sync): Phase 634 attachment pulls, bandwidth QoS, and HyperDB-safe guild bundles
Schedule Hyperdrive attachment prefetches after GUILD_SYNC ingest, defer oversized
bundle pushes under a per-second byte cap, coerce uint fields for HyperDB, export
delta reaction tombstones and pin slices, and reconcile contacts presence into
guild vectors with guild.sync.presence spans.

Co-authored-by: Cursor <[email protected]>
2026-06-01 19:01:00 -04:00
Raven ScottandCursor 7874e6fa5c feat(guild-sync): reaction CRDT, presence vector mesh, Hyperbee index core (v0.8.605)
_mergeReactionGossip with tombstone map; presenceVector in GUILD_SYNC bundles;
vectorSeq on presence gossip; dedicated msg-index Hyperbee core; sparse rate
limit and ACK defer; guild.sync.reactions span.

Co-authored-by: Cursor <[email protected]>
2026-06-01 18:45:27 -04:00
Raven ScottandCursor bef5965595 feat(guild-sync): sparse Hypercore pull, reactions, delta slices (v0.8.604)
_trySparseSyncFromBundle with guild.sync.sparse span; reaction bundle
export/ingest; presence vector on health; delta search/automod/audit
slices; meshHostFallbackKeys and coalesced mod push; attachReplication
on peer join.

Co-authored-by: Cursor <[email protected]>
2026-06-01 18:24:45 -04:00
Raven ScottandCursor 881bc0b62e feat(sync): ACK halt, gossip outbox, and swarm wire helpers (v0.8.603)
Track per-peer GUILD_SYNC_ACK watermarks and stop owner burst pushes when
joiners catch up. Queue guild gossip when the mesh has zero peers and flush
on peer join. Add member/message LWW on GUILD_SYNC ingest, mod fallback sync
push, optional zlib bundles, sync health progress/bytes, and diagnostics export.

Co-authored-by: Cursor <[email protected]>
2026-06-01 18:08:25 -04:00
Raven ScottandCursor 8447204162 feat(sync): delta GUILD_SYNC bundles and guild-replicator integration
Filter bundles by joiner syncWatermark, gossip GUILD_SYNC_ACK after ingest,
append outbound messages to Hypercore via pearcord-guild-replicator, and
export channelCoreKeys in GUILD_SYNC payloads when cores exist.

Co-authored-by: Cursor <[email protected]>
2026-06-01 17:54:13 -04:00
Raven ScottandCursor c80b36fe06 Improve guild join sync recovery and mesh health diagnostics.
Add GUILD_SYNC_REQUEST handling, meshHostPublicKey persistence, bootstrap/loadGuild recovery schedulers, discovery listing refresh on recreate, and view.guildSyncHealth for agentctl.

Co-authored-by: Cursor <[email protected]>
2026-06-01 17:27:14 -04:00
Raven ScottandCursor 8dd7b71578 Re-announce discovery listings after guild delete and recreate.
Burst DIRECTORY_LISTING and revoke gossip when peers are already connected, refresh owned listings after create, and invalidate explore cache on delete.

Co-authored-by: Cursor <[email protected]>
2026-06-01 16:47:03 -04:00
Raven ScottandCursor cb6f6fb0e1 Fix explore join guild mesh, owner profile, and presence sync.
Wire joiners to the host via invite/listing public keys, seed owner profiles from portable invites, await roster bootstrap, and gossip profiles/presence after peers connect.

Co-authored-by: Cursor <[email protected]>
2026-06-01 16:37:55 -04:00
Raven ScottandCursor 2eb47baaab Fix Explore list sync by refreshing mesh on open and shortening cache.
Invalidate listing cache on discovery peer join, mesh-refresh when Explore opens, use a shorter live cache TTL, and run invite join bootstrap in the background so discovery IPC is not blocked.

Co-authored-by: Cursor <[email protected]>
2026-06-01 16:30:28 -04:00
Raven ScottandCursor 2eb77085fe Bootstrap guild sessions after explore/invite join with mesh sync retries.
Defer member gossip until mesh join, burst GUILD_SYNC pushes on peer connect, and seed roster/history waits so members appear immediately from invites.

Co-authored-by: Cursor <[email protected]>
2026-06-01 16:07:52 -04:00
Raven ScottandCursor 580ea5a478 fix(discovery): show new public guilds on remote Explore immediately
Invalidate cached Explore listings when DIRECTORY_LISTING arrives, publish
new guilds to the discovery mesh after create, and re-sync on peer connect.

Co-authored-by: Cursor <[email protected]>
2026-06-01 15:41:53 -04:00
Raven ScottandCursor 428dfa5804 fix(guild): auto-remove deleted servers for all members and offline peers
Fan out deletes on discovery mesh, persist tombstones, reconcile on startup,
and refresh the server rail when a non-active guild is removed.

Co-authored-by: Cursor <[email protected]>
2026-06-01 15:33:11 -04:00
Raven ScottandCursor d3803b68f3 feat(guild): owner deleteGuild with mesh gossip and local purge
Co-authored-by: Cursor <[email protected]>
2026-06-01 15:22:51 -04:00
Raven Scott 3e36cee5c0 feat(search): Phase 627 search hub depth (v0.8.590)
Extend search hub/panel live regions with active channel context and mesh
notes; tighten search-errors reaction bleed exclusion; refresh composer
search hints for hub and panel; platform guild.search.cache/mesh spans
include activeChannelId; agentctl and phase627 smoke bundle.
2026-06-01 15:05:27 -04:00
Raven ScottandCursor 62e89a5df0 fix(mesh): contacts profile ingest, presence burst, and accept-side names
Ingest profiles on contact accept and contacts user gossip; rebroadcast presence with profile fields after mesh join.

Co-authored-by: Cursor <[email protected]>
2026-05-25 01:18:51 -04:00
Raven ScottandCursor 1235c82607 fix(dm): guard sendDmChannelInvite when contacts module is older
Fall back to dm.gossipDmChannelUpsert so open-dm works without a stale
pearcord-contacts copy missing sendDmChannelInvite.

Co-authored-by: Cursor <[email protected]>
2026-05-25 00:42:55 -04:00