Commit Graph
64 Commits
Author SHA1 Message Date
Bernd SteckmeisterandClaude Opus 5.5 2bbb45fe19 docs: PROGRESS – Live-Anruftest, Teilen/Verbindung/Sprech-Ring, 0.1.40
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-08 11:10:20 +02:00
Bernd SteckmeisterandClaude Opus 5.5 5485b6d449 docs: PROGRESS – Anruf-/Chat-Test, Testinstanz, 0.1.39
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-08 00:06:54 +02:00
Bernd SteckmeisterandClaude Opus 5.5 a30d57ba69 docs: PROGRESS/ROADMAP – Runde 4 (UI, Animationen, Lesebestätigung, LiveKit, Markdown)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 22:15:00 +02:00
Bernd SteckmeisterandClaude Opus 5.5 36875ef9cd fix: Android-Backup und Geraeteumzug fuer App-Daten abschalten (Aussperr-Schutz) + Gradle 8.14.3
Ohne allowBackup=false/dataExtractionRules zog die SQLCipher-Datenbank beim
Handywechsel ohne ihren Keystore-Schluessel mit - AppDatabase bricht dann
bewusst ab, die App waere unbenutzbar. Ausserdem lag der Push-Zugangsschluessel
(SharedPreferences) im Cloud-Backup. Neues Geraet = neu anmelden + Schluessel
per Wiederherstellungsschluessel (Matrix-Weg). Gradle-Wrapper auf 8.14.3
(Flutter kuendigte Ende der 8.13-Unterstuetzung an).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 17:44:58 +02:00
Bernd SteckmeisterandClaude Opus 5.5 e90b954348 fix: Abmelden ohne verspaetete Sync-Antwort (SDK-Wettlauf) + Live-Regressionstest
logoutWithoutStraySync (lib/core/session_logout.dart): Sync-Schleife
anhalten, laufenden Long-Poll per Account-Daten wecken und auslaufen lassen,
erst dann abmelden - es ist keine Anfrage mit altem Token mehr unterwegs,
die per 401 ein zweites clear() ausloesen koennte. Genutzt an allen drei
Abmelde-Stellen (Einstellungen, Ueber, Konto geloescht) und im E2E-Live-Test.
Live gemessen: die verspaetete 401 tritt real auf, kam aber stets vor dem
Abschluss einer Neuanmeldung an - Risiko war klein, ist jetzt ausgeschlossen.
test/live_logout_race_test.dart in scripts/test.ps1 -Live.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 17:39:37 +02:00
Bernd SteckmeisterandClaude Opus 5.5 f09e4875c6 chore: Version 0.1.37+38 (Test-Build Beta-Feedback) + PROGRESS/ROADMAP nachgezogen
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 17:25:23 +02:00
Bernd SteckmeisterandClaude Opus 5.5 460477204b docs: Bernds Beta-Feedback analysiert - Ursachen (Push, Statusleiste, Vollansicht) + Plan + UI-Entscheidungen
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 12:32:36 +02:00
Bernd SteckmeisterandClaude Opus 5.5 dbc0340eeb docs: Wiederaufnahme 2026-10-07 - Tests/Benchmarks dokumentiert, SDK-Wettlauf + Abhaengigkeiten in ROADMAP
Neue Punkte: SDK-Sync-Wettlauf (Logout-Pfad pruefen), Abhaengigkeits-Updates
(sqlcipher_flutter_libs EOL - nie auf 0.7.0 heben, matrix 6.2 -> 13,
flutter_markdown eingestellt; WebRTC-Audio-Fix weiterhin nicht upstream).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 11:55:32 +02:00
Bernd SteckmeisterandClaude Fable 5 f8f5332d90 feat: Call-Robustheit + Standalone-Voice-Channel per Klick beitretbar (M3)
Mit zwei echten Test-Accounts (zwei GUI-Instanzen via PYRAMID_PROFILE_DIR)
durchgeklickt: Beitreten, Teilnehmerliste, bidirektionaler Screenshare,
Live-Qualitaetswechsel (Full HD 60fps), sauberes Verlassen.

