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]>
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]>
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]>
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]>
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]>
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]>
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]>
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]>
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]>
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.
Ingest profiles on contact accept and contacts user gossip; rebroadcast presence with profile fields after mesh join.
Co-authored-by: Cursor <[email protected]>
Fall back to dm.gossipDmChannelUpsert so open-dm works without a stale
pearcord-contacts copy missing sendDmChannelInvite.
Co-authored-by: Cursor <[email protected]>
Embed username/displayName on presence updates (already syncing reliably),
ingest profiles from presence on peers, and retry USER_UPSERT gossip when
mesh connections open. Also gossip profile after invite join.
Co-authored-by: Cursor <[email protected]>
Gossip profile on every send, bundle author and attachmentMetas on messages,
build DM usersById from contacts, and export attachments via download-cache
before IPC to avoid stuck downloads.
Co-authored-by: Cursor <[email protected]>
Gossip attachment meta on DM send, wire DM attach-mesh provider, fetch
bytes from DM peers when not in a guild, expose usersById in view, and
emit user-profile after ingest for live member names.
Co-authored-by: Cursor <[email protected]>
Include users in guild sync, enrich member view with display names,
gossip presence and profiles on peer join, background DM listener with
contacts-based channel invites, and safer mesh teardown when switching
guild/DM mode.
Co-authored-by: Cursor <[email protected]>
Include activeChannelId and guildCount on thread.read span.end for hub depth
diagnostics aligned with thread.create and thread.archive.
Co-authored-by: Cursor <[email protected]>
Add guildCount and activeChannelId to thread.create and
thread.archive span ends for Phase 611 observability.
Co-authored-by: Cursor <[email protected]>
Extend attachment.stage, attachment.read, and attachment.unlink span ends
with guildCount; attachment.read also adds activeChannelId on end.
Co-authored-by: Cursor <[email protected]>
Extend sticker.create, sticker.delete, sticker.stage, and sticker.send
span ends with guildCount metadata for hub live panel correlation.
Co-authored-by: Cursor <[email protected]>
Extend emoji.create, emoji.delete, and emoji.stage span ends with
guildCount metadata for hub live panel and dev-log correlation.
Co-authored-by: Cursor <[email protected]>
Extend bot.install, bot.verify, and bot.message span ends with
guildCount metadata for hub live panel and dev-log correlation.
Co-authored-by: Cursor <[email protected]>
Extend slash.register, slash.delete, and slash.invoke span ends with
guildCount metadata for hub live panel and dev-log correlation.
Co-authored-by: Cursor <[email protected]>
Extend webhook.create, webhook.delete, and webhook.execute span end
metadata with guildCount for Phase 575 observability.
Co-authored-by: Cursor <[email protected]>
Wrap audit export archive append in compliance.archive span with
guildCount metadata, add digest.schedule span to setDigestExportSchedule,
and extend compliance.snapshot end metadata for Phase 574.
Co-authored-by: Cursor <[email protected]>
Add guildCount to audit.append and audit.export ends; instrument
setAuditExportSchedule with audit.schedule span and error logging.
Co-authored-by: Cursor <[email protected]>