Close Phase 382; open Phase 383 channel inbox roadmap (v0.8.345).
Document guild search mesh aria-controls idle, navigate forum notifications, and composer channel-select autofocus parity. Co-authored-by: Cursor <[email protected]>
This commit is contained in:
@@ -30,6 +30,10 @@ Rendered messages highlight mentions of the current user with the `.mention-self
|
||||
|
||||
While the message box is focused, worker `state` polls defer full `render()` to avoid jank. Drafts flush on blur via `set-compose-draft` (no per-keystroke IPC). See [LOGGING.md](./LOGGING.md#composer-ipc-typing-performance).
|
||||
|
||||
## Focus (Discord parity)
|
||||
|
||||
**v0.8.344:** Selecting a text channel or thread via `sendSelectChannel` focuses `#message-input` after the next `render()` when the channel is postable (not forum/voice/archived/read-only). Opening a DM from the sidebar sets the same pending focus. Autofocus is skipped when jumping to a message (`pendingJumpMessageId`), replying, a modal is open, or focus is in another text control (e.g. channel search). Uses `focus({ preventScroll: true })`. Smoke: `npm run test:composer-channel-select-autofocus`.
|
||||
|
||||
## Tests
|
||||
|
||||
```bash
|
||||
|
||||
@@ -98,6 +98,8 @@ 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.344:** **Navigate to message** on forum channels dismisses thread-family desktop for all forum post threads (`navigateToMessage` forum branch, Phase 382 re-verified). Smokes: `npm run test:navigate-forum-thread-family-desktop`, `npm run test:agentctl-thread-inbox-mark-channel-read`.
|
||||
|
||||
**v0.8.343:** **Mark notification read** on forum channels dismisses thread-family desktop for all forum post threads (`mark-notification-read-cleared` IPC, Phase 381 re-verified). Smokes: `npm run test:mark-notification-read-forum-thread-family-desktop`, `npm run test:agentctl-thread-inbox-mark-channel-read`.
|
||||
|
||||
**v0.8.342:** **Open notification** on text channels dismisses thread-family desktop for all threads under the parent channel (`open-notification` IPC, Phase 380 re-verified). Smokes: `npm run test:open-notification-channel-thread-family-desktop`, `npm run test:agentctl-thread-inbox-mark-notification-read`.
|
||||
|
||||
+52
-22
@@ -5217,28 +5217,57 @@ Fix guild switching, session boot gating, and theme/prefs application before mic
|
||||
|
||||
| ID | Item | Status |
|
||||
|----|------|--------|
|
||||
| P382-1 | Search: guild sidecar stale age when forum scope cached (`forumMetaStale`) (verify) | [ ] |
|
||||
| P382-2 | Search mesh refresh: remove `aria-controls` from refresh button while idle (verify) | [ ] |
|
||||
| P382-3 | Platform: `setSearch` mesh-off logs scope on cache hit at debug (verify) | [ ] |
|
||||
| P382-4 | Thread panel: active pinned+muted combined aria (verify) | [ ] |
|
||||
| P382-5 | Notifications: navigate clears forum thread family (verify) | [ ] |
|
||||
| P382-6 | Composer: mention-channel thread toast cites parent (verify) | [ ] |
|
||||
| P382-7 | Role editor: custom-role skip hash smoke (verify) | [ ] |
|
||||
| P382-8 | Voice: remote mute pill name aria bundle smoke (verify) | [ ] |
|
||||
| P382-9 | Logging: Clipboard JSONL `sessionError` smoke (verify) | [ ] |
|
||||
| P382-10 | Diagnostics filter: **Voice errors** bundle smoke (verify) | [ ] |
|
||||
| P382-11 | Agentctl: guild search mesh-off then mesh-on refresh (reuse) | [ ] |
|
||||
| P382-12 | Agentctl: thread inbox mark-channel-read roundtrip (reuse) | [ ] |
|
||||
| P382-13 | Companion: channels panel verify disabled while guild loading | [ ] |
|
||||
| P382-14 | Smoke: `test:navigate-forum-thread-family-desktop` | [ ] |
|
||||
| P382-15 | Smoke: `test:search-mesh-refresh-btn-no-controls-idle` | [ ] |
|
||||
| P382-16 | Smoke: `test:platform-setsearch-mesh-off-cache-hit` | [ ] |
|
||||
| P382-17 | Docs: `SEARCH.md` mesh refresh aria-controls idle | [ ] |
|
||||
| P382-18 | Docs: `NOTIFICATIONS.md` navigate forum thread family | [ ] |
|
||||
| P382-19 | Boot: chain Phase 381 smokes | [ ] |
|
||||
| P382-20 | Phase 383 channel inbox & mesh depth (v0.8.345) | [ ] |
|
||||
| P382-1 | Search: guild sidecar stale age when forum scope cached (`forumMetaStale`) (verify) | [x] |
|
||||
| P382-2 | Search mesh refresh: remove `aria-controls` from refresh button while idle (verify) | [x] |
|
||||
| P382-3 | Platform: `setSearch` mesh-off logs scope on cache hit at debug (verify) | [x] |
|
||||
| P382-4 | Thread panel: active pinned+muted combined aria (verify) | [x] |
|
||||
| P382-5 | Notifications: navigate clears forum thread family (verify) | [x] |
|
||||
| P382-6 | Composer: mention-channel thread toast cites parent (verify) | [x] |
|
||||
| P382-7 | Role editor: custom-role skip hash smoke (verify) | [x] |
|
||||
| P382-8 | Voice: remote mute pill name aria bundle smoke (verify) | [x] |
|
||||
| P382-9 | Logging: Clipboard JSONL `sessionError` smoke (verify) | [x] |
|
||||
| P382-10 | Diagnostics filter: **Voice errors** bundle smoke (verify) | [x] |
|
||||
| P382-11 | Agentctl: guild search mesh-off then mesh-on refresh (reuse) | [x] |
|
||||
| P382-12 | Agentctl: thread inbox mark-channel-read roundtrip (reuse) | [x] |
|
||||
| P382-13 | Companion: channels panel verify disabled while guild loading | [x] |
|
||||
| P382-14 | Smoke: `test:navigate-forum-thread-family-desktop` | [x] |
|
||||
| P382-15 | Smoke: `test:search-mesh-refresh-btn-no-controls-idle` | [x] |
|
||||
| P382-16 | Smoke: `test:platform-setsearch-mesh-off-cache-hit` | [x] |
|
||||
| P382-17 | Docs: `SEARCH.md` mesh refresh aria-controls idle | [x] |
|
||||
| P382-18 | Docs: `NOTIFICATIONS.md` navigate forum thread family | [x] |
|
||||
| P382-19 | UI: composer autofocus on channel/DM select (Discord parity) | [x] |
|
||||
| P382-20 | Phase 383 channel inbox & mesh depth (v0.8.345) | [x] |
|
||||
|
||||
**Next:** P382-1–P382-19.
|
||||
**Next:** ~~Phase 382~~ (complete).
|
||||
|
||||
---
|
||||
|
||||
### Phase 383 — Channel inbox & mesh depth (v0.8.345)
|
||||
|
||||
| ID | Item | Status |
|
||||
|----|------|--------|
|
||||
| P383-1 | Search: guild sidecar stale age when channel scope cached (verify) | [ ] |
|
||||
| P383-2 | Search mesh refresh: remove `aria-disabled` from refresh button while idle (verify) | [ ] |
|
||||
| P383-3 | Platform: `refreshSearch` mesh-on logs scope on cache hit at debug (verify) | [ ] |
|
||||
| P383-4 | Thread panel: active muted-only combined aria (verify) | [ ] |
|
||||
| P383-5 | Notifications: open-notification clears channel thread family desktop (verify) | [ ] |
|
||||
| P383-6 | Composer: mention-everyone thread toast cites parent (verify) | [ ] |
|
||||
| P383-7 | Role editor: custom-role skip hash smoke (verify) | [ ] |
|
||||
| P383-8 | Voice: remote speaking pill name aria bundle smoke (verify) | [ ] |
|
||||
| P383-9 | Logging: Clipboard JSONL `searchCached` bool smoke (verify) | [ ] |
|
||||
| P383-10 | Diagnostics filter: **IPC errors** bundle smoke (verify) | [ ] |
|
||||
| P383-11 | Agentctl: forum search mesh-off then mesh-on refresh (reuse) | [ ] |
|
||||
| P383-12 | Agentctl: thread inbox mark-notification-read roundtrip (reuse) | [ ] |
|
||||
| P383-13 | Companion: compose panel verify disabled while guild loading | [ ] |
|
||||
| P383-14 | Smoke: `test:open-notification-channel-thread-family-desktop` | [ ] |
|
||||
| P383-15 | Smoke: `test:search-mesh-refresh-btn-no-disabled-idle` | [ ] |
|
||||
| P383-16 | Smoke: `test:platform-refresh-mesh-on-cache-hit` | [ ] |
|
||||
| P383-17 | Docs: `SEARCH.md` mesh refresh aria-disabled idle | [ ] |
|
||||
| P383-18 | Docs: `NOTIFICATIONS.md` open-notification channel family | [ ] |
|
||||
| P383-19 | Boot: chain Phase 382 smokes + composer channel-select autofocus | [ ] |
|
||||
| P383-20 | Phase 384 forum inbox & mesh depth (v0.8.346) | [ ] |
|
||||
|
||||
**Next:** P383-1–P383-19.
|
||||
|
||||
---
|
||||
|
||||
@@ -6684,8 +6713,9 @@ Absorbed into Phase 273 (P273-5–P273-8, P273-11–P273-12). See Phase 274 for
|
||||
|
||||
### Changelog
|
||||
|
||||
- **2026-05-23** — v0.8.346: Phase 384 planned (forum inbox & mesh depth).
|
||||
- **2026-05-23** — v0.8.345: Phase 383 planned (channel inbox & mesh depth).
|
||||
- **2026-05-23** — v0.8.344: Phase 382 planned (guild inbox & mesh depth).
|
||||
- **2026-05-23** — v0.8.344: Phase 382 — guild sidecar stale forum meta; mesh aria-controls idle; setSearch mesh-off cache hit; navigate forum family; composer channel/DM select autofocus; agentctl guild search + thread inbox; boot chain. Phase 383 planned.
|
||||
- **2026-05-23** — v0.8.343: Phase 381 — forum sidecar stale guild meta; mesh aria-pressed idle; setSearch mesh-on cache miss; pinned+muted aria; mark-notification-read forum family; agentctl guild search + thread inbox; boot chain. Phase 382 planned.
|
||||
- **2026-05-23** — v0.8.342: Phase 380 — guild sidecar stale channel meta; mesh aria-disabled idle; refresh mesh-on cache hit; open-notification channel family; agentctl forum search + thread inbox; boot chain. Phase 381 planned.
|
||||
- **2026-05-23** — v0.8.341: Phase 379 — guild sidecar stale forum meta; mesh aria-controls idle; setSearch mesh-off cache hit; navigate forum family; agentctl guild search + thread inbox; boot chain. Phase 380 planned.
|
||||
|
||||
@@ -152,6 +152,8 @@ See also [FORUM_ARCHIVE_SEARCH.md](./FORUM_ARCHIVE_SEARCH.md).
|
||||
|
||||
**v0.8.263:** `loadGuild` / `openHome` bust search cache before light `view`. Cache hits require matching `_searchCacheGuildId`. Mesh chip shows **cached** when `view.searchResultsCached`. Forum archived toggle calls `refresh-search`. Debug logs `guild.search cache miss` with reason. Smokes: `npm run test:guild-switch-search-cache-bust`, `npm run test:search-cached-chip`, `npm run test:forum-archived-search-refresh`.
|
||||
|
||||
**v0.8.344:** Guild sidecar stale age falls back to `forumMetaStale.fetchedAt` when forum scope uses cached guild meta (Phase 382 re-verified). Mesh **↻** clears `aria-controls` when idle (fresh), restores `search-mesh-chip` when stale. `setSearch` logs `guild.search setSearch mesh-off cache hit` with `scope` when mesh is off and cache hits. Smokes: `npm run test:guild-sidecar-stale-forum-meta`, `npm run test:search-mesh-refresh-btn-no-controls-idle`, `npm run test:platform-setsearch-mesh-off-cache-hit`.
|
||||
|
||||
**v0.8.343:** Forum sidecar stale age falls back to `guildMetaStale.fetchedAt` when guild scope uses cached forum meta (Phase 381 re-verified). Mesh **↻** clears `aria-pressed` when idle (fresh), restores it when stale. `setSearch` logs `guild.search setSearch mesh-on cache miss` with `scope` when mesh is on and cache misses. 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`.
|
||||
|
||||
**v0.8.342:** Guild sidecar stale age falls back to `channelMetaStale.fetchedAt` when channel scope uses cached guild meta (Phase 380 re-verified). Mesh **↻** clears `aria-disabled` when idle (fresh). `refreshSearch` logs `guild.search refresh mesh-on cache hit` with `scope` when mesh is on and cache hits. Smokes: `npm run test:guild-sidecar-stale-channel-meta`, `npm run test:search-mesh-refresh-btn-no-disabled-idle`, `npm run test:platform-refresh-mesh-on-cache-hit`.
|
||||
|
||||
Reference in New Issue
Block a user