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]>
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]>
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]>
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]>
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]>
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]>
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]>
Expand DM poll command parsing support to include anonymous commands and
add `editDmPoll` with a strict first-vote guard so question/options can
only be changed before any vote rows exist.
Co-authored-by: Cursor <[email protected]>
Add `exportDmThreadP2PAudit()` so DM thread channels can be audited
for strict P2P topic conformance (`pearcord:dm-thread:*` and no central URL references).
Also document the new phase658 closure behavior in module docs.
Co-authored-by: Cursor <[email protected]>
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]>
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]>
Peer avatar image IPC, live screen-share on video calls, toggleDmVideoCall,
readPeerAvatarPreview, and dismissed rekey channel id persistence.
Co-authored-by: Cursor <[email protected]>
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]>
- 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'.
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]>
Register was racing pushState ahead of sessionReady, leaving the UI on the session-restore shell instead of onboarding.
Co-authored-by: Cursor <[email protected]>
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]>
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]>
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]>
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]>
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]>
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]>
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]>
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]>