- rooms_list.dart: Voice-Channel in der normalen Raumliste war per Klick
  nicht beitretbar (oeffnete nur Chat) -> _toggleVoiceChannel wie Space-Liste.
- livekit_call_manager.dart: _callGeneration entwertet laufenden connect
  bei Auflegen/Wechsel (keine Geisterverbindung mit offenem Mikro);
  Fehlerpfade setzen error sichtbar statt still zu verschwinden.
- rooms_panel_core.dart: raeumt activeVoiceRoomIdProvider auf, wenn der
  Voice-Service inaktiv wird, + Fehler-SnackBar.
- test/live_call_setup_test.dart: gegateter Setup-Helfer fuer den Testraum.

UNGETESTET: echtes 2-Peer-Audio, Netz-Abbruch mitten im Call.

Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-06 22:50:58 +02:00
Bernd SteckmeisterandClaude Fable 5 9f797279eb test: Live-E2E-Verifikation SQLCipher mit echtem Login (Test-Account)
Neuer gegateter Test (PYRAMID_LIVE_TEST=1, Windows): echter Login als
pyramidtest1, Byte-Pruefung der Platte (kein SQLite-Header, Token +
Nachricht nicht im Klartext, Positiv-Kontrolle in Klartext-DB),
Neustart aus verschluesselter DB, Logout/Re-Login, Migration einer
Klartext-DB mit echter eingeloggter Session. Zugangsdaten bleiben
ausserhalb des Repos.

Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-06 22:11:48 +02:00
Bernd SteckmeisterandClaude Fable 5 17b3798dc0 docs: zweiter Netz-Blip 18:25 ebenfalls ohne Logout ueberstanden; Frage an Bernd (Test-Account fuer Emulator-Tests) notiert
Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-06 18:29:36 +02:00
Bernd SteckmeisterandClaude Fable 5 f2b9afbfea test: SQLCipher auf Android-Emulator verifiziert (Neuanlage verschluesselt, Klartext-Migration, Neustart ohne Re-Migration)
Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-06 18:28:25 +02:00
Bernd SteckmeisterandClaude Fable 5 9693174de9 docs: auth_log-Check 17:43-Fenster - echter 7-min-Netzausfall ohne Logout ueberstanden, Sync selbst erholt
Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-06 18:20:24 +02:00
Bernd SteckmeisterandClaude Fable 5 bca7abb206 docs: Session-Abschluss protokolliert (Analyse-Korrektur, VoicePrefs-Tests, 32 Tests im Testplan, Beobachtung laeuft seit 17:43)
Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-06 17:55:03 +02:00
Bernd SteckmeisterandClaude Fable 5 6b0ae21f2b docs: State-Management-Ist-Analyse + Umbauplan (M2), ROADMAP-Punkt annotiert
Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-06 17:50:05 +02:00
Bernd SteckmeisterandClaude Fable 5 52b0ae975a docs: settings_encryption-Split + auth_log-Check 17:14-Fenster protokolliert, Beobachtung auf 17:43 umgestellt
Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-06 17:45:36 +02:00
Bernd Steckmeister 643ba662dd docs: voice_channel-Split protokolliert, ROADMAP-Nachtrag (app_shell bleibt bewusst ungeteilt) 2026-07-06 17:15:46 +02:00
Bernd Steckmeister b131f56b72 docs: M2-Teilschritte call_ui-Modul + VoicePrefs-Fassade protokolliert, ROADMAP/Schnitt-Doc nachgezogen 2026-07-06 17:10:37 +02:00
Bernd Steckmeister b84d31ca87 docs: auth_log-Langzeit-Check - 12:43-Lauf endete frueh (kein Logout), Beobachtung 16:57 neu gestartet 2026-07-06 16:59:34 +02:00
Bernd Steckmeister f87db183ea docs: Haertetest-Stand in PC_TESTPLAN/ROADMAP/PROGRESS - automatisierbarer Teil erledigt
- flutter test gruen (29), Session ueber 3 Starts + DB-Migration stabil,
  E2EE-Empfang belegt, auth_log unauffaellig
