3.8 KiB
M006 — Feature-Flag-Engine (Code-Layer)
Block: Querschnitt-Hülle Teil 1 (Bauprinzipien)
Bauprinzip: A.7 — Feature-Flags als Standard-Einführungs-Hülle
Pflichtenheft-Quelle: _bmad-output/pflichtenheft/03-architektur.md Sektion A.7 + Modul 32
Ziel
Flag-Auswertung mit korrekter Priorität (direkte Ausnahme → Filter → Default). Code-Layer steht; Admin-UI später (M031-M033).
Pflichtenheft-Bezug
- A.7.1 — Neue Features hinter Flag, intern → ausgewählte → breit
- A.7.2 — Plattform-Admin schaltet ohne Deploy
- 32.4 — Auswertungs-Reihenfolge
Abhängigkeiten
- Vorbedingung: M001 (Flag-Änderungen werden geauditet)
- Wird benötigt von: allen folgenden Modulen mit gestaffeltem Roll-out
Out of Scope
- Admin-UI für Flag-Verwaltung → M031-M033
- Mandanten-Selbstbedienungs-Flags (Phase 2)
- Prozentualer Roll-out (Phase 2)
- A/B-/C-Tests (Phase 2)
Erfolgskriterium
featureFlag('foo', tenant) returns korrekten Wert nach Priorität; Test-Mode mit forced overrides; im Code referenzierter aber nicht definierter Flag → Klartext-Build-Warnung.
Hinweise für Slice-Planung
- Flag-Schema mit Lifecycle (Beta/Roll-out/GA/Abgekündigt)
- Resolver mit Caching
- Test-Mode für CI (forced overrides)
Definition of Done — verbindlich (siehe AGENTS.md + docs/INTEGRATION-CONTRACTS.md)
Dieses Milestone gilt nur dann als erledigt, wenn alle Punkte wahr sind. Bei Verstoß: PR-Block.
Erreichbarkeit
- Sidebar-Eintrag in
packages/ui-hivegrid/src/app-shell/sidebar.config.tsmit Permission-Gate (oder explizit dokumentiert, warum nur Inline-Verlinkung) — Gruppe gemäßdocs/INTEGRATION-CONTRACTS.md§1 - Route unter korrektem URL-Pattern (INTEGRATION-CONTRACTS §3)
- Breadcrumb für Detail-Routes (§4)
- Mobile-Tab-Bar-Eintrag falls mobile-relevant (§13)
- Customer-Portal-Sichtbarkeit explizit konfiguriert (§14)
Querschnitt-Wiring
- Audit läuft (auto via M001 oder manuell)
- Activity-Stream via
logActivitybei relevanter Aktion (M045) - Notifications via
notify()(M011), nicht direkt - Search-Index registriert in
indexed-entities.ts, falls suchbar - Permission-Filter via
withTenantScope()+withPermission()(M004) - Feature-Flag-fähig (M006) — Modul ohne Deploy abschaltbar
Code-Layer-Disziplin (PR-Block)
- Loader baut View-Model; UI-Component empfängt nur VM + Actions
- Keine Prisma-/Server-Imports in
packages/ui-hivegrid/** - Subframe-Output via Adapter, nicht direkt importiert
- Alle UI-Texte als i18n-Keys (M003-Build-Lint blockt sonst)
Tests
- Unit-Test für VM-Builder mit Zod-Schema-Validierung
- Smoke-Test
e2e/smoke/<modul>.spec.ts(Login → Route → Hauptaktion → erwartetes UI) - Hot-Swap-Drill grün (Smoke-Test gegen
packages/ui-mockaus M017) - Visual-Regression-Snapshot der Hauptansicht (M016)
Klartext (User-facing)
- Fehler-Texte aus M002-Catalog (kein HTTP-Code im UI)
- Empty-State mit Klartext + nächster Aktion
- Loading-State mit Klartext (kein leerer Spinner)
- Permission-Denied → 404, nicht 403 (Bauprinzip A.5.3)
Rollback-Pfad
- Forward-Only-DB-Migration mit Inverse-SQL als Kommentar
- Atomic-Slice-Commits (TC-Default)
- Feature-Flag vorhanden, um das Modul ohne Deploy auszuschalten
Klick-Pfad zum Prüfen (für User)
Wenn dieses Milestone fertig ist, prüft der User die Funktion über folgenden Pfad:
- Login als geeigneter User-Typ (siehe Erfolgskriterium oben)
- Sidebar-Gruppe + Eintrag öffnen (gemäß INTEGRATION-CONTRACTS.md §1)
- Hauptaktion ausführen
- Erwartetes Ergebnis sichtbar (siehe Erfolgskriterium)
Falls etwas nicht erreichbar ist: Milestone ist trotz „grüner Tests" nicht fertig — siehe Erreichbarkeits-Checkliste oben.