$overrides */ protected function makeExplanationReasonEnvelope(array $overrides = []): ReasonResolutionEnvelope { $nextSteps = $overrides['nextSteps'] ?? [NextStepOption::instruction('Review the recorded prerequisite before retrying.')]; return new ReasonResolutionEnvelope( internalCode: (string) ($overrides['internalCode'] ?? 'operator.explanation.test'), operatorLabel: (string) ($overrides['operatorLabel'] ?? 'Operator attention required'), shortExplanation: (string) ($overrides['shortExplanation'] ?? 'TenantPilot recorded a missing prerequisite for this workflow.'), actionability: (string) ($overrides['actionability'] ?? 'prerequisite_missing'), nextSteps: is_array($nextSteps) ? $nextSteps : [], showNoActionNeeded: (bool) ($overrides['showNoActionNeeded'] ?? false), diagnosticCodeLabel: $overrides['diagnosticCodeLabel'] ?? 'operator.explanation.test', trustImpact: (string) ($overrides['trustImpact'] ?? TrustworthinessLevel::Unusable->value), absencePattern: $overrides['absencePattern'] ?? 'blocked_prerequisite', ); } /** * @param array $overrides */ protected function makeArtifactTruthEnvelope( array $overrides = [], ?ReasonResolutionEnvelope $reason = null, ): ArtifactTruthEnvelope { return new ArtifactTruthEnvelope( artifactFamily: (string) ($overrides['artifactFamily'] ?? 'test_artifact'), artifactKey: (string) ($overrides['artifactKey'] ?? 'test_artifact:1'), workspaceId: (int) ($overrides['workspaceId'] ?? 1), tenantId: $overrides['tenantId'] ?? 1, executionOutcome: $overrides['executionOutcome'] ?? 'completed', artifactExistence: (string) ($overrides['artifactExistence'] ?? 'created'), contentState: (string) ($overrides['contentState'] ?? 'trusted'), freshnessState: (string) ($overrides['freshnessState'] ?? 'current'), publicationReadiness: $overrides['publicationReadiness'] ?? null, supportState: (string) ($overrides['supportState'] ?? 'normal'), actionability: (string) ($overrides['actionability'] ?? 'none'), primaryLabel: (string) ($overrides['primaryLabel'] ?? 'Trustworthy artifact'), primaryExplanation: $overrides['primaryExplanation'] ?? 'The artifact can be used for the intended operator task.', diagnosticLabel: $overrides['diagnosticLabel'] ?? null, nextActionLabel: $overrides['nextActionLabel'] ?? null, nextActionUrl: $overrides['nextActionUrl'] ?? null, relatedRunId: $overrides['relatedRunId'] ?? null, relatedArtifactUrl: $overrides['relatedArtifactUrl'] ?? null, dimensions: [], reason: $reason instanceof ReasonResolutionEnvelope ? ArtifactTruthCause::fromReasonResolutionEnvelope($reason, 'test_artifact') : null, ); } }