meldestelle/docs/99_Journal/_archive/2026-01-28_Session_Log.md
StefanMoCoAt c51773a4c7 chore(docs+infra): update roadmap, improve home server plan, and archive outdated reports
- Adjusted infrastructure roadmap to use VM instead of nested LXC for Docker hosting, enhancing isolation and compatibility.
- Clarified multi-architecture CI/CD setup with native ARM64 builds and QEMU-based x86_64 builds.
- Updated documentation to include backup and offline-first strategies.
- Archived outdated session logs and reports for better file organization.
2026-02-06 20:49:47 +01:00

2.1 KiB

type status owner date participants
Journal COMPLETED Curator 2026-01-28
Lead Architect
Frontend Expert

Session Log: 28. Jänner 2026 - Lösung des SQLDelight-Sync-Problems

Zielsetzung

Systematische Analyse und Behebung des kritischen SQLDelight-Bugs in der Web-App (JS/Wasm), der einen echten Delta-Sync verhinderte.

Durchgeführte Arbeiten

1. Analyse & Fehlerreproduktion

  • Ausgangslage: Der PingEventRepositoryImpl enthielt einen Workaround, der getLatestSince() immer null zurückgeben ließ, um einen Full-Sync zu erzwingen.
  • Reproduktion: Der Workaround wurde entfernt und durch den ursprünglichen Code (db.appDatabaseQueries.selectLatestPingEventId().executeAsOneOrNull()) ersetzt.
  • Ergebnis: Der Fehler The driver used with SQLDelight is asynchronous... wurde wie erwartet in der Browser-Konsole reproduziert.

2. Systematische Ursachenforschung

  • Hypothese 1 (Konfiguration): Die Build-Konfiguration (frontend/core/local-db/build.gradle.kts) wurde überprüft. generateAsync.set(true) war korrekt gesetzt. Die Fehlermeldung war also eine falsche Fährte.
  • Hypothese 2 (API-Nutzung): Die Analyse ergab, dass .executeAsOneOrNull() eine blockierende API ist, die mit dem asynchronen Web-Worker-Treiber in Konflikt steht.
  • Lösung: Die korrekte, nicht-blockierende API aus der SQLDelight-Coroutines-Erweiterung muss verwendet werden.

3. Implementierung des Fixes

  • Der Aufruf in PingEventRepositoryImpl wurde von executeAsOneOrNull() auf awaitAsOneOrNull() geändert.
  • Der korrekte Import-Pfad app.cash.sqldelight.async.coroutines.awaitAsOneOrNull wurde hinzugefügt.

Ergebnis & Status

  • Erfolg: Das SQLDelight-Sync-Problem ist gelöst.
  • Die Web-App führt nun einen korrekten Delta-Sync durch, was durch den Aufruf des /api/ping/sync?since=... Endpunkts im Netzwerk-Log bestätigt wurde.
  • Die wichtigste technische Schuld im Frontend wurde beseitigt.

Nächste Schritte (Diskutiert)

  • Docker-Integration: Das Frontend (Build & Deployment) soll in die bestehende Docker-Konstruktion des Projekts integriert werden.