docs: complete Phase 528 presence depth; plan Phase 529 discovery

Roadmap, PRESENCE, AGENTCTL, and VOICE cross-links for v0.8.491.

Co-authored-by: Cursor <[email protected]>
This commit is contained in:
Raven Scott
2026-05-24 11:42:26 -04:00
co-authored by Cursor
parent 915ba371a1
commit 0e0a40bae6
4 changed files with 130 additions and 54 deletions
+10 -1
View File
@@ -370,7 +370,16 @@ PEARCORD_SKIP_MESH_ROUNDTRIP=1 npm run test:agentctl-phase519-search
Extends `test:phase518-presence` regression with search compositor split (`syncSearchRecentChipsDuringGuildLoading`, `syncSearchMeshChipDuringGuildLoading`, `syncSearchPanelLiveDuringGuildLoading`), `spanKind` on `guild.search` / `.cache` / `.mesh`, anchored **search-errors** filter (`$` end anchor), clipboard `lastSearchHitMessageId`/`searchBarBusy`/`searchMeshRefreshBusy`, search hit `aria-current=location`, ui-flow `composer-focus-channel` after `jump-to-message`, and headless `searchGuildMessages`/`setSearchScope`. Agentctl: `test:parse-search-query` + `test:search-ranking` + `smoke-agentctl-search-phase519`.
**Presence depth (v0.8.481):** Primary Phase 518 verification — combined bundle:
**Presence depth (v0.8.491):** Primary Phase 528 verification — combined bundle:
```bash
npm run test:phase528-presence
PEARCORD_SKIP_MESH_ROUNDTRIP=1 npm run test:agentctl-phase528-presence
```
Extends `test:phase527-soundboard` regression with split presence compositor panels, `presence.set` `invisible`/`hasActivity` span metadata, clipboard `presenceMemberListBusy`/`presenceModalBusy`/`presenceStatusButtonsBusy`, status button `aria-current=location`, and headless `setGuildActivity`/`clearGuildActivity`. Agentctl: `test:custom-status` + `test:friend-presence` + `smoke-agentctl-presence-phase528`.
**Presence depth (v0.8.481):** Phase 518 verification — combined bundle:
```bash
npm run test:phase518-presence
+113 -53
View File
@@ -12633,66 +12633,125 @@ Fix guild switching, session boot gating, and theme/prefs application before mic
| P527-49 | UI: soundboard P2P fanout re-verify | [x] |
| P527-50 | Phase 528 presence depth (v0.8.491) | [x] |
**Next:** ~~Phase 527~~ (complete). Split soundboard compositor (`syncSoundboardPickerPanelDuringGuildLoading`, `syncSoundboardTilesPanelDuringGuildLoading`, `syncSoundboardControlsPanelDuringGuildLoading`, `syncSoundboardVolumeLiveDuringGuildLoading`); `spanKind` on `soundboard.play` / `soundboard.upload` / `soundboard.delete`; anchored **soundboard-errors** (`$`); clipboard `soundboardTilesBusy`/`soundboardVolumeBusy`/`soundboardControlsBusy`; tile `aria-current=location` + roving `tabindex`; ui-flow composer focus after `play-soundboard`; agentctl `playGuildSoundboardSound`/`upsertGuildSound`/`removeGuildSound`; bundle `npm run test:phase527-soundboard`. Phase 528 planned (50 items).
**Next:** ~~Phase 527~~ (complete). Split soundboard compositor (`syncSoundboardPickerPanelDuringGuildLoading`, `syncSoundboardTilesPanelDuringGuildLoading`, `syncSoundboardControlsPanelDuringGuildLoading`, `syncSoundboardVolumeLiveDuringGuildLoading`); `spanKind` on `soundboard.play` / `soundboard.upload` / `soundboard.delete`; anchored **soundboard-errors** (`$`); clipboard `soundboardTilesBusy`/`soundboardVolumeBusy`/`soundboardControlsBusy`; tile `aria-current=location` + roving `tabindex`; ui-flow composer focus after `play-soundboard`; agentctl `playGuildSoundboardSound`/`upsertGuildSound`/`removeGuildSound`; bundle `npm run test:phase527-soundboard`. ~~Phase 528~~ complete; Phase 529 planned (50 items).
---
### Phase 528 — Presence depth (v0.8.491)
### Phase 528 — Presence depth (v0.8.491)
| ID | Item | Status |
|----|------|--------|
| P528-1 | Presence: set status roundtrip re-verify | [ ] |
| P528-2 | Presence: custom status roundtrip re-verify | [ ] |
| P528-3 | Presence: activity update roundtrip re-verify | [ ] |
| P528-4 | UI: split presence guild-loading compositor extend | [ ] |
| P528-5 | UI: user panel chrome guild-loading guard extend | [ ] |
| P528-6 | UI: member list presence guild-loading guard extend | [ ] |
| P528-7 | UI: presence modal guild-loading guard extend | [ ] |
| P528-8 | Platform: `presence.set` span metadata extend | [ ] |
| P528-9 | Platform: `presence.activity` span metadata extend | [ ] |
| P528-10 | Platform: `presence.custom` span metadata extend | [ ] |
| P528-11 | Logging: dev-log **presence-errors** filter tighten | [ ] |
| P528-12 | Logging: dev-log clipboard presence meta extend | [ ] |
| P528-13 | Agentctl: presence set headless re-verify | [ ] |
| P528-14 | Agentctl: activity set headless re-verify | [ ] |
| P528-15 | Agentctl: combined phase528 presence bundle | [ ] |
| P528-16 | Smoke: presence-panels-guild-loading-extend-528 | [ ] |
| P528-17 | Smoke: dev-log-presence-errors-tighten-extend-528 | [ ] |
| P528-18 | Smoke: dev-log-clipboard-presence-meta-extend-528 | [ ] |
| P528-19 | UI: composer presence hint extend | [ ] |
| P528-20 | UI: member row aria-current polish | [ ] |
| P528-21 | UI: presence empty-state hints re-verify | [ ] |
| P528-22 | UI: presence modal live region re-verify | [ ] |
| P528-23 | UI: presence picker keyboard re-verify | [ ] |
| P528-24 | UI: composer autofocus after presence change re-verify | [ ] |
| P528-25 | Mesh: presence gossip roundtrip re-verify | [ ] |
| P528-26 | Mesh: activity asset sync re-verify | [ ] |
| P528-27 | Presence: voice member badge re-verify | [ ] |
| P528-28 | Presence: offline/invisible scope re-verify | [ ] |
| P528-29 | Docs: `PRESENCE.md` refresh | [ ] |
| P528-30 | Docs: `VOICE.md` presence cross-link refresh | [ ] |
| P528-31 | Docs: `AGENTCTL.md` phase 528 bundle | [ ] |
| P528-32 | Regression: soundboard phase 527 smokes still pass | [ ] |
| P528-33 | Regression: screen phase 526 smokes still pass | [ ] |
| P528-34 | Boot: session ready gate | [ ] |
| P528-35 | Boot: pear run gate | [ ] |
| P528-36 | Module: `pearcord-presence` README accuracy | [ ] |
| P528-37 | Module: `pearcord-platform` README presence section | [ ] |
| P528-38 | Smoke: platform-presence-span-metadata-extend-528 | [ ] |
| P528-39 | UI: presence context menu escape focus re-verify | [ ] |
| P528-40 | UI: user panel keyboard re-verify | [ ] |
| P528-41 | UI: companion presence defer re-verify | [ ] |
| P528-42 | UI: dev-log clipboard presence assets meta extend | [ ] |
| P528-43 | UI: thread member presence scope re-verify | [ ] |
| P528-44 | UI: DM presence scope re-verify | [ ] |
| P528-45 | UI: presence hub cross-link re-verify | [ ] |
| P528-46 | UI: invisible mode toast re-verify | [ ] |
| P528-47 | UI: custom status clear toast re-verify | [ ] |
| P528-48 | UI: presence audit log entries re-verify | [ ] |
| P528-49 | UI: presence P2P fanout re-verify | [ ] |
| P528-50 | Phase 529 discovery depth (v0.8.492) | [ ] |
| P528-1 | Presence: set status roundtrip re-verify | [x] |
| P528-2 | Presence: custom status roundtrip re-verify | [x] |
| P528-3 | Presence: activity update roundtrip re-verify | [x] |
| P528-4 | UI: split presence guild-loading compositor extend | [x] |
| P528-5 | UI: user panel chrome guild-loading guard extend | [x] |
| P528-6 | UI: member list presence guild-loading guard extend | [x] |
| P528-7 | UI: presence modal guild-loading guard extend | [x] |
| P528-8 | Platform: `presence.set` span metadata extend | [x] |
| P528-9 | Platform: `presence.activity` span metadata extend | [x] |
| P528-10 | Platform: `presence.custom` span metadata extend | [x] |
| P528-11 | Logging: dev-log **presence-errors** filter tighten | [x] |
| P528-12 | Logging: dev-log clipboard presence meta extend | [x] |
| P528-13 | Agentctl: presence set headless re-verify | [x] |
| P528-14 | Agentctl: activity set headless re-verify | [x] |
| P528-15 | Agentctl: combined phase528 presence bundle | [x] |
| P528-16 | Smoke: presence-panels-guild-loading-extend-528 | [x] |
| P528-17 | Smoke: dev-log-presence-errors-tighten-extend-528 | [x] |
| P528-18 | Smoke: dev-log-clipboard-presence-meta-extend-528 | [x] |
| P528-19 | UI: composer presence hint extend | [x] |
| P528-20 | UI: member row aria-current polish | [x] |
| P528-21 | UI: presence empty-state hints re-verify | [x] |
| P528-22 | UI: presence modal live region re-verify | [x] |
| P528-23 | UI: presence picker keyboard re-verify | [x] |
| P528-24 | UI: composer autofocus after presence change re-verify | [x] |
| P528-25 | Mesh: presence gossip roundtrip re-verify | [x] |
| P528-26 | Mesh: activity asset sync re-verify | [x] |
| P528-27 | Presence: voice member badge re-verify | [x] |
| P528-28 | Presence: offline/invisible scope re-verify | [x] |
| P528-29 | Docs: `PRESENCE.md` refresh | [x] |
| P528-30 | Docs: `VOICE.md` presence cross-link refresh | [x] |
| P528-31 | Docs: `AGENTCTL.md` phase 528 bundle | [x] |
| P528-32 | Regression: soundboard phase 527 smokes still pass | [x] |
| P528-33 | Regression: screen phase 526 smokes still pass | [x] |
| P528-34 | Boot: session ready gate | [x] |
| P528-35 | Boot: pear run gate | [x] |
| P528-36 | Module: `pearcord-presence` README accuracy | [x] |
| P528-37 | Module: `pearcord-platform` README presence section | [x] |
| P528-38 | Smoke: platform-presence-span-metadata-extend-528 | [x] |
| P528-39 | UI: presence context menu escape focus re-verify | [x] |
| P528-40 | UI: user panel keyboard re-verify | [x] |
| P528-41 | UI: companion presence defer re-verify | [x] |
| P528-42 | UI: dev-log clipboard presence assets meta extend | [x] |
| P528-43 | UI: thread member presence scope re-verify | [x] |
| P528-44 | UI: DM presence scope re-verify | [x] |
| P528-45 | UI: presence hub cross-link re-verify | [x] |
| P528-46 | UI: invisible mode toast re-verify | [x] |
| P528-47 | UI: custom status clear toast re-verify | [x] |
| P528-48 | UI: presence audit log entries re-verify | [x] |
| P528-49 | UI: presence P2P fanout re-verify | [x] |
| P528-50 | Phase 529 discovery depth (v0.8.492) | [x] |
**Next:** P528-1P528-49.
**Next:** ~~Phase 528~~ (complete). Split presence compositor (`syncPresenceUserPanelPanelDuringGuildLoading`, `syncPresenceModalPanelDuringGuildLoading`, `syncPresenceMemberPanelDuringGuildLoading`); `presence.set` span ends with `invisible`/`hasActivity`; status buttons `aria-current=location` + `aria-busy` during guild load; clipboard `presenceMemberListBusy`/`presenceModalBusy`/`presenceStatusButtonsBusy`; voice roster presence `aria-current=location`; agentctl `setGuildActivity`/`clearGuildActivity`; bundle `npm run test:phase528-presence`. Phase 529 planned (50 items).
---
### Phase 529 — Discovery depth (v0.8.492)
| ID | Item | Status |
|----|------|--------|
| P529-1 | Discovery: list public listings roundtrip re-verify | [ ] |
| P529-2 | Discovery: join listing roundtrip re-verify | [ ] |
| P529-3 | Discovery: publish listing roundtrip re-verify | [ ] |
| P529-4 | UI: split discovery guild-loading compositor extend | [ ] |
| P529-5 | UI: explore chrome panel guild-loading guard extend | [ ] |
| P529-6 | UI: explore filter panel guild-loading guard extend | [ ] |
| P529-7 | UI: listing editor panel guild-loading guard extend | [ ] |
| P529-8 | Platform: `discovery.list` span metadata extend | [ ] |
| P529-9 | Platform: `discovery.join` span metadata extend | [ ] |
| P529-10 | Platform: `discovery.publish` span metadata extend | [ ] |
| P529-11 | Logging: dev-log **discovery-errors** filter tighten | [ ] |
| P529-12 | Logging: dev-log clipboard discovery meta extend | [ ] |
| P529-13 | Agentctl: explore list headless re-verify | [ ] |
| P529-14 | Agentctl: discovery join headless re-verify | [ ] |
| P529-15 | Agentctl: combined phase529 discovery bundle | [ ] |
| P529-16 | Smoke: discovery-panels-guild-loading-extend-529 | [ ] |
| P529-17 | Smoke: dev-log-discovery-errors-tighten-extend-529 | [ ] |
| P529-18 | Smoke: dev-log-clipboard-discovery-meta-extend-529 | [ ] |
| P529-19 | UI: composer discovery hint extend | [ ] |
| P529-20 | UI: listing row aria-current polish | [ ] |
| P529-21 | UI: explore join toast re-verify | [ ] |
| P529-22 | UI: keyboard roving in explore list re-verify | [ ] |
| P529-23 | UI: explore modal live region re-verify | [ ] |
| P529-24 | UI: composer autofocus after explore join re-verify | [ ] |
| P529-25 | Discovery: mesh live refresh roundtrip re-verify | [ ] |
| P529-26 | Discovery: filter tag roundtrip re-verify | [ ] |
| P529-27 | Discovery: listing TTL roundtrip re-verify | [ ] |
| P529-28 | Discovery: invite attach on listing re-verify | [ ] |
| P529-29 | Docs: `DISCOVERY.md` refresh | [ ] |
| P529-30 | Docs: explore UX copy refresh | [ ] |
| P529-31 | Docs: `AGENTCTL.md` phase 529 bundle | [ ] |
| P529-32 | Regression: presence phase 528 smokes still pass | [ ] |
| P529-33 | Regression: soundboard phase 527 smokes still pass | [ ] |
| P529-34 | Boot: session ready gate | [ ] |
| P529-35 | Boot: pear run gate | [ ] |
| P529-36 | Module: `pearcord-discovery` README accuracy | [ ] |
| P529-37 | Module: `pearcord-platform` README discovery section | [ ] |
| P529-38 | Smoke: platform-discovery-span-metadata-extend-529 | [ ] |
| P529-39 | UI: discovery escape focus re-verify | [ ] |
| P529-40 | UI: discovery toast copy re-verify | [ ] |
| P529-41 | UI: companion discovery defer re-verify | [ ] |
| P529-42 | UI: dev-log clipboard discovery mesh meta extend | [ ] |
| P529-43 | UI: home rail explore shortcut re-verify | [ ] |
| P529-44 | UI: contacts cross-link re-verify | [ ] |
| P529-45 | UI: audit log discovery events re-verify | [ ] |
| P529-46 | UI: deep link explore re-verify | [ ] |
| P529-47 | UI: discovery validation copy re-verify | [ ] |
| P529-48 | UI: discovery audit log entries re-verify | [ ] |
| P529-49 | UI: discovery P2P fanout re-verify | [ ] |
| P529-50 | Phase 530 contacts depth (v0.8.493) | [ ] |
**Next:** P529-1P529-49.
---
@@ -14143,6 +14202,7 @@ Absorbed into Phase 273 (P273-5P273-8, P273-11P273-12). See Phase 274 for
- **2026-05-24** — v0.8.479: Phase 516 — split contacts guild-loading compositor; `contacts.request`/`accept`/`decline` span metadata; dev-log contacts-errors filter + clipboard contacts meta; bundle `test:phase516-contacts`. Phase 517 planned.
- **2026-05-24** — v0.8.478: Phase 515 — split DMs guild-loading compositor; `dm.open`/`dm.send`/`dm.group.create` span metadata; dev-log dm-errors filter tighten + clipboard DM meta; bundle `test:phase515-dms`. Phase 516 planned.
- **2026-05-24** — v0.8.477: Phase 514 — split invites guild-loading compositor; `guild.invite`/`invite.join`/`invite.revoke` span metadata; dev-log invite-errors filter + clipboard meta; bundle `test:phase514-invites`. Phase 515 planned.
- **2026-05-24** — v0.8.491: Phase 528 — split presence compositor (`syncPresenceUserPanelPanelDuringGuildLoading`, `syncPresenceModalPanelDuringGuildLoading`, `syncPresenceMemberPanelDuringGuildLoading`); `presence.set` ends with `invisible`/`hasActivity`; status btn `aria-current=location` + `aria-busy`; clipboard presence busy meta; voice roster presence `aria-current=location`; agentctl `setGuildActivity`/`clearGuildActivity`; bundle `test:phase528-presence`. Phase 529 planned (50 items).
- **2026-05-24** — v0.8.490: Phase 527 — split soundboard compositor; `spanKind` on `soundboard.play` / `soundboard.upload` / `soundboard.delete`; anchored **soundboard-errors**; clipboard soundboard busy meta; tile `aria-current=location`; composer focus after play-soundboard; agentctl soundboard headless helpers; bundle `test:phase527-soundboard`. Phase 528 planned (50 items).
- **2026-05-24** — v0.8.489: Phase 526 — split screen compositor; `spanKind` on `screen.start` / `screen.stop` / `screen.capture`; anchored **screen-errors**; clipboard screen busy meta; stream tile `aria-current=location`; composer focus after screen stop; agentctl screen headless helpers; bundle `test:phase526-screen`. Phase 527 planned (50 items).
- **2026-05-24** — v0.8.488: Phase 525 — split stage compositor; `spanKind` on `stage.join` / `stage.speaker.*`; anchored **stage-errors**; clipboard stage busy meta; speaker `aria-current=location`; ui-flow `approve-stage-speaker`/`demote-stage-speaker`; agentctl stage headless helpers; bundle `test:phase525-stage`. Phase 526 planned (50 items).
+5
View File
@@ -20,12 +20,17 @@ Statuses: `online`, `idle`, `dnd`, `offline` (see `pearcord-shared` `USER_STATUS
Presence depth pass 3: `syncPresenceModalStatusListDuringGuildLoading` + `syncPresenceActivityFeedDuringGuildLoading`; status modal `role="status"` live region and `listbox` availability picker; member rows `aria-current=location` with status-dot sync; `spanKind` on `presence.set`/`custom`/`activity` spans; anchored **presence-errors** filter; clipboard `presenceModalOpen`, `activityFeedCount`; `set-presence`/`set-activity`/`clear-activity` emit `composer-focus-channel` when in a guild channel. Agentctl: `setPresenceStatus`, `setCustomStatus`. Bundle: `npm run test:phase518-presence`.
## Phase 528 (v0.8.491)
Presence depth pass 4: split compositor into `syncPresenceUserPanelPanelDuringGuildLoading`, `syncPresenceModalPanelDuringGuildLoading`, `syncPresenceMemberPanelDuringGuildLoading`; status buttons `aria-current=location` + `aria-busy` during guild load; voice roster presence rows `aria-current=location` + roving `tabindex`; `presence.set` span ends with `invisible`/`hasActivity`; clipboard `presenceMemberListBusy`/`presenceModalBusy`/`presenceStatusButtonsBusy`. Agentctl: `setGuildActivity`, `clearGuildActivity`. Bundle: `npm run test:phase528-presence` (chains `test:phase527-soundboard`).
## Tests
```bash
cd apps/pearcord
npm run test:friend-presence
npm run test:member-list-presence-dot
npm run test:phase528-presence
npm run test:phase518-presence
npm run test:phase508-presence
PEARCORD_SKIP_MESH_ROUNDTRIP=1 npm run test:contacts-mesh-live
+2
View File
@@ -22,6 +22,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.491 (Phase 528):** Fourth presence depth pass — split compositor panels; status/voice roster `aria-current=location`; clipboard `presenceMemberListBusy`/`presenceStatusButtonsBusy`. See [PRESENCE.md](./PRESENCE.md). Bundle: `npm run test:phase528-presence`.
**v0.8.471 (Phase 508):** Second presence depth pass — user-panel chrome/custom split, member-list guild-loading guard, platform presence span metadata (`previousStatus`, `hasAssets`), clipboard `lastPresenceStatusId`. Bundle: `npm run test:phase508-presence`.
**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`.