# Journal: Feature-Modul `device-initialization` (Plug-and-Play) **Datum:** 18. April 2026 **Agent:** 🏗️ [Lead Architect] / 🎨 [Frontend Expert] ## 🎯 Zielsetzung Umstellung des Onboarding-Prozesses auf die neue **Plug-and-Play Struktur (ADR-0024)**. Ziel ist die Kapselung der Geräte-Initialisierung in ein autarkes Feature-Modul mit sauberem State-Management. ## 🛠️ Durchgeführte Änderungen ### 1. Neues Feature-Modul: `device-initialization` * Erstellung von `frontend/features/device-initialization`. * Implementierung der Multiplatform-Struktur (Common + JVM). * **Domain:** `DeviceInitializationSettings`, `NetworkRole`, `DeviceInitializationValidator`. * **Presentation:** `DeviceInitializationViewModel` (StateFlow-basiert), `DeviceInitializationUiState`. * **DI:** `DeviceInitializationModule.kt` für Koin. ### 2. UI-Refactoring * Extraktion der UI aus `OnboardingScreen` in zustandslose Composables. * `DeviceInitializationScreen` im `commonMain` für den Rahmen. * `DeviceInitializationConfig.jvm.kt` im `jvmMain` für plattformspezifische UI (z.B. `JFileChooser`). * Umstellung der Nomenklatur von "Onboarding" auf **"Geräte-Initialisierung"** (DeviceInitialization). ### 3. Integration in Desktop-Shell * Registrierung des Moduls in `settings.gradle.kts`. * Abhängigkeit in `meldestelle-desktop/build.gradle.kts` hinzugefügt. * Koin-Modul in `main.kt` registriert. * `DesktopApp.kt` und `DesktopMainLayout.kt` auf das neue ViewModel und den neuen Screen umgestellt. * Einführung des `DeviceInitializationSettingsManager`. ## ⚠️ Bekannte Themen (Cleanup) * Die alten Klassen `OnboardingScreen`, `OnboardingSettings`, `OnboardingValidator` und `SettingsManager` in `at.mocode.desktop.screens.onboarding` sind noch vorhanden und müssen in einer folgenden Session gelöscht werden, sobald die Referenzen stabil sind. * IDE-Referenzfehler bei neuen KMP-Modulen erfordern oft einen Gradle-Sync/Rebuild. ## 🏁 Fazit Der erste Schritt des "Schritt-für-Schritt"-Umbaus ist abgeschlossen. Die Startseite der App folgt nun dem Plug-and-Play Prinzip und ist fachlich präzise benannt. ## 🧹 Update (Nach-Korrektur) * **ViewModel-Fix:** `DeviceInitializationViewModel` erbt nun von `androidx.lifecycle.ViewModel`, was die Integration in `koinViewModel` ermöglicht. * **DesktopMainLayout:** Syntaxfehler beim `koinViewModel`-Aufruf behoben und Typos (`geraetName` -> `deviceName`) korrigiert. Unbenutzter `settings`-Parameter entfernt. * **Multiplatform-Härtung:** `DeviceInitializationSettingsManager` und `DeviceInitializationConfig` auf `expect/actual` umgestellt. * **Beta-Warnungen:** `@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING")` hinzugefügt, um Compiler-Warnungen in den Domain-Klassen zu unterdrücken. * **WASM-Komplettierung:** `DeviceInitializationSettingsManager` nutzt nun `localStorage` im Web. `DeviceInitializationConfig` wurde für WasmJS funktional implementiert (Basis-Konfiguration). * **UI-Cleanup:** Code-Duplikate in der Desktop-Konfiguration durch `MsSettingsField` reduziert.