2025-11-05 - 2026-11-05
Overview
4 Releases published by 1 user
Published
v4.11.1
Published
v4.10.5
Published
v4.10.4
Published
v4.10.3
141 Pull requests merged by 1 user
Merged
#486 fix(status): read the public Kuma page, with notices scoped by a prefix
Merged
#485 feat(calls): change noise suppression mid-call without rejoining
Merged
#484 chore(deps): Element Call 0.28.0-lotus.3 (DeepFilterNet fixes)
Merged
#483 fix(denoise-tester): play models in both ears; match the call's DeepFilterNet strength
Merged
#482 feat(settings): make DTLN the default ML noise-suppression model
Merged
#481 fix(settings): measured CPU and download figures for the noise-suppression models
Merged
#480 fix(call): keep browser AGC on with ML noise suppression (DeepFilterNet "makes people quiet")
Merged
#479 feat(bridge): Discord badge on bridged users and a header chip on bridged rooms
Merged
#478 fix(call): send theme changes only once the call frame is ready (postMessage origin error)
Merged
#477 fix(denoise): ship the DeepFilterNet 3 worklet as a file so it starts in the desktop app
Merged
#476 test(e2e): scheduled messages and offline outbox; retry rate-limited scheduled-message calls
Merged
#475 fix(presence): your own status shows at once (and clears) in the member list
Merged
#474 fix(auth): SSO confirmation works in the desktop app; allow switching to SSO
Merged
#470 chore(build): ship only the DTLN files that can load (-9 MB) (#210)
Merged
#469 fix(status): status changes apply at once instead of waiting out the rate limit
Merged
#468 chore(types): typed secret storage key cache; drop the cryptoCallbacks cast (#210)
Merged
#467 feat(settings): search across all settings (#453 phase 3)
Merged
#466 feat(settings): new settings pages, collapsed pickers, privacy choice, grouped calls (#453 phase 2)
Merged
#465 chore(deps): sanitize-html 2.18.1, i18next-http-backend 4.0.3 [security]
Merged
#464 feat(settings): quick wins from the settings audit (#453 phase 1)
Merged
#454 feat(settings): export / import your data (#114)
Merged
#452 feat(security): nudge to sign out sessions unused for 3 months (#113)
Merged
#451 feat(call): full-screen call when a phone is turned sideways (#126)
Merged
#450 feat(call): ask before joining when your usual mic / headphones are missing (#121)
Merged
#449 feat(auth): offer native OAuth sign-in on servers like matrix.org
Merged
#448 chore(deps): Element Call 0.28.0-lotus.1 (#201)
Merged
#447 chore(deps): matrix-js-sdk 41.7 → 44.0 (#201)
Merged
#446 feat(e2ee): tell the user when their device's key uploads are stuck (#201 KE-1)
Merged
#445 feat(desktop): keep the login tokens only in the OS keychain (#105 step 2)
Merged
#444 feat(embeds): Vimeo live events play inline (#200)
Merged
#443 feat(widgets): keep a widget on screen while you navigate away (#205)
Merged
#442 feat(call): Details card after a call, with who/why/numbers/activity (#253)
Merged
#441 feat(widgets): open a widget in its own window (#205)
Merged
#440 fix(touch): harden long-press for iOS (#199)
Merged
#439 chore(types): fewer any casts; eslint ratchet 36 → 29 (#210)
Merged
#438 chore(deps): element-call lotus.28, soundboard in voice channels with a call policy (EC #47)
Merged
#437 fix(call): one-row phone call bar with self-view; screenshare-audio mute only when useful (#265, #277)
Merged
#436 fix(a11y): dialog names, aria-pressed, labels, avatar alt, placeholder contrast (#278)
Merged
#435 fix(copy): soundboard wording, deafen hint, pin typo; keep Reddit context= (#279, #280)
Merged
#434 feat(about): show the desktop version and the web build's commit and date (#276)
Merged
#433 fix(schedule): limit to 24 hours ahead with a clear message (#275)
Merged
#432 fix(sync): "Connecting…" only while catching up, not for 30 s after load (#274)
Merged
#431 fix(ui): receipt pill, insights counts, settings dividers, decoration preview (#269-#273)
Merged
#430 fix(outbox): two tabs no longer overwrite each other's queue (#268)
Merged
#429 fix(security): widget consents and shared files cleared on logout; forged shares refused (#266, #267)
Merged
#428 fix(room): one width for every right-hand panel (#263)
Merged
#427 fix(topic): keep URLs, aliases and user IDs intact in room topics (#262)
Merged
#426 fix(acl): a missing allow_ip_literals means allowed (#261)
Merged
#425 feat(lotus): load avatar decorations from chat.lotusguild.org (matrix #22)
Merged
#418 fix(calls): the call bar shows "Call disconnected" and reconnects when sync is back (#318)
Merged
#422 fix(desktop): the Linux update command verifies the signed SHA256SUMS before installing (cinny-desktop #36)
Merged
#420 perf: load the Settings dialog on demand; entry chunk 351.8 → 277.1 kB gzip
Merged
#424 fix(presence): Do Not Disturb is real "busy" presence and keeps your status (#283)
Merged
#423 fix(threads): viewing a room no longer reads threads you don't follow (#314)
Merged
#421 fix(profile): private notes say they are stored unencrypted on the homeserver (#329)
Merged
#417 fix(calls): the call-bar output menu uses the call frame's devices (#310)
Merged
#414 feat(calls): minimise the call PiP to a small bar; phones start minimised (#323)
Merged
#409 fix(translate): no "use the Lotus desktop app" advice inside the desktop app (#349)
Merged
#394 fix(status): any Lotus device clears an auto-expiring status, not just the one that set it (#300)
Merged
#419 ci: re-seed the bundle budget after the October audit fix batch
Merged
#415 fix(calls): explain when the soundboard is not allowed in a voice channel (EC #47)
Merged
#413 fix(calls): say when ML noise suppression fails or falls back; drop the spoofable listener (#260)
Merged
#412 docs: document the 55 features missing from LOTUS_FEATURES.md; refresh the Synapse re-check (#294)
Merged
#411 fix(settings): desktop-only settings get their own Desktop section (#290)
Merged
#410 fix(dev): ML noise suppression works on npm start; no lotusTheme warning per call (#293)
Merged
#408 fix(pwa): the installed app can rotate, and "New Message" opens a new DM (#292)
Merged
#407 fix(translate): say why Translate did nothing (#287)
Merged
#416 fix(desktop): without a tray, the first-close dialog defaults to Quit (cinny-desktop #37)
Merged
#399 fix(media): "Compress image" no longer blackens transparent images or freezes animations (#331)
Merged
#406 fix(consent): a retry that fails again reopens the terms prompt (#311)
Merged
#405 fix(privacy): "Remove Photo Metadata" also covers emoji/sticker packs and badges (#332)
Merged
#404 fix(previews): no genuine preview card for a site a deceptive link only pretends to be (#286)
Merged
#403 fix(previews): a page can no longer pose as a YouTube (etc.) player via its og:url (#326)
Merged
#402 fix(settings): valid HTML in setting tiles; start uploads in an effect (#291)
Merged
#401 fix(a11y): the keyboard shortcuts dialog lists every shortcut (#334)
Merged
#400 fix(forward): warn when forwarding out of an encrypted room into one that is not (#330)
Merged
#398 fix(calls): no "the shared window was closed" toast when an admin turns sharing off (#297)
Merged
#397 fix(notifications): notification replies re-check encryption at send time and use the right account (#299)
Merged
#396 fix(calls): the call PiP no longer opens on top of the composer (#323)
Merged
#395 fix(notifications): in-app toasts no longer need browser notification permission (#324)
Merged
#393 fix(notifications): timed mutes are lifted by any Lotus device, not just the one that set them (#333)
Merged
#392 fix(moderation): policy viewer lists a stable rule and its legacy twin once (#321)
Merged
#391 fix(security): a dismissed status announcement no longer hides the security nudge (#307)
Merged
#390 fix(status): banner Details strips Markdown syntax, not every #, _, >, * (#308)
Merged
#389 fix(calls): DM-aware rejoin toast, and no rejoining a DM call that ended (#302)
Merged
#388 fix(search): an edited message shows once, with its latest text (#288)
Merged
#387 fix(sidebar): the room filter hides empty sections and says when nothing matches (#289)
Merged
#386 fix(composer): Escape closes the emoji and sticker boards (#304)
Merged
#385 fix(calls): the call-failed screen gets a Try again button (#301)
Merged
#384 fix(share): room share and invite links open Lotus Chat, not matrix.to (#285)
Merged
#383 fix(polls): you can vote on a poll you just created (#284)
Merged
#382 fix(schedule): load scheduled messages from the server; offer to cancel them at logout (#322)
Merged
#381 fix(calls): one delayed-event restart in flight per id, with a timeout (#318)
Merged
#375 fix(calls): Reject sends the decline to the ring notification (#313)
Merged
#380 fix(status): show a strip when the homeserver hangs, not 110 s later (#317)
Merged
#368 fix(timeline): media gallery / activity log no longer make the timeline drop messages (#259)
Merged
#379 fix(calls): lift CallControl's listener limit so ended calls can be freed (#316)
Merged
#378 fix(calls): starting a call in a voice channel no longer @room-pings everyone (#295)
Merged
#377 fix(reactions): the reactions row no longer flickers or loses its spacing (#305)
Merged
#376 fix(rooms): members can start and join calls in new private rooms (#328)
Merged
#369 fix(dialogs): Enter in Poll, Schedule, Report dialogs no longer discards input (#315)
Merged
#374 fix(messages): the delivery indicator updates when a send completes (#306)
Merged
#373 fix(rooms): upgrading a room keeps its Lotus settings (#327)
Merged
#372 fix(notifications): quiet hours start and end while the app stays open (#325)
Merged
#371 fix(logout): no draft or search opt-in left behind after logout (#319, #296)
Merged
#370 fix(fonts): the app uses Inter again (#320)
Merged
#367 fix(retention): a tiny or brand-new retention value can't wipe a room (#298)
Merged
#366 fix(startup): Firefox no longer hangs on "Heating up" after login (#303)
Merged
#365 fix(calls): a finished call no longer rings again after a reload (#312)
Merged
#364 fix(rooms): "Rename for me" names in search results, inbox and threads (#336)
Merged
#363 fix(calls): no "Missed call" in voice rooms or space channels
Merged
#361 perf(backgrounds): animated chat backgrounds cost ~5% CPU instead of 50 to 70% (#337)
Merged
#360 fix(security): link warning no longer bypassed by a sentence or shared hosting (#335)
Merged
#362 test(e2e): allow the register probe's 403 now that sign-up is closed
Merged
#359 fix(rooms): "Rename for me" names in Ctrl+K, forward/share pickers and notifications (#336)
Merged
#358 fix(messages): collapsed long messages work with the keyboard and on any background (#343)
Merged
#357 fix(logout): clear the call-volume list and settings-sync stamp (#347)
Merged
#356 fix(settings): "ENTER for Newline" stays per device (#348)
Merged
#355 fix(presence): leaving Do Not Disturb restores your status instead of "dnd" (#283)
Merged
#354 fix(presence): Invisible, Hide Online Status, Idle and DND stick (#282)
Merged
#353 fix(location): confirm before sharing, with accuracy and an approximate option (#340)
Merged
#352 fix(reminders): a reminder stays until you've seen it (#338)
Merged
#351 fix(calls): "Channel Full" counts people, not devices (#342)
Merged
#350 fix(presence): closing a tab no longer erases your custom status (#339)
Merged
#344 fix(embeds): GIF previews keep their own size and shape (#341)
Merged
#346 deps: fix the npm audit advisories that turned CI red (#345)
Merged
#258 Device-security nudge: verify this device / key backup (#110, #123)
Merged
#256 Desktop updates: Linux package installs update via their package manager
Merged
#257 deps: brace-expansion 1.1.21 (unblocks CI audit)
Merged
#255 Homeserver status banner from Uptime Kuma (#124)
Merged
#254 Desktop: mirror the login tokens into the OS keychain (#105, step 1)
Merged
#252 Desktop: call page on its own loopback origin, opt-in (#43)
Merged
#251 A stalled server no longer reads as "your clock is ahead"
Merged
#250 Offline outbox: unsent messages survive reload and retry (#112)
Merged
#249 Desktop: Lotus links use the public web app and open in-app (#248)
Merged
#247 Polls: readable poll card: counts, visible bars/indicators, no chip overflow (#246)
Merged
#245 Desktop without WebRTC: "Open in browser" instead of a dead end (cinny-desktop #21)
Merged
#244 Screenshare stays on the call bar in Firefox/Safari via the in-frame prompt (#43)
Merged
#243 Optional Element Call origin via config.json elementCallUrl (#43)
Merged
#242 Seasonal: Halloween redesign (#239), needs human approval
Merged
#241 Seasonal: Autumn redesign (#237), needs human approval
5 Pull requests proposed by 2 users
Proposed
#3 Sw dev fix
Proposed
#4 Update packages
Proposed
#471 feat(seasonal): Christmas redesign (#240) — awaiting human review
Proposed
#472 feat(seasonal): New Year redesign (#230) — awaiting human review
Proposed
#473 feat(seasonal): Lunar New Year redesign (#231) — awaiting human review
311 Issues closed from 2 users
Closed
#210 Build / typing hygiene notes: lotusDenoise closeBundle fs work, types/matrix drift vs the SDK, gradual as any cleanup
Closed
#453 [tracking] Settings audit: layout, readability and UX
Closed
#463 [settings] Search across all settings
Closed
#89 Client audit 2026-09 — tracking index
Closed
#281 Client audit 2026-10: tracking index
Closed
#458 [settings] "Export Messages Data" is an encryption key export: rename and move it
Closed
#460 [settings] Collapse the big picker grids (chat background, seasonal theme, avatar decoration)
Closed
#461 [settings] Privacy: move URL previews in, merge the two read-receipt switches
Closed
#462 [settings] Calls: fixed sub-groups and clearer titles
Closed
#459 [settings] Split General into pages people would look for
Closed
#455 [settings] One theme control instead of System Theme + a greyed-out Theme dropdown
Closed
#456 [settings] Copy pass: sentence case, grammar fixes, plain names
Closed
#457 [settings] Remove the "Block Messages" stub; hide options that can't work in this build
Closed
#114 [planning] Export / import my data (bookmarks, notes, settings, sections) — design session needed
Closed
#113 [planning] Session hygiene nudges — design session needed
Closed
#126 [planning] Landscape phone in a call: full-bleed call, hide sidebar/header
Closed
#121 [planning] Expected-device check on call join: warn when your usual mic/headphones are missing
Closed
#105 [research] Desktop: store the access token in the OS keychain + idle lock
Closed
#111 [research] Space notice / MOTD banner — pick the spec-compliant data source
Closed
#100 Process: no CODEOWNERS or required review — a single push to lotus deploys to production in ~11 minutes
Closed
#115 [decide] Pre-join connection check (RTT/jitter probe to LiveKit shown as signal bars)
Closed
#133 [decide] One-sentence "who can see this" line in room settings
Closed
#200 Inline media embeds: remaining providers (low priority)
Closed
#205 Room Widgets v1 follow-ups: capability-approval consent prompt, Jitsi/stickerpicker types, account-data widgets, per-widget popout
Closed
#253 Improve "Call was good" message after a call to be more detailed and less vague
Closed
#277 Call bar always shows 'Mute Screenshare Audio' (a speaker icon), even when nobody is sharing
Closed
#265 Phone (portrait) call: call controls wrap to 4 rows (~40% of the screen) and your own tile isn't shown
Closed
#278 Accessibility: axe-core findings across the main screens
Closed
#280 Tracking stripper removes Reddit context=, which changes what a comment permalink shows
Closed
#279 Copy nits: room soundboard text talks about a 'space', Push to Deafen help, a pinned-messages typo
Closed
#276 Desktop build number isn't shown anywhere, and the web version is a static string
Closed
#275 Schedule Message lets you pick a time beyond 24 h; the server rejects it with a raw technical error
Closed
#274 'Connecting…' strip stays about 30 s after the app is already usable
Closed
#272 Avatar Decoration settings: the preview is an invisible circle and never shows your own avatar
Closed
#273 Settings layout: grouped settings run together, and the Sync tile is squeezed on phones
Closed
#271 Settings → Calls: the Noise Suppression description renders at body size, larger than every other description
Closed
#270 Room Insights: the top 'Most Active Members' bar pushes its message count out of view
Closed
#269 Read-receipt avatars float at the end of the message text instead of the message's right edge
Closed
#268 Offline outbox: two open tabs overwrite each other's saved queue
Closed
#267 Share target: any website can POST into /share-target, and stashed shared files aren't cleared on logout
Closed
#266 Widget consents survive logout, and the protected-state list misses space and call state
Closed
#263 Room header: opening Threads or Gallery shifts the header icons, so a second click opens Widgets instead of closing the panel
Closed
#262 Room topic editor mangles URLs and aliases that contain _ or * (broken links for every client)
Closed
#261 Server ACL settings treat a missing allow_ip_literals as false, so the first save silently blocks IP-literal servers
Closed
#264 Phone: composer emoji/sticker board opens 31 px off the left edge of the screen
Closed
#260 ML noise-suppression failures are never shown: io.lotus.denoise_state is unhandled, and the old lotus-denoise-status listener is dead and accepts any window
Closed
#318 During a homeserver stall the call widget's delayed-event restarts pile up in the host (burst of 404/429 on recovery), and the host keeps showing "in call" after Element Call reports Connection lost
Closed
#291 Invalid HTML nesting in Settings: blocks inside the tile description's <p> (React warnings on every Settings page)
Closed
#330 Forwarding out of an encrypted room gives no warning: the text (and a re-uploaded plaintext attachment) becomes server-readable, and the original author's ID goes along
Closed
#283 Do Not Disturb overwrites your status message with "dnd", and the "dnd" stays after you switch back
Closed
#314 Opening a room silently marks every thread you don't follow as read, so the Threads panel's "Unread" filter never shows them
Closed
#329 "Private Note — Notes only visible to you" is stored in plaintext account data that homeserver admins can read
Closed
#310 Call-bar audio output switch can't select a specific device: the host's deviceIds mean nothing inside the call iframe
Closed
#323 Call PiP opens on top of the composer (covers Send and Emoji; on phones the whole message box), with no way to minimise it
Closed
#349 "On-device translation isn't available… use … the Lotus desktop app": the Linux and macOS desktop apps (WebKit) can't translate either, and they show this advice to people already in the app
Closed
#300 Status auto-clear only works on the device that set it, and only while that device is open
Closed
#294 LOTUS_FEATURES.md is missing ~55 shipped features
Closed
#290 Desktop-only settings are mixed into the Appearance section
Closed
#293 ML noise suppression can't be tested with npm start, and every call logs a lotusTransparent/lotusTheme warning
Closed
#292 Installed PWA is locked to portrait, and the "New Message" shortcut just opens the home page
Closed
#287 Translate silently does nothing when the language can't be detected, or the message is already in your language
Closed
#331 "Compress image before uploading" turns transparent WebP/GIF backgrounds black and animated GIF/WebP into a still JPEG
Closed
#311 Terms-consent prompt: every close (including "I've accepted — retry") snoozes it for 10 s, so a retry that fails again is silent
Closed
#332 "Remove Photo Metadata" doesn't cover emoji/sticker pack images, pack avatars or power-level badges, all of which are published to the whole room or space
Closed
#286 A link whose text names a different site still gets a genuine preview card for the site it pretends to be
Closed
#326 Any website can make its link render as a playable YouTube (or other provider) card: the embed is resolved from the page's own og:url
Closed
#334 Keyboard shortcuts dialog (?) lists 7 shortcuts and omits Ctrl+K, ↑ to edit, all composer formatting keys and your push-to-talk/deafen keys
Closed
#297 When a room admin turns off screen sharing, the sharer gets two contradictory toasts
Closed
#299 Replying from a browser notification doesn't re-check room encryption at send time, and posts with the newest session rather than the notification's account
Closed
#324 In-app message toasts only appear if the browser's notification permission is granted, so people who declined (or were never asked) get no in-app toasts
Closed
#333 "Mute for 1 hour" mutes the room on every device but only the device that set it ever unmutes it
Closed
#321 Policy list viewer double-lists rules a bot publishes under both the stable and legacy types (de-dup keys on the raw recommendation)
Closed
#307 Security nudge never shows while a dismissed Kuma announcement is still posted
Closed
#308 Status banner Details mangles announcement text: every >, #, _, *, ` is deleted ("#general" → "general", "<b>" → "<b")
Closed
#302 "Rejoin voice?" reads "in the call in Bob Builder" for DMs, and is offered for DM calls that already ended
Closed
#288 Message search lists an edited message once per version
Closed
#289 Sidebar room filter with no matches shows empty section headers and no "No rooms match" message
Closed
#304 Escape doesn't close the composer's emoji/sticker board in any browser (focus starts in its search field)
Closed
#301 "The call failed to load… try again" screen has no Try again button
Closed
#285 Room invite links and QR codes use matrix.to, which can't open Lotus Chat
Closed
#284 You can't vote on a poll you just created (until a reload): the vote targets the poll's local-echo id and throws
Closed
#322 Scheduled messages are only tracked in one browser's localStorage: other devices can't see or cancel them, and after logout they still send with no way to stop them
Closed
#313 Reject sends an MSC4310 decline that points at the wrong event: the caller keeps "Calling…" for 90 s, and the declined call is logged as "Missed call"
Closed
#317 A stalled homeserver goes unnoticed for up to 110 s: no strip, Kuma isn't asked, and sends just spin (the #124 outage scenario)
Closed
#259 Media Gallery / Activity Log make the room timeline drop loaded messages, and it continues after the panel is closed (regression of #163)
Closed
#316 Every call leaks ~11 MB: an 11th CallControl subscriber trips MaxListenersExceededWarning, and the logged warning keeps the whole Element Call document alive
Closed
#295 Starting a call in a voice room @room-pings every member when a moderator or admin starts it
Closed
#305 Reactions row flickers between "wrapped" and "one row + N" every frame when the chips almost fit, and the collapsed style wipes the row's top margin
Closed
#328 Calls in private group rooms: only admins can start or join. Members see "1 Live · Join" and then "You don't have permission to join!"
Closed
#315 Pressing Enter in the Poll, Schedule or Report dialogs closes them and throws away what you typed (the header ✕ is the form's default submit button)
Closed
#306 Delivery indicator gets stuck: your last message keeps "Sending..." (or "Queued" / "Failed to send") after the server has it
Closed
#327 Upgrading a room silently drops all Lotus room state (voice limit, audio-only/quality caps, soundboard) and its retention policy
Closed
#325 Quiet hours don't start (or end) while the app stays open: the window is only checked when the notifier happens to re-render
Closed
#296 The persistent encrypted-search opt-in survives logout, so the next account on the device starts with plaintext indexing switched on
Closed
#319 Logging out (manually or by remote sign-out) leaves the open composer's draft in localStorage: the pagehide flush rewrites it after the wipe
Closed
#320 Inter hasn't been used since May: CSS asks for 'InterVariable' but @fontsource-variable/inter 5 names it 'Inter Variable' (app renders in the system fallback font)
Closed
#298 A tiny m.room.retention value permanently deletes opted-in users' messages and hides the room's history for everyone (the 10-minute safety floor is never applied)
Closed
#303 Firefox: the app hangs on "Heating up" after login until the persistent-storage prompt is answered
Closed
#312 After a reload/restart, a call that already ended (or that you rejected) rings again and the DM shows "1 Live" + the call screen for minutes
Closed
#336 "Rename for me" names aren't used by the quick switcher (Ctrl+K), forward/share pickers, search results, inbox or notifications
Closed
#337 Animated chat backgrounds animate background-position, which repaints the whole chat area every frame (45–70% main-thread busy while idle in testing)
Closed
#335 Link-mismatch warning is bypassed by adding a word to the link text, or by using a shared hosting domain (pages.dev, github.io…)
Closed
#343 Collapsed long messages: Tab into a hidden link scrolls the message inside its box (top cut off, stays that way), "Read more" has no aria-expanded, and the fade leaves a band in bubble layout
Closed
#347 Logout leaves the call-volume list behind: lotus-per-user-volume (the people you adjusted, with their volumes) and a settings-sync key named after the previous user
Closed
#348 Settings sync carries "ENTER for Newline" between phone and desktop: turning it on for the phone keyboard makes the desktop need Ctrl+Enter to send
Closed
#282 Invisible, "Hide Online Status", Idle and DND don't stick: the next /sync sets you back to online
Closed
#340 One click on the composer's globe icon posts your exact location to the room: no preview or confirm, accuracy ignored, shown to 5 decimals
Closed
#338 "Remind me" fires as a 4-second in-app toast only (no OS notification, no sound) and then deletes the reminder, so a reminder that comes due while you're away is lost
Closed
#342 "Channel Full" counts devices, not people: one user on two devices (or a crashed tab) locks everyone else out, though the server would let them in
Closed
#339 Closing or reloading any Lotus tab/window erases your custom status for everyone: the pagehide presence write omits status_msg
Closed
#341 Giphy/Tenor link previews are a fixed ~400×200 box for every GIF: tall and square GIFs are cropped to their middle, small ones upscaled
Closed
#345 CI is red for every PR: npm audit fails on a new high advisory in source-map-js 1.2.1 (via sanitize-html → postcss); 1.2.2 fixes it
Closed
#309 Share target: any website can pre-fill the share page with its own text/files, and an unplaced share survives logout
Closed
#43 Element Call iframe is same-origin, so its sandbox is a no-op
Closed
#110 [needs human review] Key-backup health banner — explain, then decide
Closed
#123 [research] Verification reminder for your OWN unverified sessions
Closed
#124 [planning · sprint] Homeserver maintenance banner driven by the Uptime Kuma status page
Closed
#112 [research] Offline outbox — what happens today when a send fails or the client is offline
Closed
#248 Desktop: "Copy Lotus Link" copies a localhost address; public Lotus links not recognised in-app
Closed
#246 Polls: timeline rendering is hard to read (percentages, bars, indicators, layout)
Closed
#165 [deep dive] Threads: full UI/UX audit + "mark all threads read"
Closed
#217 [decide] Threads: opening a room marks every thread in it read — chip/list unread badges never survive a room visit
Closed
#164 [deep dive] Full-screen image/video viewer UI/UX audit
Closed
#239 [Seasonal · human approval required] Halloween: better design & features
Closed
#237 [Seasonal · human approval required] Autumn: better design & features
Closed
#106 [research] Search operators: from:, has:, in:, before:/after: — audit what exists first
Closed
#146 [research] Mic level meter in the call bar while unmuted — what exists today?
Closed
#107 [research] Composer: detect pasted code and offer a fenced code block
Closed
#214 Privacy: every page load contacts fonts.googleapis.com / fonts.gstatic.com for the VT323 font — self-host it
Closed
#228 When playing a youtube video, after pressing play the actual video player shrinks really small. Please audit all embed media playback
Closed
#229 http://localhost:44548/public/res/Lotus.png Image on the home of cinny-desktop in windows 11 client loads as alt text
Closed
#227 Quick statuses in General Settings not auto clearing after set interval
Closed
#119 Audio output quick-switch in the call bar (verify EC in-call menu first)
Closed
#125 Haptic tick on PTT press/release and on reactions (Android)
Closed
#129 [research] Paste/drop an image → land in the caption field so "here's the bug" is one motion
Closed
#108 Custom room sections in the sidebar via u.* room tags
Closed
#118 Auto-rejoin the voice room after a crash, update or restart
Closed
#120 Storage usage & clear (media cache, search index, crypto store) — keep it to one tile
Closed
#151 Reply quote shows a media thumbnail when replying to an image/video
Closed
#109 Strip EXIF/GPS metadata from images by default (currently only when compression is on)
Closed
#143 Per-call quality readout on hangup (low priority; UI must look native)
Closed
#155 PWA: register as an Android share target (Share → Lotus Chat)
Closed
#221 E2E: run the Playwright suite under WebKit as a Safari/iOS proxy
Closed
#222 a11y in CI: axe-core gate + accessibility-tree snapshots as the screen-reader proxy
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
338 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
Opened
#227 Quick statuses in General Settings not auto clearing after set interval
Opened
#228 When playing a youtube video, after pressing play the actual video player shrinks really small. Please audit all embed media playback
Opened
#229 http://localhost:44548/public/res/Lotus.png Image on the home of cinny-desktop in windows 11 client loads as alt text
Opened
#230 [Seasonal · human approval required] New Year: better design & features
Opened
#231 [Seasonal · human approval required] Lunar New Year: better design & features
Opened
#232 [Seasonal · human approval required] Valentine's Day: better design & features
Opened
#233 [Seasonal · human approval required] St Patrick's Day: better design & features
Opened
#234 [Seasonal · human approval required] April Fools' Day: better design & features
Opened
#235 [Seasonal · human approval required] Earth Day: better design & features
Opened
#236 [Seasonal · human approval required] Arcade: better design & features
Opened
#237 [Seasonal · human approval required] Autumn: better design & features
Opened
#238 [Seasonal · human approval required] Deep Space: better design & features
Opened
#239 [Seasonal · human approval required] Halloween: better design & features
Opened
#240 [Seasonal · human approval required] Christmas: better design & features
Opened
#246 Polls: timeline rendering is hard to read (percentages, bars, indicators, layout)
Opened
#248 Desktop: "Copy Lotus Link" copies a localhost address; public Lotus links not recognised in-app
Opened
#253 Improve "Call was good" message after a call to be more detailed and less vague
Opened
#259 Media Gallery / Activity Log make the room timeline drop loaded messages, and it continues after the panel is closed (regression of #163)
Opened
#260 ML noise-suppression failures are never shown: io.lotus.denoise_state is unhandled, and the old lotus-denoise-status listener is dead and accepts any window
Opened
#261 Server ACL settings treat a missing allow_ip_literals as false, so the first save silently blocks IP-literal servers
Opened
#262 Room topic editor mangles URLs and aliases that contain _ or * (broken links for every client)
Opened
#263 Room header: opening Threads or Gallery shifts the header icons, so a second click opens Widgets instead of closing the panel
Opened
#264 Phone: composer emoji/sticker board opens 31 px off the left edge of the screen
Opened
#265 Phone (portrait) call: call controls wrap to 4 rows (~40% of the screen) and your own tile isn't shown
Opened
#266 Widget consents survive logout, and the protected-state list misses space and call state
Opened
#267 Share target: any website can POST into /share-target, and stashed shared files aren't cleared on logout
Opened
#268 Offline outbox: two open tabs overwrite each other's saved queue
Opened
#269 Read-receipt avatars float at the end of the message text instead of the message's right edge
Opened
#270 Room Insights: the top 'Most Active Members' bar pushes its message count out of view
Opened
#271 Settings → Calls: the Noise Suppression description renders at body size, larger than every other description
Opened
#272 Avatar Decoration settings: the preview is an invisible circle and never shows your own avatar
Opened
#273 Settings layout: grouped settings run together, and the Sync tile is squeezed on phones
Opened
#274 'Connecting…' strip stays about 30 s after the app is already usable
Opened
#275 Schedule Message lets you pick a time beyond 24 h; the server rejects it with a raw technical error
Opened
#276 Desktop build number isn't shown anywhere, and the web version is a static string
Opened
#277 Call bar always shows 'Mute Screenshare Audio' (a speaker icon), even when nobody is sharing
Opened
#278 Accessibility: axe-core findings across the main screens
Opened
#279 Copy nits: room soundboard text talks about a 'space', Push to Deafen help, a pinned-messages typo
Opened
#280 Tracking stripper removes Reddit context=, which changes what a comment permalink shows
Opened
#281 Client audit 2026-10: tracking index
Opened
#282 Invisible, "Hide Online Status", Idle and DND don't stick: the next /sync sets you back to online
Opened
#283 Do Not Disturb overwrites your status message with "dnd", and the "dnd" stays after you switch back
Opened
#284 You can't vote on a poll you just created (until a reload): the vote targets the poll's local-echo id and throws
Opened
#285 Room invite links and QR codes use matrix.to, which can't open Lotus Chat
Opened
#286 A link whose text names a different site still gets a genuine preview card for the site it pretends to be
Opened
#287 Translate silently does nothing when the language can't be detected, or the message is already in your language
Opened
#288 Message search lists an edited message once per version
Opened
#289 Sidebar room filter with no matches shows empty section headers and no "No rooms match" message
Opened
#290 Desktop-only settings are mixed into the Appearance section
Opened
#291 Invalid HTML nesting in Settings: blocks inside the tile description's <p> (React warnings on every Settings page)
Opened
#292 Installed PWA is locked to portrait, and the "New Message" shortcut just opens the home page
Opened
#293 ML noise suppression can't be tested with npm start, and every call logs a lotusTransparent/lotusTheme warning
Opened
#294 LOTUS_FEATURES.md is missing ~55 shipped features
Opened
#295 Starting a call in a voice room @room-pings every member when a moderator or admin starts it
Opened
#296 The persistent encrypted-search opt-in survives logout, so the next account on the device starts with plaintext indexing switched on
Opened
#297 When a room admin turns off screen sharing, the sharer gets two contradictory toasts
Opened
#298 A tiny m.room.retention value permanently deletes opted-in users' messages and hides the room's history for everyone (the 10-minute safety floor is never applied)
Opened
#299 Replying from a browser notification doesn't re-check room encryption at send time, and posts with the newest session rather than the notification's account
Opened
#300 Status auto-clear only works on the device that set it, and only while that device is open
Opened
#301 "The call failed to load… try again" screen has no Try again button
Opened
#302 "Rejoin voice?" reads "in the call in Bob Builder" for DMs, and is offered for DM calls that already ended
Opened
#303 Firefox: the app hangs on "Heating up" after login until the persistent-storage prompt is answered
Opened
#304 Escape doesn't close the composer's emoji/sticker board in any browser (focus starts in its search field)
Opened
#305 Reactions row flickers between "wrapped" and "one row + N" every frame when the chips almost fit, and the collapsed style wipes the row's top margin
Opened
#306 Delivery indicator gets stuck: your last message keeps "Sending..." (or "Queued" / "Failed to send") after the server has it
Opened
#307 Security nudge never shows while a dismissed Kuma announcement is still posted
Opened
#308 Status banner Details mangles announcement text: every >, #, _, *, ` is deleted ("#general" → "general", "<b>" → "<b")
Opened
#309 Share target: any website can pre-fill the share page with its own text/files, and an unplaced share survives logout
Opened
#310 Call-bar audio output switch can't select a specific device: the host's deviceIds mean nothing inside the call iframe
Opened
#311 Terms-consent prompt: every close (including "I've accepted — retry") snoozes it for 10 s, so a retry that fails again is silent
Opened
#312 After a reload/restart, a call that already ended (or that you rejected) rings again and the DM shows "1 Live" + the call screen for minutes
Opened
#313 Reject sends an MSC4310 decline that points at the wrong event: the caller keeps "Calling…" for 90 s, and the declined call is logged as "Missed call"
Opened
#314 Opening a room silently marks every thread you don't follow as read, so the Threads panel's "Unread" filter never shows them
Opened
#315 Pressing Enter in the Poll, Schedule or Report dialogs closes them and throws away what you typed (the header ✕ is the form's default submit button)
Opened
#316 Every call leaks ~11 MB: an 11th CallControl subscriber trips MaxListenersExceededWarning, and the logged warning keeps the whole Element Call document alive
Opened
#317 A stalled homeserver goes unnoticed for up to 110 s: no strip, Kuma isn't asked, and sends just spin (the #124 outage scenario)
Opened
#318 During a homeserver stall the call widget's delayed-event restarts pile up in the host (burst of 404/429 on recovery), and the host keeps showing "in call" after Element Call reports Connection lost
Opened
#319 Logging out (manually or by remote sign-out) leaves the open composer's draft in localStorage: the pagehide flush rewrites it after the wipe
Opened
#320 Inter hasn't been used since May: CSS asks for 'InterVariable' but @fontsource-variable/inter 5 names it 'Inter Variable' (app renders in the system fallback font)
Opened
#321 Policy list viewer double-lists rules a bot publishes under both the stable and legacy types (de-dup keys on the raw recommendation)
Opened
#322 Scheduled messages are only tracked in one browser's localStorage: other devices can't see or cancel them, and after logout they still send with no way to stop them
Opened
#323 Call PiP opens on top of the composer (covers Send and Emoji; on phones the whole message box), with no way to minimise it
Opened
#324 In-app message toasts only appear if the browser's notification permission is granted, so people who declined (or were never asked) get no in-app toasts
Opened
#325 Quiet hours don't start (or end) while the app stays open: the window is only checked when the notifier happens to re-render
Opened
#326 Any website can make its link render as a playable YouTube (or other provider) card: the embed is resolved from the page's own og:url
Opened
#327 Upgrading a room silently drops all Lotus room state (voice limit, audio-only/quality caps, soundboard) and its retention policy
Opened
#328 Calls in private group rooms: only admins can start or join. Members see "1 Live · Join" and then "You don't have permission to join!"
Opened
#329 "Private Note — Notes only visible to you" is stored in plaintext account data that homeserver admins can read
Opened
#330 Forwarding out of an encrypted room gives no warning: the text (and a re-uploaded plaintext attachment) becomes server-readable, and the original author's ID goes along
Opened
#331 "Compress image before uploading" turns transparent WebP/GIF backgrounds black and animated GIF/WebP into a still JPEG
Opened
#332 "Remove Photo Metadata" doesn't cover emoji/sticker pack images, pack avatars or power-level badges, all of which are published to the whole room or space
Opened
#333 "Mute for 1 hour" mutes the room on every device but only the device that set it ever unmutes it
Opened
#334 Keyboard shortcuts dialog (?) lists 7 shortcuts and omits Ctrl+K, ↑ to edit, all composer formatting keys and your push-to-talk/deafen keys
Opened
#335 Link-mismatch warning is bypassed by adding a word to the link text, or by using a shared hosting domain (pages.dev, github.io…)
Opened
#336 "Rename for me" names aren't used by the quick switcher (Ctrl+K), forward/share pickers, search results, inbox or notifications
Opened
#337 Animated chat backgrounds animate background-position, which repaints the whole chat area every frame (45–70% main-thread busy while idle in testing)
Opened
#338 "Remind me" fires as a 4-second in-app toast only (no OS notification, no sound) and then deletes the reminder, so a reminder that comes due while you're away is lost
Opened
#339 Closing or reloading any Lotus tab/window erases your custom status for everyone: the pagehide presence write omits status_msg
Opened
#340 One click on the composer's globe icon posts your exact location to the room: no preview or confirm, accuracy ignored, shown to 5 decimals
Opened
#341 Giphy/Tenor link previews are a fixed ~400×200 box for every GIF: tall and square GIFs are cropped to their middle, small ones upscaled
Opened
#342 "Channel Full" counts devices, not people: one user on two devices (or a crashed tab) locks everyone else out, though the server would let them in
Opened
#343 Collapsed long messages: Tab into a hidden link scrolls the message inside its box (top cut off, stays that way), "Read more" has no aria-expanded, and the fade leaves a band in bubble layout
Opened
#345 CI is red for every PR: npm audit fails on a new high advisory in source-map-js 1.2.1 (via sanitize-html → postcss); 1.2.2 fixes it
Opened
#347 Logout leaves the call-volume list behind: lotus-per-user-volume (the people you adjusted, with their volumes) and a settings-sync key named after the previous user
Opened
#348 Settings sync carries "ENTER for Newline" between phone and desktop: turning it on for the phone keyboard makes the desktop need Ctrl+Enter to send
Opened
#349 "On-device translation isn't available… use … the Lotus desktop app": the Linux and macOS desktop apps (WebKit) can't translate either, and they show this advice to people already in the app
Opened
#453 [tracking] Settings audit: layout, readability and UX
Opened
#455 [settings] One theme control instead of System Theme + a greyed-out Theme dropdown
Opened
#456 [settings] Copy pass: sentence case, grammar fixes, plain names
Opened
#457 [settings] Remove the "Block Messages" stub; hide options that can't work in this build
Opened
#458 [settings] "Export Messages Data" is an encryption key export: rename and move it
Opened
#459 [settings] Split General into pages people would look for
Opened
#460 [settings] Collapse the big picker grids (chat background, seasonal theme, avatar decoration)
Opened
#461 [settings] Privacy: move URL previews in, merge the two read-receipt switches
Opened
#462 [settings] Calls: fixed sub-groups and clearer titles
Opened
#463 [settings] Search across all settings