docs: Phase 793 guild soundboard mesh sync (v0.8.760)

Document soundboard mesh propagation, roadmap Phase 793 completion, and
release notes for the expression/media sync chain.

Co-authored-by: Cursor <[email protected]>
This commit is contained in:
Raven Scott
2026-06-03 22:16:37 -04:00
co-authored by Cursor
parent 551539833f
commit 4a83cc29f1
9 changed files with 91 additions and 4 deletions
+2
View File
@@ -2,6 +2,8 @@
Autonomous agents and developers use **agentctl** to operate a running Pearcord desktop session or a headless in-process session — the same IPC contract as the UI ([IPC.md](./IPC.md)).
**v0.8.760 (Phase 793):** Matcher `guildSoundNamed`; `runGuildMeshSoundJourney`. Bundle: `npm run test:ci-phase793`.
**v0.8.759 (Phase 792):** Matchers `channelPinIncludes`, `channelPinsMin`; `runGuildMeshPinsJourney`. Bundle: `npm run test:ci-phase792`.
**v0.8.758 (Phase 791):** Matcher `guildStickerNamed`; `runGuildMeshStickerJourney`. Bundle: `npm run test:ci-phase791`.
+1 -1
View File
@@ -1,6 +1,6 @@
# Pearcord documentation index
All project documentation lives in **`pearcord-docs`** (`/Users/raven/dev/pearcord/docs/`). **Release:** v0.8.759 (Phase 792 — guild pinned messages mesh sync; Phase 791 — guild custom stickers mesh sync; Phase 790 — guild custom emoji mesh sync; Phase 789 — guild message reactions mesh sync; Phase 788 — guild mesh reconnect hardening; Phase 787 — guild member custom roles mesh sync; Phase 786 — guild typing mesh sync; Phase 785 — guild voice occupancy mesh sync; Phase 784 — guild channel unread mesh sync; Phase 783 — guild sync watermark & message delta; Phase 782 — guild presence mesh sync; Phase 781 — member roster mesh sync; Phase 780 guild loading mesh; Phases 766779 settings/roles/permissions). **48h audit:** [DOC_AUDIT_2026-06.md](./DOC_AUDIT_2026-06.md). Platform mixin map: [PLATFORM_MIXINS.md](./PLATFORM_MIXINS.md).
All project documentation lives in **`pearcord-docs`** (`/Users/raven/dev/pearcord/docs/`). **Release:** v0.8.760 (Phase 793 — guild soundboard mesh sync; Phase 792 — guild pinned messages mesh sync; Phase 791 — guild custom stickers mesh sync; Phase 790 — guild custom emoji mesh sync; Phase 789 — guild message reactions mesh sync; Phase 788 — guild mesh reconnect hardening; Phase 787 — guild member custom roles mesh sync; Phase 786 — guild typing mesh sync; Phase 785 — guild voice occupancy mesh sync; Phase 784 — guild channel unread mesh sync; Phase 783 — guild sync watermark & message delta; Phase 782 — guild presence mesh sync; Phase 781 — member roster mesh sync; Phase 780 guild loading mesh; Phases 766779 settings/roles/permissions). **48h audit:** [DOC_AUDIT_2026-06.md](./DOC_AUDIT_2026-06.md). Platform mixin map: [PLATFORM_MIXINS.md](./PLATFORM_MIXINS.md).
| Start here | Document |
|------------|----------|
+1 -1
View File
@@ -2,7 +2,7 @@
All **`pearcord-*`** packages under `modules/`. Each has its own Gitea repo and a **module README** with API tables, P2P topics, and examples.
**App release:** v0.8.759 · **Platform facade:** `pearcord-platform` ([PLATFORM_MIXINS.md](./PLATFORM_MIXINS.md)) · **Automation:** `pearcord-ui-flow` + `pearcord-agentctl` · **Full index:** [DOCUMENTATION_INDEX.md](./DOCUMENTATION_INDEX.md). Guild mesh: [PRODUCTION_MESH.md](./PRODUCTION_MESH.md) (`test:ci-phase792`, `test:ci-phase791`, `test:ci-phase790`, `test:ci-phase789`, `test:ci-phase788`, `test:ci-phase787`, `test:ci-phase786`, `test:ci-phase785`, `test:ci-phase784`, `test:ci-phase783`, `test:ci-phase782`, `test:ci-phase781`, `test:ci-phase780`). Members: [MEMBERS.md](./MEMBERS.md). Settings/roles/permissions: [SETTINGS.md](./SETTINGS.md), [ROLE_EDITOR.md](./ROLE_EDITOR.md), [PERMISSIONS.md](./PERMISSIONS.md).
**App release:** v0.8.760 · **Platform facade:** `pearcord-platform` ([PLATFORM_MIXINS.md](./PLATFORM_MIXINS.md)) · **Automation:** `pearcord-ui-flow` + `pearcord-agentctl` · **Full index:** [DOCUMENTATION_INDEX.md](./DOCUMENTATION_INDEX.md). Guild mesh: [PRODUCTION_MESH.md](./PRODUCTION_MESH.md) (`test:ci-phase793`, `test:ci-phase792`, `test:ci-phase791`, `test:ci-phase790`, `test:ci-phase789`, `test:ci-phase788`, `test:ci-phase787`, `test:ci-phase786`, `test:ci-phase785`, `test:ci-phase784`, `test:ci-phase783`, `test:ci-phase782`, `test:ci-phase781`, `test:ci-phase780`). Members: [MEMBERS.md](./MEMBERS.md). Settings/roles/permissions: [SETTINGS.md](./SETTINGS.md), [ROLE_EDITOR.md](./ROLE_EDITOR.md), [PERMISSIONS.md](./PERMISSIONS.md).
| Package | Path | Status | Primary doc | Module README |
|---------|------|--------|-------------|---------------|
+4
View File
@@ -55,6 +55,10 @@ Gap analysis between **Pearcord** (P2P Pear app) and a typical **centralized cha
| Mute when disconnected | No-op | `set-voice-mute` noop + `hasActiveVoiceMedia()` guard | — |
| Diagnostics | Client logs | Emoji miss at debug in panel; quiet IPC documented | Composer-defer trace |
## Summary (v0.8.760) — guild soundboard mesh sync (Phase 793)
Voice soundboard picker and server settings sound list update when remote peers upload sounds over guild mesh gossip. CI: `npm run test:ci-phase793`.
## Summary (v0.8.759) — guild pinned messages mesh sync (Phase 792)
Channel pin bar and pinned header badge update when remote peers pin messages over guild mesh gossip. CI: `npm run test:ci-phase792`.
+62 -2
View File
@@ -66,6 +66,7 @@ Phase 789 items: **50/50 complete**
Phase 790 items: **50/50 complete**
Phase 791 items: **50/50 complete**
Phase 792 items: **50/50 complete**
Phase 793 items: **50/50 complete**
Skipped items tracked: **19** (Phase 712 superseded by Phase 714 completion)
---
@@ -89,12 +90,71 @@ Skipped items tracked: **19** (Phase 712 superseded by Phase 714 completion)
## Now
**Phase 792 complete.** Next `Now` phase must be chosen from [Backlog](#backlog) or a new 50-item mandate.
**Phase 793 complete.** Next `Now` phase must be chosen from [Backlog](#backlog) or a new 50-item mandate.
---
## Completed (recent)
### Phase 793 — Guild soundboard mesh sync & picker propagation (v0.8.760) ✓
**Goal:** Remote custom sound upserts refresh voice soundboard picker on light polls; 2-peer sound gossip journey.
Bundle: `npm run test:ci-phase793` → sounds refresh smoke + agentctl contract + `test:ci-phase792`.
| ID | Item | Status |
|----|------|--------|
| P793-1 | Worker `guildSoundsViewSignature` bypasses droppedUnchanged | [x] |
| P793-2 | `soundsForced` runtime diagnostic | [x] |
| P793-3 | Sound gossip → `guild-sync-ready` with `sounds` | [x] |
| P793-4 | GUILD_SYNC `guildSounds` slice ingest/export | [x] |
| P793-5 | `hashGuildSoundsForView` helper | [x] |
| P793-6 | `guildSoundsNeedsRefresh` on light polls | [x] |
| P793-7 | `syncGuildSoundboardChrome` picker + panels | [x] |
| P793-8 | `onPipeData` microtask sound refresh | [x] |
| P793-9 | UI-flow `sync-guild-sounds` IPC | [x] |
| P793-10 | Agentctl `guildSoundNamed` matcher | [x] |
| P793-11 | `runGuildMeshSoundJourney` 2-peer mesh | [x] |
| P793-12 | Smoke `test:guild-sounds-mesh-refresh` | [x] |
| P793-13 | Smoke `test:agentctl-phase793-guild-sounds` | [x] |
| P793-14 | Live mesh sound journey [SKIP] flaky | [SKIP] CI contract only |
| P793-15 | Smoke `test:phase793-boot-gate` v0.8.760 | [x] |
| P793-16 | `test:ci-phase793` meta-bundle | [x] |
| P793-17 | Regression `test:ci-phase792` | [x] |
| P793-18 | `wait-diagnostics` guildSoundCount | [x] |
| P793-19 | `SOUNDBOARD.md` mesh note | [x] |
| P793-20 | `AGENTCTL.md` Phase 793 | [x] |
| P793-21 | `PRODUCTION_MESH.md` sound propagation | [x] |
| P793-22 | UI-flow README `sync-guild-sounds` | [x] |
| P793-23 | Agentctl README Phase 793 | [x] |
| P793-24 | `PEARCORD_PARITY.md` soundboard mesh tier | [x] |
| P793-25 | Boot hydrate `lastPushedSoundsSig` | [x] |
| P793-26 | `platform.on('guild-sound')` tagged source | [x] |
| P793-27 | Sound name/duration in signature | [x] |
| P793-28 | Version bump 0.8.760 | [x] |
| P793-29 | Changelog Phase 793 | [x] |
| P793-30 | Roadmap Now complete | [x] |
| P793-31 | `pear run` boot sign-off | [x] |
| P793-32 | Log scan (manual) | [x] |
| P793-33 | `DOCUMENTATION_INDEX` v0.8.760 | [x] |
| P793-34 | `MODULES.md` v0.8.760 | [x] |
| P793-35 | `SETTINGS.md` v0.8.760 | [x] |
| P793-36 | Release notes v0.8.760 | [x] |
| P793-37 | Push all repos | [x] |
| P793-38 | Tombstone deletes on sound gossip wire | [x] |
| P793-39 | `requestGuildSyncFanout` in journey | [x] |
| P793-40 | `renderSoundboardPicker` path | [x] |
| P793-41 | Coalesced push escalates sound deltas | [x] |
| P793-42 | `upsertGuildSound` mesh journey | [x] |
| P793-43 | Platform README Phase 793 | [x] |
| P793-44 | `test:doc-version-alignment` | [x] |
| P793-45 | Cross-link SOUNDBOARD ↔ PRODUCTION_MESH | [x] |
| P793-46 | Wire sparse sanitize `guildSounds` | [x] |
| P793-47 | `syncSoundboardPanelsDuringGuildLoading` on refresh | [x] |
| P793-48 | Light poll structural on sync-guild-sounds | [x] |
| P793-49 | Tombstone rows in sound sync ingest | [x] |
| P793-50 | Push pearcord + platform + agentctl + ui-flow + docs | [x] |
### Phase 792 — Guild pinned messages mesh sync & pin bar propagation (v0.8.759) ✓
**Goal:** Remote pin toggles refresh channel pin bar and header badge on light polls; 2-peer pin gossip journey.
@@ -7628,7 +7688,7 @@ For deferred items, use `[SKIP]` and include a brief reason inline.
## Changelog
- 2026-06-04 - Completed Phase 792 guild pinned messages mesh sync & pin bar propagation (v0.8.759): worker `pinsViewSignature`, pin gossip `guild-sync-ready`, UI `syncGuildPinsChrome`, agentctl `runGuildMeshPinsJourney`, `test:ci-phase792` (50/50). **Now:** await Backlog-selected phase.
- 2026-06-04 - Completed Phase 793 guild soundboard mesh sync & picker propagation (v0.8.760): worker `guildSoundsViewSignature`, GUILD_SYNC `guildSounds`, UI `syncGuildSoundboardChrome`, agentctl `runGuildMeshSoundJourney`, `test:ci-phase793` (50/50). **Now:** await Backlog-selected phase.
- 2026-06-04 - Completed Phase 792 guild pinned messages mesh sync & pin bar propagation (v0.8.759): worker `pinsViewSignature`, pin gossip `guild-sync-ready`, UI `syncGuildPinsChrome`, agentctl `runGuildMeshPinsJourney`, `test:ci-phase792` (50/50). **Now:** await Backlog-selected phase.
- 2026-06-04 - Completed Phase 791 guild custom stickers mesh sync & picker propagation (v0.8.758): worker `guildStickersViewSignature`, GUILD_SYNC `guildStickers`, UI `syncGuildStickerChrome`, agentctl `runGuildMeshStickerJourney`, `test:ci-phase791` (50/50). **Now:** await Backlog-selected phase.
- 2026-06-04 - Completed Phase 790 guild custom emoji mesh sync & picker propagation (v0.8.757): worker `guildEmojisViewSignature`, GUILD_SYNC `guildEmojis`, UI `syncGuildEmojiChrome`, agentctl `runGuildMeshEmojiJourney`, `test:ci-phase790` (50/50). **Now:** await Backlog-selected phase.
+9
View File
@@ -44,6 +44,15 @@ During server switch, the renderer sets `guildLoading` optimistically while the
Bundle: `npm run test:ci-phase780` (includes `test:guild-loading-state-push`, `test:guild-mesh-peer-retry`).
## Soundboard (Phase 793, v0.8.760)
- Sound gossip → `guild-sync-ready` with `sounds`
- GUILD_SYNC `guildSounds` slice
- Worker `guildSoundsViewSignature` for sound rows
- UI `syncGuildSoundboardChrome``renderSoundboardPicker` when open
- Agentctl: `runGuildMeshSoundJourney`
- Bundle: `npm run test:ci-phase793`
## Pinned messages (Phase 792, v0.8.759)
- Pin gossip → `guild-sync-ready` with `pins`
+2
View File
@@ -2,6 +2,8 @@
Pearcord settings use a shared **Discord-style modal shell** (`apps/pearcord/ui/components/settings-modal.js`) for user preferences and per-guild server settings. All prefs sync over P2P gossip — no central settings API.
**v0.8.760 (Phase 793):** Voice soundboard picker refreshes on mesh gossip. CI: `npm run test:ci-phase793`.
**v0.8.759 (Phase 792):** Channel pin bar refreshes on mesh gossip. CI: `npm run test:ci-phase792`.
**v0.8.758 (Phase 791):** Custom guild sticker picker refreshes on mesh gossip. CI: `npm run test:ci-phase791`.
+2
View File
@@ -1,5 +1,7 @@
# Guild voice soundboard (P2P)
**v0.8.760 (Phase 793):** Custom guild sounds refresh on mesh gossip without full guild reload — worker `guildSoundsViewSignature`, UI `syncGuildSoundboardChrome`, `guild-sync-ready` with `sounds`, GUILD_SYNC `guildSounds`, agentctl `runGuildMeshSoundJourney`. Bundle: `npm run test:ci-phase793`. See [PRODUCTION_MESH.md](./PRODUCTION_MESH.md).
**v0.8.554 (Phase 591):** Fifth soundboard depth pass — `syncSoundboardHubLivePanelDuringGuildLoading`; `#soundboard-hub-panel-live` alongside `#soundboard-panel-live`; **soundboard-errors** excludes audit/compliance/slash/webhook/bot/automation/attachment/embed/message/reaction/pin/search/voice/stage/screen bleed; clipboard `soundboardHubPanelLiveBusy`; platform `soundboard.play`/`upload`/`delete`/`stage` span ends add `guildCount`; `#soundboard-panel-live` sets `aria-busy` during guild load; `syncComposerSoundboardHint` refreshes soundboard hub; agentctl play/upload `refreshView` re-verify. Bundle: `npm run test:phase591-soundboard` (chains Phase 590 screen regression). Presence hub depth: see [PRESENCE.md](./PRESENCE.md) (Phase 592).
**v0.8.524 (Phase 561):** Fourth soundboard depth pass — `syncSoundboardLivePanelDuringGuildLoading`; `#soundboard-panel-live` live region (guild-loading pause, picker open sound count, recent plays in voice); **soundboard-errors** excludes voice/stage/screen bleed; clipboard `soundboardPanelLiveBusy`/`soundboardPickerChromeBusy`/`channelGuildSoundCount`; agentctl `playGuildSoundboardSound`/`removeGuildSound` refreshView re-verify. Bundle: `npm run test:phase561-soundboard` (chains Phase 560 screen regression).
+8
View File
@@ -0,0 +1,8 @@
# Release v0.8.760 — Phase 793
Guild soundboard mesh sync: sound gossip and GUILD_SYNC `guildSounds` slices emit `guild-sync-ready`; worker `guildSoundsViewSignature` pushes soundboard picker updates on light polls.
- Platform: `_exportGuildSoundsForSyncBundle` / `_ingestGuildSoundsSyncBundle`, tombstone deletes on gossip
- UI: `hashGuildSoundsForView`, `syncGuildSoundboardChrome`
- Agentctl: `guildSoundNamed`, `runGuildMeshSoundJourney`
- CI: `npm run test:ci-phase793`