[QA] §R Discovery-pass fixes DP1–DP18: correctness, a11y/UX, TDS colours, refactor regression pass #187

Open
opened 2026-09-17 23:24:10 -04:00 by jared · 1 comment
Owner

Migrated from LOTUS_TESTING.md §R on 2026-09-17 — the file is now reference-only.

How to report: tick each item as it passes; on FAIL comment with what you saw vs expected, browser/OS, web (chat.lotusguild.org) vs desktop (Tauri), theme, and any browser-console errors. Screenshots for anything visual.

Checklist

  • Correctness
  • a11y / UX (needs a screen reader + a narrow viewport)
  • TDS colors (Lotus Terminal theme)
  • Refactor regression pass (no behavior change intended)

Agent-surveyed + TPVR-verified low/med issues, now fixed (commits 8eb961b6 db864326 6cf18c3b 165714e1 8c0e2b42 e545706c b1ee3ada 4fc3f7a3 101e4116 4fa4327a c2598d21). Behavioral items have concrete checks; the refactors just need a "still works" regression pass.

Correctness

  • DP1 — slash-command errors are visible. Run a slash command that must fail — e.g. /kick @nobody:server in a room where you lack permission, or /join a bad alias. Expected: an error toast appears (not a silent no-op); a successful command still clears the composer normally.
  • DP2 — no invite re-notify on reload. With ≥1 pending invite, hard-reload (Ctrl+F5). Expected: NO "you have N new invitation" toast/sound on load. Then have someone invite you while the app is open → you DO get one notification for the new invite. (👥 2 accounts)
  • DP3 — status clear syncs across devices. Set a status message on device A, confirm it shows on B; clear it on A. Expected: B clears too and does NOT re-publish the old status on its next presence heartbeat. Toggling Invisible must not wipe a real saved status. (👥 2 sessions)
  • DP4 — tag-toggle failure surfaced once. With the network offline, toggle a room's Favourite/Low-priority. Expected: a single error toast (not two) on failure; on success the tag updates as before.
  • DP5 — soundboard packs update on room switch. Open a soundboard in room A, then switch to room B (different pack) in the same mounted view. Expected: B's packs show without needing an unrelated event.
  • DP6 — declining a call still dismisses. Decline an incoming call. Expected: the ringing UI dismisses even if the decline send fails (best-effort). (👥 2 accounts)

a11y / UX (needs a screen reader + a narrow viewport)

  • DP7 / DP8 — call-control buttons announce correctly. In a call with a screen reader: the deafen button announces "Deafen" when sound is on (not "Undeafen"); Sound / Video / Screenshare announce a consistent pressed/unpressed state like Mic.
  • DP9 — GIF picker focus + width. Open the GIF picker, close it (Esc / click-out) → focus returns to the GIF button. On a ~320px viewport the picker doesn't overflow the page.
  • DP10 — search-filter clears by keyboard. In message search, toggle a filter chip (Has link / msg-type / pinned) off with Enter; the date-range clears via its menu's Clear. No mouse-only clear needed.
  • DP11 — voice recorder fits + announces. On a ~360px viewport, start a voice message → the recorder row doesn't overflow the composer; a screen reader can query the duration (role="timer") without being spammed.
  • DP12 — live-call count announced. With a screen reader, when someone joins/leaves an active call, the "{n} Live" change is announced (polite status region).

TDS colors (Lotus Terminal theme)

  • DP14 — send-status + receipt colors follow the theme. In TDS light mode: the message send-status "failed" icon and the read-receipt pill use the theme's darker red/blue (from --lt-* tokens), NOT bright dark-mode cyan/red. TDS dark still looks right; non-TDS themes unchanged.