- Langzeit-Beobachtung laeuft (App entkoppelt gestartet 12:43); Klick-Teile
  (Senden, Logout/Re-Login, Splits 2-8, Voice-Join) fuer Bernd abgegrenzt
2026-07-06 12:45:20 +02:00
Bernd Steckmeister 3c7eb9ddca refactor: M2-Call-Pilot – Module call_signaling + voice_channel mit Fassaden (Entscheidung 2)
- 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)
2026-07-06 12:42:59 +02:00
Bernd Steckmeister f64398d3c6 feat: SQLCipher-Verschluesselung der pyramid.sqlite (M1) via neue Storage-Fassade app_database.dart
- AppDatabase.open()/openForPush() kapseln Factory, Schluessel (Keystore),
  Klartext->SQLCipher-Migration (Backup/Verify/atomarer Tausch) und PRAGMAs
- Android/Windows/Linux verschluesselt, iOS/macOS bewusst Klartext
- 5 neue Tests mit echter SQLCipher-DLL; Windows-Praxistest mit echter DB
  erfolgreich (23 Tabellen verifiziert, E2EE intakt); Android UNGETESTET
2026-07-06 12:31:38 +02:00
Bernd SteckmeisterandClaude Fable 5 cead62ccb2 fix: Autopilot fest auf nordmann-Konto (Bernd 2026-07-06) – Review (aa): private E-Mail vor Publikation entfernt, *.bak-* gitignored
Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-06 11:58:32 +02:00
Bernd SteckmeisterandClaude Fable 5 4d16d49012 docs: Fable-5-Review (z) – (y)-Protokoll geprüft (kein Befund), Ende-Kriterium der Review-Kette geschärft
Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-05 19:03:56 +02:00
Bernd SteckmeisterandClaude Fable 5 725f03abb0 docs: Fable-5-Review (y) – (x)-Hinterlassenschaft geprüft/nachgeholt, kein Pi-bearbeitbarer ROADMAP-Punkt offen
Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-05 18:41:20 +02:00
Bernd SteckmeisterandClaude Fable 5 15001ae80a docs: Fable-5-Review (x) – Protokoll-Commit der abgebrochenen Vorsession nachgeholt
Der (x)-Eintrag (Review von 66bf54b, kein Befund) lag fertig geschrieben,
aber uncommitted im Arbeitsbaum – die Session wurde vor ihrem
Protokoll-Commit abgebrochen. Inhalt in dieser Session gegengeprüft
(66bf54b-Diff, keine lib/-Änderungen seit 925aafb, A/B-Frage überall
geschlossen) und unverändert übernommen.

Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-05 18:40:06 +02:00
Bernd SteckmeisterandClaude Fable 5 66bf54bdff docs: Dashboard bleibt Heimnetz-only (Bernd Nr. 3) – ROADMAP-Punkt geschlossen, Doku nachgezogen, Nr.-4-Vermerk am Secrets-Punkt
Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-05 14:53:27 +02:00
Bernd SteckmeisterandClaude Fable 5 81ec06398f docs: Fable-5-Review (v)+(w) – PC-Commits 825481e/4477ed9 geprüft, Fix korrekt, 1 Doku-Lücke (Entscheidung 3 nicht nachgezogen)
Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-05 14:52:09 +02:00
Bernd Steckmeister 825481e6fa docs: Bernds Richtungsfragen beantwortet (ANTWORTEN_BERND.md) - SQLCipher vor M2, Call-Pilot zuerst, Dashboard Heimnetz-only, History unangetastet 2026-07-05 07:41:36 +02:00
Bernd SteckmeisterandClaude Fable 5 af7c538e18 docs: Fable-5-Review (u) – (t)-Fix verifiziert, server.py-Review-Kette konvergiert
Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-04 19:44:55 +02:00
Bernd SteckmeisterandClaude Fable 5 d3e75c36a1 security: server.py Restbefund aus Review (t) – registration-status antwortet generisch statt str(e)
Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-04 19:21:19 +02:00
Bernd SteckmeisterandClaude Fable 5 13b333cbec security: server.py Restbefunde aus Review (s) – ban/unban-Body vor ADMIN_LOCK, generische 500er auf oeffentlichen Routen
Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-04 18:56:42 +02:00
Bernd SteckmeisterandClaude Fable 5 5ada0e5038 security: server.py Restbefunde aus Review (r) – GET-Leser-Lock, Content-Length-Haertung, secrets-Token
Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-04 14:46:27 +02:00
Bernd SteckmeisterandClaude Fable 5 c8ff850c98 security: server.py Admin-Routen serialisieren (ADMIN_LOCK, Review-Befund q)
Threading-Umstellung aus (p) hatte eine Nebenlaeufigkeits-Race in den
Admin-Routen erzeugt: conduit.toml Read-Modify-Write + docker restart und
der send_admin-Readback-nach-sleep waren seit multithreaded race-faehig.
ADMIN_LOCK serialisiert NUR die Admin-Mutationen; die oeffentlichen Routen
(livekit-token, e2ee-diagnostics) laufen zuerst und bleiben nebenlaeufig,
der Slow-Loris-Schutz aus (p) bleibt erhalten. Headless verifiziert.

Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-04 14:20:42 +02:00
Bernd SteckmeisterandClaude Fable 5 343545b59e security: server.py multithreaded + Diag-Log-Lock (Review-Befund p, Threading-Haertung vollendet)
Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-04 13:51:32 +02:00
Bernd SteckmeisterandClaude Fable 5 455742d1bf security: Dashboard-Admin-Routen per Interims-Gate auf Heimnetz begrenzt (Befund o)
server.py (auf dem Pi, nicht im Repo): /api/ban, /api/unban,
/api/toggle-registration, /api/create-invite, /api/run-stats nur noch fuer
Heimnetz-/localhost-Socket-IPs ohne Cloudflare-Header; sonst 403 mit
Erklaerung. Headless verifiziert (9 Pruefungen). Bernds A/B-Entscheidung
fuer den Fernzugriff bleibt offen (docs/DASHBOARD_AUTH_HARDENING.md).
Zusatzbefund: Repo privat schalten wuerde In-App-Updater brechen (ROADMAP).

Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-04 09:17:56 +02:00
Bernd SteckmeisterandClaude Fable 5 e97a748b35 security: KRITISCH – Dashboard-Admin-Endpoints ohne Auth (Review-Befund o)
Fable-5-Review (n)+(o) beim Gegenlesen von server.py auf dem Pi:

