test/support/fixtures/artifact_catalog_fixtures.ex

58e6347eeb72 · 3 KB

defmodule OpenAgents.ArtifactCatalogFixtures do
  @moduledoc false

  alias OpenAgents.ArtifactCatalog
  alias OpenAgents.Provenance.Canonical

  def listing_attributes(overrides \\ %{}) do
    suffix = System.unique_integer([:positive, :monotonic])
    now = DateTime.utc_now()

    Map.merge(
      %{
        artifact_type: "dataset",
        owner_ref: "owner:openagents",
        owner_description: "Redacted support traces for tool-selection evaluation #{suffix}",
        source_ref: "vault://artifact-catalog/#{suffix}",
        artifact_digest: Canonical.sha256("artifact-#{suffix}"),
        provenance_digest: Canonical.sha256("provenance-#{suffix}"),
        provenance: %{
          "origin_class" => "consented support trace",
          "transformation_receipts" => ["redaction:#{suffix}"]
        },
        schema: %{
          "name" => "openagents.trace",
          "version" => "1",
          "format" => "jsonl"
        },
        size_bytes: 24_000,
        record_count: 120,
        coverage: %{
          "domains" => ["tool selection"],
          "languages" => ["en"],
          "record_types" => ["trace"]
        },
        redaction: %{
          "policy" => "support-trace-v1",
          "removed_fields" => ["account identifiers", "message source references"],
          "irreversible" => true
        },
        license_contract_ref: "license:opt-in:#{suffix}",
        license_terms: %{
          "opt_in" => true,
          "allowed_uses" => ["evaluation", "training"],
          "redistribution" => "prohibited"
        },
        license_effective_at: DateTime.add(now, -60, :second),
        license_expires_at: DateTime.add(now, 86_400, :second),
        price: %{
          "amount" => 25,
          "currency" => "USD",
          "unit" => "evaluation"
        },
        buyer_name: "OpenAgents continual-learning program",
        buyer_class: "openagents_training",
        verification_policy: %{
          "method" => "exact digest plus schema checks",
          "required_checks" => ["artifact_digest", "provenance_digest", "schema"],
          "policy_ref" => "verification:artifact-v1"
        },
        evidence_fresh_at: DateTime.add(now, -30, :second),
        publication_receipt_ref: "artifact-publication:#{suffix}"
      },
      overrides
    )
  end

  def publish_listing!(overrides \\ %{}) do
    {:ok, listing} =
      overrides
      |> listing_attributes()
      |> ArtifactCatalog.publish_listing()

    listing
  end

  def transaction_attributes(listing, predecessor_ref, overrides \\ %{}) do
    suffix = System.unique_integer([:positive, :monotonic])

    Map.merge(
      %{
        receipt_ref: "artifact-transaction:#{suffix}",
        predecessor_ref: predecessor_ref,
        external_ref: "external-evidence:#{suffix}",
        buyer_ref: "buyer:openagents",
        buyer_class: listing.buyer_class,
        artifact_digest: listing.artifact_digest,
        provenance_digest: listing.provenance_digest,
        license_digest: listing.license_digest,
        listing_digest: listing.listing_digest,
        metadata: %{"operator_receipt_ref" => "operator:#{suffix}"}
      },
      overrides
    )
  end
end