Bernd Steckmeister 891f3489bd fix: Soft-Logout darf nie mehr destruktiv enden (onSoftLogout-Guard)
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 wie
9dc83f7: 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>
2026-07-03 14:42:15 +02:00

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 Claude
  • ROADMAP.md / PROGRESS.md aktueller Stand und nächste Schritte
  • docs/NOTIFICATIONS.md Push-Architektur (native Anzeige vs. Hintergrund-Entschlüsselung)
  • docs/matrix-sdk/ Hinweise zum verwendeten Matrix-SDK
S
Description
Pyramid – Flutter Matrix Client
Readme 6.9 MiB
2026-04-28 21:54:27 +02:00
Languages
Dart 83.4%
JavaScript 6.2%
CSS 3.6%
Kotlin 2.2%
C++ 1.9%
Other 2.6%