$context */ public function translate( ?string $reasonCode, ?string $artifactKey = null, string $surface = 'detail', array $context = [], ): ?ReasonResolutionEnvelope { $reasonCode = is_string($reasonCode) ? trim($reasonCode) : ''; if ($reasonCode === '') { return null; } return match (true) { $artifactKey === ProviderReasonTranslator::ARTIFACT_KEY, $artifactKey === null && $this->providerReasonTranslator->canTranslate($reasonCode) => $this->providerReasonTranslator->translate($reasonCode, $surface, $context), $artifactKey === self::EXECUTION_DENIAL_ARTIFACT, $artifactKey === null && ExecutionDenialReasonCode::tryFrom($reasonCode) instanceof ExecutionDenialReasonCode => ExecutionDenialReasonCode::tryFrom($reasonCode)?->toReasonResolutionEnvelope($surface, $context), $artifactKey === self::TENANT_OPERABILITY_ARTIFACT, $artifactKey === null && TenantOperabilityReasonCode::tryFrom($reasonCode) instanceof TenantOperabilityReasonCode => TenantOperabilityReasonCode::tryFrom($reasonCode)?->toReasonResolutionEnvelope($surface, $context), $artifactKey === self::RBAC_ARTIFACT, $artifactKey === null && RbacReason::tryFrom($reasonCode) instanceof RbacReason => RbacReason::tryFrom($reasonCode)?->toReasonResolutionEnvelope($surface, $context), $artifactKey === null && ProviderReasonCodes::isKnown($reasonCode) => $this->providerReasonTranslator->translate($reasonCode, $surface, $context), default => $this->fallbackTranslate($reasonCode, $artifactKey, $surface, $context), }; } /** * @param array $context */ private function fallbackTranslate( string $reasonCode, ?string $artifactKey, string $surface, array $context, ): ?ReasonResolutionEnvelope { if ($artifactKey === null) { $normalizedCode = \App\Support\OpsUx\RunFailureSanitizer::normalizeReasonCode($reasonCode); if ($normalizedCode !== $reasonCode) { return $this->translate($normalizedCode, null, $surface, $context + ['source_reason_code' => $reasonCode]); } } return $this->fallbackReasonTranslator->translate($reasonCode, $surface, $context); } }