Files
pyramid/docs/matrix-sdk/CHECKLIST.md
T
Bernd SteckmeisterandClaude Fable 5 25ed765a03 wip: Sicherungs-Commit aller Änderungen seit April + Arbeitsstruktur (CLAUDE.md, ROADMAP.md, PROGRESS.md, Autopilot)
6 Wochen uncommittete Arbeit (Voice-Channels, LiveKit-Manager, Settings-Modal u.v.m.)
als ein WIP-Commit gesichert, damit nichts verloren geht und der Pi den aktuellen
Stand klonen kann. Thematische Aufarbeitung: siehe ROADMAP M0.

Co-Authored-By: Claude Fable 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01CPrAGBxBT6GfPXzeWQ4AXb
2026-07-03 05:47:18 +02:00

20 KiB

Pyramid — Feature-Checklist & Implementierungsstand

Stand: Mai 2026
Legende: ✅ Fertig | ⚠️ Teilweise / Bug | ❌ Fehlt | 🔧 In Arbeit


Inhaltsverzeichnis


Authentifizierung

Feature Status Details / Datei
Login mit Passwort ✅ login_page.dart, login_notifier.dart
Homeserver-Auswahl ✅ server_page.dart — HTTPS-Prefix fix, .well-known Autodiscovery
Session wiederherstellen (init) ✅ matrix_client.dart — client.init() beim App-Start
Logout ✅ Via Matrix SDK client.logout()
Login-Redirect nach Init ✅ router.dart — StreamProvider-basierter Guard
SSO / OAuth ❌ Nicht implementiert
Registrierung / Account erstellen ❌ Keine UI
Login mit Token ❌ Nur Passwort-Login
Multi-Account ❌ Nur ein Account gleichzeitig
UIAA Re-Auth (Passwort ändern) ❌ Kein UI

Raumliste

Feature Status Details / Datei
Raumliste anzeigen ✅ rooms_page.dart, room_list_item.dart
Sortierung nach letzter Aktivität ✅ In rooms_provider.dart
Avatar-Anzeige (MXC) ✅ mxc_image.dart
Vorschautext (letztes Event) ✅ room_list_item.dart
Ungelesen-Badge ✅ notificationCount
Ungelesen-Punkt (kein Count) ✅ Bei notificationCount == 0 aber ungelesen
Zeitstempel-Formatierung ✅ Heute: HH:MM, andere: DD.MM
DM-Erkennung (isDirectChat) ✅ Typ-Differenzierung in Liste
Space-Filterung ✅ SpacesRail filtert nach aktiver Space
Einladungen anzeigen ⚠️ Membership.invite vorhanden, gesonderte Ansicht fehlt
Raum suchen / filtern ✅ Via search_modal.dart
Archivierte Räume ❌ Kein UI für left-rooms
Raum erstellen (Knopf) ✅ create_join_dialog.dart
Raum beitreten (Alias) ✅ create_join_dialog.dart

Chat / Timeline

Feature Status Details / Datei
Nachrichten anzeigen ✅ message_bubble.dart, message_group.dart
Gruppen-Bubbles (gleicher Sender) ✅ Continuation-Nachrichten (eingerückt, kein Avatar)
Datums-Trenner ✅ Tagstrennlinie
Ungelesen-Trenner ("Neue Nachrichten") ✅ fullyRead-Position
Scroll-to-Unread beim Öffnen ✅ chat_view.dart
History-Nachladen beim Scrollen ✅ _onScroll() → requestHistory(60)
Optimistische Nachrichtenanzeige ✅ SDK fügt Event mit Status sending ein
Nachrichtenstatus (senden/sent) ✅ Uhren-Icons
Timeline-Cleanup (cancelSubscriptions) ✅ In dispose()
Sprung zu bestimmtem Event ⚠️ Infrastruktur vorhanden, kein UI
Event-Suche in Timeline ❌ Nur globale Suche

Nachrichtentypen

Typ Status Details
Text (m.text) ✅ Vollständig
Bild (m.image) ✅ Thumbnail + Vollansicht mit Zoom
Video (m.video) ✅ Playback via media_kit
Audio (m.audio) ✅ Player mit Progress/Dauer
Datei (m.file) ✅ Download mit MIME-Icon
Sticker (m.sticker) ✅ Anzeige und Senden (Sticker-Picker)
Sprachnachricht (MSC3245) ⚠️ Audio-Aufnahme fehlt, Abspielen funktioniert
Standort (m.location) ❌ Nicht implementiert
Emote (m.emote) ❌ Kein gesondertes Rendering
Poll (MSC3381) ❌ Nicht implementiert
Verschlüsselte Nachrichten ✅ Automatisch via SDK, Fehler-UI vorhanden
Redacted-Events ⚠️ Wird angezeigt, kein "Nachricht gelöscht"-Platzhalter

