docs: Phase 497 presence depth complete, plan Phase 498 (v0.8.460)

Roadmap marks presence phase done; documents platform spans, UI compositor,
and test:phase497-presence bundle; adds 50-item inbox depth phase.

Co-authored-by: Cursor <[email protected]>
This commit is contained in:
Raven Scott
2026-05-24 07:22:50 -04:00
co-authored by Cursor
parent 3b424db55a
commit 5a18106af8
4 changed files with 125 additions and 52 deletions
+9
View File
@@ -226,6 +226,15 @@ PEARCORD_SKIP_MESH_ROUNDTRIP=1 npm run test:agentctl-phase474-webhooks
Extends Phase 448 webhooks/integrations bundle with `syncWebhooksPanelsDuringGuildLoading` (integrations panel, webhook/slash rows, bot install, automation hooks), `#composer-webhooks-hint`, platform webhook/slash span metadata (`webhookName`/`deleted`/`contentLength`/`hasUsername`/`firstName`), dev-log clipboard `guildWebhookCount`, tightened **webhook-errors**/**slash-errors** filters, and Phase 473 roles regression. Agentctl re-runs Phase 448 webhooks (`test:agentctl-phase448-webhooks-integrations` alias). Extends Phase 448 webhooks/integrations bundle with `syncWebhooksPanelsDuringGuildLoading` (integrations panel, webhook/slash rows, bot install, automation hooks), `#composer-webhooks-hint`, platform webhook/slash span metadata (`webhookName`/`deleted`/`contentLength`/`hasUsername`/`firstName`), dev-log clipboard `guildWebhookCount`, tightened **webhook-errors**/**slash-errors** filters, and Phase 473 roles regression. Agentctl re-runs Phase 448 webhooks (`test:agentctl-phase448-webhooks-integrations` alias).
**Presence depth (v0.8.460):** Primary Phase 497 verification — combined bundle:
```bash
npm run test:phase497-presence
PEARCORD_SKIP_MESH_ROUNDTRIP=1 npm run test:agentctl-phase497-presence
```
Extends Phase 425 presence/activity bundle with split presence guild-loading compositor, composer presence hint, platform presence spans, tightened **presence-errors** filter, clipboard presence meta, member/voice/status `aria-current`, and Phase 496 soundboard regression. Agentctl: `test:phase425-presence-activity`.
**Soundboard depth (v0.8.459):** Primary Phase 496 verification — combined bundle: **Soundboard depth (v0.8.459):** Primary Phase 496 verification — combined bundle:
```bash ```bash
+111 -52
View File
@@ -10808,62 +10808,121 @@ Fix guild switching, session boot gating, and theme/prefs application before mic
--- ---
### Phase 497 — Presence depth (v0.8.460) ### Phase 497 — Presence depth (v0.8.460)
| ID | Item | Status | | ID | Item | Status |
|----|------|--------| |----|------|--------|
| P497-1 | Presence: set status roundtrip re-verify | [ ] | | P497-1 | Presence: set status roundtrip re-verify | [x] |
| P497-2 | Presence: custom status roundtrip re-verify | [ ] | | P497-2 | Presence: custom status roundtrip re-verify | [x] |
| P497-3 | Presence: activity roundtrip re-verify | [ ] | | P497-3 | Presence: activity roundtrip re-verify | [x] |
| P497-4 | UI: `syncPresencePanelsDuringGuildLoading` wrapper extend | [ ] | | P497-4 | UI: `syncPresencePanelsDuringGuildLoading` wrapper extend | [x] |
| P497-5 | UI: status picker guild-loading guard extend | [ ] | | P497-5 | UI: status picker guild-loading guard extend | [x] |
| P497-6 | UI: custom status input guild-loading guard extend | [ ] | | P497-6 | UI: custom status input guild-loading guard extend | [x] |
| P497-7 | UI: activity editor guild-loading guard extend | [ ] | | P497-7 | UI: activity editor guild-loading guard extend | [x] |
| P497-8 | Platform: `presence.set` span metadata extend | [ ] | | P497-8 | Platform: `presence.set` span metadata extend | [x] |
| P497-9 | Platform: `presence.custom` span metadata extend | [ ] | | P497-9 | Platform: `presence.custom` span metadata extend | [x] |
| P497-10 | Platform: `presence.activity` span metadata extend | [ ] | | P497-10 | Platform: `presence.activity` span metadata extend | [x] |
| P497-11 | Logging: dev-log **presence-errors** filter tighten | [ ] | | P497-11 | Logging: dev-log **presence-errors** filter tighten | [x] |
| P497-12 | Logging: dev-log clipboard presence meta extend | [ ] | | P497-12 | Logging: dev-log clipboard presence meta extend | [x] |
| P497-13 | Agentctl: presence status headless re-verify | [ ] | | P497-13 | Agentctl: presence status headless re-verify | [x] |
| P497-14 | Agentctl: custom status headless re-verify | [ ] | | P497-14 | Agentctl: custom status headless re-verify | [x] |
| P497-15 | Agentctl: combined phase497 presence bundle | [ ] | | P497-15 | Agentctl: combined phase497 presence bundle | [x] |
| P497-16 | Smoke: presence-panels-guild-loading-extend | [ ] | | P497-16 | Smoke: presence-panels-guild-loading-extend | [x] |
| P497-17 | Smoke: dev-log-presence-errors-tighten-extend | [ ] | | P497-17 | Smoke: dev-log-presence-errors-tighten-extend | [x] |
| P497-18 | Smoke: dev-log-clipboard-presence-meta-extend | [ ] | | P497-18 | Smoke: dev-log-clipboard-presence-meta-extend | [x] |
| P497-19 | UI: composer presence hint extend | [ ] | | P497-19 | UI: composer presence hint extend | [x] |
| P497-20 | UI: member list presence dot polish | [ ] | | P497-20 | UI: member list presence dot polish | [x] |
| P497-21 | UI: voice roster presence aria-current polish | [ ] | | P497-21 | UI: voice roster presence aria-current polish | [x] |
| P497-22 | UI: friends list presence sort re-verify | [ ] | | P497-22 | UI: friends list presence sort re-verify | [x] |
| P497-23 | UI: idle timeout hint re-verify | [ ] | | P497-23 | UI: idle timeout hint re-verify | [x] |
| P497-24 | UI: dnd suppress notifications re-verify | [ ] | | P497-24 | UI: dnd suppress notifications re-verify | [x] |
| P497-25 | UI: invisible/offline display re-verify | [ ] | | P497-25 | UI: invisible/offline display re-verify | [x] |
| P497-26 | UI: composer autofocus after status save re-verify | [ ] | | P497-26 | UI: composer autofocus after status save re-verify | [x] |
| P497-27 | Mesh: presence gossip roundtrip re-verify | [ ] | | P497-27 | Mesh: presence gossip roundtrip re-verify | [x] |
| P497-28 | Mesh: activity gossip roundtrip re-verify | [ ] | | P497-28 | Mesh: activity gossip roundtrip re-verify | [x] |
| P497-29 | Docs: `PRESENCE.md` refresh | [ ] | | P497-29 | Docs: `PRESENCE.md` refresh | [x] |
| P497-30 | Docs: `VOICE.md` presence section refresh | [ ] | | P497-30 | Docs: `VOICE.md` presence section refresh | [x] |
| P497-31 | Docs: `AGENTCTL.md` phase 497 bundle | [ ] | | P497-31 | Docs: `AGENTCTL.md` phase 497 bundle | [x] |
| P497-32 | Regression: soundboard phase 496 smokes still pass | [ ] | | P497-32 | Regression: soundboard phase 496 smokes still pass | [x] |
| P497-33 | Regression: screen phase 495 smokes still pass | [ ] | | P497-33 | Regression: screen phase 495 smokes still pass | [x] |
| P497-34 | Boot: session ready gate | [ ] | | P497-34 | Boot: session ready gate | [x] |
| P497-35 | Boot: pear run gate | [ ] | | P497-35 | Boot: pear run gate | [x] |
| P497-36 | Module: `pearcord-presence` README accuracy | [ ] | | P497-36 | Module: `pearcord-presence` README accuracy | [x] |
| P497-37 | Module: `pearcord-platform` README presence section | [ ] | | P497-37 | Module: `pearcord-platform` README presence section | [x] |
| P497-38 | Smoke: platform-presence-span-metadata-extend | [ ] | | P497-38 | Smoke: platform-presence-span-metadata-extend | [x] |
| P497-39 | UI: status modal escape focus re-verify | [ ] | | P497-39 | UI: status modal escape focus re-verify | [x] |
| P497-40 | UI: profile popout presence badge re-verify | [ ] | | P497-40 | UI: profile popout presence badge re-verify | [x] |
| P497-41 | UI: companion presence defer re-verify | [ ] | | P497-41 | UI: companion presence defer re-verify | [x] |
| P497-42 | UI: dev-log clipboard peer count extend | [ ] | | P497-42 | UI: dev-log clipboard peer count extend | [x] |
| P497-43 | UI: server rail self presence re-verify | [ ] | | P497-43 | UI: server rail self presence re-verify | [x] |
| P497-44 | UI: DM header presence re-verify | [ ] | | P497-44 | UI: DM header presence re-verify | [x] |
| P497-45 | UI: group DM presence aggregate re-verify | [ ] | | P497-45 | UI: group DM presence aggregate re-verify | [x] |
| P497-46 | UI: presence hub cross-link re-verify | [ ] | | P497-46 | UI: presence hub cross-link re-verify | [x] |
| P497-47 | UI: now-playing rich presence re-verify | [ ] | | P497-47 | UI: now-playing rich presence re-verify | [x] |
| P497-48 | UI: custom status emoji prefix re-verify | [ ] | | P497-48 | UI: custom status emoji prefix re-verify | [x] |
| P497-49 | UI: presence audit log entries re-verify | [ ] | | P497-49 | UI: presence audit log entries re-verify | [x] |
| P497-50 | Phase 498 inbox depth (v0.8.461) | [ ] | | P497-50 | Phase 498 inbox depth (v0.8.461) | [x] |
**Next:** P497-1P497-49. **Next:** ~~Phase 497~~ (complete). `syncPresencePanelsDuringGuildLoading`; `ensureComposerPresenceHint`; **presence-errors** filter tightened; platform `presence.set`/`custom`/`activity` spans; bundle `test:phase497-presence`. Phase 498 planned (50 items).
---
### Phase 498 — Inbox depth (v0.8.461)
| ID | Item | Status |
|----|------|--------|
| P498-1 | Inbox: mark-read roundtrip re-verify | [ ] |
| P498-2 | Inbox: mark-all-read roundtrip re-verify | [ ] |
| P498-3 | Inbox: notification open roundtrip re-verify | [ ] |
| P498-4 | UI: `syncInboxPanelsDuringGuildLoading` wrapper extend | [ ] |
| P498-5 | UI: notification inbox guild-loading guard extend | [ ] |
| P498-6 | UI: inbox filter chips guild-loading guard extend | [ ] |
| P498-7 | UI: mark-all button guild-loading guard extend | [ ] |
| P498-8 | Platform: `inbox.mark-read` span metadata extend | [ ] |
| P498-9 | Platform: `inbox.mark-all` span metadata extend | [ ] |
| P498-10 | Platform: `notification.open` span metadata extend | [ ] |
| P498-11 | Logging: dev-log **inbox-errors** filter tighten | [ ] |
| P498-12 | Logging: dev-log clipboard inbox meta extend | [ ] |
| P498-13 | Agentctl: inbox mark-read headless re-verify | [ ] |
| P498-14 | Agentctl: notification open headless re-verify | [ ] |
| P498-15 | Agentctl: combined phase498 inbox bundle | [ ] |
| P498-16 | Smoke: inbox-panels-guild-loading-extend | [ ] |
| P498-17 | Smoke: dev-log-inbox-errors-tighten-extend | [ ] |
| P498-18 | Smoke: dev-log-clipboard-inbox-meta-extend | [ ] |
| P498-19 | UI: composer inbox hint extend | [ ] |
| P498-20 | UI: inbox empty-state hints polish | [ ] |
| P498-21 | UI: notification row aria-current polish | [ ] |
| P498-22 | UI: inbox filter keyboard re-verify | [ ] |
| P498-23 | UI: unread badge sync re-verify | [ ] |
| P498-24 | UI: mention alert count re-verify | [ ] |
| P498-25 | UI: dnd inbox suppress re-verify | [ ] |
| P498-26 | UI: composer autofocus after inbox close re-verify | [ ] |
| P498-27 | Mesh: notification gossip roundtrip re-verify | [ ] |
| P498-28 | Mesh: inbox read receipt gossip re-verify | [ ] |
| P498-29 | Docs: `NOTIFICATIONS.md` refresh | [ ] |
| P498-30 | Docs: `INBOX.md` refresh | [ ] |
| P498-31 | Docs: `AGENTCTL.md` phase 498 bundle | [ ] |
| P498-32 | Regression: presence phase 497 smokes still pass | [ ] |
| P498-33 | Regression: soundboard phase 496 smokes still pass | [ ] |
| P498-34 | Boot: session ready gate | [ ] |
| P498-35 | Boot: pear run gate | [ ] |
| P498-36 | Module: `pearcord-notifications` README accuracy | [ ] |
| P498-37 | Module: `pearcord-platform` README inbox section | [ ] |
| P498-38 | Smoke: platform-inbox-span-metadata-extend | [ ] |
| P498-39 | UI: inbox panel escape focus re-verify | [ ] |
| P498-40 | UI: notification toast stack re-verify | [ ] |
| P498-41 | UI: companion inbox defer re-verify | [ ] |
| P498-42 | UI: dev-log clipboard unread count extend | [ ] |
| P498-43 | UI: server rail mention badge re-verify | [ ] |
| P498-44 | UI: thread notification deep link re-verify | [ ] |
| P498-45 | UI: forum notification routing re-verify | [ ] |
| P498-46 | UI: inbox hub cross-link re-verify | [ ] |
| P498-47 | UI: hook failure inbox entries re-verify | [ ] |
| P498-48 | UI: desktop notification permission hint re-verify | [ ] |
| P498-49 | UI: inbox audit log entries re-verify | [ ] |
| P498-50 | Phase 499 search depth (v0.8.462) | [ ] |
**Next:** P498-1P498-49.
--- ---
+3
View File
@@ -22,10 +22,13 @@ Statuses: `online`, `idle`, `dnd`, `offline` (see `pearcord-shared` `USER_STATUS
cd apps/pearcord cd apps/pearcord
npm run test:friend-presence npm run test:friend-presence
npm run test:member-list-presence-dot npm run test:member-list-presence-dot
npm run test:phase497-presence
PEARCORD_SKIP_MESH_ROUNDTRIP=1 npm run test:contacts-mesh-live PEARCORD_SKIP_MESH_ROUNDTRIP=1 npm run test:contacts-mesh-live
npm run test:voice-presence-members npm run test:voice-presence-members
``` ```
**v0.8.460 (Phase 497):** Split presence guild-loading compositor (`syncPresencePanelsDuringGuildLoading`); platform `presence.set`/`presence.custom`/`presence.activity` spans (`peerCount`, `activityType`, `guildGossip`); tightened **presence-errors** filter (`presence.(set|custom|activity) error`); clipboard `presencePeerCount`, `presenceCustomStatus`, `presenceActivityType`; `#composer-presence-hint`; `setMemberListRowsCurrent` / `setVoiceMemberPresenceCurrent` / `setPresenceStatusButtonsCurrent`. Bundle: `npm run test:phase497-presence`.
**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.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.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).
+2
View File
@@ -6,6 +6,8 @@ Pearcord voice combines **occupancy signaling** and a **P2P media plane** (v0.4.
**v0.8.457 (Phase 494):** Stage-specific compositor `syncStagePanelsDuringGuildLoading` (separate from voice panels); `#composer-stage-hint`; **stage-errors** dev-log filter. See [STAGE.md](./STAGE.md). Bundle: `npm run test:phase494-stage`. **v0.8.457 (Phase 494):** Stage-specific compositor `syncStagePanelsDuringGuildLoading` (separate from voice panels); `#composer-stage-hint`; **stage-errors** dev-log filter. See [STAGE.md](./STAGE.md). Bundle: `npm run test:phase494-stage`.
**v0.8.460 (Phase 497):** Split presence guild-loading compositor; voice member rows `data-user-id` + `setVoiceMemberPresenceCurrent`; platform presence spans; **presence-errors** filter tightened; `#composer-presence-hint`. Bundle: `npm run test:phase497-presence`.
**v0.8.459 (Phase 496):** Split soundboard guild-loading compositor: `syncSoundboardPanelsDuringGuildLoading` (`syncSoundboardPickerDuringGuildLoading`, `syncSoundboardButtonDuringGuildLoading`, `syncSoundboardVolumeDuringGuildLoading`). Platform: `soundboard.play`/`upload`/`delete` spans (`framesQueued`, `soundCount`, `remainingSounds`). UI: `#soundboard-volume` + `readSoundboardVolume`/`writeSoundboardVolume`; `setSoundboardTilesCurrent`; `#composer-soundboard-hint`; dev-log **soundboard-errors** filter; clipboard `guildSoundCount`, `soundboardRecentCount`, `soundboardVolume`. Bundle: `npm run test:phase496-soundboard`. **v0.8.459 (Phase 496):** Split soundboard guild-loading compositor: `syncSoundboardPanelsDuringGuildLoading` (`syncSoundboardPickerDuringGuildLoading`, `syncSoundboardButtonDuringGuildLoading`, `syncSoundboardVolumeDuringGuildLoading`). Platform: `soundboard.play`/`upload`/`delete` spans (`framesQueued`, `soundCount`, `remainingSounds`). UI: `#soundboard-volume` + `readSoundboardVolume`/`writeSoundboardVolume`; `setSoundboardTilesCurrent`; `#composer-soundboard-hint`; dev-log **soundboard-errors** filter; clipboard `guildSoundCount`, `soundboardRecentCount`, `soundboardVolume`. Bundle: `npm run test:phase496-soundboard`.
**v0.8.456 (Phase 493):** Split voice guild-loading compositor: `syncVoiceBarDuringGuildLoading`, `syncStageBarDuringGuildLoading`, `syncVoiceMembersPanelDuringGuildLoading`, `syncVoiceScreenSharePanelDuringGuildLoading`, `syncVoiceSoundboardPanelDuringGuildLoading`. Platform: `voice.join` `channelType`/`peerCount`; `voice.leave` `listenOnlyWas`; `stage.join` `isModerator`/`listenOnlyForced`; `screen.start` `listenOnly`/`wasSharing`; `screen.stop` `hadActive`. Clipboard `voiceMuted`, `voiceDeafened`, `voicePushToTalk`, `screenSharePanelOpen`, `soundboardPickerOpen`. `setVoiceRosterRowsCurrent` + `voice-roster-row`; composer hints for screen share and PTT. Bundle: `npm run test:phase493-voice`. **v0.8.456 (Phase 493):** Split voice guild-loading compositor: `syncVoiceBarDuringGuildLoading`, `syncStageBarDuringGuildLoading`, `syncVoiceMembersPanelDuringGuildLoading`, `syncVoiceScreenSharePanelDuringGuildLoading`, `syncVoiceSoundboardPanelDuringGuildLoading`. Platform: `voice.join` `channelType`/`peerCount`; `voice.leave` `listenOnlyWas`; `stage.join` `isModerator`/`listenOnlyForced`; `screen.start` `listenOnly`/`wasSharing`; `screen.stop` `hadActive`. Clipboard `voiceMuted`, `voiceDeafened`, `voicePushToTalk`, `screenSharePanelOpen`, `soundboardPickerOpen`. `setVoiceRosterRowsCurrent` + `voice-roster-row`; composer hints for screen share and PTT. Bundle: `npm run test:phase493-voice`.