{
  "tool_id": "732-borrower-escrow-auditor",
  "note": "Reachability vectors only (kernel_generated by construction) — prove each declared refusal path fires. Conformance vectors live in 732-borrower-escrow-auditor.fixtures.json.",
  "vectors": [
    {
      "name": "identifier-field-reaches-refusal",
      "provenance": "kernel_generated",
      "policy_parameters": {
        "starting_balance": 0,
        "monthly_payments": [
          100,
          100,
          100,
          100,
          100,
          100,
          100,
          100,
          100,
          100,
          100,
          100
        ],
        "disbursements": [
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          1200
        ],
        "stated_balances": [
          100,
          200,
          300,
          "acct-4471",
          500,
          600,
          700,
          800,
          900,
          1000,
          1100,
          0
        ]
      },
      "observed_flags": [
        "IDENTIFIER_LIKE_FIELD_REFUSED"
      ],
      "observed": {
        "verdict": "refused",
        "refused_because": "identifier_or_free_text_value_in_declared_field",
        "refused_field": "stated_balances[3]",
        "manual_review_required": true
      }
    },
    {
      "name": "periods-over-bound-reaches-refusal",
      "provenance": "kernel_generated",
      "policy_parameters": {
        "starting_balance": 0,
        "monthly_payments": [
          100,
          100,
          100,
          100,
          100,
          100,
          100,
          100,
          100,
          100,
          100,
          100,
          100
        ],
        "disbursements": [
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0
        ],
        "stated_balances": [
          100,
          100,
          100,
          100,
          100,
          100,
          100,
          100,
          100,
          100,
          100,
          100,
          100
        ]
      },
      "observed_flags": [
        "PERIODS_EXCEED_BOUNDED_12_REFUSED"
      ],
      "observed": {
        "verdict": "refused",
        "refused_because": "periods_exceed_bounded_12",
        "refused_field": null,
        "manual_review_required": true
      }
    },
    {
      "name": "surplus-currency-unverified-reaches-hold",
      "provenance": "kernel_generated",
      "policy_parameters": {
        "starting_balance": 0,
        "monthly_payments": [
          300,
          300,
          300,
          300,
          300,
          300,
          300,
          300,
          300,
          300,
          300,
          300
        ],
        "disbursements": [
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          1200
        ],
        "stated_balances": [
          300,
          600,
          900,
          1200,
          1500,
          1800,
          2100,
          2400,
          2700,
          3000,
          3300,
          2400
        ],
        "stated_cushion": 100
      },
      "observed_flags": [
        "ESCROW_SURPLUS",
        "SURPLUS_REFUND_CURRENCY_UNVERIFIED"
      ],
      "observed": {
        "verdict": "completed",
        "refused_because": null,
        "refused_field": null,
        "manual_review_required": true
      }
    }
  ]
}
