46567555e1
ESLint errors: - usePresenceUpdater: remove redundant `const userId` inside handlePageHide that shadowed the outer declaration (no-shadow) - RoomViewHeader: prefix unused encryptedRoom with _ (no-unused-vars) Prettier: reformat 14 files to match project style Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
3.7 KiB
3.7 KiB
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.tsxandVoiceMessageRecorder.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-labelon badge). - Presence Updater Wipes Custom Status: Fixed in
usePresenceUpdater.ts(removedstatus_msg: ''). - Manifest Main Icon Paths 404: Fixed in
public/manifest.json(./public/android/→./res/android/). Shortcut icon was already correct.
🛡️ 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. Service Worker Ephemeral Sessions
File: src/sw.ts
Status: OPEN
- Issue: Access tokens are stored in an in-memory
sessionsMap 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_MANIFESTinjection point andprecacheAndRoutecall. - Impact: The app does not work offline and fails PWA installation requirements in most browsers.
- Recommended Fix: Add
precacheAndRoute(self.__WB_MANIFEST)tosw.tsand ensurevite.config.jshas a validinjectionPoint.
2. PiP Resize Impossible on Mobile
File: src/app/components/CallEmbedProvider.tsx
Status: OPEN
- Issue: Resizing the PiP window uses
onMouseDownhandlers which do not trigger on touch devices. - Impact: Mobile users cannot resize the PiP window.
- Recommended Fix: Implement
onTouchStarthandlers 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.bodywhile theRoomViewalso 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
RoomViewbackground transparent and rely on thedocument.bodybackground.