diff --git a/LOTUS_BUGS.md b/LOTUS_BUGS.md index 01d3acf56..d1efbd961 100644 --- a/LOTUS_BUGS.md +++ b/LOTUS_BUGS.md @@ -15,24 +15,45 @@ step-by-step checks in [`LOTUS_TESTING.md`](./LOTUS_TESTING.md). Implemented and gate-green; confirm each per `LOTUS_TESTING.md`, then delete the row. -| ID | Item | File / area | Test | -| :--- | :------------------------------------------------------- | :--------------------------------------------------- | :---- | -| #1 | Camera focus during screenshare ("Focus camera" menu) | `CallControl.ts`, `MemberGlance.tsx` | A5 | -| #2 | Chat-background animation flicker (`contain:paint`) | `lotus/chatBackground.ts` | F1 | -| #3 | Avatar decorations on call tiles | `call/CallMemberCard.tsx` | A6 | -| #4 | DM/group ringtone selection + in-call banner | `CallEmbedProvider.tsx`, `ringtones.ts` | A1–A4 | -| #6 | Background vs. seasonal theme mutual exclusion | `state/settings.ts`, `General.tsx` | F2 | -| #7 | Composer toolbar touch targets (≥44px) | `room/RoomInput.tsx` | E1 | -| #8 | Room Settings horizontal overflow (mobile) | `components/page/style.css.ts` | E2 | -| #9 | Modal fullscreen on mobile (`useModalStyle`) | 22+ modal files | E3 | -| #10 | Composer not hidden by keyboard (`100dvh`) | `src/index.css` | E4 | -| #12 | PiP mute badge attribution (you vs. all-muted) | `CallEmbedProvider.tsx` | G1 | -| N96 | Call-recovery overlay single "Back" button | `call/CallView.tsx` | A7 | -| N95 | AFK-monitor mic released on mute (OS indicator clears) | `hooks/useAfkAutoMute.ts` | L1 | -| N108 | Maskable PWA icons (Android adaptive) | `public/manifest.json` + `res/android/maskable-*` | L2 | -| EC | EC iframe load watchdog + self-heal + recovery UI | `plugins/call/CallEmbed.ts`, `CallView.tsx` | A7 | -| Gal | MediaGallery lazy-decrypt (true virtualization deferred) | `room/MediaGallery.tsx` | H1 | -| a11y | aria-labels: edit-history / reaction / thread / reply | `message/*` (`FallbackContent`, `Reaction`, `Reply`) | I | +| ID | Item | File / area | Test | +| :--- | :---------------------------------------------------------------------- | :--------------------------------------------------- | :------- | +| #2 | Chat-background animation flicker (`contain:paint`) | `lotus/chatBackground.ts` | F1 | +| #4 | Ringtone re-fixes: classic loudness + caller decline notice (A2 ✓ live) | `CallEmbedProvider.tsx`, `ringtones.ts` | A1,A3,A4 | +| #6 | Background vs. seasonal theme mutual exclusion | `state/settings.ts`, `General.tsx` | F2 | +| #7 | Composer toolbar touch targets (≥44px) | `room/RoomInput.tsx` | E1 | +| #8 | Room Settings horizontal overflow (mobile) | `components/page/style.css.ts` | E2 | +| #9 | Modal fullscreen on mobile (`useModalStyle`) | 22+ modal files | E3 | +| #10 | Composer not hidden by keyboard (`100dvh`) | `src/index.css` | E4 | +| #12 | PiP "All muted" badge re-fixed (was firing on any single mute) | `hooks/useCallSpeakers.ts` | G1 | +| N96 | Call-recovery overlay single "Back" button | `call/CallView.tsx` | A7 | +| N95 | AFK-monitor mic released on mute (OS indicator clears) | `hooks/useAfkAutoMute.ts` | L1 | +| N108 | Maskable PWA icons (Android adaptive) | `public/manifest.json` + `res/android/maskable-*` | L2 | +| EC | EC iframe load watchdog + self-heal + recovery UI | `plugins/call/CallEmbed.ts`, `CallView.tsx` | A7 | +| Gal | MediaGallery lazy-decrypt (true virtualization deferred) | `room/MediaGallery.tsx` | H1 | +| a11y | aria-labels: edit-history / reaction / thread / reply | `message/*` (`FallbackContent`, `Reaction`, `Reply`) | I | + +**Verified working in live testing (2026-06):** A2, B1–B4, C1, C3, D (mic/camera/deafen/screenshare/fullscreen/more-menu/PiP). Denoise quality in D is still poor — tracked under the denoise project, not a regression. + +--- + +## 🧩 Known Element Call iframe limitations (not fixable from our side) + +The in-call participant grid is rendered **inside EC's separate-origin iframe**, +which we can style/place around but cannot inject UI into. Consequences from +testing: + +- **A5 — "Focus camera":** EC already supports native tile-pinning (click a video + tile). Our bottom-bar "Focus camera" is a programmatic wrapper that clicks that + tile; it can't live inside EC's UI. During a screenshare EC spotlights the + shared screen and a camera pin may not override it. _Decision: keep the + shortcut, revisit with the larger call-UI/EC work._ +- **A6 — avatar decorations in-call:** decorations render on **our** pre-join + lobby roster (`CallMemberCard`) but cannot be drawn on EC's in-call video + tiles. Working as designed given the iframe boundary. +- **A7 — mic dead after EC's "Reconnect":** the mid-call "Connection lost / + Reconnect" screen is **EC's own** (our load watchdog only covers an initial + hung load). After EC reconnects, the mic isn't re-published through our denoise + `getUserMedia` shim until a clean End+rejoin. Tied to the denoise rework. ---