active()) ->keyBy(static fn ($subjectType): string => $subjectType->subjectTypeKey) ->all(); expect($subjectTypes['deviceConfiguration']->domainKey)->toBe(GovernanceDomainKey::Intune) ->and($subjectTypes['deviceConfiguration']->subjectClass)->toBe(GovernanceSubjectClass::Policy) ->and($subjectTypes['deviceConfiguration']->captureSupported)->toBeTrue() ->and($subjectTypes['deviceConfiguration']->compareSupported)->toBeTrue() ->and($subjectTypes['deviceConfiguration']->legacyBucket)->toBe('policy_types') ->and($subjectTypes['assignmentFilter']->domainKey)->toBe(GovernanceDomainKey::PlatformFoundation) ->and($subjectTypes['assignmentFilter']->subjectClass)->toBe(GovernanceSubjectClass::ConfigurationResource) ->and($subjectTypes['assignmentFilter']->legacyBucket)->toBe('foundation_types') ->and(array_key_exists('intuneRoleAssignment', $subjectTypes))->toBeFalse(); }); it('keeps unsupported foundation mappings addressable but inactive in the complete registry', function (): void { $registry = app(GovernanceSubjectTaxonomyRegistry::class); $subjectType = $registry->find('platform_foundation', 'intuneRoleAssignment'); expect($subjectType)->not->toBeNull() ->and($subjectType?->active)->toBeFalse() ->and($subjectType?->captureSupported)->toBeFalse() ->and($subjectType?->compareSupported)->toBeFalse(); }); it('reserves future-domain vocabulary without exposing future domains as active operator selections', function (): void { $registry = app(GovernanceSubjectTaxonomyRegistry::class); expect($registry->isKnownDomain('entra'))->toBeTrue() ->and($registry->allowsSubjectClass('entra', 'control'))->toBeTrue() ->and(collect($registry->active())->contains( static fn ($subjectType): bool => $subjectType->domainKey === GovernanceDomainKey::Entra, ))->toBeFalse(); });