2026-10-05 - 2026-11-05
Overview
126 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)
3 Pull requests proposed by 1 user
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
112 Issues closed from 1 user
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
42 Issues created by 0 users
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
6 Unresolved Conversations
Open
#231
[Seasonal · human approval required] Lunar New Year: better design & features
Open
#230
[Seasonal · human approval required] New Year: better design & features
Open
#240
[Seasonal · human approval required] Christmas: better design & features
Open
#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
Open
#199
Mobile: touch discoverability for message actions / quick reactions (hover-gated; iOS long-press unreliable) — design decision needed
Open
#166
Mobile: long-press a message opens a bottom sheet of actions (replaces the hover bar)