/** * Feature Flag Lifecycle Registry — PRI-610 * * Evidence-backed lifecycle decision for every quiet flag in * DEFAULT_FEATURE_FLAGS. This is the machine-checked census: the contract * test in __tests__/feature-flag-lifecycle.test.ts enforces that no quiet * flag exists without a lifecycle decision ("feature purgatory = 0"). * * Decisions: * - KEEP_QUIET — real production consumer; stays quiet with explicit * graduation + retirement criteria. * - GRADUATE — default-on after validation (PRI-571 pattern); category * stays quiet so config rollback remains available. * - RETIRE — removal decided; carries the removal condition. * - STAGED — registered ahead of an approved roadmap phase; activation * wiring arrives with that phase (e.g. PRI-614 update convergence). * * Adding a new quiet flag REQUIRES a lifecycle entry here stating: * Purpose / Default / Rollback / Graduation criteria / Retirement criteria / * Exit path (see docs/process/feature-flag-lifecycle-census.md §New-flag rule). */ export type QuietFlagLifecycleDecision = 'KEEP_QUIET' | 'GRADUATE' | 'RETIRE' | 'STAGED'; export interface QuietFlagLifecycleEntry { decision: QuietFlagLifecycleDecision; /** Where the flag is consumed in production ('staged — none yet' for STAGED). */ consumers: readonly string[]; /** What evidence proves this decision (validation run, owner decision, roadmap issue). */ evidence: string; /** YYYY-MM-DD decision date. */ decided: string; /** REQUIRED for KEEP_QUIET/STAGED: what proves promotion to default-on/GATE B wiring. */ graduationCriteria: string; /** REQUIRED for all: the condition under which the flag (and its code) disappears. */ retirementCriteria: string; } export declare const QUIET_FLAG_LIFECYCLE: Readonly>; //# sourceMappingURL=feature-flag-lifecycle.d.ts.map