31 lines
1.4 KiB
Markdown
31 lines
1.4 KiB
Markdown
---
|
||
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`
|