docs: Fable-5-Review abgeschlossen und protokolliert (M0-Punkt abgehakt)
Review-Protokoll in PROGRESS.md nachgeholt (die Vorsession hattef9979e4und891f348gepusht, wurde aber vor dem Protokollieren abgebrochen) und den Review zu Ende geführt: (a) Splits unabhängig per Zeilen-Multiset verifiziert, (b) Soft-Logout-Guard gegen SDK-Quelle gegenverifiziert, (c) Lint-Fixes äquivalent (onReorderItem gegen Flutter-SDK geprüft), (d) ROADMAP-Haken stimmen mit dem Code überein. Nebenbefund: docs/ PROGRESS.md als Archiv markiert (Verwechslungsgefahr mit dem echten Protokoll im Root). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
+90
@@ -13,6 +13,96 @@ Schritt (und beim Abbruch mitten im Schritt den Zwischenstand). Format:
|
||||
|
||||
---
|
||||
|
||||
## Fable-5-Review (Qualitäts-Review aller Autopilot-Commits 25ed765..HEAD)
|
||||
|
||||
Bernds Auftrag (ROADMAP M0): alle bisherigen Sonnet-5-Commits kritisch und in
|
||||
der Tiefe nachprüfen. Jeder Punkt hier wird abgehakt, sobald er geprüft ist –
|
||||
**bereits abgehakte Punkte in künftigen Sessions NICHT erneut prüfen.**
|
||||
|
||||
Hinweis zur Historie: Eine frühere Fable-5-Session hatte den Review begonnen
|
||||
und zwei Fix-Commits gepusht (f9979e4, 891f348), wurde aber VOR dem
|
||||
Protokollieren abgebrochen – dieser Abschnitt holt das Protokoll nach und
|
||||
schließt den Review ab.
|
||||
|
||||
- [x] **(a) Die 6 Gott-Datei-Aufteilungen fachlich geprüft – Ergebnis: korrekt,
|
||||
1 Befund bereits gefixt (f9979e4).** Unabhängige Nachprüfung (nicht nur den
|
||||
alten Blockvergleich wiederholt): eigener Zeilen-Multiset-Vergleich
|
||||
(Code-Zeilen ohne Kommentare/Imports/part-Direktiven) Original vor dem Split
|
||||
vs. heutiger Stand für alle 6 Bibliotheken → **keine Code-Zeile verloren,
|
||||
keine hinzugekommen** (settings_modal 5055, message_group 2409, rooms_panel
|
||||
2308, space_admin_dialog 2079, chat_view 1813, document_viewer 1543 Zeilen,
|
||||
jeweils exakt identisch). Alle `part`-Direktiven == Dateien auf Platte,
|
||||
alle Part-Dateien mit korrektem `part of`. Befund der Vorsession bestätigt:
|
||||
Beim Split gingen 24 **Erklärkommentar-Blöcke** verloren (u. a. die
|
||||
Selbst-Aussperr-Warnung über `updatePowerLevelsSafely`, HTML-Subset-Doku,
|
||||
PDF-Cache-Doku) – mit f9979e4 an den richtigen Klassen wiederhergestellt
|
||||
(Stichprobe geprüft: sitzt korrekt). `flutter analyze`: unverändert 1
|
||||
bekannter Hinweis (`chat_provider.dart:42`).
|
||||
- [x] **(b) Uta-Logout-/Push-Fix (63e4919, 9dc83f7) gegen das matrix-SDK 6.2.0
|
||||
verifiziert – Analyse war richtig, aber unvollständig; Lücke mit 891f348
|
||||
geschlossen (Vorsession), heute vollständig gegenverifiziert:**
|
||||
- SDK-Quelle bestätigt (client.dart:2374 ff.): Ohne eigenen `onSoftLogout`-
|
||||
Handler eskaliert JEDER fehlgeschlagene Token-Refresh (auch bloße
|
||||
Netzwerkfehler) zu `logout()` + `clear()` → Session inkl. Krypto-Schlüssel
|
||||
weg. Mit `refreshToken: true` (9dc83f7) wären Refreshes Routine geworden –
|
||||
das Restrisiko wäre also GESTIEGEN. Der Guard (`soft_logout_guard.dart`,
|
||||
891f348) ist die notwendige zweite Hälfte des Fixes.
|
||||
- Guard-Code geprüft: wirft nie (alle Pfade gefangen; `AuthLog.write` fängt
|
||||
intern selbst alles – wichtig, sonst würde ein Logging-Fehler im
|
||||
catch-Pfad doch wieder `logout()` auslösen). SDK ruft bei nicht-werfendem
|
||||
Handler nachweislich nie `logout()` auf.
|
||||
- „Retry heilt das Token-Rotations-Race mit dem Push-Isolate"-Behauptung
|
||||
gegen SDK-Quelle geprüft: stimmt – `refreshAccessToken()` liest den
|
||||
Refresh-Token bei jedem Aufruf frisch per `database.getClient()` aus der
|
||||
geteilten DB.
|
||||
- Beide `Client(`-Konstruktionen der App (matrix_client.dart,
|
||||
background_push.dart) haben den Guard – keine ungeschützte übrig.
|
||||
- `isLoggedInProvider`-Änderung (softLoggedOut ≠ ausgeloggt) korrekt:
|
||||
verhindert Login-Screen-Flackern bei Routine-Refresh; echtes `loggedOut`
|
||||
führt weiterhin zum Login-Screen.
|
||||
- **Dokumentiertes Restrisiko (kein Fix möglich/nötig):** Ein hartes
|
||||
`M_UNKNOWN_TOKEN` OHNE `soft_logout`-Flag führt im SDK weiterhin direkt zu
|
||||
`clear()`. Das ist ein echter serverseitiger Session-Widerruf (z. B.
|
||||
Admin-Logout) – lokal nicht abwendbar; Schlüssel kommen dann übers
|
||||
Key-Backup zurück. Kein stiller Fehlerpfad, sondern legitimer Server-Befehl.
|
||||
- [x] **(c) analyze-/Lint-Fixes (9dc1175, 133a8ac, 99f10c5, 2395db5, 057ac1e,
|
||||
401bd6a) auf Verhaltensänderungen geprüft – alle äquivalent, 1 Kleinigkeit
|
||||
gefunden (bewusst belassen):**
|
||||
- `onReorder` → `onReorderItem` (401bd6a): gegen Flutter-SDK-Quelle
|
||||
verifiziert – der neue Callback korrigiert den Index intern, das entfernte
|
||||
manuelle `newIdx--` ist korrekt; einzige Aufrufstelle migriert. Kein
|
||||
Off-by-One beim Raum-Umsortieren.
|
||||
- `Matrix4.translate/scale` → `translateByDouble/scaleByDouble` (PDF-Zoom):
|
||||
mathematisch äquivalent (uniforme Skalierung, w=1).
|
||||
- `withOpacity`→`withValues`, `activeColor`→`activeThumbColor`,
|
||||
`cacheExtent`→`scrollCacheExtent`, `PublicRoomsChunk`→`PublishedRoomsChunk`,
|
||||
print→debugPrint, `__`→`_`-Parameter, Curly-Braces: reine Renames/Syntax.
|
||||
- Toter Code (9dc1175): entfernte Funktionen (`_showNotif`, `_fetchTitle`,
|
||||
`_get`, `_applyNoiseSuppression`, `destructive`-Param, `_saved`-Feld) per
|
||||
grep bestätigt nirgends referenziert.
|
||||
- **Kleinigkeit:** In `mini_call_widget.dart` wurde das ungenutzte
|
||||
`_hovered`-Feld nicht gelöscht, sondern verdrahtet (Hover-Farbe auf
|
||||
Call-Buttons) – streng genommen eine Mini-Verhaltensänderung in einem
|
||||
Lint-Commit. Offensichtlich die ursprünglich gemeinte Funktion des Feldes,
|
||||
rein kosmetisch, kein Risiko → belassen, hier nur dokumentiert.
|
||||
- [x] **(d) Abgehakte ROADMAP-Punkte gegen Code gegengeprüft – alle stimmen:**
|
||||
`isKeyBackupMissing`-Warnung sitzt nach dem Settings-Split weiterhin in
|
||||
beiden Logout-Pfaden (settings_about.dart, settings_shared.dart);
|
||||
`refreshToken: true` in login_notifier.dart:84; Bootstrap-Flows
|
||||
(`askUnlockSsss`, `_triggerBootstrap`) vorhanden; `features/calls/`-Leiche
|
||||
existiert nicht; `docs/M2_MODULE_SCHNITT.md` vorhanden; `flutter analyze`
|
||||
sauber (1 bekannter Hinweis). Nebenbefund gefixt: `docs/PROGRESS.md` war ein
|
||||
eingefrorener Alt-Stand (2026-06-04) mit Verwechslungsgefahr zum echten
|
||||
Protokoll im Root → Archiv-Banner eingefügt.
|
||||
|
||||
**Fazit:** Die Sonnet-5-Arbeit war handwerklich sauber; die zwei echten Lücken
|
||||
(verlorene Kommentare, fehlender Soft-Logout-Guard) hatte die abgebrochene
|
||||
Fable-5-Vorsession bereits gefixt – beide Fixes heute unabhängig verifiziert.
|
||||
Alles weiterhin UNGETESTET (Pi) im Sinne von „nicht in echter UI gesehen";
|
||||
der ausstehende PC-Praxistest (siehe Einträge unten) bleibt Pflicht.
|
||||
|
||||
---
|
||||
|
||||
## 2026-07-03 – M2: Gott-Datei `document_viewer.dart` aufgeteilt (5 Dateien)
|
||||
|
||||
**Erledigt:** Vor dem Weiterarbeiten wie immer Arbeitszyklus durchlaufen
|
||||
|
||||
Reference in New Issue
Block a user