Block a user
Calls: sharer's own 'Stop Screenshare' button stays lit ~30 s after the server revokes the share
E2E: run the Playwright suite under WebKit as a Safari/iOS proxy
a11y in CI: axe-core gate + accessibility-tree snapshots as the screen-reader proxy
CI: Windows smoke job on the existing
windows runner — install the built NSIS bundle and drive the app with tauri-driver
CI: e2e job that starts its own Synapse and runs the UI regression suite (no prod secrets)
[deep dive] Threads: full UI/UX audit + "mark all threads read"
Threads audit — exercised end to end on the local dev homeserver (Playwright, desktop 1400px + Pixel 7)
Fixed on lotus (all pushed):
58a716c7— **opening a thread on a pristine…
[deep dive] Full-screen image/video viewer UI/UX audit
Image viewer audit — exercised on the local dev homeserver (Playwright, desktop + Pixel 7)
There are two viewers and they behave differently:
Mobile: the Widgets panel has no entry point (header button is desktop-only, ⋮ menu has no Widgets item)
[decide] Threads: opening a room marks every thread in it read — chip/list unread badges never survive a room visit
Threads: opening the thread panel next to the member drawer squeezes both composers to a few characters at ≤1400 px
Unify the two image viewers: timeline ImageViewer should open the gallery lightbox at that item
[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
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…