Enabled Wasm target across all relevant modules and removed conditional enablement logic. Refactored `core:core-utils` to move JVM-specific code to a new `backend:infrastructure:persistence` module for strict KMP compliance. Updated dependencies, adjusted Gradle configurations, and resolved circular dependencies.
3.9 KiB
Architecture & Build Status Report
Datum: 09.01.2026 Von: Senior Backend Developer An: Lead Software Architect
1. Executive Summary
Wir haben eine umfassende Stabilisierung der Projekt-Architektur durchgeführt. Kritische Versionskonflikte im Backend (Spring Boot vs. Spring Cloud) wurden behoben. Die Trennung zwischen Frontend (KMP) und Backend (JVM) wurde durch Refactoring des core-Bereichs strikt durchgesetzt, um "Pollution" durch JVM-Code im Frontend zu verhindern.
Der Build-Prozess ist derzeit noch durch spezifische Kotlin/Wasm Kompilierungsfehler blockiert, die aus der strikten Typisierung und dem JS-Interop von WebAssembly resultieren.
2. Durchgeführte Maßnahmen
2.1 Backend Architecture Alignment
- Spring Cloud Konflikt gelöst: Downgrade von
2025.1.0(Oakwood, inkompatibel mit Boot 3.5) auf2025.0.1(Northfields). Dies verhindert garantierte Laufzeitfehler (NoSuchMethodError). - Java 25 Optimierung: Upgrade von Micrometer auf
1.16.1für besseren Virtual Thread Support. - Exposed Versionierung: Bestätigung der Nutzung von
1.0.0-rc-4(statt der veralteten 0.61.0).
2.2 Modul-Hygiene & KMP Trennung
- Refactoring
core:core-utils:- Das Modul enthielt JVM-spezifischen Code (
DatabaseUtils.ktmit Exposed-Abhängigkeiten), der den Frontend-Build (JS/Wasm) brach. - Lösung: Erstellung eines neuen Moduls
:backend:infrastructure:persistence. Der DB-Code wurde dorthin verschoben.core:core-utilsist nun ein reines KMP-Modul.
- Das Modul enthielt JVM-spezifischen Code (
- Zirkuläre Abhängigkeiten aufgelöst:
- Das Modul
frontend:sharedhatte Abhängigkeiten zu Feature-Modulen und dem Design-System, was zu Zyklen führte. - Lösung:
frontend:sharedwurde bereinigt und dient nun rein als Basis-Layer (Config, Utils).
- Das Modul
2.3 Build-System (Gradle & KMP)
- Wasm-Target Konsolidierung:
- Um Inkonsistenzen bei der Dependency Resolution zu beheben, wurde das Target
wasmJsprojektweit in allen relevanten KMP-Modulen (core,frontend) aktiviert. - Dies löste die
Unresolved platforms: [wasmJs]Fehler.
- Um Inkonsistenzen bei der Dependency Resolution zu beheben, wurde das Target
3. Aktuelle Blocker (Wasm Compiler)
Obwohl die Dependency-Struktur nun sauber ist, scheitert der Compiler im wasmJs Target an spezifischen Interop-Problemen:
- Fehlende Referenzen (
Unresolved reference):org.w3c.dom.Workerundkotlinx.browser.windowwerden im Wasm-Kontext nicht gefunden.- Ursache: Kotlin/Wasm benötigt möglicherweise explizite Imports oder externe Deklarationen für bestimmte DOM-APIs, die in Kotlin/JS implizit waren, oder die Standard-Bibliothek wird nicht korrekt eingebunden.
- JS-Interop Einschränkungen:
- Fehler:
Type 'ERROR CLASS: Symbol not found for Worker' cannot be used as return type. - Kotlin/Wasm erlaubt keine komplexen
js("...")Blöcke innerhalb von Funktionen und hat keinendynamicTyp. Unsere ersten Fixes (Helper-Funktionen) waren ein Schritt in die richtige Richtung, aber die Typen (wieWorker) müssen dem Compiler bekannt gemacht werden.
- Fehler:
4. Nächste Schritte (Plan)
- Wasm-Build reparieren:
- Prüfen, ob wir eine explizite Dependency (z.B.
kotlinx-browseroderkotlin-stdlib-wasm-js) benötigen. - Falls
Workerin der Wasm-Stdlib fehlt: Definition einerexternal class Workerfür Wasm erstellen, um dem Compiler den Typ bekannt zu machen.
- Prüfen, ob wir eine explizite Dependency (z.B.
- Backend-Verifikation ("Bauplan"):
- Sobald der Build durchläuft (oder wir das Frontend temporär exkludieren), werde ich den
ping-servicestarten. - Ziel: Nachweis, dass Spring Context, Datenbank-Verbindung (JPA) und die neue Modul-Struktur (
backend:infrastructure:persistence) zur Laufzeit funktionieren.
- Sobald der Build durchläuft (oder wir das Frontend temporär exkludieren), werde ich den
- Sync-Strategie:
- Anschließend widmen wir uns der im Frontend-Report erwähnten "Offline-Sync"-Logik (basierend auf UUIDv7).
Empfehlung: Wir sollten den Wasm-Build-Fix priorisieren, da er aktuell das gesamte Projekt blockiert ("Fail Fast").