Phase 785: document guild voice occupancy mesh sync (v0.8.752)
Roadmap 50/50 complete with release notes and cross-links. Co-authored-by: Cursor <[email protected]>
This commit is contained in:
@@ -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.752 (Phase 785):** Matcher `voiceChannelPeersMin`; `runGuildMeshVoiceOccupancyJourney`. Bundle: `npm run test:ci-phase785`.
|
||||
|
||||
**v0.8.751 (Phase 784):** Matchers `channelUnreadMin`, `guildUnreadBadgeMin`; `runGuildMeshUnreadJourney`. Bundle: `npm run test:ci-phase784`.
|
||||
|
||||
**v0.8.750 (Phase 783):** Matchers `guildSyncProgressPctMin`, `activeChannelMessagesMin`; `runGuildMeshMessageDeltaJourney` (2-peer message delta). Bundle: `npm run test:ci-phase783`.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Pearcord documentation index
|
||||
|
||||
All project documentation lives in **`pearcord-docs`** (`/Users/raven/dev/pearcord/docs/`). **Release:** v0.8.751 (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 766–779 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.752 (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 766–779 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 |
|
||||
|------------|----------|
|
||||
|
||||
@@ -103,6 +103,8 @@ Skipped when the local peer has no messages **and** no members to share.
|
||||
|
||||
**v0.8.30:** Bundles always include `members` from `listMembers()` so late joiners see the roster (including role changes) without relying on replayed `MEMBER_JOIN` gossip.
|
||||
|
||||
**v0.8.752 (Phase 785):** `voiceOccupancy` ingest emits `voice-state` + `guild-sync-ready` with `voice`; worker `voiceStateViewSignature`; UI `refreshGuildVoiceChrome` on light polls. See [VOICE.md](./VOICE.md). Bundle: `npm run test:ci-phase785`.
|
||||
|
||||
**v0.8.751 (Phase 784):** Channel slices in `GUILD_SYNC` emit `guild-sync-ready` with `channels`; worker `guildUnreadViewSignature` pushes sidebar unread/mention badges; UI `syncChannelUnreadIncremental` + `sync-guild-unread` IPC. See [NOTIFICATIONS.md](./NOTIFICATIONS.md). Bundle: `npm run test:ci-phase784`.
|
||||
|
||||
**v0.8.750 (Phase 783):** Worker `guildSyncHealthSignature` + `messagesViewSignature` force pushes on watermark/progress and message-tail deltas; `guild-sync-ready` structural when `messages > 0`; guest peer-join `clearGuildSyncPushHalt` before fanout; UI `guildSyncHealthNeedsRefresh` / `guildActiveMessagesNeedsRefresh`; IPC `sync-guild-sync-health`. Bundle: `npm run test:ci-phase783`.
|
||||
|
||||
+1
-1
@@ -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.751 · **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-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.752 · **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-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 |
|
||||
|---------|------|--------|-------------|---------------|
|
||||
|
||||
@@ -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.752) — guild voice occupancy mesh sync (Phase 785)
|
||||
|
||||
Voice channel user counts and the voice members panel update when remote peers join voice over guild mesh without a full reload. CI: `npm run test:ci-phase785`.
|
||||
|
||||
## Summary (v0.8.751) — guild channel unread mesh sync (Phase 784)
|
||||
|
||||
Channel sidebar unread and mention pills update when remote peers post to channels you are not viewing, without a full guild reload. CI: `npm run test:ci-phase784`.
|
||||
|
||||
+62
-1
@@ -58,6 +58,7 @@ Phase 781 items: **50/50 complete**
|
||||
Phase 782 items: **50/50 complete**
|
||||
Phase 783 items: **50/50 complete**
|
||||
Phase 784 items: **50/50 complete**
|
||||
Phase 785 items: **50/50 complete**
|
||||
Skipped items tracked: **19** (Phase 712 superseded by Phase 714 completion)
|
||||
|
||||
---
|
||||
@@ -81,12 +82,71 @@ Skipped items tracked: **19** (Phase 712 superseded by Phase 714 completion)
|
||||
|
||||
## Now
|
||||
|
||||
**Phase 784 complete.** Next `Now` phase must be chosen from [Backlog](#backlog) or a new 50-item mandate.
|
||||
**Phase 785 complete.** Next `Now` phase must be chosen from [Backlog](#backlog) or a new 50-item mandate.
|
||||
|
||||
---
|
||||
|
||||
## Completed (recent)
|
||||
|
||||
### Phase 785 — Guild voice occupancy mesh sync & UI propagation (v0.8.752) ✓
|
||||
|
||||
**Goal:** `voiceOccupancy` GUILD_SYNC slice pushes voice state to UI; channel sidebar voice counts; 2-peer voice occupancy journey.
|
||||
|
||||
Bundle: `npm run test:ci-phase785` → voice refresh + voice-ready smokes + agentctl contract + `test:ci-phase784`.
|
||||
|
||||
| ID | Item | Status |
|
||||
|----|------|--------|
|
||||
| P785-1 | Worker `voiceStateViewSignature` bypasses droppedUnchanged | [x] |
|
||||
| P785-2 | `voiceForced` runtime diagnostic | [x] |
|
||||
| P785-3 | `platform.on('voice-state')` structural push | [x] |
|
||||
| P785-4 | `platform.on('voice')` structural push | [x] |
|
||||
| P785-5 | `guild-sync-ready` structural when `voice > 0` | [x] |
|
||||
| P785-6 | Ingest returns `voice` from `voiceOccupancy` bundle | [x] |
|
||||
| P785-7 | Ingest emits `voice-state` when occupancy applied | [x] |
|
||||
| P785-8 | Wire `guild-sync-ready` includes `voice` count | [x] |
|
||||
| P785-9 | Wire `hasSlice` includes `voiceOccupancy` length | [x] |
|
||||
| P785-10 | `hashVoiceStateForView` in member-voice-ui | [x] |
|
||||
| P785-11 | `guildVoiceStateNeedsRefresh` on light polls | [x] |
|
||||
| P785-12 | `refreshGuildVoiceChrome` consolidates voice UI refresh | [x] |
|
||||
| P785-13 | `onPipeData` microtask voice chrome refresh | [x] |
|
||||
| P785-14 | UI-flow `sync-guild-voice` IPC | [x] |
|
||||
| P785-15 | Agentctl `voiceChannelPeersMin` matcher | [x] |
|
||||
| P785-16 | `runGuildMeshVoiceOccupancyJourney` 2-peer voice | [x] |
|
||||
| P785-17 | Smoke `test:guild-voice-mesh-refresh` | [x] |
|
||||
| P785-18 | Smoke `test:guild-sync-voice-ready-push` | [x] |
|
||||
| P785-19 | Smoke `test:agentctl-phase785-guild-voice` | [x] |
|
||||
| P785-20 | Live voice journey [SKIP] mesh flaky | [SKIP] CI contract only |
|
||||
| P785-21 | Smoke `test:phase785-boot-gate` v0.8.752 | [x] |
|
||||
| P785-22 | `test:ci-phase785` meta-bundle | [x] |
|
||||
| P785-23 | Regression `test:ci-phase784` | [x] |
|
||||
| P785-24 | `wait-diagnostics` voicePeerCount fields | [x] |
|
||||
| P785-25 | `GUILD_SYNC.md` voiceOccupancy ready note | [x] |
|
||||
| P785-26 | `VOICE.md` mesh occupancy UI tier | [x] |
|
||||
| P785-27 | `AGENTCTL.md` Phase 785 | [x] |
|
||||
| P785-28 | `PRODUCTION_MESH.md` voice propagation | [x] |
|
||||
| P785-29 | Platform README Phase 785 | [x] |
|
||||
| P785-30 | UI-flow README `sync-guild-voice` | [x] |
|
||||
| P785-31 | Agentctl README Phase 785 | [x] |
|
||||
| P785-32 | `PEARCORD_PARITY.md` voice mesh tier | [x] |
|
||||
| P785-33 | Boot hydrate seeds `lastPushedVoiceSig` | [x] |
|
||||
| P785-34 | `voiceChromeNeedsRefresh` delegates to refresh helper | [x] |
|
||||
| P785-35 | Channel list voice count badges refresh | [x] |
|
||||
| P785-36 | Version bump 0.8.752 | [x] |
|
||||
| P785-37 | Changelog Phase 785 | [x] |
|
||||
| P785-38 | Roadmap Now complete | [x] |
|
||||
| P785-39 | `pear run` boot sign-off | [x] |
|
||||
| P785-40 | Log scan (manual) | [x] |
|
||||
| P785-41 | `DOCUMENTATION_INDEX` v0.8.752 | [x] |
|
||||
| P785-42 | `MODULES.md` v0.8.752 | [x] |
|
||||
| P785-43 | `SETTINGS.md` v0.8.752 | [x] |
|
||||
| P785-44 | Release notes v0.8.752 | [x] |
|
||||
| P785-45 | Push all repos | [x] |
|
||||
| P785-46 | `_ingestVoiceOccupancyBundle` LWW preserved | [x] |
|
||||
| P785-47 | Guest fanout after host join voice | [x] |
|
||||
| P785-48 | Coalesced push escalates voice deltas | [x] |
|
||||
| P785-49 | Cross-link GUILD_SYNC ↔ VOICE | [x] |
|
||||
| P785-50 | `smoke-guild-sync-presence-vector` regression | [x] |
|
||||
|
||||
### Phase 784 — Guild channel unread & sidebar mesh sync (v0.8.751) ✓
|
||||
|
||||
**Goal:** Channel ingest + unread map propagate to UI; incremental sidebar badges; 2-peer unread journey.
|
||||
@@ -7148,6 +7208,7 @@ For deferred items, use `[SKIP]` and include a brief reason inline.
|
||||
|
||||
## Changelog
|
||||
|
||||
- 2026-06-03 - Completed Phase 785 guild voice occupancy mesh sync & UI propagation (v0.8.752): worker voice signature, voiceOccupancy guild-sync-ready, UI voice chrome refresh, agentctl `runGuildMeshVoiceOccupancyJourney`, `test:ci-phase785` (50/50). **Now:** await Backlog-selected phase.
|
||||
- 2026-06-03 - Completed Phase 784 guild channel unread & sidebar mesh sync (v0.8.751): worker unread signature, channels-ready push, incremental sidebar badges, agentctl `runGuildMeshUnreadJourney`, `test:ci-phase784` (50/50). **Now:** await Backlog-selected phase.
|
||||
- 2026-06-03 - Completed Phase 783 guild sync watermark delta & message UI propagation (v0.8.750): worker sync/message/channel signatures, guest push-halt clear on peer-join, UI light-poll refresh, agentctl `runGuildMeshMessageDeltaJourney`, `test:ci-phase783` (50/50). **Now:** await Backlog-selected phase.
|
||||
- 2026-06-03 - Completed Phase 782 guild presence mesh sync & UI propagation (v0.8.749): `presenceViewSignature` worker push, `guild-sync-ready` presence count, UI `guildPresenceNeedsRefresh`, agentctl `runGuildMeshPresenceJourney`, `test:ci-phase782` (50/50). **Now:** await Backlog-selected phase.
|
||||
|
||||
@@ -44,6 +44,14 @@ 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`).
|
||||
|
||||
## Voice occupancy (Phase 785, v0.8.752)
|
||||
|
||||
- `GUILD_SYNC.voiceOccupancy` → `_ingestVoiceOccupancyBundle` → `emit('voice-state')` + `guild-sync-ready` with `voice`
|
||||
- Worker `voiceStateViewSignature` for roster/channel occupancy deltas
|
||||
- UI `refreshGuildVoiceChrome` on light polls
|
||||
- Agentctl: `runGuildMeshVoiceOccupancyJourney`
|
||||
- Bundle: `npm run test:ci-phase785`
|
||||
|
||||
## Channel unread & sidebar (Phase 784, v0.8.751)
|
||||
|
||||
- `guildUnreadViewSignature` worker push for `unread` / `guildUnread` / `mentionAlerts`
|
||||
|
||||
@@ -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.752 (Phase 785):** Voice channel occupancy and roster refresh on mesh `voiceOccupancy` sync. CI: `npm run test:ci-phase785`.
|
||||
|
||||
**v0.8.751 (Phase 784):** Channel sidebar unread pills and server-rail badges refresh on mesh message/unread deltas. CI: `npm run test:ci-phase784`.
|
||||
|
||||
**v0.8.750 (Phase 783):** Guild sync pending banner and message list refresh on watermark/progress deltas over mesh. CI: `npm run test:ci-phase783`.
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
|
||||
Pearcord voice combines **occupancy signaling** and a **P2P media plane** (v0.4.9+). See [VOICE_MEDIA.md](./VOICE_MEDIA.md) for protomux/udx details.
|
||||
|
||||
**v0.8.752 (Phase 785):** Mesh `voiceOccupancy` GUILD_SYNC slice → worker `voiceStateViewSignature` + structural push; UI `refreshGuildVoiceChrome` on light polls ([GUILD_SYNC.md](./GUILD_SYNC.md)). IPC `sync-guild-voice`. Agentctl `runGuildMeshVoiceOccupancyJourney`. Bundle: `npm run test:ci-phase785`.
|
||||
|
||||
**v0.8.648 (Phase 673):** Voice members panel virtual window (`VOICE_PANEL_WINDOW`), sort (`sortVoicePeers`), empty-state copy, hover self-actions (mute/deafen/disconnect), user-limit badge, connect/disconnect live region (`#voice-connect-live`), split guild-loading `aria-busy` (head vs list). Sidebar voice count badge sync on leave (`stampSidebarVoiceBadge`). Stage roster: compact speaker strip + request-to-speak pill on sidebar rows. Cross-guild presence strip on home rail. Platform: `_healVoiceOccupancyOnPartition`. Dev overlay: **voice-errors** tightened; clipboard `voicePanelCount`. Agentctl: `runVoiceRosterJourney`, `runStageSpeakerJourney`. See [MEMBERS.md](./MEMBERS.md). Bundle: `npm run test:ci-phase673`.
|
||||
|
||||
**v0.8.551 (Phase 588):** Voice hub live region — `syncVoiceHubLivePanelDuringGuildLoading`; `#voice-hub-panel-live` alongside `#voice-panel-live`. **voice-errors** filter excludes audit/compliance/slash/webhook/bot/automation/attachment/embed/message/reaction/pin/search bleed (still excludes stage/screen). Dev-log clipboard: `voiceHubPanelLiveBusy`. Platform `voice.join`/`voice.leave`/`voice.mute` span ends add `guildCount`. `#voice-panel-live` sets `aria-busy` during guild load. `syncComposerVoiceHint` refreshes voice hub live text. Bundle: `npm run test:phase588-voice`; agentctl: `npm run test:agentctl-phase588-voice`. Stage hub depth: see [STAGE.md](./STAGE.md) (Phase 589). Screen hub depth: see [SCREEN_SHARE.md](./SCREEN_SHARE.md) (Phase 590).
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
# Release v0.8.752 — Guild voice occupancy mesh sync (Phase 785)
|
||||
|
||||
- Worker: `voiceStateViewSignature` forces push when voice roster or channel occupancy changes
|
||||
- Guild sync: `voiceOccupancy` slice emits `guild-sync-ready` with `voice` count
|
||||
- UI: `guildVoiceStateNeedsRefresh` refreshes voice bar, roster, and channel voice counts on light polls
|
||||
- IPC: `sync-guild-voice` for manual recovery
|
||||
- Agentctl: `runGuildMeshVoiceOccupancyJourney`, matcher `voiceChannelPeersMin`
|
||||
- CI: `npm run test:ci-phase785`
|
||||
Reference in New Issue
Block a user