docs(v0.8.279): Phase 317 roadmap and module documentation
Mark Phase 317 complete, add Phase 318 sprint, and update SEARCH, LOGGING, NOTIFICATIONS, COMPOSER, THREADS_PANEL, VOICE, COMPANION, and ROLE_EDITOR. Co-authored-by: Cursor <[email protected]>
This commit is contained in:
@@ -55,6 +55,8 @@ Runs `smoke-companion-boot.cjs`, verifies `/companion/index.js` is staged, then
|
||||
|
||||
**v0.8.270:** Static reduced-motion progress bars use **40%** width (was 50%). Smoke: `npm run test:companion-progress-static`.
|
||||
|
||||
**v0.8.279:** Compose bar (`#companion-compose`) is `aria-hidden` while `view.guildLoading` is true. Smoke: `npm run test:companion-compose-aria-hidden`.
|
||||
|
||||
**v0.8.278:** Message list (`#companion-messages`) is `aria-hidden` while `view.guildLoading` is true. Smoke: `npm run test:companion-messages-aria-hidden`.
|
||||
|
||||
**v0.8.277:** Channel list (`#companion-channels`) is `aria-hidden` while `view.guildLoading` is true. Smoke: `npm run test:companion-channels-aria-hidden`.
|
||||
|
||||
@@ -48,6 +48,8 @@ npm run test:mention-scroll-on-open
|
||||
|
||||
**v0.8.270:** Thread `@here` blocked toast cites parent **Mention @everyone** permission. Role skip link adds visible focus ring on the target checkbox.
|
||||
|
||||
**v0.8.279:** `read-only role cannot send` errors in threads cite parent channel in the permission-denied toast. Smoke: `npm run test:composer-permission-denied-thread-toast`.
|
||||
|
||||
**v0.8.278:** `attachments not ready` errors in threads cite parent channel in the toast. Smoke: `npm run test:composer-stage-attachment-thread-toast`.
|
||||
|
||||
**v0.8.277:** `empty file` attachment errors in threads cite parent channel in the toast. Smoke: `npm run test:composer-empty-attachment-thread-toast`.
|
||||
|
||||
@@ -130,6 +130,8 @@ When `view.sessionError` is set on the boot card, an **Open diagnostics** button
|
||||
|
||||
**Save** (v0.8.258+) prepends a `diagnostics-meta` JSON line with `composerTraceCount`, `devLogLineCount`, `logFile` (absolute path to `pearcord.log` under storage), and the active filter before the filtered records (v0.8.259).
|
||||
|
||||
**v0.8.279:** **Session errors** filter (`scope === 'session'`, error only). Save/clipboard JSONL use explicit `guildLoading: true|false`. Smokes: `npm run test:dev-log-session-errors-filter`, `npm run test:dev-log-save-guild-loading-bool`.
|
||||
|
||||
**v0.8.278:** **Search errors** filter (`guild.search` platform spans at error). Save/clipboard JSONL use explicit `searchResultsCached: true|false`. Smokes: `npm run test:dev-log-search-errors-filter`, `npm run test:dev-log-save-search-cached-bool`.
|
||||
|
||||
**v0.8.277:** **Composer errors** filter (`scope === 'composer'`, error only). Clipboard JSONL `_diagnosticsMeta.searchScope` uses `channel` fallback. Platform logs `guild.search unchanged cache hit` with scope. Smokes: `npm run test:dev-log-composer-errors-filter`, `npm run test:dev-log-clipboard-search-scope`, `npm run test:search-unchanged-cache-hit-debug`.
|
||||
|
||||
@@ -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.279:** State IPC calls `dismissDesktopForClearedChannelUnread` when thread unread clears (mark-channel-read path). Smoke: `npm run test:mark-channel-read-sibling-desktop`.
|
||||
|
||||
**v0.8.278:** State IPC calls `dismissDesktopForClearedMentionAlerts` when thread mention alerts clear (mark-read path). Smoke: `npm run test:mark-read-ipc-sibling-desktop`.
|
||||
|
||||
**v0.8.277:** `navigateToMessage` dismisses sibling thread desktop tags before opening a thread (even without notification id). Smoke: `npm run test:navigate-thread-sibling-desktop`.
|
||||
|
||||
+52
-22
@@ -3324,7 +3324,7 @@ Fix guild switching, session boot gating, and theme/prefs application before mic
|
||||
| P316-19 | Boot: chain Phase 316 smokes | [x] |
|
||||
| P316-20 | Phase 317 production polish sprint (v0.8.279) | [x] |
|
||||
|
||||
**Next:** Phase 317.
|
||||
**Next:** ~~Phase 317~~ (complete).
|
||||
|
||||
---
|
||||
|
||||
@@ -3332,28 +3332,57 @@ Fix guild switching, session boot gating, and theme/prefs application before mic
|
||||
|
||||
| ID | Item | Status |
|
||||
|----|------|--------|
|
||||
| P317-1 | Search: guild mesh hint shows stale age when forum active | [ ] |
|
||||
| P317-2 | Search mesh chip: `aria-controls` links refresh to chip | [ ] |
|
||||
| P317-3 | Platform: `setSearch` logs mesh-on when scope changes at debug | [ ] |
|
||||
| P317-4 | Thread panel: active pinned+muted+mention combined aria | [ ] |
|
||||
| P317-5 | Notifications: mark-channel-read IPC sibling batch helper | [ ] |
|
||||
| P317-6 | Composer: permission-denied thread toast cites parent | [ ] |
|
||||
| P317-7 | Role editor: custom role skip targets first unchecked perm | [ ] |
|
||||
| P317-8 | Voice: remote speaking pill `aria-label` when not self | [ ] |
|
||||
| P317-9 | Logging: Save JSONL includes `guildLoading` boolean always | [ ] |
|
||||
| P317-10 | Diagnostics filter: **Session errors** (session scope error) | [ ] |
|
||||
| P317-11 | Agentctl: forum search refresh cache hit path | [ ] |
|
||||
| P317-12 | Agentctl: thread mesh round-trip mark-read | [ ] |
|
||||
| P317-13 | Companion: compose bar `aria-hidden` while guild loading | [ ] |
|
||||
| P317-14 | Smoke: `test:guild-forum-search-hint-stale` | [ ] |
|
||||
| P317-15 | Smoke: `test:search-mesh-refresh-aria-controls` | [ ] |
|
||||
| P317-16 | Smoke: `test:mark-channel-read-sibling-desktop` | [ ] |
|
||||
| P317-17 | Docs: `LOGGING.md` search-errors filter | [ ] |
|
||||
| P317-18 | Docs: `VOICE.md` self-streaming aria | [ ] |
|
||||
| P317-19 | Boot: chain Phase 317 smokes | [ ] |
|
||||
| P317-20 | Phase 318 production polish sprint (v0.8.280) | [ ] |
|
||||
| P317-1 | Search: guild mesh hint shows stale age when forum active | [x] |
|
||||
| P317-2 | Search mesh chip: `aria-controls` links refresh to chip | [x] |
|
||||
| P317-3 | Platform: `setSearch` logs mesh-on when scope changes at debug | [x] |
|
||||
| P317-4 | Thread panel: active pinned+muted+mention combined aria | [x] |
|
||||
| P317-5 | Notifications: mark-channel-read IPC sibling batch helper | [x] |
|
||||
| P317-6 | Composer: permission-denied thread toast cites parent | [x] |
|
||||
| P317-7 | Role editor: custom role skip targets first unchecked perm | [x] |
|
||||
| P317-8 | Voice: remote speaking pill `aria-label` when not self | [x] |
|
||||
| P317-9 | Logging: Save JSONL includes `guildLoading` boolean always | [x] |
|
||||
| P317-10 | Diagnostics filter: **Session errors** (session scope error) | [x] |
|
||||
| P317-11 | Agentctl: forum search refresh cache hit path | [x] |
|
||||
| P317-12 | Agentctl: thread mesh round-trip mark-read | [x] |
|
||||
| P317-13 | Companion: compose bar `aria-hidden` while guild loading | [x] |
|
||||
| P317-14 | Smoke: `test:guild-forum-search-hint-stale` | [x] |
|
||||
| P317-15 | Smoke: `test:search-mesh-refresh-aria-controls` | [x] |
|
||||
| P317-16 | Smoke: `test:mark-channel-read-sibling-desktop` | [x] |
|
||||
| P317-17 | Docs: `LOGGING.md` session-errors filter | [x] |
|
||||
| P317-18 | Docs: `VOICE.md` remote speaking aria | [x] |
|
||||
| P317-19 | Boot: chain Phase 317 smokes | [x] |
|
||||
| P317-20 | Phase 318 production polish sprint (v0.8.280) | [x] |
|
||||
|
||||
**Next:** P317-1–P317-19.
|
||||
**Next:** Phase 318.
|
||||
|
||||
---
|
||||
|
||||
### Phase 318 — Session & thread polish (v0.8.280)
|
||||
|
||||
| ID | Item | Status |
|
||||
|----|------|--------|
|
||||
| P318-1 | Search: channel mesh hint shows mesh-off label when disabled | [ ] |
|
||||
| P318-2 | Search mesh chip: `aria-keyshortcuts` on refresh when stale | [ ] |
|
||||
| P318-3 | Platform: `refreshSearch` logs mesh-off skip reason at debug | [ ] |
|
||||
| P318-4 | Thread panel: archived pinned+muted+mention combined aria | [ ] |
|
||||
| P318-5 | Notifications: navigate clears channel unread desktop batch | [ ] |
|
||||
| P318-6 | Composer: channel-full thread toast cites parent capacity | [ ] |
|
||||
| P318-7 | Role editor: skip link aria-live announces target perm name | [ ] |
|
||||
| P318-8 | Voice: remote streaming pill includes sharer display name | [ ] |
|
||||
| P318-9 | Logging: clipboard JSONL includes `sessionError` when set | [ ] |
|
||||
| P318-10 | Diagnostics filter: **Mesh errors** (guild.mesh error) | [ ] |
|
||||
| P318-11 | Agentctl: guild search mesh toggle roundtrip | [ ] |
|
||||
| P318-12 | Agentctl: forum thread parent navigate mark-read | [ ] |
|
||||
| P318-13 | Companion: readonly bar `aria-hidden` while guild loading | [ ] |
|
||||
| P318-14 | Smoke: `test:channel-search-mesh-off-hint` | [ ] |
|
||||
| P318-15 | Smoke: `test:search-mesh-refresh-aria-keyshortcuts` | [ ] |
|
||||
| P318-16 | Smoke: `test:navigate-channel-unread-desktop` | [ ] |
|
||||
| P318-17 | Docs: `SEARCH.md` forum-active guild stale hint | [ ] |
|
||||
| P318-18 | Docs: `NOTIFICATIONS.md` unread IPC sibling dismiss | [ ] |
|
||||
| P318-19 | Boot: chain Phase 318 smokes | [ ] |
|
||||
| P318-20 | Phase 319 production polish sprint (v0.8.281) | [ ] |
|
||||
|
||||
**Next:** P318-1–P318-19.
|
||||
|
||||
---
|
||||
|
||||
@@ -4799,6 +4828,7 @@ Absorbed into Phase 273 (P273-5–P273-8, P273-11–P273-12). See Phase 274 for
|
||||
|
||||
### Changelog
|
||||
|
||||
- **2026-05-23** — v0.8.279: Phase 317 — guild forum stale hint; refresh aria-controls; setSearch mesh scope debug; active pinned-muted mention; unread IPC sibling desktop; read-only thread toast; custom role skip unchecked; remote speaking aria; session-errors filter; agentctl forum cache refresh + thread mesh mark-read; companion compose aria-hidden; +14 smokes. Phase 318 planned.
|
||||
- **2026-05-23** — v0.8.278: Phase 316 — forum mesh hint breakdown; refresh aria-expanded; refresh cache hit; archived-muted mention aria; IPC sibling desktop; stage-attachment thread toast; new-role unchecked skip; self-streaming voice; search-errors filter; agentctl forum mesh + inbox mark-thread-parent; companion messages aria-hidden; +14 smokes. Phase 317 planned.
|
||||
- **2026-05-23** — v0.8.277: Phase 315 — channel mesh hint breakdown; refresh stale title; unchanged cache hit debug; pinned-muted mention aria; navigate sibling desktop; empty attachment thread toast; new-role skip link; self-speaking voice aria; composer-errors filter; agentctl channel mesh toggle + forum thread mark-read; companion channels aria-hidden; +14 smokes. Phase 316 planned.
|
||||
- **2026-05-23** — v0.8.276: Phase 314 — guild mesh hint count; refresh aria-pressed; refresh mesh-off debug; muted mention aria; sibling desktop dismiss; attachment thread toast; role skip keyshortcuts; self-mute voice aria; platform-errors filter; agentctl mesh toggle + inbox mark-channel-read; companion notif aria-hidden; +14 smokes. Phase 315 planned.
|
||||
|
||||
@@ -6,6 +6,8 @@ Custom role permissions are edited in the server settings modal (`apps/pearcord/
|
||||
|
||||
Each role card can include **Skip to permissions** links that focus the first unchecked permission checkbox for a category.
|
||||
|
||||
**v0.8.279:** Skip link on **custom roles** focuses the first unchecked `.role-perm-flag` when the anchor is checked. Smoke: `npm run test:role-perm-skip-custom-unchecked`.
|
||||
|
||||
**v0.8.278:** Skip link on new roles focuses the first **unchecked** permission when the anchor is already checked. Smoke: `npm run test:role-perm-skip-new-role-unchecked`.
|
||||
|
||||
**v0.8.277:** **New custom role** form includes **Skip to new role permissions** (`#new-role-perm-first`) with the same skip-link behavior as existing roles. Smoke: `npm run test:role-perm-skip-new-role`.
|
||||
|
||||
@@ -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.279:** Server search sidecar uses forum mesh `fetchedAt` for stale age when a forum channel is active. Mesh refresh button sets `aria-controls="search-mesh-chip"`. Platform logs `guild.search setSearch mesh-on scope change` at debug. Smokes: `npm run test:guild-forum-search-hint-stale`, `npm run test:search-mesh-refresh-aria-controls`, `npm run test:platform-setsearch-mesh-scope-debug`.
|
||||
|
||||
**v0.8.278:** Forum search sidecar hint shows local/mesh breakdown. Mesh **↻** sets `aria-expanded="true"` when stale. `refreshSearch` returns early with `guild.search refresh cache hit` when cache is valid. Smokes: `npm run test:forum-search-mesh-hint-breakdown`, `npm run test:search-mesh-refresh-aria-expanded`, `npm run test:search-refresh-cache-hit-debug`.
|
||||
|
||||
**v0.8.277:** Channel search sidecar hint shows local/mesh breakdown like guild. Mesh **↻** `title` explains stale refresh (90s). Smokes: `npm run test:channel-search-mesh-hint-breakdown`, `npm run test:search-mesh-refresh-stale-title`, `npm run test:search-unchanged-cache-hit-debug`.
|
||||
|
||||
@@ -58,6 +58,8 @@ Unread uses existing `READ_STATE` per thread channel (same as text channels).
|
||||
|
||||
**v0.8.270:** **Enter** opens archived mentions; **Space** relies on native `<button>` activation (no duplicate keydown handler). Smoke: `npm run test:thread-archived-enter-only`.
|
||||
|
||||
**v0.8.279:** The **active** thread that is pinned, muted, and has @mentions uses `aria-description="Active pinned muted thread with mention"`. Smoke: `npm run test:thread-active-pinned-muted-mention-aria`.
|
||||
|
||||
**v0.8.278:** Archived threads that are **muted** with @mentions use `aria-description="Open archived muted thread to view mention"`. Smoke: `npm run test:thread-archived-muted-mention-aria`.
|
||||
|
||||
**v0.8.277:** Active threads that are **pinned and muted** with @mentions use `aria-description="Open pinned muted thread to view mention"`. Smoke: `npm run test:thread-pinned-muted-mention-aria`.
|
||||
|
||||
@@ -76,6 +76,8 @@ Per-channel overwrites apply via `pearcord-channel-permissions` (see [CHANNEL_PE
|
||||
|
||||
**v0.8.112:** **Filter live region** — `#voice-roster-filter-status` announces count with filter mode (muted/deafened). Smoke: `npm run test:voice-roster-filter-live`.
|
||||
|
||||
**v0.8.279:** Remote speaking peers use **{name} is speaking** on the pill and roster `aria-label` (self still uses **You are speaking**). Smoke: `npm run test:voice-roster-remote-speaking-aria`.
|
||||
|
||||
**v0.8.278:** Self-streaming peers use **You are screen sharing** / **You are sharing: {label}** on the pill and roster `aria-label`. Smoke: `npm run test:voice-roster-self-streaming-aria`.
|
||||
|
||||
**v0.8.277:** Self-speaking peers use **You are speaking** on the pill and in the roster row `aria-label`. Smoke: `npm run test:voice-roster-self-speaking-aria`.
|
||||
|
||||
Reference in New Issue
Block a user