891f3489bdf2f2469184c6683f81fdc8263542e7
Qualitäts-Review-Befund (b): Der Refresh-Token-Fix (9dc83f7) war richtig analysiert, aber unvollständig – drei Restlücken gegen das matrix-SDK 6.2.0 verifiziert und geschlossen: 1. Client._handleSoftLogout ruft bei JEDEM Refresh-Fehler logout() auf, und logout() macht 'finally clear()' – die lokale Session inkl. Krypto-Schlüssel wird selbst bei einem transienten Netzwerkfehler zerstört. Mit refreshToken:true laufen Access-Tokens künftig ab, Refreshes werden Routine – das Restrisiko wäre also GESTIEGEN. Fix: eigener onSoftLogout-Handler (soft_logout_guard.dart) mit 3 Versuchen, der nie wirft → SDK ruft nie logout() auf; bei Dauerfehler bleibt der Client soft-logged-out und der nächste Sync versucht es erneut (CLAUDE.md: Fehlerpfade dürfen NIE in einem stillen Logout enden). 2. Das Push-Hintergrund-Isolate (background_push.dart) teilt sich die pyramid.sqlite mit der Haupt-App; getEventByPushNotification() ruft ensureNotSoftLoggedOut() auf. Ohne Guard hätte ein Refresh-Fehler im Isolate (inkl. Token-Rotations-Race mit der Haupt-App) die Session der GESAMTEN App gelöscht. Guard auch dort gesetzt; das Race heilt der Retry, weil refreshAccessToken() den Token bei jedem Versuch frisch aus der DB liest. 3. isLoggedInProvider behandelte softLoggedOut wie ausgeloggt – die UI wäre bei jedem Routine-Token-Refresh kurz auf den Login-Screen gesprungen (für Nutzer nicht von einem 'Random Logout' zu unterscheiden). Jetzt zählt nur echtes loggedOut. UNGETESTET (Pi) – gehört zum selben ausstehenden PC-Praxistest wie9dc83f7: Login → Nachrichten → Logout → Neu-Login → alte Nachrichten lesbar; zusätzlich auth_log.txt auf die neuen Guard-Einträge prüfen. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Pyramid
Pyramid ist ein eigenständiger Matrix-Client (Flutter), kein Fork von FluffyChat
oder Element. Er läuft gegen den selbst gehosteten Homeserver steggi-matrix.work
(Continuwuity) und ist bei echten Nutzern im Einsatz – Stabilität und
Datensicherheit haben Vorrang vor Feature-Tempo.
Funktionsumfang
- Matrix-Chat mit Timeline, Reply, Medien, Link-Vorschauen, lokaler Volltextsuche über entschlüsselte Nachrichten (server-seitige Suche funktioniert bei E2EE nicht)
- Ende-zu-Ende-Verschlüsselung (vodozemac/Olm/Megolm) inkl. Key-Backup
- Sprach-/Video-Calls und Bildschirmübertragung über LiveKit
(
wss://livekit.steggi-matrix.work) - Push-Benachrichtigungen mit clientseitiger Entschlüsselung auch bei gekillter
App (FCM + Sygnal, siehe
docs/NOTIFICATIONS.md) - Größenverstellbares Panel-Layout (Rooms/Chat/Members) statt starrer Tabs
Build
Voraussetzung: Flutter (stable channel, siehe environment.sdk in pubspec.yaml
für die unterstützte Dart-Version).
flutter pub get
flutter run -d windows # schnellster Praxistest während der Entwicklung
flutter analyze # muss sauber bleiben
Unterstützte Zielplattformen: Android, Windows, Linux, iOS, macOS (Ordner
android/, windows/, linux/, ios/, macos/ sind Standard-Flutter-Projekte).
Release-Build (signiert, Windows + Android): scripts/release.ps1.
Projektstruktur
lib/
core/ Matrix-Client, Auth, VoIP-Manager, Storage, App-State
features/
auth/ Login, Server-Auswahl
rooms/ Raumliste, Spaces
chat/ Timeline, Composer, Medien, Dokumentenvorschau
call/ LiveKit-Calls, Voice-Channel, Mini-Call-Widget
members/ Mitgliederliste/-panel
settings/ Einstellungen
layout/ Panel-Layout (resizable)
widgets/ geteilte UI-Bausteine
utils/ Hilfsfunktionen
Weiterführende Dokumentation
CLAUDE.md– Arbeitsregeln und Infrastruktur für die Zusammenarbeit mit ClaudeROADMAP.md/PROGRESS.md– aktueller Stand und nächste Schrittedocs/NOTIFICATIONS.md– Push-Architektur (native Anzeige vs. Hintergrund-Entschlüsselung)docs/matrix-sdk/– Hinweise zum verwendeten Matrix-SDK
Description
Releases
9
Pyramid v0.1.35
Latest
Languages
Dart
83.4%
JavaScript
6.2%
CSS
3.6%
Kotlin
2.2%
C++
1.9%
Other
2.6%