$states DiviFeature value => state */ public static function useStates(array $states, string $version = '5.3.0'): void { $features = []; $overall = ReleaseState::Released; foreach (DiviFeature::cases() as $feature) { $state = $states[$feature->value] ?? ReleaseState::Released; $features[$feature->value] = new FeatureStatus( $feature, $state, $state === ReleaseState::Released ? [] : ['Abweichung bei ' . $feature->label()], null ); if ($state === ReleaseState::Incompatible || ($state === ReleaseState::Untested && $overall === ReleaseState::Released)) { $overall = $state; } } $status = new ReleaseStatus($overall, $version, null, [], null, matrix: new CompatibilityMatrix(DiviFeature::cases(), $features)); ReleaseGate::useResolver(static fn (): ReleaseStatus => $status); } public static function lock(DiviFeature $feature, ReleaseState $state = ReleaseState::Untested): void { self::useStates([$feature->value => $state]); } }