Document Phases 402–403 and plan Phase 404 (v0.8.366).

Complete forum and guild inbox roadmap phases with search, voice, composer, and notification doc updates plus the next channel/threads depth phase.

Co-authored-by: Cursor <[email protected]>
This commit is contained in:
Raven Scott
2026-05-23 14:26:41 -04:00
co-authored by Cursor
parent 6355efdbf6
commit 781666cc46
5 changed files with 94 additions and 22 deletions
+2
View File
@@ -190,6 +190,8 @@ npm run test:mention-scroll-on-open
**v0.8.268:** Platform `@here` / `@everyone` checks use **parent channel** permissions in threads (same as `@channel`). Smoke: `npm run test:platform-here-thread-gate`.
**v0.8.365 (Phase 402):** Slowmode `aria-describedby` syncs on channel switch (`#composer-slowmode-hint`). Composer `aria-label` reflects channel/thread context. @everyone permission errors in threads cite parent `#channel`. Smokes: `npm run test:composer-slowmode-describedby-channel`, `npm run test:composer-aria-label`, `npm run test:composer-mention-everyone-thread-parent-toast`.
**v0.8.266:** Platform rejects `@channel` without View Channel (`missing permission: mention channel`); UI shows a toast. Shift+@ shows the same toast when blocked. Smoke: `npm run test:mention-channel-platform`.
**v0.8.265:** In **threads**, `@channel` appears only when `view.parentChannelPermissions.viewChannel` is true (parent text channel). Smoke: `npm run test:composer-channel-thread-gate`.
+4
View File
@@ -98,6 +98,10 @@ Inbox rows include `messageId` for jump navigation. See [MESSAGE_DEEP_LINKS.md](
| `markAllNotificationsRead()` | Clear inbox unread |
| `markChannelRead()` | Also clears inbox rows for channel and zeros `MENTION_ALERTS` for the channel |
**v0.8.366:** **Mark channel read** on guild text channels dismisses thread-family desktop for all threads under the parent (`mark-channel-read-cleared` IPC, Phase 403 re-verified). Smokes: `npm run test:mark-channel-read-channel-thread-family-desktop`, `npm run test:agentctl-thread-inbox-mark-channel-read`, `npm run test:navigate-guild-thread-family-desktop`.
**v0.8.365:** **Mark notification read** on forum channels dismisses thread-family desktop for all forum post threads (`mark-notification-read-cleared` IPC, Phase 402 re-verified). Smokes: `npm run test:mark-notification-read-forum-thread-family-desktop`, `npm run test:agentctl-thread-inbox-mark-notification-read`, `npm run test:server-rail-page-jump`.
**v0.8.362:** **Mark notification read** on forum channels dismisses thread-family desktop for all forum post threads (`mark-notification-read-cleared` IPC, Phase 399 re-verified). Smokes: `npm run test:mark-notification-read-forum-thread-family-desktop`, `npm run test:agentctl-thread-inbox-mark-notification-read`.
**v0.8.364:** **Open notification** on text channels dismisses thread-family desktop for all threads under the parent channel (`open-notification` IPC, Phase 401 re-verified). Smokes: `npm run test:open-notification-channel-thread-family-desktop`, `npm run test:agentctl-thread-inbox-mark-channel-read`.
+82 -22
View File
@@ -5793,32 +5793,90 @@ Fix guild switching, session boot gating, and theme/prefs application before mic
---
### Phase 402 — Forum inbox & composer depth (v0.8.364)
### Phase 402 — Forum inbox & composer depth (v0.8.365)
| ID | Item | Status |
|----|------|--------|
| P402-1 | Search: forum sidecar stale age when guild scope cached (verify) | [ ] |
| P402-2 | Search mesh refresh: remove `aria-pressed` from refresh button while idle (verify) | [ ] |
| P402-3 | Platform: `setSearch` mesh-on logs scope on cache miss at debug (verify) | [ ] |
| P402-4 | Composer: slowmode `aria-describedby` sync on channel switch (verify) | [ ] |
| P402-5 | Notifications: mark-notification-read clears forum thread family (verify) | [ ] |
| P402-6 | Composer: mention-everyone thread toast cites parent (verify) | [ ] |
| P402-7 | UI: channel list PageUp/Down jumps 5 channels (verify) | [ ] |
| P402-8 | Voice: remote mute pill name aria bundle smoke (verify) | [ ] |
| P402-9 | Logging: Clipboard JSONL `sessionError` smoke (verify) | [ ] |
| P402-10 | Diagnostics filter: **Voice errors** bundle smoke (verify) | [ ] |
| P402-11 | Agentctl: forum search mesh-off then mesh-on refresh (reuse) | [ ] |
| P402-12 | Agentctl: thread inbox mark-notification-read roundtrip (reuse) | [ ] |
| P402-13 | Companion: channels panel verify disabled while guild loading | [ ] |
| P402-14 | UI: server rail PageUp/Down jumps 5 guild icons (Discord parity) | [ ] |
| P402-15 | Smoke: `test:navigate-forum-thread-family-desktop` | [ ] |
| P402-16 | Smoke: `test:platform-setsearch-mesh-on-cache-miss` | [ ] |
| P402-17 | Docs: `SEARCH.md` + `COMPOSER.md` forum inbox refresh | [ ] |
| P402-18 | Docs: `NOTIFICATIONS.md` mark-notification-read forum family | [ ] |
| P402-19 | Boot: chain Phase 402 progressive smokes | [ ] |
| P402-20 | Phase 403 guild inbox & voice depth (v0.8.365) | [ ] |
| P402-1 | Search: forum sidecar stale age when guild scope cached (verify) | [x] |
| P402-2 | Search mesh refresh: remove `aria-pressed` from refresh button while idle (verify) | [x] |
| P402-3 | Platform: `setSearch` mesh-on logs scope on cache miss at debug (verify) | [x] |
| P402-4 | Composer: slowmode `aria-describedby` sync on channel switch (verify) | [x] |
| P402-5 | Notifications: mark-notification-read clears forum thread family (verify) | [x] |
| P402-6 | Composer: mention-everyone thread toast cites parent (verify) | [x] |
| P402-7 | UI: channel list PageUp/Down jumps 5 channels (verify) | [x] |
| P402-8 | Voice: remote mute pill name aria bundle smoke (verify) | [x] |
| P402-9 | Logging: Clipboard JSONL `sessionError` smoke (verify) | [x] |
| P402-10 | Diagnostics filter: **Voice errors** bundle smoke (verify) | [x] |
| P402-11 | Agentctl: forum search mesh-off then mesh-on refresh (reuse) | [x] |
| P402-12 | Agentctl: thread inbox mark-notification-read roundtrip (reuse) | [x] |
| P402-13 | Companion: channels panel verify disabled while guild loading | [x] |
| P402-14 | UI: server rail PageUp/Down jumps 5 guild icons (Discord parity) | [x] |
| P402-15 | Smoke: `test:navigate-forum-thread-family-desktop` | [x] |
| P402-16 | Smoke: `test:platform-setsearch-mesh-on-cache-miss` | [x] |
| P402-17 | Docs: `SEARCH.md` + `COMPOSER.md` forum inbox refresh | [x] |
| P402-18 | Docs: `NOTIFICATIONS.md` mark-notification-read forum family | [x] |
| P402-19 | Boot: chain Phase 402 progressive smokes | [x] |
| P402-20 | Phase 403 guild inbox & voice depth (v0.8.366) | [x] |
**Next:** P402-1P402-19.
**Next:** ~~Phase 402~~ (complete).
---
### Phase 403 — Guild inbox & voice depth (v0.8.366)
| ID | Item | Status |
|----|------|--------|
| P403-1 | Search: guild sidecar stale age when channel scope cached (verify) | [x] |
| P403-2 | Search mesh refresh: remove `aria-live` from mesh chip while idle (verify) | [x] |
| P403-3 | Platform: `refreshSearch` mesh-on logs scope on cache miss at debug (verify) | [x] |
| P403-4 | Voice: stage audience/pending pill `aria-current` when active (Discord parity) | [x] |
| P403-5 | Notifications: mark-channel-read clears guild thread family (verify) | [x] |
| P403-6 | Composer: mention-role thread toast cites parent (verify) | [x] |
| P403-7 | UI: server rail typeahead wraps before focused guild (verify) | [x] |
| P403-8 | Voice: remote streaming pill name aria bundle smoke (verify) | [x] |
| P403-9 | Logging: Clipboard JSONL `guildLoading` bool smoke (verify) | [x] |
| P403-10 | Diagnostics filter: **IPC errors** bundle smoke (verify) | [x] |
| P403-11 | Agentctl: guild search mesh-off then mesh-on refresh (reuse) | [x] |
| P403-12 | Agentctl: thread inbox mark-channel-read roundtrip (reuse) | [x] |
| P403-13 | Companion: messages panel verify disabled while guild loading | [x] |
| P403-14 | UI: channel list voice roster rows in roving focus (Home/End/±5) | [x] |
| P403-15 | Smoke: `test:navigate-guild-thread-family-desktop` | [x] |
| P403-16 | Smoke: `test:platform-refresh-mesh-on-cache-miss` | [x] |
| P403-17 | Docs: `SEARCH.md` + `VOICE.md` guild inbox refresh | [x] |
| P403-18 | Docs: `NOTIFICATIONS.md` mark-channel-read guild family | [x] |
| P403-19 | Boot: chain Phase 403 progressive smokes | [x] |
| P403-20 | Phase 404 channel inbox & threads depth (v0.8.367) | [x] |
**Next:** ~~Phase 403~~ (complete).
---
### Phase 404 — Channel inbox & threads depth (v0.8.367)
| ID | Item | Status |
|----|------|--------|
| P404-1 | Search: channel sidecar stale age when forum scope cached (verify) | [ ] |
| P404-2 | Search mesh refresh: remove `aria-disabled` from refresh button while idle (verify) | [ ] |
| P404-3 | Platform: `refreshSearch` mesh-on logs scope on cache hit at debug (verify) | [ ] |
| P404-4 | Threads panel: PageUp/Down on archived mention rows (verify) | [ ] |
| P404-5 | Notifications: open-notification clears channel thread family desktop (verify) | [ ] |
| P404-6 | Composer: mention-here thread toast cites parent (verify) | [ ] |
| P404-7 | UI: members list typeahead wraps before focused row (verify) | [ ] |
| P404-8 | Voice: remote speaking pill name aria bundle smoke (verify) | [ ] |
| P404-9 | Logging: Clipboard JSONL `searchCached` bool smoke (verify) | [ ] |
| P404-10 | Diagnostics filter: **Voice errors** bundle smoke (verify) | [ ] |
| P404-11 | Agentctl: guild search mesh-off then mesh-on refresh (reuse) | [ ] |
| P404-12 | Agentctl: thread inbox mark-channel-read roundtrip (reuse) | [ ] |
| P404-13 | Companion: compose panel verify disabled while guild loading | [ ] |
| P404-14 | UI: threads panel reopen restores last filter chip focus (verify) | [ ] |
| P404-15 | Smoke: `test:open-notification-channel-thread-family-desktop` | [ ] |
| P404-16 | Smoke: `test:platform-refresh-mesh-on-cache-hit` | [ ] |
| P404-17 | Docs: `SEARCH.md` + `THREADS_PANEL.md` channel inbox refresh | [ ] |
| P404-18 | Docs: `NOTIFICATIONS.md` open-notification channel family | [ ] |
| P404-19 | Boot: chain Phase 404 progressive smokes | [ ] |
| P404-20 | Phase 405 forum inbox & composer depth (v0.8.368) | [ ] |
**Next:** P404-1P404-19.
---
@@ -7264,6 +7322,8 @@ Absorbed into Phase 273 (P273-5P273-8, P273-11P273-12). See Phase 274 for
### Changelog
- **2026-05-23** — v0.8.366: Phase 403 — guild sidecar stale channel meta; stage audience aria-current; voice roster channel-list roving; server rail typeahead wrap; agentctl guild search + thread inbox; boot chain. Phase 404 planned.
- **2026-05-23** — v0.8.365: Phase 402 — forum sidecar stale guild meta; server rail PageUp/Down ±5; channel list page jump verified; mark-notification-read forum family; agentctl forum search + thread inbox; boot chain. Phase 403 planned.
- **2026-05-23** — v0.8.364: Phase 401 — channel sidecar stale forum meta; members typeahead wrap-before; threads reopen filter; open-notification channel family; agentctl guild search + thread inbox; boot chain. Phase 402 planned.
- **2026-05-23** — v0.8.363: Phase 400 — guild sidecar stale forum meta; server rail typeahead; Ctrl+Home/End category jump; mark-channel-read channel thread family; agentctl guild search + thread inbox; boot chain. Phase 401 planned.
- **2026-05-23** — v0.8.362: Phase 399 — forum sidecar stale guild meta; members PageUp/Down ±5; category Home/End roving; mark-notification-read forum family; agentctl forum search + thread inbox; boot chain. Phase 400 planned.
+4
View File
@@ -352,6 +352,10 @@ See also [FORUM_ARCHIVE_SEARCH.md](./FORUM_ARCHIVE_SEARCH.md).
Chat header: scope `<select>` + search input. Guild hits show `#channel` tag; click a hit to jump channels (`select-channel`). **Recent searches** chips appear when guild scope is active and the query is empty (v0.8.115). **Matches** toggle (guild scope, v0.8.260) filters to matching hits only.
**v0.8.366 (Phase 403):** Guild sidecar stale age falls back to `channelMetaStale.fetchedAt` when guild scope uses cached channel meta. Mesh chip drops `aria-live` while idle. `refreshSearch` mesh-on logs `scope` on cache miss at debug. Smokes: `npm run test:guild-sidecar-stale-channel-meta`, `npm run test:search-mesh-chip-aria-live-idle`, `npm run test:platform-refresh-mesh-on-cache-miss`.
**v0.8.365 (Phase 402):** Forum sidecar stale age falls back to `guildMetaStale.fetchedAt` when forum scope uses cached guild meta. Mesh **↻** drops `aria-pressed` while idle. `setSearch` mesh-on logs `scope` on cache miss at debug. Smokes: `npm run test:forum-sidecar-stale-guild-meta`, `npm run test:search-mesh-refresh-btn-no-pressed-idle`, `npm run test:platform-setsearch-mesh-on-cache-miss`.
## Tests
```bash
+2
View File
@@ -196,6 +196,8 @@ Per-channel overwrites apply via `pearcord-channel-permissions` (see [CHANNEL_PE
**v0.8.205:** **Stream hover codec chip** — Video stream hover shows a dedicated codec badge (VP8/H264/etc.) deduped from the quality pill when Opus is not active. Smoke: `npm run test:stream-hover-codec-badge`. See [UI_FLOW.md](./UI_FLOW.md).
**v0.8.366 (Phase 403):** Stage bar **Audience** and **Request pending** pills expose `aria-current="true"` when that is your role (Speaker unchanged). Expanded voice roster rows under voice channels join channel-list roving focus (Home/End, arrows, PageUp/Down ±5). Remote streaming pill + `.voice-roster-name` aria bundle verified. Smokes: `npm run test:stage-audience-aria-current`, `npm run test:channel-list-voice-roster-focus`, `npm run test:voice-roster-remote-streaming-name-bundle`.
**v0.8.363:** Phase 400 re-verified stage **Speaker** `aria-current`, voice **Escape**→channel list, and remote deafen name aria bundles. Smokes: `npm run test:stage-speaker-aria-current`, `npm run test:voice-panel-escape-channel-focus`, `npm run test:voice-roster-remote-deafen-name-bundle`.
**v0.8.360:** Stage bar **Speaker** role pill exposes `aria-current="true"` when you are an active stage speaker. **Escape** from `#voice-bar`, `#stage-bar`, `#chat-voice-panel`, `#voice-members-panel`, or `#soundboard-picker` returns keyboard focus to the active channel row. Smokes: `npm run test:stage-speaker-aria-current`, `npm run test:voice-panel-escape-channel-focus`, `npm run test:server-rail-home-end`.