/** * Feature Flag Contract — PRI-239 * * Pure types and validators for the MVP-Quiet feature flag registry. * No I/O — YAML loading lives in pd-cli. */ export declare const VALID_CATEGORIES: readonly ['core', 'quiet', 'gone', 'legacy_retire']; export type FeatureFlagCategory = (typeof VALID_CATEGORIES)[number]; export declare const FEATURE_FLAG_ALIASES: Readonly>; export interface FeatureFlagOverrideNormalization { /** User override map re-keyed onto canonical IDs. */ normalized: Record; /** Non-silent diagnostics for alias conflicts (canonical wins, never silently). */ warnings: string[]; } /** * Normalize user flag overrides onto canonical IDs (PRI-609). * * - Alias keys are re-keyed to their canonical ID. * - When both the canonical ID and an alias are configured with DIFFERENT * enabled values, the conflict is reported as a warning and the canonical * entry wins — the outcome is deterministic and observable, never silent. * - Dangerous keys are dropped here so every downstream consumer inherits the * same rejection. */ export declare function normalizeFeatureFlagOverrides(userFlags: Record): FeatureFlagOverrideNormalization; export interface FeatureFlagDefinition { id: string; category: FeatureFlagCategory; enabled: boolean; since: string; description?: string; } export interface EffectiveFeatureFlags { flags: Record; source: 'defaults' | 'workspace_file'; configPath: string; warnings: string[]; } export interface ValidationResultOk { ok: true; value: FeatureFlagDefinition; } export interface ValidationResultErr { ok: false; errors: string[]; source: string; } export type ValidationResult = ValidationResultOk | ValidationResultErr; export declare function validateFeatureFlagRaw(raw: unknown, source: string): ValidationResult; export declare const DEFAULT_FEATURE_FLAGS: FeatureFlagDefinition[]; export declare function computeEffectiveFlags(userFlagsInput: Record, defaults: FeatureFlagDefinition[], configPath: string): EffectiveFeatureFlags; //# sourceMappingURL=feature-flag-contract.d.ts.map