Nachrichtenfunktionen

Feature Status Details / Datei
Antworten (Reply) ✅ Swipe-Geste + Quote-Anzeige
Reaktionen (Emojis) ✅ Quick-Picker + vollständiger Emoji-Picker
Reaktionen entfernen ⚠️ UI zum Entfernen fehlt
Nachrichten bearbeiten (Edit) ⚠️ getDisplayEvent() vorhanden, Senden nicht im UI
Nachricht löschen (Redact) ❌ Kein Button / Dialog
Threads ❌ Nicht implementiert
Polls ❌ Nicht implementiert
Weitersenden (Forward) ❌ Nicht implementiert
Kopieren (Text) ⚠️ Nicht explizit sichtbar
Long-Press Auswahl-Modus ✅ message_bubble.dart — Long-Press aktiviert Selection
Bulk-Aktionen (Auswahl) ⚠️ Modus vorhanden, Aktionen begrenzt
Pinned Messages Panel ✅ pinned_messages_panel.dart
Pins setzen (UI-Aktion) ❌ Kein Pin-Button in Nachricht
Linkvorschau ❌ Keine URL-Preview
Mention-Links klickbar ✅ @user-Links via url_launcher

Direct Messages

Feature Status Details / Datei
Neuen DM starten ✅ new_dm_dialog.dart → startDirectChat()
User-Verzeichnis-Suche ✅ searchUserDirectory()
DM-Erkennung in Raumliste ✅ room.isDirectChat
Partner-Avatar/Name ✅ directChatMatrixID → Profil laden
DM-Verschlüsselung ✅ Standard E2EE bei DM-Erstellung
Gruppen-DM ⚠️ Erstellbar, kein gesondertes UI
DM vergessen / verlassen ⚠️ Kein UI-Button
DM-spezifische Notification-Sounds ❌ Nicht implementiert

E2EE Verschlüsselung

Feature Status Details / Datei
Vodozemac Rust-Crypto ✅ flutter_vodozemac initialisiert in matrix_client.dart
E2EE in verschlüsselten Räumen ✅ Automatisch via SDK
Bootstrap-Flow (SSSS + Cross-Signing) ✅ bootstrap_dialog.dart — vollständige State-Machine
Cross-Signing Setup ✅ Master-, Self- und User-Signing-Key Erstellung
Key Backup (online) ✅ SSSS-gesichertes Backup
Schlüssel-Verifikation (SAS/Emoji) ✅ Via Bootstrap-Flow
QR-Code-Verifikation ⚠️ SDK-Support vorhanden, kein UI
Device-Liste anzeigen ❌ Kein UI
Gerät sperren/blockieren ❌ Kein UI
Fehlende Schlüssel anfordern ✅ requestMissingSessionKeys() bei Bad-Encrypted
Entschlüsselungs-Fehler-UI ✅ "Nachricht konnte nicht entschlüsselt werden" + Schlüssel-Button
Schlüssel importieren/exportieren ❌ Kein UI (Infrastruktur vorhanden)

Push Notifications

Feature Status Details / Datei
FCM Token Registrierung ✅ fcm_push_service.dart
Pusher auf Homeserver ✅ postPusher() mit Sygnal-Gateway
Token-Refresh Handling ✅ onTokenRefresh.listen()
PushService.kt (native FCM) ✅ Läuft auch bei geschlossener App
Benachrichtigung bei geschlossener App 🔧 APK neu gebaut, noch nicht getestet
Absender-Name in Notification ✅ HTTP-Fetch von Matrix API in PushService.kt
Verschlüsselte Nachricht entschlüsseln ⚠️ "Neue Nachricht" bei geschlossener App; decryptAndUpdateNotification bei Hintergrund-App
Inline Reply in Notification 🔧 ReplyReceiver auf getActivity umgestellt — APK gebaut, ungetestet
Antwort wirklich abschicken 🔧 replyFromNotification MethodChannel — APK gebaut, ungetestet
Gelesen-Button in Notification ✅ ACTION_DISMISS über ReplyReceiver.kt
Notification bei Hintergrund-App ✅ Heartbeat-Check verhindert Duplikate
Notification-Kanal Android ✅ pyramid_messages, HIGH Importance
Stabile Notification-ID ✅ stableId(roomId) — gleicher Algo in Kotlin + Dart
Windows Notification ✅ local_notifier (Windows Toast)
Windows Taskbar Flash ✅ WindowsTaskbar.setProgressMode()
Ausstehende Reply beim App-Öffnen senden ✅ _sendPendingReply() bei Resume + Sync
Push Rules konfigurieren ❌ Kein UI
Raum stumm schalten ❌ Kein UI
Nur-Erwähnung-Modus ✅ notifMentionOnlyDmProvider — Preferences
iOS Push ❌ Kein iOS-Build
Web Push ❌ Kein Web-Build

