From 3a58d4f94d04b7d12348b20999cb37907b963b9a Mon Sep 17 00:00:00 2001 From: Jared Vititoe Date: Mon, 1 Jun 2026 13:34:34 -0400 Subject: [PATCH] =?UTF-8?q?docs:=20comprehensive=20audit=20pass=20?= =?UTF-8?q?=E2=80=94=20all=205=20agent=20findings=20integrated=20into=20TO?= =?UTF-8?q?DO?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Key findings: - Jump to Date (task #7): DELETED — JumpToTime.tsx fully implemented upstream, wired in RoomViewHeader.tsx:215 - useUnverifiedDeviceCount() hook EXISTS (useDeviceVerificationStatus.ts:65) — task #65 is trivial - useCallMembersChange() hook (useCall.ts:37-52) handles join/leave sounds via MatrixRTCSessionEvent.MembershipsChanged — correct approach for #89 - MessageQuickReactions already in hover toolbar (Message.tsx:146-184) — #92 simpler than expected - knockSupported() utility exists (matrix.ts:376) — #58 only needs RoomIntro button - StateEventEditor in DevTools can already edit m.room.server_acl — #69 is a UX wrapper - getMatrixToRoom() in matrix-to.ts already generates invite URLs — #24 just needs QR - Glassmorphism: sidebar container safe for backdrop-filter (translateX only on items) - Animated backgrounds: must use ::before pseudo-element, not backgroundImage - matrix-js-sdk has no arbitrary profile field setters — #62 needs raw HTTP - Toast system: build from scratch, insert at App.tsx:65 after OverlayContainerProvider - JetBrains Mono already loaded via Google Fonts CDN in index.html:33 - MSC4151 report room endpoint confirmed live (405 on GET = POST-only endpoint exists) - /.well-known/matrix/support not configured — needs server file creation + client reads Full file reference table added with 30+ key file paths for all planned features. Corrected 5 previously wrong architecture assumptions. Co-Authored-By: Claude Sonnet 4.6 --- LOTUS_TODO.md | 87 ++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 69 insertions(+), 18 deletions(-) diff --git a/LOTUS_TODO.md b/LOTUS_TODO.md index 150868a4f..681241a78 100644 --- a/LOTUS_TODO.md +++ b/LOTUS_TODO.md @@ -62,26 +62,77 @@ Quick Switcher, Sidebar filter, Favorite rooms, Invite link generator, Edit hist Export history, Room preview before joining, Suggested rooms display, Server notices styling, DM last-message preview, Media gallery, Knock-to-join full UX -### Code Architecture Facts (relevant to implementation) +### Code Architecture Facts — Full Audit Results + +#### Corrected facts (previous version had errors) +| Old assumption | Correct finding | +|---|---| +| ~~Join/leave sounds need m.call.member state events~~ | **Use `useCallMembersChange()` hook** at `src/app/hooks/useCall.ts:37-52` — subscribes to `MatrixRTCSessionEvent.MembershipsChanged`, receives old/new membership arrays | +| ~~Glassmorphism needs parent wrapper (translateX blocks filter)~~ | **SAFE to apply directly to sidebar container** — `translateX` only on `SidebarItem` hover, not the sidebar container. Apply backdrop-filter to `Sidebar.css.ts:6-17` | +| ~~Avatar frames must wrap externally~~ | **Modify `UserAvatar` internally** — add optional `frameName?: string` prop; renders overlay inside component. Avoids 3 different wrapper implementations | +| ~~JetBrains Mono not bundled~~ | **Already loaded via Google Fonts CDN** in `index.html:33-35`. Other fonts: use `@fontsource` npm packages | +| ~~Animated backgrounds: add to backgroundImage~~ | **backgroundImage can't have @keyframes** — use CSS `::before` pseudo-element on `` component with `position:absolute, inset:0, z-index:-1` | + +#### Confirmed facts | Finding | Impact | |---|---| -| `folds AvatarImage` does NOT accept children | Avatar overlays/frames must wrap the Avatar component externally, not nest inside it | -| Sidebar `SidebarItem` has `translateX` on hover | CSS `backdrop-filter` won't work on sidebar items directly — apply to parent wrapper instead | -| Element Call bridge has NO join/leave participant events | Join/leave sounds (#89) must use `m.call.member` Matrix room state events instead | -| Element Call bridge has NO audio level events | Speaking indicator uses CSS polling of EC iframe DOM — no direct event bridge | -| No in-app toast system exists anywhere | Toast redesign (#80) must build a full `ToastProvider` + queue system from scratch | -| Voice message player: `AudioContent.tsx:44-223` | Speed control (#8): add `playbackRate` on the hidden `