Phase 784: document guild channel unread mesh sync (v0.8.751)
Roadmap 50/50, release notes, and cross-links for unread propagation. 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)).
|
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.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`.
|
**v0.8.750 (Phase 783):** Matchers `guildSyncProgressPctMin`, `activeChannelMessagesMin`; `runGuildMeshMessageDeltaJourney` (2-peer message delta). Bundle: `npm run test:ci-phase783`.
|
||||||
|
|
||||||
**v0.8.749 (Phase 782):** Matchers `presencePeersMin`, `presenceVectorSizeMin`, `peerPresenceStatus`; `runGuildMeshPresenceJourney` (2-peer idle propagation). Bundle: `npm run test:ci-phase782`.
|
**v0.8.749 (Phase 782):** Matchers `presencePeersMin`, `presenceVectorSizeMin`, `peerPresenceStatus`; `runGuildMeshPresenceJourney` (2-peer idle propagation). Bundle: `npm run test:ci-phase782`.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Pearcord documentation index
|
# Pearcord documentation index
|
||||||
|
|
||||||
All project documentation lives in **`pearcord-docs`** (`/Users/raven/dev/pearcord/docs/`). **Release:** v0.8.750 (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.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).
|
||||||
|
|
||||||
| Start here | Document |
|
| 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.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.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`.
|
**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`.
|
||||||
|
|
||||||
**v0.8.749 (Phase 782):** `presenceVector` ingest returns `presence` count; wire emits `guild-sync-ready` with `presence` (vector-only bundles no longer silent). Worker `presenceViewSignature` forces push on status-only deltas; `platform.on('presence')` structural. UI `guildPresenceNeedsRefresh` + `sync-guild-presence` IPC. See [PRESENCE.md](./PRESENCE.md). Bundle: `npm run test:ci-phase782`.
|
**v0.8.749 (Phase 782):** `presenceVector` ingest returns `presence` count; wire emits `guild-sync-ready` with `presence` (vector-only bundles no longer silent). Worker `presenceViewSignature` forces push on status-only deltas; `platform.on('presence')` structural. UI `guildPresenceNeedsRefresh` + `sync-guild-presence` IPC. See [PRESENCE.md](./PRESENCE.md). Bundle: `npm run test:ci-phase782`.
|
||||||
|
|||||||
+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.
|
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.750 · **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-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.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).
|
||||||
|
|
||||||
| Package | Path | Status | Primary doc | Module README |
|
| Package | Path | Status | Primary doc | Module README |
|
||||||
|---------|------|--------|-------------|---------------|
|
|---------|------|--------|-------------|---------------|
|
||||||
|
|||||||
@@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
Pearcord notifications are **100% local** — no push servers. The `pearcord-notifications` module maintains an inbox in `{storagePath}/notifications/` and drives UI badges + optional desktop alerts.
|
Pearcord notifications are **100% local** — no push servers. The `pearcord-notifications` module maintains an inbox in `{storagePath}/notifications/` and drives UI badges + optional desktop alerts.
|
||||||
|
|
||||||
|
**v0.8.751 (Phase 784):** Mesh unread propagation — worker `guildUnreadViewSignature`, incremental channel unread pills + server rail badges on light polls ([GUILD_SYNC.md](./GUILD_SYNC.md)). IPC `sync-guild-unread`. Agentctl `runGuildMeshUnreadJourney`. Bundle: `npm run test:ci-phase784`.
|
||||||
|
|
||||||
**v0.8.650 (Phase 675):** `notifications-activity-ui.js` + platform `notifications-activity.js` mixin — inbox virtual window (40 rows), sort modes, filter chips (all/unread/mentions/DMs/servers), mark-all undo toast (5s), hover + keyboard mark-read, jump-to-message/thread/forum with mention pulse, desktop dedupe by `messageId` (30s) + focused-channel suppress, home rail inbox badge, guild mention badge incremental patch, per-guild mute chip, role/`@everyone`/`@here` routing, fanout rate limit, partition heal, notification kind stubs (poll, scheduled, voice_missed, stage, boost, friend_online). Dev **notification-errors** / **activity-errors** filters; clipboard `notificationUnread`, `activityFeedCount`. Bundle: `npm run test:ci-phase675`; agentctl inbox/activity/mention journeys.
|
**v0.8.650 (Phase 675):** `notifications-activity-ui.js` + platform `notifications-activity.js` mixin — inbox virtual window (40 rows), sort modes, filter chips (all/unread/mentions/DMs/servers), mark-all undo toast (5s), hover + keyboard mark-read, jump-to-message/thread/forum with mention pulse, desktop dedupe by `messageId` (30s) + focused-channel suppress, home rail inbox badge, guild mention badge incremental patch, per-guild mute chip, role/`@everyone`/`@here` routing, fanout rate limit, partition heal, notification kind stubs (poll, scheduled, voice_missed, stage, boost, friend_online). Dev **notification-errors** / **activity-errors** filters; clipboard `notificationUnread`, `activityFeedCount`. Bundle: `npm run test:ci-phase675`; agentctl inbox/activity/mention journeys.
|
||||||
|
|
||||||
**v0.8.461 (Phase 498):** `syncInboxPanelsDuringGuildLoading` composes bell (`syncInboxBellDuringGuildLoading`), panel, filter chips, list, mark-all (`syncInboxMarkAllDuringGuildLoading`), and `syncComposerInboxHint`. Platform: `inbox.mark-all` span; `inbox.mark-read` `unreadBefore`/`unreadAfter`; `notification.open` `jumped`. **inbox-errors** filter includes `inbox.mark-all`. Clipboard: `notificationsModalOpen`, `inboxFilterUnreadCount`. Bundle: `npm run test:phase498-inbox`.
|
**v0.8.461 (Phase 498):** `syncInboxPanelsDuringGuildLoading` composes bell (`syncInboxBellDuringGuildLoading`), panel, filter chips, list, mark-all (`syncInboxMarkAllDuringGuildLoading`), and `syncComposerInboxHint`. Platform: `inbox.mark-all` span; `inbox.mark-read` `unreadBefore`/`unreadAfter`; `notification.open` `jumped`. **inbox-errors** filter includes `inbox.mark-all`. Clipboard: `notificationsModalOpen`, `inboxFilterUnreadCount`. Bundle: `npm run test:phase498-inbox`.
|
||||||
|
|||||||
@@ -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 | — |
|
| 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 |
|
| Diagnostics | Client logs | Emoji miss at debug in panel; quiet IPC documented | Composer-defer trace |
|
||||||
|
|
||||||
|
## 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`.
|
||||||
|
|
||||||
## Summary (v0.8.750) — guild sync watermark & message delta (Phase 783)
|
## Summary (v0.8.750) — guild sync watermark & message delta (Phase 783)
|
||||||
|
|
||||||
Sync progress, pending banner, and active-channel history update during mesh delta sync without requiring a full reload. Guest peers resume from local watermark after reconnect. CI: `npm run test:ci-phase783`.
|
Sync progress, pending banner, and active-channel history update during mesh delta sync without requiring a full reload. Guest peers resume from local watermark after reconnect. CI: `npm run test:ci-phase783`.
|
||||||
|
|||||||
+62
-1
@@ -57,6 +57,7 @@ Phase 780 items: **50/50 complete**
|
|||||||
Phase 781 items: **50/50 complete**
|
Phase 781 items: **50/50 complete**
|
||||||
Phase 782 items: **50/50 complete**
|
Phase 782 items: **50/50 complete**
|
||||||
Phase 783 items: **50/50 complete**
|
Phase 783 items: **50/50 complete**
|
||||||
|
Phase 784 items: **50/50 complete**
|
||||||
Skipped items tracked: **19** (Phase 712 superseded by Phase 714 completion)
|
Skipped items tracked: **19** (Phase 712 superseded by Phase 714 completion)
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -80,12 +81,71 @@ Skipped items tracked: **19** (Phase 712 superseded by Phase 714 completion)
|
|||||||
|
|
||||||
## Now
|
## Now
|
||||||
|
|
||||||
**Phase 783 complete.** Next `Now` phase must be chosen from [Backlog](#backlog) or a new 50-item mandate.
|
**Phase 784 complete.** Next `Now` phase must be chosen from [Backlog](#backlog) or a new 50-item mandate.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Completed (recent)
|
## Completed (recent)
|
||||||
|
|
||||||
|
### 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.
|
||||||
|
|
||||||
|
Bundle: `npm run test:ci-phase784` → unread refresh + channels-ready smokes + agentctl contract + `test:ci-phase783`.
|
||||||
|
|
||||||
|
| ID | Item | Status |
|
||||||
|
|----|------|--------|
|
||||||
|
| P784-1 | Worker `guildUnreadViewSignature` bypasses droppedUnchanged | [x] |
|
||||||
|
| P784-2 | `unreadForced` runtime diagnostic | [x] |
|
||||||
|
| P784-3 | `guild-sync-ready` structural when `channels > 0` | [x] |
|
||||||
|
| P784-4 | Ingest returns `channels` count; emits `channel` after slice | [x] |
|
||||||
|
| P784-5 | Wire `guild-sync-ready` includes `channels` | [x] |
|
||||||
|
| P784-6 | `hashGuildUnreadState` in member-voice-ui | [x] |
|
||||||
|
| P784-7 | `guildUnreadNeedsRefresh` on light polls | [x] |
|
||||||
|
| P784-8 | `syncChannelUnreadIncremental` patches channel pills | [x] |
|
||||||
|
| P784-9 | `refreshGuildUnreadChrome` updates rail + sidebar | [x] |
|
||||||
|
| P784-10 | `guildChannelsNeedsRefresh` compares channel metadata | [x] |
|
||||||
|
| P784-11 | UI-flow `sync-guild-unread` IPC | [x] |
|
||||||
|
| P784-12 | Agentctl `channelUnreadMin` matcher | [x] |
|
||||||
|
| P784-13 | Agentctl `guildUnreadBadgeMin` matcher | [x] |
|
||||||
|
| P784-14 | `runGuildMeshUnreadJourney` 2-peer unread | [x] |
|
||||||
|
| P784-15 | Smoke `test:guild-unread-mesh-refresh` | [x] |
|
||||||
|
| P784-16 | Smoke `test:guild-sync-channels-ready-push` | [x] |
|
||||||
|
| P784-17 | Smoke `test:agentctl-phase784-guild-unread` | [x] |
|
||||||
|
| P784-18 | Live unread journey [SKIP] mesh flaky | [SKIP] CI contract only |
|
||||||
|
| P784-19 | Smoke `test:phase784-boot-gate` v0.8.751 | [x] |
|
||||||
|
| P784-20 | `test:ci-phase784` meta-bundle | [x] |
|
||||||
|
| P784-21 | Regression `test:ci-phase783` | [x] |
|
||||||
|
| P784-22 | `wait-diagnostics` guildUnreadBadge + channelUnreadTop | [x] |
|
||||||
|
| P784-23 | `GUILD_SYNC.md` channels-ready note | [x] |
|
||||||
|
| P784-24 | `NOTIFICATIONS.md` mesh unread tier | [x] |
|
||||||
|
| P784-25 | `AGENTCTL.md` Phase 784 | [x] |
|
||||||
|
| P784-26 | `PRODUCTION_MESH.md` unread propagation | [x] |
|
||||||
|
| P784-27 | Platform README Phase 784 | [x] |
|
||||||
|
| P784-28 | UI-flow README `sync-guild-unread` | [x] |
|
||||||
|
| P784-29 | Agentctl README Phase 784 | [x] |
|
||||||
|
| P784-30 | `PEARCORD_PARITY.md` channel unread mesh | [x] |
|
||||||
|
| P784-31 | Boot hydrate seeds `lastPushedUnreadSig` | [x] |
|
||||||
|
| P784-32 | `syncMentionBadgeIncremental` reused in unread patch | [x] |
|
||||||
|
| P784-33 | `platform.on('notification')` push preserved | [x] |
|
||||||
|
| P784-34 | `renderServerRail` on guildUnread delta | [x] |
|
||||||
|
| P784-35 | Version bump 0.8.751 | [x] |
|
||||||
|
| P784-36 | Changelog Phase 784 | [x] |
|
||||||
|
| P784-37 | Roadmap Now complete | [x] |
|
||||||
|
| P784-38 | `pear run` boot sign-off | [x] |
|
||||||
|
| P784-39 | Log scan (manual) | [x] |
|
||||||
|
| P784-40 | `DOCUMENTATION_INDEX` v0.8.751 | [x] |
|
||||||
|
| P784-41 | `MODULES.md` v0.8.751 | [x] |
|
||||||
|
| P784-42 | `SETTINGS.md` v0.8.751 | [x] |
|
||||||
|
| P784-43 | Release notes v0.8.751 | [x] |
|
||||||
|
| P784-44 | Push all repos | [x] |
|
||||||
|
| P784-45 | Channel-only GUILD_SYNC slice detection | [x] |
|
||||||
|
| P784-46 | Mention pills preserved on unread patch | [x] |
|
||||||
|
| P784-47 | `onPipeData` unread microtask | [x] |
|
||||||
|
| P784-48 | `renderLightStateUpdate` unread refresh | [x] |
|
||||||
|
| P784-49 | Cross-link GUILD_SYNC ↔ NOTIFICATIONS | [x] |
|
||||||
|
| P784-50 | Coalesced push escalates unread deltas | [x] |
|
||||||
|
|
||||||
### Phase 783 — Guild sync watermark delta & message UI propagation (v0.8.750) ✓
|
### Phase 783 — Guild sync watermark delta & message UI propagation (v0.8.750) ✓
|
||||||
|
|
||||||
**Goal:** Watermark/sync-health deltas reach UI; message ingest triggers structural push; guest peer-join clears push halt; 2-peer message delta journey.
|
**Goal:** Watermark/sync-health deltas reach UI; message ingest triggers structural push; guest peer-join clears push halt; 2-peer message delta journey.
|
||||||
@@ -7088,6 +7148,7 @@ For deferred items, use `[SKIP]` and include a brief reason inline.
|
|||||||
|
|
||||||
## Changelog
|
## Changelog
|
||||||
|
|
||||||
|
- 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 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.
|
- 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.
|
||||||
- 2026-06-03 - Completed Phase 781 member roster mesh sync & UI propagation (v0.8.748): `guild-sync-ready` worker push, member-page emit, UI `memberRosterNeedsRefresh`, agentctl 2-peer roster journey + matchers, `test:ci-phase781` (50/50). **Now:** await Backlog-selected phase.
|
- 2026-06-03 - Completed Phase 781 member roster mesh sync & UI propagation (v0.8.748): `guild-sync-ready` worker push, member-page emit, UI `memberRosterNeedsRefresh`, agentctl 2-peer roster journey + matchers, `test:ci-phase781` (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`).
|
Bundle: `npm run test:ci-phase780` (includes `test:guild-loading-state-push`, `test:guild-mesh-peer-retry`).
|
||||||
|
|
||||||
|
## Channel unread & sidebar (Phase 784, v0.8.751)
|
||||||
|
|
||||||
|
- `guildUnreadViewSignature` worker push for `unread` / `guildUnread` / `mentionAlerts`
|
||||||
|
- `GUILD_SYNC.channels` → `guild-sync-ready` structural
|
||||||
|
- UI incremental unread pills + `renderServerRail` on badge delta
|
||||||
|
- Agentctl: `runGuildMeshUnreadJourney`
|
||||||
|
- Bundle: `npm run test:ci-phase784`
|
||||||
|
|
||||||
## Message delta & watermark UI (Phase 783, v0.8.750)
|
## Message delta & watermark UI (Phase 783, v0.8.750)
|
||||||
|
|
||||||
- Worker signatures for `guildSyncHealth`, active-channel messages, and channel list
|
- Worker signatures for `guildSyncHealth`, active-channel messages, and channel list
|
||||||
|
|||||||
@@ -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.
|
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.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`.
|
**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`.
|
||||||
|
|
||||||
**v0.8.749 (Phase 782):** Guild presence status dots refresh on mesh presence deltas; worker `presenceViewSignature` push. CI: `npm run test:ci-phase782`.
|
**v0.8.749 (Phase 782):** Guild presence status dots refresh on mesh presence deltas; worker `presenceViewSignature` push. CI: `npm run test:ci-phase782`.
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
# Release v0.8.751 — Guild channel unread mesh sync (Phase 784)
|
||||||
|
|
||||||
|
- Worker: `guildUnreadViewSignature` forces push when channel unread or guild badges change
|
||||||
|
- Guild sync: channel slices emit `guild-sync-ready` with `channels` count
|
||||||
|
- UI: incremental channel unread pills + server rail refresh on light polls
|
||||||
|
- IPC: `sync-guild-unread` for manual recovery
|
||||||
|
- Agentctl: `runGuildMeshUnreadJourney`, matchers `channelUnreadMin`, `guildUnreadBadgeMin`
|
||||||
|
- CI: `npm run test:ci-phase784`
|
||||||
Reference in New Issue
Block a user