- 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.
3.3 KiB
3.3 KiB
| type | status | owner | date | participants | ||||
|---|---|---|---|---|---|---|---|---|
| Journal | COMPLETED | Curator | 2026-01-26 |
|
Session Log: 26. Jänner 2026
Zielsetzung
Stabilisierung der Web-Applikation (Wasm/JS) und Behebung von Datenbank-Initialisierungsfehlern (WebWorkerException) im Browser.
Durchgeführte Arbeiten
1. Web-App Datenbank (SQLDelight & Wasm)
- Problem: Die Web-App startete nicht mit einer
WebWorkerException. Ursache war, dass der Web Worker (sqlite.worker.js) und die zugehörige WASM-Datei (sqlite3.wasm) vom Browser nicht gefunden oder falsch geladen wurden. - Lösungsversuche:
- Aktivierung des Wasm-Targets (revertiert, da zu viele Folgefehler).
- Anpassung der Gradle-Tasks (
copySqliteAssetsToWebpackSource,copySqliteAssetsToDist), um Assets korrekt zu kopieren. - Anpassung des Workers (
sqlite.worker.js) für manuelles Laden der WASM-Datei viafetch. - Webpack-Hacks: Umfangreiche Anpassungen in
webpack.config.d/ignore-sqlite-wasm.js, um Webpack daran zu hindern,sqlite3.wasmals Modul zu parsen (was fehlschlug) und stattdessen auf eindummy.jsumzuleiten.
- Aktueller Stand:
- Der Build schlägt noch fehl mit
export 'default' ... was not found. - Die Strategie ist: Webpack sieht
dummy.js(als Ersatz fürsqlite3.mjsundsqlite3.wasm), während der Worker zur Laufzeit die echtesqlite3.wasmDatei manuell lädt. dummy.jsmuss so angepasst werden, dass es einen korrekten Default-Export bereitstellt.
- Der Build schlägt noch fehl mit
2. Unit Tests (Ping Feature)
- Problem:
PingViewModelTestschlug fehl, da Fehlerzustände nicht korrekt im UI-State gesetzt wurden. - Lösung:
PingViewModelangepasst, umerrorMessageim State bei Exceptions korrekt zu setzen. Tests sind wieder grün.
3. Gradle Build Optimierung
- Problem: Zirkuläre Abhängigkeiten zwischen Copy-Tasks und Webpack-Tasks.
- Lösung: Task-Reihenfolge in
build.gradle.ktskorrigiert (mustRunAfterstattdependsOnwo nötig).
Offene Punkte & Nächste Schritte
-
Web-App Build Fix:
dummy.jsmuss einen Default-Export (export default function...) bereitstellen, um den Import insqlite.worker.jszu befriedigen.- Danach sollte der Webpack-Build durchlaufen.
- Laufzeit-Test im Browser: Prüfen, ob der manuelle
fetchim Worker funktioniert und die DB initialisiert wird.
-
Wasm-Strategie:
- Langfristig sollte auf natives Wasm-Target umgestellt werden, sobald die Toolchain (Kotlin/Wasm + SQLDelight) stabiler ist. Aktuell ist der JS-Interop-Weg mit Webpack-Hacks notwendig.
-
Integration Test:
- Sobald die Web-App läuft: Vollständiger Durchstich (Login -> Ping -> DB Sync) im Browser testen.
Technische Erkenntnisse
- Webpack & Wasm: Webpack 5 tut sich schwer mit dynamischen
require-Aufrufen in Libraries wiesqlite-wasm, wenn diese nicht explizit alsexternalsoder viaNormalModuleReplacementPluginbehandelt werden. - SQLDelight im Browser: Die Kombination aus OPFS (Origin Private File System), Web Workern und Wasm erfordert präzise Kontrolle über das Laden der Assets, die Webpack oft "wegabstrahieren" will.
Status: 🟡 Build Failing (Web) / 🟢 Tests Passing (JVM)