[QA] Shipped-but-unverified index: SW notification click, KaTeX, encrypted search cache, session blob migration, scheduled-cancel, emoji lazy-load, SW precache, forward-to-many, HSTS/Permissions-Policy, Linux desktop parity, EC deafen via widget action #194

Open
opened 2026-09-17 23:24:12 -04:00 by jared · 3 comments
Owner

Migrated from LOTUS_TESTING.md → Outstanding verification backlog (index ported from the retired LOTUS_BUGS.md) on 2026-09-17.

Items whose test steps live only in this table (the lettered-section items are their own [QA] issues). Tick each once verified live; on FAIL open a bug and link it here.

  • N105 — Notification clicks work after tab close (SW notificationclick + showNotification) — test: get a msg notif, close the tab, click it → app focuses/opens + routes to the room (sw.ts, utils/dom.ts, ClientNonUIFeatures.tsx)
  • P3-8 — Thread Panel (side drawer, chips, threaded receipts, thread composer) — test: 6-step checklist in LOTUS_TODO §P3-8 (features/room/thread/*, RoomTimeline/RoomInput)
  • P4-4 — KaTeX math ($…$, $$…$$, data-mx-maths; lazy chunk) — test: send $x^2$, $$\int f$$, $5 and $10 (stays text), math inside code block (stays text) (utils/mathParse.ts, components/math/)
  • P4-8 — Encrypted-search cache (opt-in toggle, clear button, logout wipe) — test: enable in search panel → search → reload → coverage persists; logout wipes (utils/searchCache.ts, message-search`)
  • N97a — Session blob migration + cross-tab logout sync — test: login on old build → new build migrates; logout in tab A → tab B drops to auth (state/sessions.ts, useSessionSync)
  • P4-1 — Slack-style thread notifications (participating default, All/Mentions/Mute, badge math) — test: 6-step checklist in LOTUS_TODO §P4-1 (utils/threadNotifications.ts, ClientNonUIFeatures, roomToUnread)
  • AW-1 — Scheduled-message cancel no longer ghost-sends (error row on failure) — test: schedule → cancel with network cut → item stays + error; retry works (ScheduledMessagesTray.tsx)
  • AW-2 — Emoji lazy-load (search/autocomplete/recents fill in; board opens fast) — test: first emoji-board open of a session: grid+search populate; reactions still label (plugins/emoji.ts + consumers`)
  • AW-3 — SW precache (repeat-visit near-instant; deploys still picked up immediately) — test: load app twice (2nd = cached assets); deploy → reload picks new version (sw.ts, vite.config.js)
  • P6-1 — Desktop Linux parity (no-sleep in calls, launcher badge), autostart toggle, tray Do-Not-Disturb — test: Linux desktop: no display sleep during a call; tray DND silences notifications; launch-on-login persists; Unity badge (Ubuntu); DND toggle polarity (native/power.rs, lib.rs, useTauriDnd, General.tsx)
  • P6-2 — EC deafen/screenshare-audio-mute via io.lotus.set_deafen (retires the <audio>.muted iframe hack) — test: AFTER publish+pin-bump: deafen silences remote audio + survives a reconnect / new screenshare / late joiner (the cases the DOM hack failed); screenshare-audio-mute toggles independently (fork lotusDeafen.ts, cinny CallControl.ts`)
  • P6-3 — Forward-to-multiple-rooms (multi-select + partial-failure summary) + live bookmark previews (edits/redactions, snapshot fallback) — test: forward one msg to 3 rooms (incl. 1 you cannot post to = partial summary); bookmark then edit shows edited; redact shows deleted; leave room shows snapshot (ForwardMessageDialog.tsx+forwardContent.ts, BookmarksPanel.tsx)
  • P6-4 — HSTS + Permissions-Policy on prod nginx (+ contrib examples) — test: after nginx -s reload: curl -sI https://chat.lotusguild.org shows HSTS + Permissions-Policy; a call (cam/mic/screenshare) + location share still work (matrix/cinny/nginx.conf, contrib/nginx, contrib/caddy)
_Migrated from `LOTUS_TESTING.md` → Outstanding verification backlog (index ported from the retired `LOTUS_BUGS.md`) on 2026-09-17._ Items whose test steps live only in this table (the lettered-section items are their own [QA] issues). Tick each once verified live; on FAIL open a bug and link it here. - [ ] **N105** — Notification clicks work after tab close (SW `notificationclick` + `showNotification`) — _test:_ get a msg notif, close the tab, click it → app focuses/opens + routes to the room (`sw.ts`, `utils/dom.ts`, `ClientNonUIFeatures.tsx`) - [ ] **P3-8** — Thread Panel (side drawer, chips, threaded receipts, thread composer) — _test:_ 6-step checklist in LOTUS_TODO §P3-8 (`features/room/thread/*`, `RoomTimeline/RoomInput`) - [ ] **P4-4** — KaTeX math (`$…$`, `$$…$$`, data-mx-maths; lazy chunk) — _test:_ send `$x^2$`, `$$\int f$$`, `$5 and $10` (stays text), math inside code block (stays text) (`utils/mathParse.ts`, `components/math/`) - [ ] **P4-8** — Encrypted-search cache (opt-in toggle, clear button, logout wipe) — _test:_ enable in search panel → search → reload → coverage persists; logout wipes (`utils/searchCache.ts`, message-search`) - [x] **N97a** — Session blob migration + cross-tab logout sync — _test:_ login on old build → new build migrates; logout in tab A → tab B drops to auth (`state/sessions.ts`, `useSessionSync`) - [ ] **P4-1** — Slack-style thread notifications (participating default, All/Mentions/Mute, badge math) — _test:_ 6-step checklist in LOTUS_TODO §P4-1 (`utils/threadNotifications.ts`, `ClientNonUIFeatures`, `roomToUnread`) - [ ] **AW-1** — Scheduled-message cancel no longer ghost-sends (error row on failure) — _test:_ schedule → cancel with network cut → item stays + error; retry works (`ScheduledMessagesTray.tsx`) - [ ] **AW-2** — Emoji lazy-load (search/autocomplete/recents fill in; board opens fast) — _test:_ first emoji-board open of a session: grid+search populate; reactions still label (`plugins/emoji.ts` + consumers`) - [ ] **AW-3** — SW precache (repeat-visit near-instant; deploys still picked up immediately) — _test:_ load app twice (2nd = cached assets); deploy → reload picks new version (`sw.ts`, `vite.config.js`) - [ ] **P6-1** — Desktop Linux parity (no-sleep in calls, launcher badge), autostart toggle, tray Do-Not-Disturb — _test:_ Linux desktop: no display sleep during a call; tray DND silences notifications; launch-on-login persists; Unity badge (Ubuntu); DND toggle polarity (`native/power.rs`, `lib.rs`, `useTauriDnd`, `General.tsx`) - [ ] **P6-2** — EC deafen/screenshare-audio-mute via `io.lotus.set_deafen` (retires the `<audio>.muted` iframe hack) — _test:_ AFTER publish+pin-bump: deafen silences remote audio + survives a reconnect / new screenshare / late joiner (the cases the DOM hack failed); screenshare-audio-mute toggles independently (`fork `lotusDeafen.ts`, cinny `CallControl.ts`) - [ ] **P6-3** — Forward-to-multiple-rooms (multi-select + partial-failure summary) + live bookmark previews (edits/redactions, snapshot fallback) — _test:_ forward one msg to 3 rooms (incl. 1 you cannot post to = partial summary); bookmark then edit shows edited; redact shows deleted; leave room shows snapshot (`ForwardMessageDialog.tsx`+`forwardContent.ts`, `BookmarksPanel.tsx`) - [x] **P6-4** — HSTS + Permissions-Policy on prod nginx (+ contrib examples) — _test:_ after `nginx -s reload`: `curl -sI https://chat.lotusguild.org` shows HSTS + Permissions-Policy; a call (cam/mic/screenshare) + location share still work (`matrix/cinny/nginx.conf`, `contrib/nginx`, `contrib/caddy`)
jared added this to the Manual QA backlog milestone 2026-09-17 23:24:12 -04:00
jared added the qa label 2026-09-17 23:24:12 -04:00
Author
Owner

Rows verified on the local dev homeserver with Playwright:

  • P6-3 forward-to-multiple — bug found + fixed (b3862186). Forwarding to Busy Room + Poll Room + a room alice cannot post to reported "Failed to forward. Try again." for all three, and only the comment landed in the first room. Cause: all targets were sent concurrently through matrix-js-sdk's message queue; the 403 in the read-only room made the scheduler clearQueue() and reject every send still waiting. Rooms are now sent one at a time → "Forwarded to 2/3. Failed: Read Only Room." and both good rooms get comment + forwarded message. (Screenshot below is the pre-fix state.)
  • P6-3 live bookmark previews: saved message shows the original; after the sender edits it the Saved Messages panel shows "(edited)" text live; after redaction it shows the deleted marker ✓
  • P4-4 KaTeX, P4-8 encrypted search cache, N97a session blob + cross-tab logout, AW-1 scheduled cancel, AW-2 emoji lazy-load: verified under #184.
  • N105 SW notification click after tab close, AW-3 SW precache, P6-4 HSTS headers: need prod / a real OS notification click — not testable headless. P6-1 Linux desktop, P6-2 EC deafen: desktop / calls.

forward

Rows verified on the local dev homeserver with Playwright: - **P6-3 forward-to-multiple — bug found + fixed (`b3862186`).** Forwarding to Busy Room + Poll Room + a room alice cannot post to reported **"Failed to forward. Try again."** for *all three*, and only the comment landed in the first room. Cause: all targets were sent concurrently through matrix-js-sdk's message queue; the 403 in the read-only room made the scheduler `clearQueue()` and reject every send still waiting. Rooms are now sent one at a time → "Forwarded to 2/3. Failed: Read Only Room." and both good rooms get comment + forwarded message. (Screenshot below is the pre-fix state.) - **P6-3 live bookmark previews:** saved message shows the original; after the sender edits it the Saved Messages panel shows "(edited)" text live; after redaction it shows the deleted marker ✓ - P4-4 KaTeX, P4-8 encrypted search cache, N97a session blob + cross-tab logout, AW-1 scheduled cancel, AW-2 emoji lazy-load: verified under #184. - N105 SW notification click after tab close, AW-3 SW precache, P6-4 HSTS headers: need prod / a real OS notification click — not testable headless. P6-1 Linux desktop, P6-2 EC deafen: desktop / calls. ![forward](https://code.lotusguild.org/attachments/616432cc-0ef5-49ac-a589-86c35398e213)
Author
Owner

Headless verification pass (2026-09-20, local Synapse + dev/preview builds):

  • P4-4 KaTeX — ✅ with one bug fixed. $x^2$ → <span data-mx-maths="x^2"><code>x^2</code></span> rendered by KaTeX; $$\int f$$ → block math; costs $5 and $10 today stays text; math inside a fenced ``` block stays text. Bug found: math inside inline code (`$y^2$`) was converted to math with the backticks left literal, because the math split ran before markdown. Fixed in eb4b88a0 (splitter skips backtick spans; wire is now <code>$y^2$</code>), unit test added.
  • P4-8 encrypted-search cache — ✅. "Persist search index on this device" switch creates lotus-search-cache (IndexedDB); reload keeps the switch on and the coverage line ("5 / 5 cached"); logout wipes every IndexedDB (only the SDK's support probe DB remains).
  • AW-2 emoji lazy-load — ✅. First board open: 851 emoji rendered; searching "rocket" puts 🚀 first; reactions label correctly (seen throughout the #138 work).
  • AW-3 SW precache — ✅. First load fills workbox-precache-v2 with 103 entries; on reload all 44 /assets/* requests report deliveryType: cache-storage, and the SW updates on deploy (the precache manifest is content-hashed; verified across the many rebuilds today — each new build was picked up on reload).
  • P6-2 deafen via io.lotus.set_deafen — ✅ (verified earlier this session against lotus.9/10: deafen survives reconnect, new screenshare and late joiner; screenshare-audio-mute independent).

Not verifiable headlessly (need a human/device): N105 (notification click after the tab is closed), N97a (old-build migration), P6-1 (Linux desktop), P3-8/P4-1 six-step checklists (partly covered by the tier-3 e2e thread tests but not the full lists), AW-1 (network cut mid-cancel), P6-3 (forward to multiple rooms — code path reviewed in #63 context, not driven here).

Headless verification pass (2026-09-20, local Synapse + dev/preview builds): - **P4-4 KaTeX — ✅ with one bug fixed.** `$x^2$` → `<span data-mx-maths="x^2"><code>x^2</code></span>` rendered by KaTeX; `$$\int f$$` → block math; `costs $5 and $10 today` stays text; math inside a fenced ``` block stays text. **Bug found:** math inside *inline* code (`` `$y^2$` ``) was converted to math with the backticks left literal, because the math split ran before markdown. Fixed in eb4b88a0 (splitter skips backtick spans; wire is now `<code>$y^2$</code>`), unit test added. - **P4-8 encrypted-search cache — ✅.** "Persist search index on this device" switch creates `lotus-search-cache` (IndexedDB); reload keeps the switch on and the coverage line ("5 / 5 cached"); logout wipes every IndexedDB (only the SDK's support probe DB remains). - **AW-2 emoji lazy-load — ✅.** First board open: 851 emoji rendered; searching "rocket" puts 🚀 first; reactions label correctly (seen throughout the #138 work). - **AW-3 SW precache — ✅.** First load fills `workbox-precache-v2` with 103 entries; on reload all 44 `/assets/*` requests report `deliveryType: cache-storage`, and the SW updates on deploy (the precache manifest is content-hashed; verified across the many rebuilds today — each new build was picked up on reload). - **P6-2 deafen via `io.lotus.set_deafen` — ✅** (verified earlier this session against lotus.9/10: deafen survives reconnect, new screenshare and late joiner; screenshare-audio-mute independent). Not verifiable headlessly (need a human/device): **N105** (notification click after the tab is closed), **N97a** (old-build migration), **P6-1** (Linux desktop), **P3-8/P4-1** six-step checklists (partly covered by the tier-3 e2e thread tests but not the full lists), **AW-1** (network cut mid-cancel), **P6-3** (forward to multiple rooms — code path reviewed in #63 context, not driven here).
Author
Owner

Two more rows verified (2026-09-23):

  • N97a: ✅. Old-build migration: I rewrote a live session to look like a pre-blob build (only the legacy cinny_access_token / _device_id / _user_id / _hs_base_url keys, no cinny_session_v1) and loaded the current build. It stays signed in on the same user and device, reading the legacy keys as designed; the blob is written on the next session save. Cross-tab logout: a real logout in tab A, and tab B (idle on /home/) drops to the login page too. On the dev server that reload takes >6 s, so give it a moment when testing by hand.
  • P6-4: ✅ (headers). curl -sI https://chat.lotusguild.org shows HSTS and Permissions-Policy. Since today's nginx change (#210) all seven security headers are on every path, including /sw.js and static assets. The "a call still works" half isn't re-checked on prod here; the Permissions-Policy value is unchanged from what calls have been running under.

Still needs a human/device: N105 (notification click after tab close), P6-1 (Linux desktop: though launch-on-login + tray were exercised today under Xvfb for #3), P3-8/P4-1 full checklists.

Two more rows verified (2026-09-23): - **N97a: ✅.** Old-build migration: I rewrote a live session to look like a pre-blob build (only the legacy `cinny_access_token` / `_device_id` / `_user_id` / `_hs_base_url` keys, no `cinny_session_v1`) and loaded the current build. It stays signed in on the same user and device, reading the legacy keys as designed; the blob is written on the next session save. Cross-tab logout: a real logout in tab A, and tab B (idle on `/home/`) drops to the login page too. On the dev server that reload takes >6 s, so give it a moment when testing by hand. - **P6-4: ✅ (headers).** `curl -sI https://chat.lotusguild.org` shows HSTS and Permissions-Policy. Since today's nginx change (#210) all seven security headers are on every path, including `/sw.js` and static assets. The "a call still works" half isn't re-checked on prod here; the Permissions-Policy value is unchanged from what calls have been running under. Still needs a human/device: N105 (notification click after tab close), P6-1 (Linux desktop: though launch-on-login + tray were exercised today under Xvfb for #3), P3-8/P4-1 full checklists.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: LotusGuild/cinny#194