docs: add blocked features section, upstream improvements, TDS design law
CI / Build & Quality Checks (push) Failing after 5m43s

- Blocked section: MSC3892 (reaction redaction), MSC3266 (room preview),
  MSC4306 (thread subscriptions), MSC4260 (report user) — all noted with
  unblock conditions and next steps
- 5 new [IMPROVE] tasks for upstream features: Jump to Latest (#104),
  spoiler transition (#105), report category (#106), speaking ring (#107),
  typing dots TDS (#108)
- TDS design law banner added at top of file and repeated in Implementation Notes
- Pinned messages count badge confirmed upstream (no action needed)
- Audits 1, 2, 4 marked complete; audit 3 (profile banner) remains open
- Upstream features table updated with improvement task cross-references

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-01 13:21:39 -04:00
parent ee17f6257e
commit c9a3edc142
+75 -30
View File
@@ -7,13 +7,25 @@
This file is the single source of truth for all planned, in-progress, and backlog features.
Update it as features are completed or reprioritized.
---
## ⚠️ 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.
---
Legend:
- `[AUDIT REQUIRED]` — at least one assumption in the description needs code/server verification before implementing
- `[UPSTREAM CHECK]`may already be in upstream Cinny mainline; confirm before building
- `[SERVER CHECK]` — depends on a Synapse feature or MSC that may not be enabled on `matrix.lotusguild.org`
- `[LOW PRIORITY]` — agreed to add but deprioritized; implement after everything else
- `[EXTREME COMPLEXITY]` — multi-sprint, architectural; plan separately before touching
- `[BLOCKED]` — cannot implement until a dependency (server upgrade, upstream MSC, other task) is resolved
- `[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
@@ -32,16 +44,18 @@ Status: `[ ]` pending · `[~]` in progress · `[x]` completed
- **MSC4260** (report user, v1.14): server at v1.12 formally — NOT available as spec endpoint; **however** report user already exists upstream in Cinny (message reporting via `reportEvent`)
- **MSC4151** (report room, v1.12): merged at exactly v1.12 — should be available ✅
### Upstream Cinny Features Confirmed (do NOT add to our codebase)
| Feature | Location in upstream |
|---|---|
| "Jump to Latest" / Back to bottom button | `RoomTimeline.tsx:2180-2192` |
| Mark rooms as read (per section) | `Home.tsx:73-102`, `DirectTab.tsx:29-61` |
| Room upgrade / tombstone banner | `RoomTombstone.tsx`, `RoomUpgrade.tsx` |
| Visual speaking indicator | `useCallSpeakers.ts:8-60`, `MemberSpeaking.tsx:1-78` |
| Image + video spoilers (blur/reveal) | `ImageContent.tsx`, `VideoContent.tsx` — CSS blur(44px), click to reveal |
| Report message (per event) | `Message.tsx:588-709``mx.reportEvent()` |
| Drag-and-drop file upload | `useFileDrop.ts` — works but has overlay dismiss bug |
### Upstream Cinny Features Confirmed (exist in upstream — only improve, don't re-implement)
| Feature | Location in upstream | Lotus improvement task |
|---|---|---|
| "Jump to Latest" button | `RoomTimeline.tsx:2180-2192` | #104 — add unread count + animation |
| Mark rooms as read (per section) | `Home.tsx:73-102`, `DirectTab.tsx:29-61` | None needed |
| Room upgrade / tombstone banner | `RoomTombstone.tsx`, `RoomUpgrade.tsx` | None needed |
| Visual speaking indicator | `useCallSpeakers.ts:8-60`, `MemberSpeaking.tsx:1-78` | #107 — TDS animated ring |
| Image + video spoilers (blur/reveal) | `ImageContent.tsx`, `VideoContent.tsx` | #105 — smooth CSS transition |
| Report message per event | `Message.tsx:588-709``mx.reportEvent()` | #106 — add category selector |
| Drag-and-drop file upload | `useFileDrop.ts` — works but overlay bug | #73 — fix overlay dismiss |
| Typing indicator (animated dots) | `TypingIndicator.tsx`, `TypingIndicator.css.ts` | #108 — TDS orange dots |
| Pinned messages count badge | Confirmed in upstream header icon | None needed |
### Upstream Cinny Features Confirmed MISSING (we should build these)
Quick Switcher, Sidebar filter, Favorite rooms, Invite link generator, Edit history modal,
@@ -980,31 +994,62 @@ All toggleable manually in Settings → Appearance regardless of date. Respects
---
## BLOCKED FEATURES (waiting on server/MSC support)
These features are confirmed desirable but cannot be built until the listed dependency is resolved.
Check back after each Synapse upgrade — re-run `/matrix/client/versions` and `unstable_features` to see if they've become available.
### [BLOCKED] · Reaction / Relation Redaction (MSC3892)
**Blocked by:** `org.matrix.msc3892` = false on `matrix.lotusguild.org`
**What it would do:** Cleanly remove a reaction without redacting the parent message.
**Current behavior:** Full event redaction — acceptable fallback, no user-facing issue.
**Action when unblocked:** Find `onReactionToggle` redaction call site; swap in MSC3892 endpoint with fallback.
### [BLOCKED] · Room Preview Before Joining (MSC3266)
**Blocked by:** `GET /v1/rooms/{id}/summary` returns 404 — endpoint not available on this server
**What it would do:** Show room name, topic, avatar, member count before joining.
**Action when unblocked:** Build pre-join preview card; trigger on unjoined room navigation.
### [BLOCKED] · Thread Subscriptions (MSC4306)
**Blocked by:** `org.matrix.msc4306` = false on `matrix.lotusguild.org`
**What it would do:** Follow a thread without posting; get notifications for replies.
**Action when unblocked:** Add "Follow thread" button in the thread panel header (depends on #11 Thread Panel).
### [BLOCKED] · Report User (MSC4260)
**Blocked by:** Server declares only spec v1.12; MSC4260 merged in v1.14 — endpoint may not exist
**What it would do:** Report a specific user to homeserver admins (separate from reporting a message).
**Note:** Report Message already exists in upstream Cinny. This would add Report User to the profile panel.
**Action when unblocked:** Test `POST /_matrix/client/v3/users/{userId}/report`; if 200, add button to user profile.
---
## AUDITS PENDING
Tasks that require investigation before any implementation:
### [x] Audit-1 · Suggested rooms in Space Lobby — CONFIRMED MISSING (build task #51 created)
### [ ] Audit-1 · Suggested rooms in Space Lobby (may be upstream)
Check `src/app/pages/client/space/` and space room list components for `m.space.child` `suggested: true` handling. If upstream Cinny already shows suggested rooms, close this task.
### [ ] Audit-2 · Room upgrade / tombstone UX (may be upstream)
Search `RoomTimeline.tsx` and event renderers for `m.room.tombstone` handling. If upstream Cinny already shows a "room upgraded" banner and disables the composer, close this task.
### [x] Audit-2 · Room upgrade / tombstone UX — CONFIRMED EXISTS in upstream (RoomTombstone.tsx, RoomUpgrade.tsx)
### [ ] Audit-3 · Profile banner image — Matrix protocol support
Research whether Matrix spec or MSC4133 (v1.16) defines a standard profile banner field. If no cross-client standard exists, do not implement. Report findings.
Research whether Matrix spec or MSC4133 (v1.16) defines a standard profile banner field. `uk.tcpip.msc4133.stable = true` on our server — check if a `banner_url` or similar field is defined. If no cross-client standard exists, do not implement.
### [ ] Audit-4 · Visual speaking indicator in voice calls
Check Element Call participant UI and Cinny call view for existing speaking indicator. If present, determine if TDS styling is needed. If absent, implement animated speaking ring.
### [x] Audit-4 · Visual speaking indicator — CONFIRMED EXISTS (useCallSpeakers.ts, MemberSpeaking.tsx). TDS improvement task #107 created.
---
## IMPLEMENTATION NOTES
### Design Rules (non-negotiable)
- All TDS (Lotus Terminal theme) styling must come from `/root/code/web_template/base.css` CSS variables and token classes — do NOT invent new colors or patterns
- All new components must respect both TDS dark and TDS light modes
- Code syntax highlighting token classes: `.tok-kw .tok-str .tok-num .tok-cmt .tok-fn` (see web_template)
- Reference implementation for patterns: `/root/code/tinker_tickets/`
### ⚠️ TDS DESIGN LAW (repeated here for emphasis)
> Every TDS color, animation, glow, border, shadow, and font value MUST come from `/root/code/web_template/base.css`.
> Never hardcode hex values. Never invent CSS variable names.
> Key variables: `--lt-accent-orange` · `--lt-accent-cyan` · `--lt-accent-green` · `--lt-glow-*` · `--lt-box-glow-*` · `--lt-border-color` · `--lt-font-mono`
> Reference implementation: `/root/code/tinker_tickets/` (markdown.js, base.js, ticket.css)
> This applies without exception to every task marked `[IMPROVE]`, `[Build]`, or any UI change.
### Design Rules
- All new components must respect both TDS dark (`LotusTerminalTheme`) and TDS light (`LotusTerminalLightTheme`) modes
- Non-TDS theme work (custom accent color, theme presets) uses vanilla-extract theme files — match the pattern in `src/lotus-terminal.css.ts`
- Code syntax highlighting token classes: `.tok-kw .tok-str .tok-num .tok-cmt .tok-fn` (defined in `web_template/base.css`)
- `folds AvatarImage` does NOT accept children — wrap Avatar components externally for overlays/frames/borders
### CI/CD Pipeline
```