Skip to content

Feature Flags

Flags schalten auf Build-Ebene. Weil die Ausgabe statisch ist, landet eine nicht gerenderte Komponente gar nicht erst im Ergebnis — ein deaktiviertes Feature kostet keine Bytes.

Verbotene Kombinationen

Diese Kombinationen brechen den Build ab. Jede steht für einen Zustand, der sonst erst im Betrieb auffallen würde — im ungünstigsten Fall als Datenschutzproblem.

KombinationGrund
deployment.target: 'github-pages' + forms.provider: 'standalone-php'GitHub Pages führt kein PHP aus
tracking.enabled: true + features.cookieConsent: falseTracking ohne Consent-Schicht
tracking.ga4 oder googleAds + tracking.enabled: falsewidersprüchlich
tracking.enabled: true ohne containerIdGTM ohne Container
consent.categories ohne necessarynotwendige Kategorie fehlt
tracking.ga4: true ohne Kategorie analyticsTag ohne zugehörige Einwilligung
tracking.googleAds: true ohne Kategorie marketingTag ohne zugehörige Einwilligung
Formular-Provider ohne endpointFormular ohne Ziel
joomla mit relativem EndpunktBackend-URL muss absolut sein
standalone-php mit fremder Domainmuss same-origin sein
seo.schemas.localBusiness ohne company.addressunbrauchbares JSON-LD
features.webMcp: true ohne Objekt webMcpexperimentelles Feature ohne Bestätigung
features.vue: true ohne installiertes @astrojs/vueInsel ohne Framework

Zusätzlich gelten in production die umgebungsabhängigen Regeln aus Environment.

Warum kein Flag ungetestet bleibt

Ein Flag, das niemand einschaltet, verrottet unbemerkt. Der Starter baut deshalb bei jedem pnpm verify zwei vollständige Konfigurationen:

FixtureZustand
tests/fixtures/configs/minimalalle optionalen Funktionen aus
tests/fixtures/configs/fullalle optionalen Funktionen an

Eine dritte Fixture, invalid, enthält eine verbotene Kombination. Ein Integrationstest startet damit einen echten Build und prüft, dass er abbricht und die Ursache nennt.

Regel für neue Flags

Ein neues Flag ist erst fertig, wenn beide Zustände in den Fixtures vorkommen und, sofern es mit anderen Optionen interagiert, eine Kombinationsregel samt Unit-Test existiert.

Eine Ausnahme ist features.vue: Da @astrojs/vue im Starter bewusst nicht vorinstalliert ist, lässt sich der aktive Zustand nicht als Build prüfen. Die Regel wird stattdessen im Unit-Test mit einem eingeschleusten Resolver abgedeckt.

Hintergrund in ADR 0002.