- CallSignalingService/callSignalingProvider und VoiceChannelService/
voiceChannelProvider als einzige oeffentliche Schnittstellen
- voip_manager.dart / livekit_call_manager.dart in ihre Module verschoben,
Logik unangetastet (nur Klassen-Koepfe, @override, Imports, Provider-Namen)
- Alle Konsumenten entkoppelt; Kompositions-Punkt matrix_client.dart als
dokumentierte Ausnahme. analyze sauber, 29 Tests gruen, Windows-Start ok.
Call-Klick-/Geraetetest steht aus (PROGRESS.md)
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>
Neuer AuthLog schreibt Login-Status-Wechsel und SDK-Warnungen/-Fehler
in eine Datei im App-Support-Verzeichnis, die einen Neustart übersteht.
Zusätzlich werden alle drei bewusst ausgelösten Logout-Buttons geloggt,
damit sich künftig unterscheiden lässt: Nutzer-Logout vs. vom SDK
automatisch ausgelöster Logout (Soft-Logout/M_UNKNOWN_TOKEN).
Reiner Logging-Zusatz, keine Verhaltensänderung – erster Schritt laut
ROADMAP M1 ("Erst Logging an allen Logout-Pfaden einbauen").
65 flutter-analyze-Meldungen behoben, indem alle print()-Aufrufe in Core-
Dateien (Push, LiveKit, Matrix-Client, VoIP, Screen-Share) durch das
Flutter-eigene debugPrint() ersetzt wurden. Gleiche Funktion (Logging in
Debug-Sessions), aber zeilenlängen-sicher und ohne Lint-Warnung.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
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 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CPrAGBxBT6GfPXzeWQ4AXb