$eligibleDimensions * @param list $reasons */ private function __construct( public readonly string $outcome, public readonly ?EvidenceSnapshot $snapshot, public readonly array $eligibleDimensions = [], public readonly array $reasons = [], ) {} public static function resolved(EvidenceSnapshot $snapshot, array $eligibleDimensions): self { return new self('resolved', $snapshot, $eligibleDimensions, []); } /** * @param list $reasons */ public static function missingSnapshot(array $reasons = []): self { return new self('missing_snapshot', null, [], $reasons); } /** * @param list $reasons */ public static function snapshotIneligible(EvidenceSnapshot $snapshot, array $reasons): self { return new self('snapshot_ineligible', $snapshot, [], $reasons); } public function isResolved(): bool { return $this->outcome === 'resolved' && $this->snapshot instanceof EvidenceSnapshot; } }