VoIP & Calls

Feature Status Details / Datei
Matrix WebRTC Legacy-Calls ✅ voip_manager.dart — CallSession
LiveKit SFU-Calls ✅ livekit_call_manager.dart
Unified Call-UI ✅ voice_channel.dart
Audio-Call ✅ Mikrofon + Speaker
Video-Call ✅ Kamera + Remote-Video
Screen-Sharing ✅ screen_share_picker.dart
Video-Qualitätsstufen ✅ SD/HD/FHD/4K Presets
Mute-Toggle ✅ setMicrophoneEnabled()
Deafen-Toggle ✅ Audio komplett stumm
Kamera-Toggle ✅ setCameraEnabled()
Kamera-Wechsel (Front/Rück) ⚠️ SDK-Support vorhanden
Teilnehmer-Grid ✅ Mehrere Participants anzeigen
Lokale Video-Vorschau ✅ Overlay-Widget
Klingel-System (to-device) ⚠️ Infrastruktur vorhanden, Klingelton fehlt
Incoming-Call-UI ⚠️ Kein dediziertes Klingel-Screen
Call-History ❌ Nicht implementiert
TURN-Server via Matrix ⚠️ getTurnServer() — ob konfiguriert unklar
Hintergrund-Foreground-Service ✅ FlutterForegroundService via webrtc
MatrixRTC Membership-Events ✅ io.pyramid.voice.presence State-Events
LiveKit-Token-Exchange ✅ livekit_token.dart

Settings / Einstellungen

Feature Status Details / Datei
Settings-Seite (Hauptseite) ⚠️ settings_page.dart — NUR PLATZHALTER
Settings Modal ✅ settings_modal.dart — vollständiger Modal
Dark/Light Mode ✅ themeModeProvider + Toggle
Akzentfarbe (5 Presets) ✅ Amber/Coral/Mint/Violet/Cobalt/Lime
Eckenradius Slider ✅ radiusProvider
UI-Motion Toggle ✅ motionProvider
UI-Density Toggle ✅ densityProvider
Desktop Notifications ✅ notifDesktopProvider
Notification Sound ✅ notifSoundProvider
Nachrichtenvorschau ✅ notifPreviewProvider
Nur-Erwähnung-Modus ✅ notifMentionOnlyDmProvider
Presence anzeigen (Online) ✅ privacyPresenceProvider
Read Receipts senden ✅ privacyReadReceiptsProvider
Typing-Indikator senden ✅ privacyTypingProvider
Profil bearbeiten (Name/Avatar) ❌ Kein UI
Geräte-Verwaltung ❌ Kein UI
Session-Liste ❌ Kein UI
Passwort ändern ❌ Kein UI
Account löschen ❌ Kein UI
Raumspezifische Benachrichtigungen ❌ Kein UI
Sprache / Lokalisierung ❌ Nur Systemsprache
Barrierefreiheit ❌ Keine Einstellungen

Benutzerprofil

Feature Status Details / Datei
Avatar anzeigen (MXC) ✅ mxc_image.dart überall
Displayname auflösen ✅ Fallback auf @username
Online-Präsenz senden ✅ setPresence(online) alle 10s in app_shell.dart
Präsenz-Anzeige anderer User ⚠️ Infrastruktur, kein UI
Profil-Popover (Hover-Karte) ✅ profile_popover.dart
Eigenes Profil bearbeiten ❌ Kein UI
Avatar hochladen ❌ Kein UI
Status-Nachricht ❌ Nicht implementiert
User ignorieren / blockieren ❌ Kein UI
User melden ❌ Kein UI

Raum-Einstellungen

