resolve(spec427AcceptedDomainResourceType()); expect($decision->sourceContractState)->toBe(CoverageSourceContractDecision::CONTRACT_BLOCKED_REPO_ADAPTER_MISSING) ->and($decision->sourceMetadata['workload'])->toBe('exchange') ->and($decision->sourceMetadata['source_class'])->toBe('tcm') ->and($decision->sourceMetadata['source_contract_name'])->toBe('exchange.acceptedDomain.source_contract_review') ->and($decision->sourceMetadata['source_contract_version'])->toBe('review-2026-07-03') ->and($decision->sourceMetadata['provider_adapter_state'])->toBe('missing') ->and($decision->sourceMetadata['identity_handoff']['preferred_identity_fields'])->toBe(['id', 'sourceId']) ->and($decision->sourceMetadata['identity_handoff']['fallback_identity_fields'])->toBe(['DomainName', 'domainName']) ->and($decision->sourceMetadata['response_shape']['display_safe_fields'])->toContain('DomainName') ->and($decision->sourceMetadata['normalization_handoff']['identity_fields'])->toContain('DomainName'); }); function spec427AcceptedDomainResourceType(): TenantConfigurationResourceType { $definition = collect(ResourceTypeRegistry::defaultDefinitions()) ->firstWhere('canonical_type', 'acceptedDomain'); expect($definition)->not->toBeNull('Missing default resource type definition for acceptedDomain.'); return new TenantConfigurationResourceType($definition); }