{
  "tool_id": "art-151-agent-obo-mandate-validator",
  "note": "golden_hash empty until first `node golden-parity.test.mjs --update`.",
  "vectors": [
    {
      "name": "valid-obo-mandate",
      "policy_parameters": {
        "mandate": {
          "subject": "user:alice@example.com",
          "intent": "retrieve_invoice_data",
          "scope": [
            "invoices:read",
            "payments:read"
          ],
          "valid_until_unix": 9999999999
        },
        "now_unix": 1000000000
      },
      "output_payload": {
        "verdict": "ACCEPT",
        "has_subject": true,
        "has_intent": true,
        "has_scope": true,
        "not_expired": true,
        "gaps": []
      },
      "golden_hash": "6f9beb51867f1f07c6edbd2cd97553570a2fc0e95caee0329ead315131cbc0ed"
    },
    {
      "name": "expired-mandate",
      "policy_parameters": {
        "mandate": {
          "subject": "user:bob@example.com",
          "intent": "read_balances",
          "scope": [
            "accounts:read"
          ],
          "valid_until_unix": 1000000000
        },
        "now_unix": 1000000001
      },
      "output_payload": {
        "verdict": "REFUSE",
        "has_subject": true,
        "has_intent": true,
        "has_scope": true,
        "not_expired": false,
        "gaps": [
          "EXPIRED_OR_NO_VALIDITY"
        ]
      },
      "golden_hash": "215d21f251ecf67183269d9885b46034a20a1633da318e98f69e5ff70170e8e3"
    },
    {
      "name": "missing-subject-and-scope",
      "policy_parameters": {
        "mandate": {
          "intent": "do_something",
          "valid_until_unix": 9999999999
        },
        "now_unix": 1000000000
      },
      "output_payload": {
        "verdict": "REFUSE",
        "has_subject": false,
        "has_intent": true,
        "has_scope": false,
        "not_expired": true,
        "gaps": [
          "SUBJECT",
          "SCOPE"
        ]
      },
      "golden_hash": "229abd25bce278c2322baef0fff7a66e60e9cf40b3a0ec75b9f7b097385a076f"
    }
  ]
}
