Files
cinny/LOTUS_BUGS.md
T
jared 170d22eebb
CI / Build & Quality Checks (push) Successful in 10m39s
Trigger Desktop Build / trigger (push) Failing after 6s
docs: update LOTUS_BUGS.md to reflect all recently fixed items
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-10 00:05:25 -04:00

96 lines
4.4 KiB
Markdown

# Lotus Chat — Bug Report & Technical Audit
**Date:** June 2026
This document tracks identified bugs, edge cases, and architectural discrepancies.
---
## ✅ Resolved Issues (Recently Fixed)
* **GIF Sending Bypasses E2EE**: Fixed in `RoomInput.tsx`.
* **Scheduled Messages Bypass E2EE**: Fixed in `scheduledMessages.ts`.
* **Drag-and-Drop Overlay Persistence**: Fixed in `useFileDrop.ts`.
* **Stale Member List in Verification Banner**: Fixed in `useDeviceVerificationStatus.ts`.
* **Incomplete Python Comment Highlighting**: Fixed in `syntaxHighlight.ts`.
* **Search Button Hidden in E2EE Rooms**: Fixed in `RoomViewHeader.tsx`.
* **TDS Design Law Violations (Hardcoded Hex)**: Fixed in `GifPicker.tsx` and `VoiceMessageRecorder.tsx`.
* **Recent Emoji Sort Order**: Fixed in `recent-emoji.ts` (recency order, not frequency).
* **Encrypted Search Misses Historic Events**: Fixed in `useLocalMessageSearch.ts`.
* **Presence Updater Base URL Hack**: Fixed in `usePresenceUpdater.ts`.
* **Presence Badge Accessibility**: Fixed in `Presence.tsx` (`aria-label` on badge).
---
## 🛡️ Critical Security & Logic
### 1. Edit History Broken for E2EE
**File:** `src/app/features/room/message/EditHistoryModal.tsx`
**Status:** **OPEN**
* **Issue:** The modal fetches edit history via raw `fetch`. The returned events are not decrypted.
* **Impact:** In encrypted rooms, the edit history shows ciphertext or "(no text)" for all previous versions.
* **Recommended Fix:** After fetching raw events, check if they are encrypted. Use `mx.decryptEventIfNeeded(event)` for each event in the chunk before rendering.
### 2. Presence Updater Wipes Custom Status
**File:** `src/app/hooks/usePresenceUpdater.ts`
**Status:** **OPEN**
* **Issue:** `setOnline` and `setUnavailable` still send `status_msg: ''`.
* **Impact:** Custom status messages are wiped when the user goes idle/active.
* **Recommended Fix:** Remove `status_msg` from the `setPresence` payload in the updater hook.
### 3. Service Worker Ephemeral Sessions
**File:** `src/sw.ts`
**Status:** **OPEN**
* **Issue:** Access tokens are stored in an in-memory `sessions` Map within the SW.
* **Impact:** Closing all app tabs wipes the sessions. Background tasks (like future push notification handling or media pre-fetching) will fail.
* **Recommended Fix:** Persist the session info (accessToken/baseUrl) in IndexedDB within the Service Worker so it survives app restarts.
---
## 📱 PWA & Mobile Issues
### 1. No PWA Precaching (Offline Mode Broken)
**File:** `src/sw.ts`, `vite.config.js`
**Status:** **OPEN**
* **Issue:** The Service Worker is missing the `self.__WB_MANIFEST` injection point and `precacheAndRoute` call.
* **Impact:** The app does not work offline and fails PWA installation requirements in most browsers.
* **Recommended Fix:** Add `precacheAndRoute(self.__WB_MANIFEST)` to `sw.ts` and ensure `vite.config.js` has a valid `injectionPoint`.
### 2. PiP Resize Impossible on Mobile
**File:** `src/app/components/CallEmbedProvider.tsx`
**Status:** **OPEN**
* **Issue:** Resizing the PiP window uses `onMouseDown` handlers which do not trigger on touch devices.
* **Impact:** Mobile users cannot resize the PiP window.
* **Recommended Fix:** Implement `onTouchStart` handlers for the resize corners, mapping touch coordinates to the same resize logic.
### 3. Double Background Animation (GPU Waste)
**File:** `src/app/pages/client/SidebarNav.tsx`, `src/app/features/room/RoomView.tsx`
**Status:** **OPEN**
* **Issue:** When Glassmorphism is enabled, the chat background is mirrored to `document.body` while the `RoomView` also renders it.
* **Impact:** Two identical animations (e.g., Digital Rain) run simultaneously, doubling GPU usage on mobile.
* **Recommended Fix:** When Glassmorphism is active, make the `RoomView` background transparent and rely on the `document.body` background.
### 4. Manifest Shortcut Icon 404
**File:** `public/manifest.json`
**Status:** **OPEN**
* **Issue:** The shortcut icon path is `res/android/...` but the file is copied to `public/android/...`.
* **Recommended Fix:** Change the path to `./public/android/android-chrome-96x96.png` in `manifest.json`.
---
## 🎨 UI/UX Consistency
### 1. Night Light Overlay Coverage
**File:** `src/app/pages/App.tsx`
**Status:** **OPEN**
* **Issue:** Overlay is inside `#root`, bypasses `#portalContainer` (modals/tooltips).
* **Recommended Fix:** Move to end of `document.body`.