(o) KRITISCH: /api/ban, /api/unban, /api/toggle-registration, /api/create-invite,
/api/run-stats sind über https://dashboard.steggi-matrix.work oeffentlich
erreichbar und pruefen KEINEN Token (per curl belegt: App-eigene 400-Antwort
ueber die oeffentliche URL). Fremde koennten Uta sperren oder offene
Registrierung aktivieren; Hostname ist ueber CT-Logs auffindbar. Nicht blind
gefixt (jede Auth-Ergaenzung legt Bernds Dashboard bis zur Token-Eingabe lahm
-> kein Aussperren). Fertiger Plan mit zwei Wegen (Cloudflare Access / DASH_TOKEN)
in docs/DASHBOARD_AUTH_HARDENING.md, ROADMAP M0 dringend, wartet auf Bernds Wahl.

(n) LiveKit-Token-Route POST /api/livekit-token wurde von einer abgebrochenen
Session bereits live in server.py gebaut (unprotokolliert). Geprueft + headless
verifiziert (401/400/413/200, JWT-Signatur unabhaengig gegen livekit.yaml
gueltig, Identitaet = gepruefte user_id). Server-Seite des M0-LiveKit-Punkts
erledigt; Client-Umstellung + Rotation bleiben PC/Geraet (heiliger Call-Pfad).

Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-04 08:43:42 +02:00
Bernd SteckmeisterandClaude Fable 5 ba97f942d6 security: Diagnose-Endpoint gegen Disk-Fill haerten (Review-Befund l)
Fable-5-Review (l)+(m): /api/e2ee-diagnostics auf dem Pi las den Body ohne
Groessenlimit und haengte ihn unbegrenzt ans Log – bei oeffentlich bekanntem
DIAG_TOKEN ein Disk-Fill-DoS-Risiko. server.py: 256-KB-Body-Limit (413) +
20-MB-Log-Kappung, headless verifiziert (200/403/413). LiveKit-Plan (m)
gegen Code + Pi-Konfig gegengeprueft, stimmt.

Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-04 04:32:38 +02:00
Bernd SteckmeisterandClaude Fable 5 78e4174658 docs: LiveKit-Token-Minting-Migrationsplan (apiSecret raus aus Client)
Fertiger Umsetzungsplan fuer den offenen M0-Punkt: Token-Endpoint am
Dashboard-Server mintet LiveKit-JWTs server-seitig (Matrix-whoami-Auth,
stdlib-HMAC), Client holt nur das JWT. Braucht echten Call-Test -> nur Plan.

Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-04 04:06:53 +02:00
Bernd SteckmeisterandClaude Fable 5 925aafb2fe security: Admin-Token aus Client entfernen (E2EE-Diagnose entkoppeln)
Der Dashboard-Server benutzte fuer /api/e2ee-diagnostics denselben String
wie den Matrix-Admin-Token, weshalb der Client den vollen Server-Admin-Token
einbetten musste (jeder Nutzer, auch Uta, trug ihn im Geraet).

