$meta */ public function __construct( public readonly string $policyType, public readonly string $subjectExternalId, public readonly string $hash, public readonly string $fidelity, public readonly string $source, public readonly ?CarbonImmutable $observedAt, public readonly ?int $observedOperationRunId = null, public readonly array $meta = [], ) {} public function key(): string { return $this->policyType.'|'.$this->subjectExternalId; } /** * @return array{ * fidelity: string, * source: string, * observed_at: ?string, * observed_operation_run_id: ?int * } */ public function provenance(): array { return EvidenceProvenance::build( fidelity: $this->fidelity, source: $this->source, observedAt: $this->observedAt, observedOperationRunId: $this->observedOperationRunId, ); } /** * @return array{hash: string, provenance: array} */ public function toFindingSideEvidence(): array { return [ 'hash' => $this->hash, 'provenance' => $this->provenance(), ]; } }