Opaque artifact reference for contract ledgers and proof receipts.
The reference identifies a produced artifact by owner, producer repository, and artifact name only. It deliberately carries no higher-layer semantics.
@type t() :: %GroundPlane.Contracts.ArtifactRef{ name: String.t(), owner: String.t(), ref: String.t(), repo: String.t() }
@spec new(map()) :: {:ok, t()} | {:error, term()}
@spec new(String.t(), String.t(), String.t()) :: {:ok, t()} | {:error, term()}
@spec new!(String.t(), String.t(), String.t()) :: t()
@spec parse(String.t()) :: {:ok, t()} | {:error, term()}
@spec to_string(t()) :: String.t()
@spec valid?(term()) :: boolean()