2025-09-20 - 2026-09-20
Overview
6 Releases published by 1 user
Published
v4.11.1
Published
v4.10.5
Published
v4.10.4
Published
v4.10.3
Published
v4.10.2
Published
v4.10.1
2 Pull requests proposed by 1 user
Proposed
#3 Sw dev fix
Proposed
#4 Update packages
167 Issues closed from 2 users
Closed
#137 Bulk media drop renders as one gallery (client-side grouping, standard events)
Closed
#139 One timestamp formatter: audit and unify date/time display across timeline, room list, search, threads
Closed
#147 Touch only: tap a sticker/GIF once to preview, again to send
Closed
#138 Reactions: "+N" overflow expands inline (check every layout/edge case first)
Closed
#144 "(edited)" hover shows a word-level diff of the last edit
Closed
#148 Space rail: subtle dot when a call is live somewhere in that space (careful)
Closed
#150 Profile view: "Last active …" line from presence
Closed
#127 Reply jump-back chip: "Back to where you were" after jumping to a replied-to message
Closed
#131 Code blocks: copy button + line-wrap toggle (verify upstream first, don't break rendering)
Closed
#156 Clear the clipboard 60 s after copying a recovery key / invite token — with a visible countdown
Closed
#117 "You're talking while muted" toast
Closed
#122 Link-safety on click: warn when visible link text is a URL that differs from the real destination
Closed
#149 Optional setting: don't cache media from encrypted rooms on this device
Closed
#220 CI: e2e job that starts its own Synapse and runs the UI regression suite (no prod secrets)
Closed
#226 Status save failed with "server may be rate limiting" — Synapse allows one presence write per 10 s per user
Closed
#134 Room header: minimal badge for call limit / audio-only policy
Closed
#152 Collapsible long messages: remember "Read more" expansion per message for the session
Closed
#132 [verify] Pasting an image copied from a web page must send only the image (no page URL / alt text)
Closed
#135 Pre-join guard: say plainly when you are about to join with the camera ON
Closed
#128 Undeafen catch-up: one toast listing who joined/left while you were deafened
Closed
#136 PTT stuck-key release: drop a hold longer than N minutes (do not break calls)
Closed
#169 Delete all my messages in this room (self-service redaction of your own events)
Closed
#203 Quick reply from a browser notification (P5-20, remaining half): inline reply via Notification Actions through the SW
Closed
#160 Call failures in plain words: map every EC / voice-guard failure code to one sentence
Closed
#204 Persisted PII without encryption: status message + expiry and unsent composer drafts sit in plaintext localStorage
Closed
#162 Missed-call entry in the timeline (local-only)
Closed
#159 Undecryptable message: show the specific reason and the one action that fixes it
Closed
#219 Unify the two image viewers: timeline ImageViewer should open the gallery lightbox at that item
Closed
#218 Threads: opening the thread panel next to the member drawer squeezes both composers to a few characters at ≤1400 px
Closed
#167 Lazy-load seasonal theme CSS/keyframes only when a seasonal overlay is active
Closed
#158 Clock-skew warning: compare the homeserver Date header to the local clock and warn once when it is far off
Closed
#168 Screen-reader announcements for call events (aria-live; invisible otherwise)
Closed
#212 Timeline: your own newly sent message can land below the fold with "Jump to Latest" (stale at-bottom flag after a poll vote)
Closed
#213 Upload error card shows the raw MatrixError string including the server URL
Closed
#216 /kick and /ban failures are silent (rateLimitedActions swallows non-429 errors)
Closed
#215 Seasonal floating button sits above modals and toasts (bottom-right) — should hide behind overlays
Closed
#157 Room list "N Live" indicator: hover/long-press shows who is in the call
Closed
#195 Call-to-call switch: send an explicit HangupCall before disposing the embed (transient ghost RTC membership)
Closed
#223 Calls: sharer's own 'Stop Screenshare' button stays lit ~30 s after the server revokes the share
Closed
#224 PiP call window is see-through — the timeline underneath shows through the transparent EC surface
Closed
#209 EC fork Phase 2 (P6-2): after publishing 0.20.1-lotus.2, bump the pin and delete the CallControl.ts .muted DOM fallback
Closed
#177 [QA] §G Calls: PiP mute badges, fullscreen camera broadcast, PTT badge on all themes
Closed
#170 [QA] §A Calls: ringtone selection, incoming-call ringtone, in-call second-call banner, focus camera, call-tile decorations, EC load watchdog
Closed
#174 [QA] §D2 Element Call fork feature sweep: in-source denoise reconnect, call_state indicators, focus-participant, in-call decorations, transparent bg, soundboard, quality controls, server-enforced call permissions
Closed
#145 Join/leave sounds: debounce a flapping participant (do not break sounds)
Closed
#173 [QA] §D Element Call control-bar regression sweep (PTT, AFK auto-mute, denoise, screenshare audio, PiP badges)
Closed
#29 Logging out mid-call never hangs up, leaving a ghost RTC membership
Closed
#161 [verify] Incoming ring stops on all devices once the call is answered or declined elsewhere
Closed
#211 Mobile: the Widgets panel has no entry point (header button is desktop-only, ⋮ menu has no Widgets item)
Closed
#178 [QA] §H Media / performance: lazy image decryption in the gallery, thumbnail framing
Closed
#176 [QA] §F Visual / theming: chat-background flicker, background vs seasonal exclusivity, picker grid
Closed
#175 [QA] §E Mobile / responsive: touch targets, room-settings overflow, fullscreen modals, keyboard vs composer, mobile Saved Messages
Closed
#186 [QA] §Q Inline media embeds: facade, one of each provider, TikTok portrait, post self-resize, Bluesky/Loom/Kick, toggle + cap
Closed
#180 [QA] §K Features end-to-end: Remind Me Later, advanced search filters, notification content + click target
Closed
#182 [QA] §M Search has:/pinned filters + recent searches; custom accent color; new theme presets (visual judgment)
Closed
#184 [QA] §O July batch: thread panel, per-thread notifications, math, encrypted search cache, session hardening, audit-wave fixes, E2EE call-key cluster
Closed
#172 [QA] §C Upload retry on a flaky network (best-effort)
Closed
#171 [QA] §B Polls: voting / selected / progress state and multiple-choice rendering on non-TDS themes
Closed
#188 [QA] Room widgets panel (MSC1236): add / open / remove, non-admin view, URL validation, mobile overlay, CSP frame-src
Closed
#190 [QA] Disappearing messages (m.room.retention): timeline hide per preset, Show Hidden Events, self-only enforced redaction
Closed
#192 [QA] Invite QR is generated locally: no api.qrserver.com request, scans to the right matrix.to link, works offline
Closed
#191 [QA] Mark as Unread (MSC2867) + Low Priority tag: dot, clear on open, cross-device sync, category moves
Closed
#193 [QA] Read-receipt regression guard: rooms stay read after Home/Direct mount, thread dot clears, decoration 403/502 storm gone
Closed
#142 [verify] URL previews are never fetched for links in your own composer while typing
Closed
#140 [verify] Thread composer must honour "Hide Typing & Read Receipts" (typing)
Closed
#141 [verify] Thread read receipts must honour "Private Read Receipts"
Closed
#130 [research] "Copy Link" should open in Lotus for guild members — matrix.to client hints vs direct chat.lotusguild.org permalinks
Closed
#163 Media Gallery: opening it scrolls the room timeline into the past while it loads older media
Closed
#153 Search / permalink jump: highlight the target message for ~3 s
Closed
#154 PWA: app-icon badge count via navigator.setAppBadge()
Closed
#116 PWA: offer to install (Chromium prompt, iOS "Add to Home Screen" hint)
Closed
#104 Sync Lotus settings across devices via account data
Closed
#103 Strip tracking parameters from links on paste and on render
Closed
#32 Speaker set is reallocated on every call-state push, re-rendering the app-wide call bar
Closed
#25 Right-clicking the call button silently starts a camera-on video call
Closed
#28 Incoming-call ringtone ignores quiet hours, DND and Focus Assist
Closed
#44 Shipped nginx/Netlify configs set no CSP, frame-ancestors or referrer policy
Closed
#38 Thread panel never shows read receipts (context provider is out of scope)
Closed
#39 Every text message subscribes to one global translation atom → timeline-wide re-render storms
Closed
#40 Read-position recompute walks all joined members and re-renders the whole timeline
Closed
#42 Settings are never synced across tabs — one tab's whole blob clobbers the other's
Closed
#45 Logout's search-index wipe can report success while another tab still holds the DB
Closed
#36 Scheduling from the composer drops formatting, mentions and the reply relation
Closed
#37 Composer drafts are lost on page reload (only written on unmount)
Closed
#90 CI: add a Playwright smoke test that boots the built client and exercises the composer in an E2EE room
Closed
#95 CI: no secret scanning, and config.json (incl. any gifApiKey) ships inside the build image
Closed
#93 CI: the Docker image is never built — add a docker build job so the documented deploy path can't rot
Closed
#94 CI: no dependency update automation (Renovate/Dependabot)
Closed
#20 Favouriting/low-priority a room doesn't move it in the sidebar until an unrelated re-render
Closed
#53 Lotus-added UI bypasses the app's i18next mechanism entirely — always renders in English regardless of user locale
Closed
#55 Fragile postinstall patch script for folds Icon
Closed
#87 Dead code: unused useForceUpdate.js
Closed
#88 syncDecorations.mjs fragile regex parsing
Closed
#98 CI: the lotus-build.sh upstream-merge path deploys without running CI
Closed
#99 Repo hygiene: eight dead GitHub Actions workflows under .github/workflows never run on Gitea
Closed
#101 Dedupe the screenshare confirmation and route CallControls through useRoomCallPolicy
Closed
#102 OIDC callback does not invalidate a cached client id the provider rejects
Closed
#97 CI: ESLint runs without --max-warnings, so new react-hooks/exhaustive-deps warnings never surface
Closed
#92 CI: built output is never loaded — add a vite preview boot check after npm run build
Closed
#96 CI: bundle size is reported but has no budget — regressions pass green
Closed
#54 Package.json engines version misalignment with README and CI
Closed
#82 Room Activity Log can misclassify membership transitions for back-paginated (older) events
Closed
#83 Room Insights ("stats") panel freezes at open-time data and never reflects new activity
Closed
#91 CI: npm audit is informational — high-severity advisories should fail pull requests
Closed
#49 "Deny" on a pending knock request has no error handling and can be shown to users who lack kick power
Closed
#50 Room-history export shows outdated content and a garbled duplicate line for edited messages
Closed
#51 Room invite link / QR code always uses the local homeserver as the only via-server, ignoring the shared via-server resolver
Closed
#69 Cross-tab session sync is absent on the auth pages
Closed
#81 Room-history export gives no indication that a message was media/an attachment
Closed
#79 Quick Reply's failure is swallowed with no user-visible feedback
Closed
#80 LotusToastContainer toast auto-dismiss timer is not reset in a fixed slot, so a fast burst can hide a toast before it's read
Closed
#77 getNotificationType/main-timeline gate re-derives push rules on every event without memoization
Closed
#78 notificationclick always focuses the first matching window client, not the one most relevant to the notification
Closed
#52 Primary accent color fails WCAG AA 4.5:1 as text in Midnight and Lotus Terminal Light themes
Closed
#68 GIF picker sends search terms and IP directly to Giphy, outside any privacy setting
Closed
#76 useTauriCallPower never releases the native keep-awake state on unmount
Closed
#84 SendingSpinClass and CallAvatarAnimation ignore prefers-reduced-motion
Closed
#86 Terminal boot sequence has no touch/click dismiss and isn't hidden from assistive tech
Closed
#74 seasonalThemeOverride is the only enum setting with no persisted-value validation
Closed
#75 Page Zoom input silently discards a typed-but-unconfirmed value on blur
Closed
#66 Location messages load an OpenStreetMap iframe with no facade or auto-load gate
Closed
#70 Documented "leading emoji rendered 1.15× larger" room-name feature is not implemented
Closed
#71 Documented secondary glow/blink keyframes for animated backgrounds don't exist
Closed
#72 Earth Day globe decoration risks sitting over the composer
Closed
#85 CollapsibleBody's reduced-motion check is a one-time snapshot, not a live listener
Closed
#24 npm audit: 11 advisories in runtime deps (pdfjs-dist JS-execution, react-router, sanitize-html, katex, uuid)
Closed
#56 "Focus camera" pins a participant with no way to unpin
Closed
#57 Soundboard clip blob URLs are never revoked and survive logout
Closed
#58 No warning when closing the tab or reloading during an active call
Closed
#59 CallControl.setPipMode writes state nothing reads
Closed
#61 RoomMemberEvent.Membership listener on Room never fires (dead handler)
Closed
#62 Sender-only search returns membership/state/reaction events as results
Closed
#63 Forwarding an encrypted attachment into a plaintext room publishes its AES key
Closed
#65 KaTeX renders remote LaTeX with no maxSize/maxExpand limits
Closed
#31 Soundboard upload limit double-counts staged clips and reads a stale count
Closed
#26 Call-status bar bypasses the room screenshare/camera policy and the share confirmation
Closed
#30 Voice-channel "Channel Full" limit is bypassed by joining from the sidebar
Closed
#48 Notification profile presets don't clear an active "Pause Notifications" snooze
Closed
#46 Avatar Decoration settings panel shows "None" on any fetch failure, not just true absence
Closed
#47 Profile field edits can be clobbered by a slow-loading initial fetch (pronouns, timezone, avatar decoration)
Closed
#15 Room widgets never render — matrix-widget-api 1.17.0 isValidUrl is broken
Closed
#16 OIDC token refresh force-reloads every other tab, dropping in-progress calls
Closed
#67 Any OIDC login failure discards the cached dynamic client id
Closed
#9 Push-to-talk, the deafen hotkey and AFK auto-mute stop working outside the call room
Closed
#10 Bookmarks and reminders upload decrypted message text to server account data
Closed
#14 Persistent search index keeps decrypted plaintext of redacted messages and left rooms
Closed
#27 PTT window blur/focus force-mutes unconditionally, revoking a manual unmute
Closed
#60 In-iframe PTT/deafen key listeners are lost if the EC iframe reloads
Closed
#13 Search date-range filter is silently ignored for unencrypted rooms
Closed
#22 Policy List Viewer misses legacy Draupnir/Mjolnir policy event types, showing false "no rules found"
Closed
#64 Avatar-decoration slug from a remote profile is interpolated into a URL unvalidated
Closed
#17 Renaming two rooms in quick succession silently loses the first rename
Closed
#18 Private user notes can lose typed text (store echo reverts draft; close within debounce drops save)
Closed
#23 Call hotkeys: rebind has no denylist, modifiers ignored, Space swallowed on buttons, duplicate bindings allowed
Closed
#34 Thread read receipts ignore the "Hide Typing & Read Receipts" setting
Closed
#35 Creating a poll from the thread composer posts it to the main timeline
Closed
#41 Composer drafts survive logout and are auto-hydrated into the next account's session
Closed
#12 Edits and reactions on a thread root are invisible in the thread panel
Closed
#6 Image compression in an E2EE room uploads plaintext and breaks the event
Closed
#7 Scheduled messages bypass encryption — plaintext m.room.message in E2EE rooms
Closed
#8 Answering an incoming video call turns the camera on, ignoring the user setting
Closed
#11 GIF picker sends unencrypted media into encrypted rooms
Closed
#19 Advanced Push Rule Editor silently strips the highlight tweak from mention rules
Closed
#21 Timed room mute silently overwrites a manual notification-mode change made during the mute window
Closed
#33 Deafen button's aria-label is inverted relative to its tooltip
Closed
#73 Halloween fog-band layers keep willChange set even when motion is fully disabled
Closed
#5 Room Nav - Lazy Loading
222 Issues created by 1 user
Opened
#5 Room Nav - Lazy Loading
Opened
#6 Image compression in an E2EE room uploads plaintext and breaks the event
Opened
#7 Scheduled messages bypass encryption — plaintext m.room.message in E2EE rooms
Opened
#8 Answering an incoming video call turns the camera on, ignoring the user setting
Opened
#9 Push-to-talk, the deafen hotkey and AFK auto-mute stop working outside the call room
Opened
#10 Bookmarks and reminders upload decrypted message text to server account data
Opened
#11 GIF picker sends unencrypted media into encrypted rooms
Opened
#12 Edits and reactions on a thread root are invisible in the thread panel
Opened
#13 Search date-range filter is silently ignored for unencrypted rooms
Opened
#14 Persistent search index keeps decrypted plaintext of redacted messages and left rooms
Opened
#15 Room widgets never render — matrix-widget-api 1.17.0 isValidUrl is broken
Opened
#16 OIDC token refresh force-reloads every other tab, dropping in-progress calls
Opened
#17 Renaming two rooms in quick succession silently loses the first rename
Opened
#18 Private user notes can lose typed text (store echo reverts draft; close within debounce drops save)
Opened
#19 Advanced Push Rule Editor silently strips the highlight tweak from mention rules
Opened
#20 Favouriting/low-priority a room doesn't move it in the sidebar until an unrelated re-render
Opened
#21 Timed room mute silently overwrites a manual notification-mode change made during the mute window
Opened
#22 Policy List Viewer misses legacy Draupnir/Mjolnir policy event types, showing false "no rules found"
Opened
#23 Call hotkeys: rebind has no denylist, modifiers ignored, Space swallowed on buttons, duplicate bindings allowed
Opened
#24 npm audit: 11 advisories in runtime deps (pdfjs-dist JS-execution, react-router, sanitize-html, katex, uuid)
Opened
#25 Right-clicking the call button silently starts a camera-on video call
Opened
#26 Call-status bar bypasses the room screenshare/camera policy and the share confirmation
Opened
#27 PTT window blur/focus force-mutes unconditionally, revoking a manual unmute
Opened
#28 Incoming-call ringtone ignores quiet hours, DND and Focus Assist
Opened
#29 Logging out mid-call never hangs up, leaving a ghost RTC membership
Opened
#30 Voice-channel "Channel Full" limit is bypassed by joining from the sidebar
Opened
#31 Soundboard upload limit double-counts staged clips and reads a stale count
Opened
#32 Speaker set is reallocated on every call-state push, re-rendering the app-wide call bar
Opened
#33 Deafen button's aria-label is inverted relative to its tooltip
Opened
#34 Thread read receipts ignore the "Hide Typing & Read Receipts" setting
Opened
#35 Creating a poll from the thread composer posts it to the main timeline
Opened
#36 Scheduling from the composer drops formatting, mentions and the reply relation
Opened
#37 Composer drafts are lost on page reload (only written on unmount)
Opened
#38 Thread panel never shows read receipts (context provider is out of scope)
Opened
#39 Every text message subscribes to one global translation atom → timeline-wide re-render storms
Opened
#40 Read-position recompute walks all joined members and re-renders the whole timeline
Opened
#41 Composer drafts survive logout and are auto-hydrated into the next account's session
Opened
#42 Settings are never synced across tabs — one tab's whole blob clobbers the other's
Opened
#43 Element Call iframe is same-origin, so its sandbox is a no-op
Opened
#44 Shipped nginx/Netlify configs set no CSP, frame-ancestors or referrer policy
Opened
#45 Logout's search-index wipe can report success while another tab still holds the DB
Opened
#46 Avatar Decoration settings panel shows "None" on any fetch failure, not just true absence
Opened
#47 Profile field edits can be clobbered by a slow-loading initial fetch (pronouns, timezone, avatar decoration)
Opened
#48 Notification profile presets don't clear an active "Pause Notifications" snooze
Opened
#49 "Deny" on a pending knock request has no error handling and can be shown to users who lack kick power
Opened
#50 Room-history export shows outdated content and a garbled duplicate line for edited messages
Opened
#51 Room invite link / QR code always uses the local homeserver as the only via-server, ignoring the shared via-server resolver
Opened
#52 Primary accent color fails WCAG AA 4.5:1 as text in Midnight and Lotus Terminal Light themes
Opened
#53 Lotus-added UI bypasses the app's i18next mechanism entirely — always renders in English regardless of user locale
Opened
#54 Package.json engines version misalignment with README and CI
Opened
#55 Fragile postinstall patch script for folds Icon
Opened
#56 "Focus camera" pins a participant with no way to unpin
Opened
#57 Soundboard clip blob URLs are never revoked and survive logout
Opened
#58 No warning when closing the tab or reloading during an active call
Opened
#59 CallControl.setPipMode writes state nothing reads
Opened
#60 In-iframe PTT/deafen key listeners are lost if the EC iframe reloads
Opened
#61 RoomMemberEvent.Membership listener on Room never fires (dead handler)
Opened
#62 Sender-only search returns membership/state/reaction events as results
Opened
#63 Forwarding an encrypted attachment into a plaintext room publishes its AES key
Opened
#64 Avatar-decoration slug from a remote profile is interpolated into a URL unvalidated
Opened
#65 KaTeX renders remote LaTeX with no maxSize/maxExpand limits
Opened
#66 Location messages load an OpenStreetMap iframe with no facade or auto-load gate
Opened
#67 Any OIDC login failure discards the cached dynamic client id
Opened
#68 GIF picker sends search terms and IP directly to Giphy, outside any privacy setting
Opened
#69 Cross-tab session sync is absent on the auth pages
Opened
#70 Documented "leading emoji rendered 1.15× larger" room-name feature is not implemented
Opened
#71 Documented secondary glow/blink keyframes for animated backgrounds don't exist
Opened
#72 Earth Day globe decoration risks sitting over the composer
Opened
#73 Halloween fog-band layers keep willChange set even when motion is fully disabled
Opened
#74 seasonalThemeOverride is the only enum setting with no persisted-value validation
Opened
#75 Page Zoom input silently discards a typed-but-unconfirmed value on blur
Opened
#76 useTauriCallPower never releases the native keep-awake state on unmount
Opened
#77 getNotificationType/main-timeline gate re-derives push rules on every event without memoization
Opened
#78 notificationclick always focuses the first matching window client, not the one most relevant to the notification
Opened
#79 Quick Reply's failure is swallowed with no user-visible feedback
Opened
#80 LotusToastContainer toast auto-dismiss timer is not reset in a fixed slot, so a fast burst can hide a toast before it's read
Opened
#81 Room-history export gives no indication that a message was media/an attachment
Opened
#82 Room Activity Log can misclassify membership transitions for back-paginated (older) events
Opened
#83 Room Insights ("stats") panel freezes at open-time data and never reflects new activity
Opened
#84 SendingSpinClass and CallAvatarAnimation ignore prefers-reduced-motion
Opened
#85 CollapsibleBody's reduced-motion check is a one-time snapshot, not a live listener
Opened
#86 Terminal boot sequence has no touch/click dismiss and isn't hidden from assistive tech
Opened
#87 Dead code: unused useForceUpdate.js
Opened
#88 syncDecorations.mjs fragile regex parsing
Opened
#89 Client audit 2026-09 — tracking index
Opened
#90 CI: add a Playwright smoke test that boots the built client and exercises the composer in an E2EE room
Opened
#91 CI: npm audit is informational — high-severity advisories should fail pull requests
Opened
#92 CI: built output is never loaded — add a vite preview boot check after npm run build
Opened
#93 CI: the Docker image is never built — add a docker build job so the documented deploy path can't rot
Opened
#94 CI: no dependency update automation (Renovate/Dependabot)
Opened
#95 CI: no secret scanning, and config.json (incl. any gifApiKey) ships inside the build image
Opened
#96 CI: bundle size is reported but has no budget — regressions pass green
Opened
#97 CI: ESLint runs without --max-warnings, so new react-hooks/exhaustive-deps warnings never surface
Opened
#98 CI: the lotus-build.sh upstream-merge path deploys without running CI
Opened
#99 Repo hygiene: eight dead GitHub Actions workflows under .github/workflows never run on Gitea
Opened
#100 Process: no CODEOWNERS or required review — a single push to lotus deploys to production in ~11 minutes
Opened
#101 Dedupe the screenshare confirmation and route CallControls through useRoomCallPolicy
Opened
#102 OIDC callback does not invalidate a cached client id the provider rejects
Opened
#103 Strip tracking parameters from links on paste and on render
Opened
#104 Sync Lotus settings across devices via account data
Opened
#105 [research] Desktop: store the access token in the OS keychain + idle lock
Opened
#106 [research] Search operators: from:, has:, in:, before:/after: — audit what exists first
Opened
#107 [research] Composer: detect pasted code and offer a fenced code block
Opened
#108 Custom room sections in the sidebar via u.* room tags
Opened
#109 Strip EXIF/GPS metadata from images by default (currently only when compression is on)
Opened
#110 [needs human review] Key-backup health banner — explain, then decide
Opened
#111 [research] Space notice / MOTD banner — pick the spec-compliant data source
Opened
#112 [research] Offline outbox — what happens today when a send fails or the client is offline
Opened
#113 [planning] Session hygiene nudges — design session needed
Opened
#114 [planning] Export / import my data (bookmarks, notes, settings, sections) — design session needed
Opened
#115 [decide] Pre-join connection check (RTT/jitter probe to LiveKit shown as signal bars)
Opened
#116 PWA: offer to install (Chromium prompt, iOS "Add to Home Screen" hint)
Opened
#117 "You're talking while muted" toast
Opened
#118 Auto-rejoin the voice room after a crash, update or restart
Opened
#119 Audio output quick-switch in the call bar (verify EC in-call menu first)
Opened
#120 Storage usage & clear (media cache, search index, crypto store) — keep it to one tile
Opened
#121 [planning] Expected-device check on call join: warn when your usual mic/headphones are missing
Opened
#122 Link-safety on click: warn when visible link text is a URL that differs from the real destination
Opened
#123 [research] Verification reminder for your OWN unverified sessions
Opened
#124 [planning · sprint] Homeserver maintenance banner driven by the Uptime Kuma status page
Opened
#125 Haptic tick on PTT press/release and on reactions (Android)
Opened
#126 [planning] Landscape phone in a call: full-bleed call, hide sidebar/header
Opened
#127 Reply jump-back chip: "Back to where you were" after jumping to a replied-to message
Opened
#128 Undeafen catch-up: one toast listing who joined/left while you were deafened
Opened
#129 [research] Paste/drop an image → land in the caption field so "here's the bug" is one motion
Opened
#130 [research] "Copy Link" should open in Lotus for guild members — matrix.to client hints vs direct chat.lotusguild.org permalinks
Opened
#131 Code blocks: copy button + line-wrap toggle (verify upstream first, don't break rendering)
Opened
#132 [verify] Pasting an image copied from a web page must send only the image (no page URL / alt text)
Opened
#133 [decide] One-sentence "who can see this" line in room settings
Opened
#134 Room header: minimal badge for call limit / audio-only policy
Opened
#135 Pre-join guard: say plainly when you are about to join with the camera ON
Opened
#136 PTT stuck-key release: drop a hold longer than N minutes (do not break calls)
Opened
#137 Bulk media drop renders as one gallery (client-side grouping, standard events)
Opened
#138 Reactions: "+N" overflow expands inline (check every layout/edge case first)
Opened
#139 One timestamp formatter: audit and unify date/time display across timeline, room list, search, threads
Opened
#140 [verify] Thread composer must honour "Hide Typing & Read Receipts" (typing)
Opened
#141 [verify] Thread read receipts must honour "Private Read Receipts"
Opened
#142 [verify] URL previews are never fetched for links in your own composer while typing
Opened
#143 Per-call quality readout on hangup (low priority; UI must look native)
Opened
#144 "(edited)" hover shows a word-level diff of the last edit
Opened
#145 Join/leave sounds: debounce a flapping participant (do not break sounds)
Opened
#146 [research] Mic level meter in the call bar while unmuted — what exists today?
Opened
#147 Touch only: tap a sticker/GIF once to preview, again to send
Opened
#148 Space rail: subtle dot when a call is live somewhere in that space (careful)
Opened
#149 Optional setting: don't cache media from encrypted rooms on this device
Opened
#150 Profile view: "Last active …" line from presence
Opened
#151 Reply quote shows a media thumbnail when replying to an image/video
Opened
#152 Collapsible long messages: remember "Read more" expansion per message for the session
Opened
#153 Search / permalink jump: highlight the target message for ~3 s
Opened
#154 PWA: app-icon badge count via navigator.setAppBadge()
Opened
#155 PWA: register as an Android share target (Share → Lotus Chat)
Opened
#156 Clear the clipboard 60 s after copying a recovery key / invite token — with a visible countdown
Opened
#157 Room list "N Live" indicator: hover/long-press shows who is in the call
Opened
#158 Clock-skew warning: compare the homeserver Date header to the local clock and warn once when it is far off
Opened
#159 Undecryptable message: show the specific reason and the one action that fixes it
Opened
#160 Call failures in plain words: map every EC / voice-guard failure code to one sentence
Opened
#161 [verify] Incoming ring stops on all devices once the call is answered or declined elsewhere
Opened
#162 Missed-call entry in the timeline (local-only)
Opened
#163 Media Gallery: opening it scrolls the room timeline into the past while it loads older media
Opened
#164 [deep dive] Full-screen image/video viewer UI/UX audit
Opened
#165 [deep dive] Threads: full UI/UX audit + "mark all threads read"
Opened
#166 Mobile: long-press a message opens a bottom sheet of actions (replaces the hover bar)
Opened
#167 Lazy-load seasonal theme CSS/keyframes only when a seasonal overlay is active
Opened
#168 Screen-reader announcements for call events (aria-live; invisible otherwise)
Opened
#169 Delete all my messages in this room (self-service redaction of your own events)
Opened
#170 [QA] §A Calls: ringtone selection, incoming-call ringtone, in-call second-call banner, focus camera, call-tile decorations, EC load watchdog
Opened
#171 [QA] §B Polls: voting / selected / progress state and multiple-choice rendering on non-TDS themes
Opened
#172 [QA] §C Upload retry on a flaky network (best-effort)
Opened
#173 [QA] §D Element Call control-bar regression sweep (PTT, AFK auto-mute, denoise, screenshare audio, PiP badges)
Opened
#174 [QA] §D2 Element Call fork feature sweep: in-source denoise reconnect, call_state indicators, focus-participant, in-call decorations, transparent bg, soundboard, quality controls, server-enforced call permissions
Opened
#175 [QA] §E Mobile / responsive: touch targets, room-settings overflow, fullscreen modals, keyboard vs composer, mobile Saved Messages
Opened
#176 [QA] §F Visual / theming: chat-background flicker, background vs seasonal exclusivity, picker grid
Opened
#177 [QA] §G Calls: PiP mute badges, fullscreen camera broadcast, PTT badge on all themes
Opened
#178 [QA] §H Media / performance: lazy image decryption in the gallery, thumbnail framing
Opened
#179 [QA] §I Accessibility: aria-labels on edit-history / reactions / threads / replies with a screen reader
Opened
#180 [QA] §K Features end-to-end: Remind Me Later, advanced search filters, notification content + click target
Opened
#181 [QA] §L AFK auto-mute releases the OS mic indicator; maskable PWA icons
Opened
#182 [QA] §M Search has:/pinned filters + recent searches; custom accent color; new theme presets (visual judgment)
Opened
#183 [QA] §N OIDC / next-gen auth (MSC3861): login, persistence, refresh, logout revoke, account deep-link, password regression
Opened
#184 [QA] §O July batch: thread panel, per-thread notifications, math, encrypted search cache, session hardening, audit-wave fixes, E2EE call-key cluster
Opened
#185 [QA] §P Accessibility runtime pass: keyboard golden path, ? dialog, screen-reader reading + live announcements, focus return, axe/Lighthouse
Opened
#186 [QA] §Q Inline media embeds: facade, one of each provider, TikTok portrait, post self-resize, Bluesky/Loom/Kick, toggle + cap
Opened
#187 [QA] §R Discovery-pass fixes DP1–DP18: correctness, a11y/UX, TDS colours, refactor regression pass
Opened
#188 [QA] Room widgets panel (MSC1236): add / open / remove, non-admin view, URL validation, mobile overlay, CSP frame-src
Opened
#189 [QA] QR device verification: show / scan / confirm, emoji fallback, camera denied, wrong scan cancels
Opened
#190 [QA] Disappearing messages (m.room.retention): timeline hide per preset, Show Hidden Events, self-only enforced redaction
Opened
#191 [QA] Mark as Unread (MSC2867) + Low Priority tag: dot, clear on open, cross-device sync, category moves
Opened
#192 [QA] Invite QR is generated locally: no api.qrserver.com request, scans to the right matrix.to link, works offline
Opened
#193 [QA] Read-receipt regression guard: rooms stay read after Home/Direct mount, thread dot clears, decoration 403/502 storm gone
Opened
#194 [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
Opened
#195 Call-to-call switch: send an explicit HangupCall before disposing the embed (transient ghost RTC membership)
Opened
#196 [parked] Matrix 2.0 call membership via MSC4354 sticky events — investigated, deliberately NOT enabled
Opened
#197 [large] In-app audio editor / video→audio extractor
Opened
#198 [QA] Runtime mobile QA on a real phone (static analysis only so far)
Opened
#199 Mobile: touch discoverability for message actions / quick reactions (hover-gated; iOS long-press unreliable) — design decision needed
Opened
#200 Inline media embeds: remaining providers (low priority)
Opened
#201 [planning] E2EE / call-key cluster KE-1→4: OTK upload conflict storm, EC MissingKey, malformed algorithm, MatrixRTC delayed-event timeouts — capture first, do not spot-fix
Opened
#202 Web Push (N107): sw.ts has no push handler — background notifications need a push listener + a Matrix push gateway
Opened
#203 Quick reply from a browser notification (P5-20, remaining half): inline reply via Notification Actions through the SW
Opened
#204 Persisted PII without encryption: status message + expiry and unsent composer drafts sit in plaintext localStorage
Opened
#205 Room Widgets v1 follow-ups: capability-approval consent prompt, Jitsi/stickerpicker types, account-data widgets, per-widget popout
Opened
#206 [parked] Sliding Sync (MSC3575 / simplified MSC4186) — server GA, client side judged not safe to roll out
Opened
#207 [gated on infra] Invite by email (3PID → identity server), QR sign-in for a new device (MSC4108 rendezvous), dehydrated devices (MSC3814)
Opened
#208 [verify] ML noise suppression (P5-30): real-call by-ear A/B of model / floor / AGC; GTCRN deferred
Opened
#209 EC fork Phase 2 (P6-2): after publishing 0.20.1-lotus.2, bump the pin and delete the CallControl.ts .muted DOM fallback
Opened
#210 Build / typing hygiene notes: lotusDenoise closeBundle fs work, types/matrix drift vs the SDK, gradual as any cleanup
Opened
#211 Mobile: the Widgets panel has no entry point (header button is desktop-only, ⋮ menu has no Widgets item)
Opened
#212 Timeline: your own newly sent message can land below the fold with "Jump to Latest" (stale at-bottom flag after a poll vote)
Opened
#213 Upload error card shows the raw MatrixError string including the server URL
Opened
#214 Privacy: every page load contacts fonts.googleapis.com / fonts.gstatic.com for the VT323 font — self-host it
Opened
#215 Seasonal floating button sits above modals and toasts (bottom-right) — should hide behind overlays
Opened
#216 /kick and /ban failures are silent (rateLimitedActions swallows non-429 errors)
Opened
#217 [decide] Threads: opening a room marks every thread in it read — chip/list unread badges never survive a room visit
Opened
#218 Threads: opening the thread panel next to the member drawer squeezes both composers to a few characters at ≤1400 px
Opened
#219 Unify the two image viewers: timeline ImageViewer should open the gallery lightbox at that item
Opened
#220 CI: e2e job that starts its own Synapse and runs the UI regression suite (no prod secrets)
Opened
#221 E2E: run the Playwright suite under WebKit as a Safari/iOS proxy
Opened
#222 a11y in CI: axe-core gate + accessibility-tree snapshots as the screen-reader proxy
Opened
#223 Calls: sharer's own 'Stop Screenshare' button stays lit ~30 s after the server revokes the share
Opened
#224 PiP call window is see-through — the timeline underneath shows through the transparent EC surface
Opened
#225 [QA] Calls: the by-ear checklist (denoise tiers, soundboard levels, join/leave + ringtone sounds, screenshare audio)
Opened
#226 Status save failed with "server may be rate limiting" — Synapse allows one presence write per 10 s per user