--- type: ADR status: PROPOSED owner: Lead Architect date: 2026-04-21 --- # ADR-0025 — Wizard-Orchestrator (State-Machine, DSL, Guards, Effects) ## Kontext - Aktuelle Wizard-Implementierungen sind linear (`next/previous`) und hart verdrahtet in ViewModels. - Anforderungen: Kontextabhängige Pfade, Offline‑First (Autosave/Resume), testbare Regeln, einheitliche UX. ## Entscheidung - Einführung eines generischen Orchestrators mit deklarativem Flow: - `StepId` (typsicher je Flow), `WizardContext`, `WizardState`, `Guard`, `Transition`, `StepEffects`. - Kotlin‑DSL: `flow { step { whenGuard(id) go target; otherwise go … } }`. - Side‑Effects an Hooks (`onEnter/onLeave/onComplete`) für Prefetch, Autosave, Finalisierung. ## Konsequenzen - Vorteile: zentrale, testbare Navigationslogik; konsistente Draft‑Policy; bessere Übersicht/Erweiterbarkeit. - Risiken: Initialer Overhead, Lernkurve, Guard‑Sprawl; mitigiert durch README, DevTools, Linting/Namenskonventionen. ## Umsetzung - Modul `frontend/core/wizard` (runtime, dsl, devtools, draft) und `WizardScaffold` (Breadcrumb, Footer, Hotkeys). - Strangler‑Migration beginnend mit Event‑Flow; Feature‑Flag `WizardRuntimeEnabled`. ## Verweise - Roadmap‑Abschnitt: `docs/01_Architecture/MASTER_ROADMAP.md#3-initiative-wizard-orchestrator--offline-drafts-q2q3-2026` - Reference: `docs/01_Architecture/Reference/Wizard-DSL-README.md`