Feature Status Details / Datei
Space-Admin Panel (Name/Avatar/Banner) ✅ space_admin_dialog.dart — Overview-Tab
Power-Level-Editor (Mitglieder) ✅ space_admin_dialog.dart — Members-Tab
Permissions-Tab (Raum-PLs) ✅ space_admin_dialog.dart — Permissions-Tab
Kind-Räume verwalten ✅ space_admin_dialog.dart — Channels-Tab
Raum-Name ändern (normaler Raum) ❌ Kein UI
Raum-Thema ändern ❌ Kein UI
Raum-Avatar ändern ❌ Kein UI
Join-Rules ändern ❌ Kein UI
History-Visibility ändern ❌ Kein UI
E2EE aktivieren ❌ Kein UI
Raum-Alias verwalten ❌ Kein UI
Raum verlassen (Button) ❌ Kein UI
Raum vergessen (forget) ❌ Kein UI
User einladen (aus Chat) ❌ Kein UI
Kick / Ban (Moderation) ❌ Kein UI

Suche

Feature Status Details / Datei
Server-seitige Nachrichtensuche ✅ search_modal.dart → /search API
Lokale Raum-/DM-Suche ✅ Filter auf client.rooms
Personen-Suche ✅ Lokale DM-Partner-Suche
Medien-Filter (Bilder/Videos/Audio) ✅ search_modal.dart
Paginierung (nextBatch) ✅ Infinite scroll
Suchergebnis-Highlighting ✅ Suchbegriff hervorheben
Debounced Query (400ms) ✅ debounce in Suchfeld
Öffentliches Raumverzeichnis ❌ Kein UI zum Entdecken
User-Verzeichnis-Suche (global) ✅ In new_dm_dialog.dart

Medien

Feature Status Details / Datei
Bild senden ✅ MatrixImageFile + Upload
Bild anzeigen (Thumbnail + Vollbild) ✅ MediaViewer mit Zoom/Pan
Video senden ✅
Video abspielen ✅ media_kit
Audio senden ✅
Audio abspielen ✅ Player mit Progress
Datei senden ✅ MatrixFile
Datei herunterladen ✅ MIME-Icon + Browser-Öffner
Clipboard-Bild einfügen (Windows) ✅ FFI + clipboard_image.dart
Drag & Drop Upload (Desktop) ✅ desktop_drop
GIF-Picker (Giphy) ✅ Trending + Suche + Favoriten
Sticker-Picker ✅ Pack-Browser
Bild-Komprimierung ✅ shrinkImageMaxDimension
Verschlüsselte Medien ✅ Automatisch bei E2EE-Räumen
Sprachnachricht aufnehmen ❌ Kein Recorder
Kamera direkt (in App) ❌ Nur Gallery-Picker
Dokument-Vorschau ❌ Kein PDF-Viewer
Media-Galerie (Raum-Mediathek) ❌ Kein UI

Read Receipts & Typing

Feature Status Details / Datei
Read Receipts senden ✅ setReadMarker() (privacy-gesteuert)
Eigene ✓✓ Bestätigung ✅ Anzeige auf eigenen Nachrichten
Read-Marker anderer anzeigen ⚠️ Position-Marker vorhanden, kein Avatar-Stack
Typing-Indikator senden ✅ 7s Auto-Timeout
Typing-Indikator empfangen ✅ Anzeige-Platzhalter
Typing-User-Namen anzeigen ⚠️ Platzhalter, keine Namen

Spaces

Feature Status Details / Datei
Space-Erkennung (isSpace) ✅
Spaces-Rail (Sidebar) ✅ spaces_rail.dart
Space-Filterung der Raumliste ✅ Nur Räume der aktiven Space
Space-Admin Panel ✅ space_admin_dialog.dart
Space erstellen ✅ create_join_dialog.dart
Kind-Räume hinzufügen ✅ In Space-Admin
Kind-Räume entfernen ✅ In Space-Admin
Voice-Präsenz in Space ✅ io.pyramid.voice.presence Events
Space-Banner ✅ Mit Crop-Dialog
Verschachtelte Spaces ⚠️ Anzeige, kein eigener Sub-Space-Rail
Space beitreten (öffentlich) ⚠️ Technisch möglich, kein Discovery-UI

Windows / Desktop