- server.py (Pi): eigener, eng begrenzter DIAG_TOKEN statt Admin-TOKEN
- settings_encryption.dart: benutzt den neuen Diagnose-Token
- grep J5lax lib/ jetzt leer; Endpoint verifiziert (neu 200, alt 403)

Admin-Token-Rotation bleibt offen (Bernds Sache, ROADMAP M0).

Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-04 04:04:15 +02:00
Bernd SteckmeisterandClaude Opus 4.8 fe6427bfba security: geleakte Secrets aus Repo entfernen (Review-Befund k)
Secret-Scan im Fable-5-Review fand vier aktive Zugangsdaten im
oeffentlich erreichbaren Gitea-Repo. Gefahrlos entfernbare Stellen:
- scripts/release.ps1: Gitea-Token -> Umgebungsvariable PYRAMID_GITEA_TOKEN
- docs/matrix-sdk/13-server-admin: 19x Admin-Token -> <ADMIN_TOKEN>

Client-eingebettete Secrets (LiveKit apiSecret, Admin-Token im
E2EE-Diagnose-Upload, Giphy-Key) brauchen Rotation + Server-Umbau
und stehen als neue M0-ROADMAP-Punkte (nicht blind auf dem Pi fixbar).

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-07-04 03:32:37 +02:00
Bernd SteckmeisterandClaude Fable 5 a5a5c4baf5 docs: Fable-5-Review um Punkte (h)-(j) ergänzt, Testplan auf 24 Tests
Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-03 23:22:15 +02:00
Bernd SteckmeisterandClaude Fable 5 7dfdbf1159 test: Vertragsnetz für die Storage-Fassade settings_prefs.dart
8 Tests mit dem offiziellen SharedPreferences-In-Memory-Mock: BoolPref,
StringSetPref, Theme-Prefs (Roundtrip/Teil-Save), Server-Banner inkl.
korruptes-JSON-Fehlerpfad. Sichert die Schnittstelle ab, die beim
M2-Storage-Umbau zur Pflicht-Fassade wird. Alle 22 Tests grün auf dem Pi.

Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-03 22:53:26 +02:00
Bernd SteckmeisterandClaude Fable 5 e0ac5cb9fd test: AuthLog-Regressionstests (wirft nie, 500-Zeilen-Kappung)
AuthLog.write ist der einzige Aufruf im catch-Pfad des Soft-Logout-Guards;
ein Throw dort würde im SDK zu logout()+clear() eskalieren. 4 neue Tests
sichern genau das ab (kaputte Plattform, leeres Log, Zeitstempel, Kappung).
path_provider_platform_interface als dev_dependency (war schon transitiv).
Alle 14 Tests grün auf dem Pi, flutter analyze unverändert.

Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-03 22:51:35 +02:00
Bernd SteckmeisterandClaude Fable 5 eebf8ae7dd docs: Fable-5-Review um Nachzügler-Punkte (e-g) ergänzt
Tests 99cde9a, Doku-Commits 16561bb/566938f und Autopilot-Konto-Wechsel
bfe5876 kritisch geprüft: keine Fehler, alle Behauptungen gegen Code/SDK
verifiziert. Damit sind ALLE als erledigt markierten Punkte reviewt.

Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-03 22:49:00 +02:00
Bernd SteckmeisterandClaude Fable 5 1630d0e389 chore: Commit-Hash im PROGRESS-Eintrag nachgetragen + Hook-Log
Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-03 22:23:12 +02:00
Bernd SteckmeisterandClaude Fable 5 99cde9a1e2 test: Regressionstests für Soft-Logout-Guard und Power-Levels-Schutz
Erste Testsuite des Projekts, gezielt für die zwei heiligsten Codepfade:
guardedSoftLogoutRefresh (wirft nie -> kein SDK-logout()+clear(), Uta-Bug)
und updatePowerLevelsSafely (Selbst-Aussperr-Schutz, Server-Stand bleibt
erhalten). 10 Tests, alle gruen auf dem Pi (flutter test laeuft headless).

Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-03 22:22:06 +02:00
Bernd SteckmeisterandClaude Fable 5 16561bbdeb docs: SQLCipher-Migrationsplan + konsolidierter PC-Testplan (M1-Vorbereitung)
Die zwei obersten offenen ROADMAP-Punkte sind PC-only in der Umsetzung,
aber jetzt maximal vorbereitet: docs/SQLCIPHER_MIGRATION.md (gegen beide
DB-Öffnungsstellen und matrix-6.2.0 verifiziert, inkl. Push-Isolate-Falle
und Migration-Race) und docs/PC_TESTPLAN.md (alle UNGETESTET(Pi)-Punkte
aus 7 verstreuten PROGRESS-Einträgen an einer Stelle).

Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-03 17:50:58 +02:00
Bernd SteckmeisterandClaude Fable 5 87b29b5912 docs: Fable-5-Review abgeschlossen und protokolliert (M0-Punkt abgehakt)
Review-Protokoll in PROGRESS.md nachgeholt (die Vorsession hatte f9979e4
und 891f348 gepusht, 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 <[email protected]>
2026-07-03 17:46:55 +02:00
Bernd SteckmeisterandClaude Sonnet 5 daf4cf3dad refactor: Gott-Datei document_viewer.dart in 5 Dateien aufgeteilt
Sechster Durchgang derselben part/part-of-Technik wie bei den 5 vorigen
Umbauten - reine Verschiebung, keine Logikänderung. document_viewer.dart
schrumpft von 1773 auf 20 Zeilen (nur noch Bibliothekskopf), 34
Top-Level-Bloecke (31 Klassen/Enums + 3 lose Funktionen) auf 5 thematische
Dateien unter lib/features/chat/document/ verteilt. Verifiziert per
automatisiertem Blockvergleich gegen das Original und flutter analyze
(weiterhin nur 1 bekannter Hinweis).

voice_channel.dart und app_shell.dart bewusst nicht angefasst - haengen an
der noch unentschiedenen Call-Fassade bzw. dem Bootstrap/Login-Pfad.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-07-03 12:59:03 +02:00