{
  "_comment": "OpenChainGraph v0.4 conformance vector. Reproduce: execution_hash = SHA-256 hex of canonical_preimage; canonical_preimage = JSON.stringify(cgCanon({policy_parameters, output_payload})) per standard/SPEC.md §4. See README.md.",
  "tool_id": "art-01-ap2-mandate-chain-validator",
  "spec_version": "0.4.0",
  "fixture": "valid_trio_pass",
  "policy_parameters": {
    "validate_at": "2026-06-18T12:00:00.000Z",
    "hnp_mode": "strict",
    "intent": {
      "mandate_type": "intent",
      "mandate_id": "int-001",
      "version": "2.0",
      "issued_at": "2026-06-18T10:00:00.000Z",
      "expires_at": "2026-06-19T10:00:00.000Z",
      "issuer_id": "agent-alpha",
      "scope": {
        "merchant_ids": [
          "merchant-acme"
        ],
        "category_codes": [
          "5411",
          "5912"
        ],
        "currency": "USD",
        "max_amount": 500
      },
      "human_not_present": false
    },
    "cart": {
      "mandate_type": "cart",
      "mandate_id": "crt-001",
      "version": "2.0",
      "issued_at": "2026-06-18T11:00:00.000Z",
      "expires_at": "2026-06-19T11:00:00.000Z",
      "parent_mandate_id": "int-001",
      "parent_hash": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2",
      "cart_total": 38.97,
      "currency": "USD",
      "merchant_id": "merchant-acme"
    },
    "payment": {
      "mandate_type": "payment",
      "mandate_id": "pay-001",
      "version": "2.0",
      "issued_at": "2026-06-18T11:54:00.000Z",
      "expires_at": "2026-06-18T12:30:00.000Z",
      "parent_mandate_id": "crt-001",
      "parent_hash": "b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3",
      "amount": 38.97,
      "currency": "USD",
      "merchant_id": "merchant-acme",
      "payment_method": "card_on_file",
      "human_not_present": false
    }
  },
  "output_payload": {
    "validation_verdict": "PASS",
    "checks_run": 8,
    "failing_checks": [],
    "warning_checks": [],
    "mandate_ids": {
      "intent": "int-001",
      "cart": "crt-001",
      "payment": "pay-001"
    },
    "has_cart": true,
    "human_not_present": false
  },
  "canonical_preimage": "{\"output_payload\":{\"checks_run\":8,\"failing_checks\":[],\"has_cart\":true,\"human_not_present\":false,\"mandate_ids\":{\"cart\":\"crt-001\",\"intent\":\"int-001\",\"payment\":\"pay-001\"},\"validation_verdict\":\"PASS\",\"warning_checks\":[]},\"policy_parameters\":{\"cart\":{\"cart_total\":38.97,\"currency\":\"USD\",\"expires_at\":\"2026-06-19T11:00:00.000Z\",\"issued_at\":\"2026-06-18T11:00:00.000Z\",\"mandate_id\":\"crt-001\",\"mandate_type\":\"cart\",\"merchant_id\":\"merchant-acme\",\"parent_hash\":\"a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2\",\"parent_mandate_id\":\"int-001\",\"version\":\"2.0\"},\"hnp_mode\":\"strict\",\"intent\":{\"expires_at\":\"2026-06-19T10:00:00.000Z\",\"human_not_present\":false,\"issued_at\":\"2026-06-18T10:00:00.000Z\",\"issuer_id\":\"agent-alpha\",\"mandate_id\":\"int-001\",\"mandate_type\":\"intent\",\"scope\":{\"category_codes\":[\"5411\",\"5912\"],\"currency\":\"USD\",\"max_amount\":500,\"merchant_ids\":[\"merchant-acme\"]},\"version\":\"2.0\"},\"payment\":{\"amount\":38.97,\"currency\":\"USD\",\"expires_at\":\"2026-06-18T12:30:00.000Z\",\"human_not_present\":false,\"issued_at\":\"2026-06-18T11:54:00.000Z\",\"mandate_id\":\"pay-001\",\"mandate_type\":\"payment\",\"merchant_id\":\"merchant-acme\",\"parent_hash\":\"b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3\",\"parent_mandate_id\":\"crt-001\",\"payment_method\":\"card_on_file\",\"version\":\"2.0\"},\"validate_at\":\"2026-06-18T12:00:00.000Z\"}}",
  "execution_hash": "effeb3f1b34144404a0a97690595dfcbac32611eef034e0c7c091cb08eaf54b7"
}