Feature Status Details / Datei
Windows Build ✅ CMake + MSIX
Windows Notifications ✅ local_notifier
Taskbar Flash ✅ WindowsTaskbar
Update-Checker (Gitea API) ✅ update_checker.dart — 4h Intervall
Update-Banner ✅ update_banner.dart
Update-Download ✅ update_download_dialog.dart
APK Auto-Install (Android) ✅ Kotlin MethodChannel + FileProvider
PC Update (exe/msix) Download ⚠️ Release-Script pusht .zip statt .exe → öffnet Git-Seite
Drag & Drop ✅ desktop_drop
Clipboard Paste (Bild) ✅ FFI Windows API
Resizable Sidebar ✅ panel_layout.dart — Drag-Divider
Keyboard Shortcuts ⚠️ Enter zum Senden, Ctrl+V — kein vollständiges System
System Tray ❌ Nicht implementiert
Fenster-Badge (ungelesen) ⚠️ Nur Taskbar-Flash, kein Zähler
macOS / Linux ❌ Nicht gebaut/getestet

Sonstige Features

Feature Status Details / Datei
Emoji-Picker ✅ Kategorisiert + Suche
Quick-Reaktionen (6 Emojis) ✅ Hover-Aktionsleiste
Mitglieder-Panel (Raum) ✅ members/ — Teilnehmerliste
Profil-Popover (Hover) ✅ profile_popover.dart
Neuer-DM Dialog ✅ new_dm_dialog.dart
Raum-erstellen Dialog ✅ create_join_dialog.dart
Nachricht-Auswahl-Modus ✅ Long-Press
Reply-Swipe-Geste ✅ Rechts-wischen zum Antworten
Immersive-Mode (Android) ✅ Status-Bar ausgeblendet
PyramidLoader (Ladeanimation) ✅ pyramid_loader.dart
Rich-Text-Editor ❌ Kein Markdown/Formatting-UI
HTML-Nachrichtenrendering ❌ Kein flutter_html
Message Forwarding ❌
Nachrichtenübersetzung ❌
Bot-Kommandos (/) ❌
Matrix-URI Handler ❌ Kein Deep-Link-Handler
Barcode/QR-Scanner ⚠️ Nur in Verifikation

Dokumentations-Vollständigkeit

Doku-Abschnitt Vollständig Anmerkungen
01 Auth ✅ SSO, UIAA, alle Login-Flows
02 Räume ✅ Create, Join, Spaces, Power Levels
03 Nachrichten ✅ Text, Replies, Edits, Threads, Polls
04 DMs ✅ Alle DM-Flows
05 Medien ✅ Upload, Download, alle Dateitypen
06 E2EE ✅ Setup, SAS, Cross-Signing, Key Backup
07 Push ✅ FCM, Push Rules, Pyramid-Architektur
08 VoIP ✅ Legacy m.call, MatrixRTC
08b LiveKit ✅ KOMPLETT — Server-Setup bis Flutter-UI
09 Profil ✅ Presence, Account-Data, Tags
10 Room-Admin ✅ Power Levels, Moderation, ACL, Synapse Admin
11 Suche ✅ Event-Suche, User-Suche, Raumverzeichnis
12 Schnellreferenz ✅ Alle Enums, Widget-Patterns, Fehlerhandling

Prioritäts-Roadmap

🔴 Kritisch (bald testen/fixen)

  1. Notification-Reply testen — Neue APK (getActivity-Fix) installieren und Reply-Flow verifizieren
  2. Benachrichtigung bei geschlossener App — Mit neuer APK testen (PushService.kt Ansatz)
  3. PC Update-Script — .zip durch .exe-Installer ersetzen in scripts/release.ps1

🟠 Wichtig (nächste Features)

  1. Nachricht löschen (Redact) — Long-Press-Menü → event.redactEvent()
  2. Nachricht bearbeiten — Edit-Modus im Composer → sendTextEvent(editEventId:...)
  3. Raum-Einstellungen — Name/Thema/Avatar für normale Räume (room.setName() etc.)
  4. Profil bearbeiten — Displayname + Avatar in Settings
  5. Registrierung — Account-Erstellung im Onboarding

🟡 Sinnvoll (mittelfristig)

  1. Einladungen-Screen — Pending invites sichtbar darstellen
  2. Kick/Ban UI — Moderation aus der Mitgliederliste
  3. Device-Verwaltung — Eigene Sessions anzeigen + löschen
  4. Rich-Text-Editor — Markdown/Formatierung in Nachrichten
  5. Klingelton bei eingehendem Call — Audio + dedizierter Klingel-Screen
  6. Lautlos/Stumm per Raum — Push-Rules im UI

🟢 Nice-to-have

  1. Sprachnachrichten aufnehmen
  2. HTML-Nachrichtenrendering (flutter_html)
  3. Matrix-URI Deep-Links
  4. Media-Galerie pro Raum
  5. System Tray (Windows)
  6. Polls / Abstimmungen