# Lotus Chat β€” Work Backlog **Repo:** `lotus` branch at `https://code.lotusguild.org/LotusGuild/cinny` **Deploy:** push to `lotus` β†’ CI β†’ auto-deploy to `chat.lotusguild.org` (~11 min) --- ## πŸ—οΈ Infrastructure & Maintenance - [x] **Upgrade Synapse to v1.155.0** βœ… Done 2026-06-18 - **Context:** 1.155.0 is the last version supporting Debian 12 Bookworm. LXC 151 is already on Debian 13 Trixie β€” OS migration was completed prior to this upgrade. - **What changed (1.154β†’1.155):** No breaking changes, no config changes, no DB migrations. Bugfixes: to-device EDU size limiting, restricted room joins, sliding sync subscription response timing. Rust port of more internal classes (perf only). - **MSC4452** (Preview URL capabilities) shipped in 1.154 β€” opt-in via `msc4452_enabled`, not enabled. --- ## πŸ“± Quick Feature Additions - [x] **Full-Screen Camera Broadcasts** ⚠️ UNTESTED β€” verify in a real call - **Context:** Element Call currently supports full-screening screenshares. We need to parity this functionality for camera broadcasts. - **Goal:** Users should be able to toggle any camera feed to full-screen mode, similar to the existing screenshare full-screen implementation. - **Implemented 2026-06-18:** 1. **Fullscreen button always shows** β€” removed `screenshare &&` gate in `CallControls.tsx`. The fullscreen button is now available in camera-only calls, not just during screenshares. 2. **Per-participant camera focus** β€” `CallControl.focusCameraParticipant(userId)` added. Finds the participant's video tile via `[data-testid="videoTile"]` / `[data-video-fit]` + `[aria-label="${userId}"]`, enables spotlight mode, then clicks the tile to focus them. 3. **MemberGlance "Focus camera" action** β€” clicking a participant avatar in the call status bar now opens a mini popup with "Focus camera" (triggers focusCameraParticipant) and "View profile" options, rather than immediately opening the profile. 4. **PiP fullscreen button** β€” a small fullscreen toggle button (β›Ά/⊑) is shown in the PiP overlay top-right, allowing users to go fullscreen directly from PiP mode without navigating back to the call room. --- ## ⚠️ TDS DESIGN LAW β€” READ BEFORE TOUCHING ANY UI > **ALL Lotus Terminal Design System (TDS) styling β€” colors, animations, glows, borders, fonts, spacing β€” MUST come exclusively from `/root/code/web_template/base.css` CSS variables.** > Do NOT hardcode hex values. Do NOT invent new variable names. Do NOT deviate from the design tokens defined in that file. > The canonical variable reference: `--lt-accent-orange`, `--lt-accent-cyan`, `--lt-accent-green`, `--lt-glow-orange`, `--lt-box-glow-*`, `--lt-border-color`, etc. > Reference implementation for code patterns: `/root/code/tinker_tickets/` (markdown.js, base.js, ticket.css) > This rule applies to EVERY task in this file without exception. --- Completed features are documented in [LOTUS_FEATURES.md](./LOTUS_FEATURES.md). --- Legend: - `[AUDIT REQUIRED]` β€” at least one assumption needs code/server verification before implementing - `[SERVER CHECK]` β€” depends on a Synapse feature or MSC; verify on `matrix.lotusguild.org` - `[LOW PRIORITY]` β€” implement after all higher-priority items - `[EXTREME COMPLEXITY]` β€” multi-sprint, plan separately before touching - `[BLOCKED]` β€” cannot build until a server upgrade, upstream MSC, or dependency resolves - `[IMPROVE]` β€” feature exists in upstream Cinny; this task enhances it for Lotus Chat Status: `[ ]` pending Β· `[~]` in progress Β· `[x]` completed --- ## Server Capabilities (as of June 2026) - **Homeserver:** `matrix.lotusguild.org` - **Synapse version:** `1.155.0` (2026-06-18) β€” fully up to date; last version for Debian 12 (LXC 151 already on Debian 13 Trixie) - **Matrix spec:** up to `v1.12` formally; newer MSC features via `unstable_features` ### Confirmed facts | Finding | Impact | | --------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------ | | **MSC flags ON:** `msc4140` Β· `msc3771` Β· `msc3440.stable` Β· `msc4133.stable` Β· `simplified_msc3575` Β· `msc4222` Β· `msc3266` Β· `msc3401_matrix_rtc` | All safe to use now | | **MSC flags OFF:** `msc4306` (thread subscriptions) Β· `msc3882` Β· `msc3912` Β· `msc4155` | These features are BLOCKED | | **MSC3266** room summary: flag `msc3266_enabled: true` set but `GET /v1/rooms/{id}/summary` still returns 404 (M_UNRECOGNIZED) | Room Preview BLOCKED β€” endpoint not implemented in Synapse 1.155 | | **MSC3892** relation redaction: not in flags | Reaction Redaction feature BLOCKED | | **MSC4260** report user: `POST /_matrix/client/v3/users/{userId}/report` returns **200** βœ… | **Report User UNBLOCKED** β€” endpoint live since Synapse 1.133; ready to build | | **MSC4151** report room: HTTP 405 on GET = endpoint exists (POST only) | Report Room live βœ… | | `folds AvatarImage` does NOT accept children | Add frame/overlay inside `UserAvatar.tsx` itself β€” optional `frameName` prop | | No in-app toast system exists (was) | Built `ToastProvider` + Jotai queue; at `App.tsx:65` | | `useUnverifiedDeviceCount()` hook exists | `src/app/hooks/useDeviceVerificationStatus.ts:65-106` | | Voice player: `AudioContent.tsx:44-223` | Playback rate on hidden `