Refactor regression pass (no behavior change intended)

  • DP13 — bookmarks / reminders / notes still work (they now share one store engine). Add/remove a bookmark, set/clear a reminder, write/clear a user note; each persists across reload; rapid consecutive writes don't clobber each other.
  • DP15 / DP16 — state-event + account-data writes still work. Edit room name/topic/avatar, join-rules, power levels, an emoji/soundboard pack (state events); toggle a setting stored in account data. All save + reflect correctly.
  • DP17 — link previews render. Open a TikTok / Spotify / Steam / Reddit link preview; provider icons render (folds icons, not raw glyphs) and brand colors look right.
  • DP18 — member avatars/names live-update. Read receipts + the "seen by" reader list show correct avatars/names and update live when a member changes their avatar or display name (no reload).

_Migrated from `LOTUS_TESTING.md` §R on 2026-09-17 — the file is now reference-only._ **How to report:** tick each item as it passes; on FAIL comment with what you saw vs expected, browser/OS, web (chat.lotusguild.org) vs desktop (Tauri), theme, and any browser-console errors. Screenshots for anything visual. **Checklist** - [ ] Correctness - [ ] a11y / UX (needs a screen reader + a narrow viewport) - [ ] TDS colors (Lotus Terminal theme) - [ ] Refactor regression pass (no behavior change intended) --- Agent-surveyed + TPVR-verified low/med issues, now fixed (commits `8eb961b6` `db864326` `6cf18c3b` `165714e1` `8c0e2b42` `e545706c` `b1ee3ada` `4fc3f7a3` `101e4116` `4fa4327a` `c2598d21`). Behavioral items have concrete checks; the refactors just need a "still works" regression pass. ### Correctness - [ ] **DP1 — slash-command errors are visible.** Run a slash command that must fail — e.g. `/kick @nobody:server` in a room where you lack permission, or `/join` a bad alias. **Expected:** an error toast appears (not a silent no-op); a successful command still clears the composer normally. - [ ] **DP2 — no invite re-notify on reload.** With ≥1 pending invite, hard-reload (Ctrl+F5). **Expected:** NO "you have N new invitation" toast/sound on load. Then have someone invite you while the app is open → you DO get one notification for the new invite. (👥 2 accounts) - [ ] **DP3 — status clear syncs across devices.** Set a status message on device A, confirm it shows on B; clear it on A. **Expected:** B clears too and does NOT re-publish the old status on its next presence heartbeat. Toggling Invisible must not wipe a real saved status. (👥 2 sessions) - [ ] **DP4 — tag-toggle failure surfaced once.** With the network offline, toggle a room's Favourite/Low-priority. **Expected:** a single error toast (not two) on failure; on success the tag updates as before. - [ ] **DP5 — soundboard packs update on room switch.** Open a soundboard in room A, then switch to room B (different pack) in the same mounted view. **Expected:** B's packs show without needing an unrelated event. - [ ] **DP6 — declining a call still dismisses.** Decline an incoming call. **Expected:** the ringing UI dismisses even if the decline send fails (best-effort). (👥 2 accounts) ### a11y / UX (needs a screen reader + a narrow viewport) - [ ] **DP7 / DP8 — call-control buttons announce correctly.** In a call with a screen reader: the deafen button announces "Deafen" when sound is on (not "Undeafen"); Sound / Video / Screenshare announce a consistent pressed/unpressed state like Mic. - [ ] **DP9 — GIF picker focus + width.** Open the GIF picker, close it (Esc / click-out) → focus returns to the GIF button. On a ~320px viewport the picker doesn't overflow the page. - [ ] **DP10 — search-filter clears by keyboard.** In message search, toggle a filter chip (Has link / msg-type / pinned) off with Enter; the date-range clears via its menu's Clear. No mouse-only clear needed. - [ ] **DP11 — voice recorder fits + announces.** On a ~360px viewport, start a voice message → the recorder row doesn't overflow the composer; a screen reader can query the duration (role="timer") without being spammed. - [ ] **DP12 — live-call count announced.** With a screen reader, when someone joins/leaves an active call, the "{n} Live" change is announced (polite status region). ### TDS colors (Lotus Terminal theme) - [ ] **DP14 — send-status + receipt colors follow the theme.** In **TDS light** mode: the message send-status "failed" icon and the read-receipt pill use the theme's darker red/blue (from `--lt-*` tokens), NOT bright dark-mode cyan/red. TDS dark still looks right; non-TDS themes unchanged. ### Refactor regression pass (no behavior change intended) - [ ] **DP13 — bookmarks / reminders / notes still work** (they now share one store engine). Add/remove a bookmark, set/clear a reminder, write/clear a user note; each persists across reload; rapid consecutive writes don't clobber each other. - [ ] **DP15 / DP16 — state-event + account-data writes still work.** Edit room name/topic/avatar, join-rules, power levels, an emoji/soundboard pack (state events); toggle a setting stored in account data. All save + reflect correctly. - [ ] **DP17 — link previews render.** Open a TikTok / Spotify / Steam / Reddit link preview; provider icons render (folds icons, not raw glyphs) and brand colors look right. - [ ] **DP18 — member avatars/names live-update.** Read receipts + the "seen by" reader list show correct avatars/names and update live when a member changes their avatar or display name (no reload). ---
jared added this to the Manual QA backlog milestone 2026-09-17 23:24:10 -04:00
jared added the uxqa labels 2026-09-17 23:24:10 -04:00
Author
Owner

