{
  "tool_id": "art-673-lending-recall-prioritizer",
  "note": "Golden vectors. 'parity-canonical-preimage' recomputes the spec's pinned execution_hash f6b720795124d31888e97a30ca0f4d0e0c5c2389ed620c25d5b02c24387dbc61 byte-identically (RECALL-PRIORITIZER-BUILD-SPEC.md). 'opposite-verdict-nothing-urgent' and 'same-day-urgent-and-due-tie' are the required opposite-verdict vectors; the remainder are fail-closed refusals. human_sign_off: PENDING.",
  "vectors": [
    {
      "name": "parity-canonical-preimage",
      "golden_hash": "f6b720795124d31888e97a30ca0f4d0e0c5c2389ed620c25d5b02c24387dbc61",
      "policy_parameters": {
        "as_of": "2026-09-03",
        "recalls": [
          {
            "id": "R-A",
            "due": "2026-09-04",
            "qty": 10000
          },
          {
            "id": "R-B",
            "due": "2026-09-08",
            "qty": 2000
          }
        ]
      },
      "output_payload": {
        "queue": [
          "R-A",
          "R-B"
        ],
        "urgent": [
          "R-A"
        ],
        "trace": "R-A due 2026-09-04 is 1 day from as_of -> urgent; rank by due date then qty",
        "overall": "QUEUE_RANKED"
      }
    },
    {
      "name": "opposite-verdict-nothing-urgent",
      "policy_parameters": {
        "as_of": "2026-09-03",
        "recalls": [
          {
            "id": "R-X",
            "due": "2026-09-10",
            "qty": 500
          },
          {
            "id": "R-Y",
            "due": "2026-09-09",
            "qty": 9000
          },
          {
            "id": "R-Z",
            "due": "2026-09-09",
            "qty": 1000
          }
        ]
      },
      "output_payload": {
        "queue": [
          "R-Z",
          "R-Y",
          "R-X"
        ],
        "urgent": [],
        "trace": "rank by due date then qty; none due within 1 day of as_of",
        "overall": "QUEUE_RANKED"
      },
      "golden_hash": "56fe42cdf091ba0138366782485a3a5987571067ecc4713d0f54b437563549fb"
    },
    {
      "name": "same-day-urgent-and-due-tie",
      "policy_parameters": {
        "as_of": "2026-09-03",
        "recalls": [
          {
            "id": "R-B2",
            "due": "2026-09-03",
            "qty": 700
          },
          {
            "id": "R-A2",
            "due": "2026-09-04",
            "qty": 900
          },
          {
            "id": "R-C2",
            "due": "2026-09-02",
            "qty": 50
          }
        ]
      },
      "output_payload": {
        "queue": [
          "R-C2",
          "R-B2",
          "R-A2"
        ],
        "urgent": [
          "R-B2",
          "R-A2"
        ],
        "trace": "R-B2 due 2026-09-03 is 0 days from as_of -> urgent; R-A2 due 2026-09-04 is 1 day from as_of -> urgent; rank by due date then qty",
        "overall": "QUEUE_RANKED"
      },
      "golden_hash": "910a92c3a0be9ef97a8b8b5574ddca7a6cbc85e8e0b1949783eb57fe2c6252fd"
    },
    {
      "name": "fail-closed-invalid-calendar-date",
      "policy_parameters": {
        "as_of": "2026-09-03",
        "recalls": [
          {
            "id": "R-A",
            "due": "2026-02-30",
            "qty": 5
          }
        ]
      },
      "output_payload": {
        "queue": null,
        "urgent": null,
        "trace": "fail-closed: recalls[0].due: each recall due must be a valid calendar date in YYYY-MM-DD form; no queue ranked or urgency flagged -- correct the named inputs and resubmit. Prioritizer over caller-declared synthetic inputs only: not live recall data, not an instruction to recall or return any security.",
        "overall": "INPUT_REFUSED",
        "domain_errors": [
          "INVALID_RECALL_DUE"
        ]
      },
      "golden_hash": "4e67a567b53c61e66ff0612b73414d2045c9e2b0ebeb5d6bd335633a68af7d5e"
    },
    {
      "name": "fail-closed-empty-inputs",
      "policy_parameters": {},
      "output_payload": {
        "queue": null,
        "urgent": null,
        "trace": "fail-closed: as_of must be a valid calendar date in YYYY-MM-DD form; recalls must be a non-empty array of declared recalls, at most 512 entries; no queue ranked or urgency flagged -- correct the named inputs and resubmit. Prioritizer over caller-declared synthetic inputs only: not live recall data, not an instruction to recall or return any security.",
        "overall": "INPUT_REFUSED",
        "domain_errors": [
          "INVALID_AS_OF",
          "INVALID_RECALLS"
        ]
      },
      "golden_hash": "7cb02c3e0e4ff3bf81f237fd420599f7a769655a8c2f8c75f8d3f42d0a97bbd7"
    },
    {
      "name": "fail-closed-bad-qty",
      "policy_parameters": {
        "as_of": "2026-09-03",
        "recalls": [
          {
            "id": "R-A",
            "due": "2026-09-04",
            "qty": 12.5
          }
        ]
      },
      "output_payload": {
        "queue": null,
        "urgent": null,
        "trace": "fail-closed: recalls[0].qty: each recall qty must be a positive whole number of units; no queue ranked or urgency flagged -- correct the named inputs and resubmit. Prioritizer over caller-declared synthetic inputs only: not live recall data, not an instruction to recall or return any security.",
        "overall": "INPUT_REFUSED",
        "domain_errors": [
          "INVALID_RECALL_QTY"
        ]
      },
      "golden_hash": "531d214afefa17b1d688e611a5050bac5b32d1aa696be8e88768f6968be3c9c2"
    }
  ]
}
