toReasonResolutionEnvelope(); expect($envelope->internalCode)->toBe(ExecutionDenialReasonCode::MissingCapability->value) ->and($envelope->diagnosticCode())->toBe(ExecutionDenialReasonCode::MissingCapability->value) ->and($envelope->operatorLabel)->toBe('Permission required') ->and($envelope->shortExplanation)->toContain('capability required for this queued run') ->and($envelope->guidanceText())->toBe('Next step: Review workspace or tenant access before retrying.'); }); it('classifies tenant-operability execution denials as retryable when the tenant can recover', function (): void { $envelope = ExecutionDenialReasonCode::TenantNotOperable->toReasonResolutionEnvelope(); expect($envelope->actionability)->toBe('retryable_transient') ->and($envelope->guidanceText())->toBe('Next step: Review tenant readiness before retrying.'); });