Behavioral DP items verified on the local dev homeserver with Playwright:

item result
DP1 slash-command errors visible /join bad alias → "Command failed: The /join command failed. Please try again." ✓. /kick without permission → silent (documented in code; filed #216). Successful commands clear the composer ✓
DP2 no invite re-notify on reload pending invite → login: 0 toasts / 0 sounds; hard reload: 0 / 0; a new invite while open → notified (sound) ✓
DP4 tag-toggle failure surfaced once Favourite toggle while offline → exactly one toast "Failed: Could not update this room. Please try again." ✓
DP13 bookmarks store Save message → io.lotus.bookmarks account data written ✓ (reminders verified under #180, notes not exercised)
DP12 live-call count announcement bug found + fixed (RoomViewTyping.tsx) — not the call count itself, but the neighbouring typing live region announced "undefined, undefined, undefined and -3 others are typing" whenever nobody was typing (every room load). Fixed in the next commit.
DP3 status sync, DP5 soundboard packs, DP6 decline, DP7/8/11/12 screen-reader wording, DP9 GIF focus, DP10 keyboard chip clear, DP14 TDS colours, DP15-18 not exercised here (need a second device, a screen reader, calls, or visual judgment)

Leaving open for the remaining rows.

Behavioral DP items verified on the local dev homeserver with Playwright: | item | result | |---|---| | DP1 slash-command errors visible | `/join` bad alias → "Command failed: The /join command failed. Please try again." ✓. `/kick` without permission → **silent** (documented in code; filed #216). Successful commands clear the composer ✓ | | DP2 no invite re-notify on reload | pending invite → login: 0 toasts / 0 sounds; hard reload: 0 / 0; a **new** invite while open → notified (sound) ✓ | | DP4 tag-toggle failure surfaced once | Favourite toggle while offline → exactly **one** toast "Failed: Could not update this room. Please try again." ✓ | | DP13 bookmarks store | Save message → `io.lotus.bookmarks` account data written ✓ (reminders verified under #180, notes not exercised) | | DP12 live-call count announcement | **bug found + fixed (`RoomViewTyping.tsx`)** — not the call count itself, but the neighbouring typing live region announced **"undefined, undefined, undefined and -3 others are typing"** whenever nobody was typing (every room load). Fixed in the next commit. | | DP3 status sync, DP5 soundboard packs, DP6 decline, DP7/8/11/12 screen-reader wording, DP9 GIF focus, DP10 keyboard chip clear, DP14 TDS colours, DP15-18 | not exercised here (need a second device, a screen reader, calls, or visual judgment) | Leaving open for the remaining rows.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: LotusGuild/cinny#187