docs: Phase 433 discovery & DMs complete; plan Phase 434 notifications.

Document dm-errors filter, guild-loading guards, test bundles, and add
50-item Phase 434 notifications & inbox roadmap.

Co-authored-by: Cursor <[email protected]>
This commit is contained in:
Raven Scott
2026-05-23 17:53:39 -04:00
co-authored by Cursor
parent a611238f6b
commit c03fdd4973
6 changed files with 127 additions and 51 deletions
+8
View File
@@ -227,6 +227,14 @@ PEARCORD_SKIP_MESH_ROUNDTRIP=1 npm run test:agentctl-phase431-emoji
Runs create/delete custom emoji (`agentctl-emoji-delete.json`), unicode send, sticker send, and reaction toggle. View wait keys: `guildEmojiNamed`, `guildEmojiAbsent`.
**Discovery & DMs (v0.8.396):** Primary Phase 433 verification — headless bundle without full boot chain:
```bash
PEARCORD_SKIP_MESH_ROUNDTRIP=1 npm run test:agentctl-phase433-discovery-dm
```
Runs explore deep-link + onboard (`test:agentctl-phase412-explore`) and DM inbox + contacts mesh (`test:agentctl-phase411-dm-inbox`) sequentially. UI/platform bundle: `npm run test:phase433-discovery-dm` (includes phase 432 voice regression).
**Voice & stage (v0.8.395):** Primary Phase 432 verification — headless bundle without full boot chain:
```bash
+2
View File
@@ -2,6 +2,8 @@
`modules/pearcord-discovery` maintains a **local directory** of guilds this identity created or joined, and a **P2P public listings mesh** on Hyperswarm topic `pearcord:discovery:v1` (v0.4.8+).
**v0.8.396 (Phase 433):** Explore modal and `[data-explore-public]` controls disabled during `guildLoading`; Explore hotkey blocked while loading. Session startup joins discovery + contacts meshes in parallel (`test:session-parallel-discovery-contacts`). Public listings use discovery mesh RPC (`DIRECTORY_LISTING`), not guild `APP_EVENT` automation hooks. Bundle: `npm run test:phase433-discovery-dm`. Smokes: `test:explore-guild-loading`, `test:discovery`, `test:discovery-gossip`.
**v0.8.375 (Phase 412):** Discovery mesh ingest, gossip diff banner, explore listing badge, filter persist on close, baseline deep link, Explore hotkey, and unlisted directory re-verified. Dev-log clipboard/save JSONL includes `discoveryPublicCount`. Agentctl: `npm run test:agentctl-phase412-explore`. Smokes: `npm run test:discovery`, `npm run test:discovery-gossip`, `npm run test:explore-listing-badge`, `npm run test:dev-log-clipboard-discovery-count`.
## Storage
+2
View File
@@ -2,6 +2,8 @@
Direct messages can show read receipt labels on your latest message. Fully P2P via DM mesh gossip — no central read API.
**v0.8.396 (Phase 433):** DM sidebar `aria-busy` during guild switch; add-friend/new-DM buttons disabled while loading; contacts modals restore sidebar focus on close. Platform logs `dm.open error` / `dm.group error` for **dm-errors** dev-log filter. Bundle: `npm run test:phase433-discovery-dm`.
**v0.8.374 (Phase 411):** Read receipt gossip + `dmPeerReadAt` sync re-verified. Smokes: `npm run test:dm-read-receipt`, `npm run test:dm-encrypt`, `PEARCORD_SKIP_MESH_ROUNDTRIP=1 npm run test:agentctl-phase411-dm-inbox`.
| Mode | Label |
+2
View File
@@ -127,6 +127,8 @@ If logs show slow `guild.open` / `session.startup` spans (>2s, logged as `WARN`)
**v0.8.386 (Phase 423):** Dev-log clipboard/save JSONL `emojiCount` (guild emojis + stickers length). **Emoji errors** diagnostics filter (`platform` + `/emoji|sticker/i`). Smokes: `npm run test:dev-log-clipboard-emoji-count`, `npm run test:dev-log-emoji-errors-bundle`. Agentctl: `npm run test:agentctl-phase423-emoji`.
**v0.8.396 (Phase 433):** **DM errors** diagnostics filter matches platform `dm.open`, `dm.group`, and `contacts.*` error lines. Smokes: `npm run test:dev-log-dm-errors-bundle`, `npm run test:dev-log-mesh-errors-filter`, `npm run test:dev-log-clipboard-mode`, `npm run test:dev-log-clipboard-discovery-count`.
**v0.8.395 (Phase 432):** **Voice-errors** diagnostics filter extended to match `voice.leave`, `stage.*`, `screen.*`, and `voice-media` log lines (in addition to `guild.voice`). Platform `leaveVoiceChannel()` logs `voice.leave error` on failure. Smokes: `npm run test:dev-log-voice-errors-bundle`, `npm run test:audit-voice-stage`.
**v0.8.385 (Phase 422):** Dev-log **voice-errors** bundle smoke aligned to `guild.voice` platform span filter (`test:dev-log-voice-errors-bundle`). Voice UI hidden during guild switch (`#voice-bar`, `#chat-voice-panel`). Agentctl Phase 422: `npm run test:agentctl-phase422-voice`.
+111 -51
View File
@@ -7028,58 +7028,117 @@ Fix guild switching, session boot gating, and theme/prefs application before mic
| ID | Item | Status |
|----|------|--------|
| P433-1 | Discovery: listing mesh ingest + local index (verify) | [ ] |
| P433-2 | Discovery: gossip delta badge on explore hub (verify) | [ ] |
| P433-3 | Discovery: filter prefs mesh sync + panel close persist (verify) | [ ] |
| P433-4 | Discovery: `listDirectoryGuilds` + `listPublicDiscovery` API (verify) | [ ] |
| P433-5 | Discovery: prune stale listings TTL (verify) | [ ] |
| P433-6 | Explore: deep link `pearcord://explore` opens filtered panel (verify) | [ ] |
| P433-7 | Explore: hotkey opens discovery panel (verify) | [ ] |
| P433-8 | Explore: create-guild listing toggle + settings chip sync (verify) | [ ] |
| P433-9 | Onboarding: post-guild explore prompt (verify) | [ ] |
| P433-10 | UI: explore panel hidden/disabled during guild loading | [ ] |
| P433-11 | UI: explore filter chips keyboard roving (verify) | [ ] |
| P433-12 | UI: server hub empty-state explore hint (verify) | [ ] |
| P433-13 | DM: encrypted message roundtrip smoke (verify) | [ ] |
| P433-14 | DM: read receipt gossip + local unread sync (verify) | [ ] |
| P433-15 | DM: channel list preview snippet + unread badge (verify) | [ ] |
| P433-16 | Group DM: header title + member count aria (verify) | [ ] |
| P433-17 | Contacts: friend request accept/decline flow (verify) | [ ] |
| P433-18 | Contacts: block/unblock + sidebar row state (verify) | [ ] |
| P433-19 | Contacts: friend presence dot on DM sidebar (verify) | [ ] |
| P433-20 | Composer: autofocus on DM channel switch (verify) | [ ] |
| P433-21 | Composer: Ctrl+Shift+M focus from home/DM modes (verify) | [ ] |
| P433-22 | UI: DM list guildLoading guard + aria-busy (verify) | [ ] |
| P433-23 | UI: contacts panel keyboard Escape restore focus (verify) | [ ] |
| P433-24 | Presence: custom status in DM header (verify) | [ ] |
| P433-25 | Logging: dev-log `discoveryPublicCount` clipboard meta (verify) | [ ] |
| P433-26 | Logging: dev-log `mode` home/dm/guild meta (verify) | [ ] |
| P433-27 | Diagnostics: **mesh-errors** filter bundle (verify) | [ ] |
| P433-28 | Diagnostics: **dm-errors** filter bundle (extend) | [ ] |
| P433-29 | Platform: contacts mesh presence gossip (verify) | [ ] |
| P433-30 | Platform: discovery listing gossip to online peers (verify) | [ ] |
| P433-31 | Agentctl: explore deep-link scenario regression (headless) | [ ] |
| P433-32 | Agentctl: DM inbox + read receipt scenario (headless) | [ ] |
| P433-33 | Agentctl: combined phase433 discovery+DM bundle | [ ] |
| P433-34 | Smoke: `test:discovery` + `test:discovery-gossip` | [ ] |
| P433-35 | Smoke: `test:explore-listing-badge` + filter prefs | [ ] |
| P433-36 | Smoke: `test:dm-read-receipt` + `test:friend-presence` | [ ] |
| P433-37 | Integrations: discovery event slice in manifest (verify) | [ ] |
| P433-38 | Privacy: DM E2E keys local-only (verify) | [ ] |
| P433-39 | Privacy: discovery listings P2P only (verify) | [ ] |
| P433-40 | Docs: `DISCOVERY.md` + explore inbox refresh | [ ] |
| P433-41 | Docs: `DM_READ_RECEIPTS.md` + `PRESENCE.md` refresh | [ ] |
| P433-42 | Docs: `AGENTCTL.md` phase 433 bundle | [ ] |
| P433-43 | Module: `pearcord-discovery` README accuracy | [ ] |
| P433-44 | Module: `pearcord-contacts` README accuracy | [ ] |
| P433-45 | Agentctl + targeted smokes (boot chain deferred) | [ ] |
| P433-46 | Regression: voice phase 432 smokes still pass | [ ] |
| P433-47 | Regression: emoji phase 431 smokes still pass | [ ] |
| P433-48 | Regression: slash phase 430 smokes still pass | [ ] |
| P433-49 | Mesh: contacts + discovery parallel session join (verify) | [ ] |
| P433-50 | Phase 434 notifications & inbox depth (v0.8.397) | [ ] |
| P433-1 | Discovery: listing mesh ingest + local index (verify) | [x] |
| P433-2 | Discovery: gossip delta badge on explore hub (verify) | [x] |
| P433-3 | Discovery: filter prefs mesh sync + panel close persist (verify) | [x] |
| P433-4 | Discovery: `listDirectoryGuilds` + `listPublicDiscovery` API (verify) | [x] |
| P433-5 | Discovery: prune stale listings TTL (verify) | [x] |
| P433-6 | Explore: deep link `pearcord://explore` opens filtered panel (verify) | [x] |
| P433-7 | Explore: hotkey opens discovery panel (verify) | [x] |
| P433-8 | Explore: create-guild listing toggle + settings chip sync (verify) | [x] |
| P433-9 | Onboarding: post-guild explore prompt (verify) | [x] |
| P433-10 | UI: explore panel hidden/disabled during guild loading | [x] |
| P433-11 | UI: explore filter chips keyboard roving (verify) | [x] |
| P433-12 | UI: server hub empty-state explore hint (verify) | [x] |
| P433-13 | DM: encrypted message roundtrip smoke (verify) | [x] |
| P433-14 | DM: read receipt gossip + local unread sync (verify) | [x] |
| P433-15 | DM: channel list preview snippet + unread badge (verify) | [x] |
| P433-16 | Group DM: header title + member count aria (verify) | [x] |
| P433-17 | Contacts: friend request accept/decline flow (verify) | [x] |
| P433-18 | Contacts: block/unblock + sidebar row state (verify) | [x] |
| P433-19 | Contacts: friend presence dot on DM sidebar (verify) | [x] |
| P433-20 | Composer: autofocus on DM channel switch (verify) | [x] |
| P433-21 | Composer: Ctrl+Shift+M focus from home/DM modes (verify) | [x] |
| P433-22 | UI: DM list guildLoading guard + aria-busy (verify) | [x] |
| P433-23 | UI: contacts panel keyboard Escape restore focus (verify) | [x] |
| P433-24 | Presence: custom status in DM header (verify) | [x] |
| P433-25 | Logging: dev-log `discoveryPublicCount` clipboard meta (verify) | [x] |
| P433-26 | Logging: dev-log `mode` home/dm/guild meta (verify) | [x] |
| P433-27 | Diagnostics: **mesh-errors** filter bundle (verify) | [x] |
| P433-28 | Diagnostics: **dm-errors** filter bundle (extend) | [x] |
| P433-29 | Platform: contacts mesh presence gossip (verify) | [x] |
| P433-30 | Platform: discovery listing gossip to online peers (verify) | [x] |
| P433-31 | Agentctl: explore deep-link scenario regression (headless) | [x] |
| P433-32 | Agentctl: DM inbox + read receipt scenario (headless) | [x] |
| P433-33 | Agentctl: combined phase433 discovery+DM bundle | [x] |
| P433-34 | Smoke: `test:discovery` + `test:discovery-gossip` | [x] |
| P433-35 | Smoke: `test:explore-listing-badge` + filter prefs | [x] |
| P433-36 | Smoke: `test:dm-read-receipt` + `test:friend-presence` | [x] |
| P433-37 | Integrations: discovery event slice in manifest (verify) | [x] |
| P433-38 | Privacy: DM E2E keys local-only (verify) | [x] |
| P433-39 | Privacy: discovery listings P2P only (verify) | [x] |
| P433-40 | Docs: `DISCOVERY.md` + explore inbox refresh | [x] |
| P433-41 | Docs: `DM_READ_RECEIPTS.md` + `PRESENCE.md` refresh | [x] |
| P433-42 | Docs: `AGENTCTL.md` phase 433 bundle | [x] |
| P433-43 | Module: `pearcord-discovery` README accuracy | [x] |
| P433-44 | Module: `pearcord-contacts` README accuracy | [x] |
| P433-45 | Agentctl + targeted smokes (boot chain deferred) | [x] |
| P433-46 | Regression: voice phase 432 smokes still pass | [x] |
| P433-47 | Regression: emoji phase 431 smokes still pass | [x] |
| P433-48 | Regression: slash phase 430 smokes still pass | [x] |
| P433-49 | Mesh: contacts + discovery parallel session join (verify) | [x] |
| P433-50 | Phase 434 notifications & inbox depth (v0.8.397) | [x] |
**Next:** P433-1P433-49.
**Next:** ~~Phase 433~~ (complete). Explore/DM guild-loading guards; **dm-errors** filter; composer Ctrl+Shift+M from home opens first DM; `dm.open`/`contacts.*` error logs; bundle `test:phase433-discovery-dm` + `test:agentctl-phase433-discovery-dm`. `npm run dev` boot gate (v0.8.396). Phase 434 planned (50 items).
---
### Phase 434 — Notifications & inbox depth (v0.8.397)
| ID | Item | Status |
|----|------|--------|
| P434-1 | Notifications: inbox list + unread badge (verify) | [ ] |
| P434-2 | Notifications: mark single read + mesh gossip (verify) | [ ] |
| P434-3 | Notifications: mark-all read + status banner (verify) | [ ] |
| P434-4 | Notifications: open notification navigates channel/thread (verify) | [ ] |
| P434-5 | Notifications: mention vs message filter chips (verify) | [ ] |
| P434-6 | Threads: inbox panel mark-channel-read family (verify) | [ ] |
| P434-7 | Threads: mark-thread-parent read roundtrip (verify) | [ ] |
| P434-8 | Forum: notification open navigates post + thread (verify) | [ ] |
| P434-9 | Forum: archived thread mention sort (verify) | [ ] |
| P434-10 | UI: notification panel hidden during guild loading | [ ] |
| P434-11 | UI: notification row keyboard Enter/Space open (verify) | [ ] |
| P434-12 | UI: mark-all banner `aria-labelledby` (verify) | [ ] |
| P434-13 | UI: companion notification panel aria-hidden idle (verify) | [ ] |
| P434-14 | Guild: channel unread badge + mention highlight (verify) | [ ] |
| P434-15 | Guild: thread unread in channel list (verify) | [ ] |
| P434-16 | Search: stale refresh after mesh toggle (verify) | [ ] |
| P434-17 | Search: recent chips Home/End keyboard (verify) | [ ] |
| P434-18 | Logging: dev-log `notificationUnread` clipboard meta (verify) | [ ] |
| P434-19 | Diagnostics: **notification-errors** filter bundle (extend) | [ ] |
| P434-20 | Diagnostics: **inbox-errors** filter bundle (extend) | [ ] |
| P434-21 | Platform: notification prefs mesh sync (verify) | [ ] |
| P434-22 | Platform: thread read state gossip merge (verify) | [ ] |
| P434-23 | Agentctl: mark-notification-read roundtrip (headless) | [ ] |
| P434-24 | Agentctl: mark-channel-read thread family (headless) | [ ] |
| P434-25 | Agentctl: combined phase434 inbox bundle | [ ] |
| P434-26 | Smoke: `test:mark-all-notifications` + status banner | [ ] |
| P434-27 | Smoke: `test:open-notification-channel-thread-family` | [ ] |
| P434-28 | Smoke: `test:threads-panel` escape + focus restore | [ ] |
| P434-29 | Integrations: notification event slice in manifest (verify) | [ ] |
| P434-30 | Privacy: notification bodies local-first (verify) | [ ] |
| P434-31 | Composer: autofocus after open-notification navigate | [ ] |
| P434-32 | UI: threads panel guild-loading guard (verify) | [ ] |
| P434-33 | UI: inbox empty-state hints (verify) | [ ] |
| P434-34 | Docs: `NOTIFICATIONS.md` + `THREADS_PANEL.md` refresh | [ ] |
| P434-35 | Docs: `SEARCH.md` inbox refresh | [ ] |
| P434-36 | Docs: `AGENTCTL.md` phase 434 bundle | [ ] |
| P434-37 | Module: `pearcord-notifications` README accuracy | [ ] |
| P434-38 | Module: `pearcord-message-threads` README accuracy | [ ] |
| P434-39 | Agentctl + targeted smokes (boot chain deferred) | [ ] |
| P434-40 | Regression: discovery phase 433 smokes still pass | [ ] |
| P434-41 | Regression: voice phase 432 smokes still pass | [ ] |
| P434-42 | Regression: emoji phase 431 smokes still pass | [ ] |
| P434-43 | Regression: slash phase 430 smokes still pass | [ ] |
| P434-44 | Mesh: notification gossip to online peers (verify) | [ ] |
| P434-45 | Mesh: thread read receipt merge (verify) | [ ] |
| P434-46 | UI: server rail unread badge during guild switch (verify) | [ ] |
| P434-47 | UI: forum post list keyboard roving (verify) | [ ] |
| P434-48 | Platform: mark-all spans + error logging (extend) | [ ] |
| P434-49 | Boot: `npm run dev` session ready gate | [ ] |
| P434-50 | Phase 435 search & pins depth (v0.8.398) | [ ] |
**Next:** P434-1P434-49.
---
@@ -8525,6 +8584,7 @@ Absorbed into Phase 273 (P273-5P273-8, P273-11P273-12). See Phase 274 for
### Changelog
- **2026-05-23** — v0.8.396: Phase 433 — explore/DM guild-loading guards; **dm-errors** dev-log filter; composer Ctrl+Shift+M from home opens first DM; `dm.open`/`contacts.*` platform error logs; bundle `test:phase433-discovery-dm` + `test:agentctl-phase433-discovery-dm`. `npm run dev` boot gate. Phase 434 planned (50 items).
- **2026-05-23** — v0.8.395: Phase 432 — `STAGE_LEAVE` + `stage.speaker.request/approve/demote` audits; `#stage-bar` hidden during `guildLoading`; composer Ctrl+Shift+M during VC via `findPostableTextChannelIdForComposer`; **voice-errors** filter extended (`voice.leave`, `stage.*`, `screen.*`, `voice-media`); `voice.leave error` platform log; smokes `test:audit-voice-stage`, `test:stage-bar-guild-loading`, `test:composer-focus-shortcut-voice`; bundle `test:phase432-voice-stage` + `test:agentctl-phase432-voice`. `npm run dev` boot gate. Phase 433 planned (50 items).
- **2026-05-23** — v0.8.394: Phase 431 — `EMOJI_DELETE`/`STICKER_DELETE` gossip; `removeGuildEmoji`/`removeGuildSticker` + audit; emoji picker 2D arrow grid; composer autofocus after picker close + guild-loading btn guard; guild mesh peer retry scheduler; agentctl `test:agentctl-phase431-emoji`; `test:phase431-emoji-stickers`. `npm run dev` boot gate. Phase 432 planned (50 items).
- **2026-05-23** — v0.8.393: Phase 430 — slash commands depth; `SLASH_COMMAND_DELETE` gossip; delete custom commands; choice validation + per-command cooldown; audit `slash.*`; **slash-errors** filter; `slashCommandCount` dev-log meta; agentctl `test:agentctl-phase430-slash`; `SLASH_COMMANDS.md`. `npm run dev` boot gate. Phase 431 planned (50 items).
+2
View File
@@ -28,4 +28,6 @@ npm run test:voice-presence-members
**v0.8.388 (Phase 425):** Dev-log `presenceStatus` in clipboard JSONL; **presence-errors** diagnostics filter; user-panel disabled during `guildLoading`; status picker Arrow/Home/End roving; composer autofocus after modal close; invisible clears custom status + activity. Agentctl: `npm run test:agentctl-phase425-presence`. See [ACTIVITY.md](./ACTIVITY.md).
**v0.8.396 (Phase 433):** Friend presence dots on DM sidebar rows; custom status on friend list entries re-verified. Platform logs `contacts.request` / `contacts.accept` / `contacts.decline` errors for **dm-errors** filter. Agentctl: `npm run test:agentctl-phase433-discovery-dm` (includes phase 411 DM inbox path).
**v0.8.374 (Phase 411):** Friend presence gossip + member list dots re-verified. Contacts mesh live path exercises `PRESENCE_UPDATE` on the contacts mesh. Agentctl: `npm run test:agentctl-phase411-dm-inbox`.