{
  "tool_id": "art-521-settlement-asset-backing-invariant",
  "note": "Vectors computed directly from the shipped kernel. Covers a clean movement that preserves aggregate circulation backing, the composition-break case that is the point of this node (a movement that leaves the buffer set's grand total unchanged but breaks the invariant), the same computation demonstrated for a pooled-account-backed and a reserve-backed settlement asset with zero kernel difference, a per-buffer floor breach, the zero-circulation/zero-buffer finite gate, a rejected fractional input, and (INBOUND-BUFFER-MODEL-1, spec §10.1) the declared-vacuous backing model for a direct/two-tier CBDC with no backing set, including one variant that still declares a liquidity buffer to prove floor/ceiling checks stay independent of the backing question.",
  "vectors": [
    {
      "name": "clean-central-issuance",
      "description": "Centrally-issued digital cash: a movement between two buffers that both back circulation leaves aggregate circulation-backing unchanged (102000.00 before and after). BACKING_INTACT, no breach.",
      "policy_parameters": {
        "as_of": "2026-08-01",
        "value_in_circulation_minor_units": 10000000,
        "backing_ratio_bps": 10000,
        "idle_cost_bps": 50,
        "cost_per_crossing_minor_units": 1500,
        "buffers": [
          {
            "buffer_id": "buffer-backing",
            "role": "backing_account",
            "asset_type": "conventional-asset",
            "backs": "circulation",
            "balance_minor_units": 6000000,
            "min_minor_units": 1000000,
            "max_minor_units": null
          },
          {
            "buffer_id": "buffer-payout",
            "role": "payout_buffer",
            "asset_type": "settlement-asset",
            "backs": "circulation",
            "balance_minor_units": 4200000,
            "min_minor_units": 500000,
            "max_minor_units": 8000000
          },
          {
            "buffer_id": "buffer-issuance",
            "role": "settlement_balance",
            "asset_type": "settlement-asset",
            "backs": "new_issuance",
            "balance_minor_units": 900000,
            "min_minor_units": 200000,
            "max_minor_units": null
          }
        ],
        "movements": [
          {
            "movement_id": "MOVE-1",
            "from": "buffer-backing",
            "to": "buffer-payout",
            "amount_minor_units": 200000
          }
        ]
      },
      "output_payload": {
        "as_of": "2026-08-01",
        "backing_model": "segregated",
        "backing_applicable": true,
        "value_in_circulation_minor_units": 10000000,
        "value_in_circulation_display": "100000.00",
        "backing_ratio_bps": 10000,
        "required_backing_minor_units": 10000000,
        "required_backing_display": "100000.00",
        "buffer_count": 3,
        "buffers": [
          {
            "buffer_id": "buffer-backing",
            "role": "backing_account",
            "asset_type": "conventional-asset",
            "backs": "circulation",
            "balance_before_minor_units": 6000000,
            "balance_after_minor_units": 5800000,
            "min_minor_units": 1000000,
            "max_minor_units": null
          },
          {
            "buffer_id": "buffer-payout",
            "role": "payout_buffer",
            "asset_type": "settlement-asset",
            "backs": "circulation",
            "balance_before_minor_units": 4200000,
            "balance_after_minor_units": 4400000,
            "min_minor_units": 500000,
            "max_minor_units": 8000000
          },
          {
            "buffer_id": "buffer-issuance",
            "role": "settlement_balance",
            "asset_type": "settlement-asset",
            "backs": "new_issuance",
            "balance_before_minor_units": 900000,
            "balance_after_minor_units": 900000,
            "min_minor_units": 200000,
            "max_minor_units": null
          }
        ],
        "aggregate_backing_before_minor_units": 10200000,
        "aggregate_backing_before_display": "102000.00",
        "backing_intact_before": true,
        "breaches_before": [],
        "aggregate_backing_after_minor_units": 10200000,
        "aggregate_backing_after_display": "102000.00",
        "backing_intact_after": true,
        "breaches_after": [],
        "movements": [
          {
            "movement_id": "MOVE-1",
            "from": "buffer-backing",
            "to": "buffer-payout",
            "amount_minor_units": 200000,
            "applied": true,
            "external_crossing": true
          }
        ],
        "movement_breaks_invariant": null,
        "buffer_margins": [
          {
            "buffer_id": "buffer-backing",
            "safe_margin_minor_units": 4800000
          },
          {
            "buffer_id": "buffer-payout",
            "safe_margin_minor_units": 3900000
          },
          {
            "buffer_id": "buffer-issuance",
            "safe_margin_minor_units": 700000
          }
        ],
        "thinnest_buffer": {
          "buffer_id": "buffer-issuance",
          "safe_margin_minor_units": 700000
        },
        "idle_amount_minor_units": 9400000,
        "idle_cost_minor_units": 47000,
        "idle_cost_display": "470.00",
        "crossing_count": 1,
        "crossing_cost_minor_units": 1500,
        "crossing_cost_display": "15.00",
        "rejected_inputs": [],
        "rationale": [
          "3 declared buffers; aggregate circulation-backing 102000.00 before movements, required 100000.00 at a 10000 bps ratio against 100000.00 in circulation.",
          "Backing was intact before the declared movements.",
          "After 1 applied movement, aggregate circulation-backing is 102000.00.",
          "Backing remains intact after the declared movements.",
          "This is an arithmetic check over declared balances and declared movements. It proves nothing about whether those declarations match any external ledger, and it recommends no action."
        ],
        "note": "Deterministic aggregate settlement-asset backing invariant check over caller-declared buffers, backing ratio, value in circulation, and a declared movement set. Verifies the AGGREGATE composition of the buffer set before and after the declared movements, not merely per-account totals or their grand sum. Settlement-asset agnostic: no currency, scheme, country, or issuer is named in this kernel. It performs no sweep, no netting, no reserve attestation, and issues no recommendation to move money. The caller declares backing_model (\"segregated\", default, or \"vacuous\" for a direct/two-tier CBDC with no backing set); the kernel never infers this from the buffer count, and BACKING_NOT_APPLICABLE is a defined non-pass answer, not BACKING_INTACT."
      },
      "compliance_flags": [
        "BACKING_INTACT"
      ],
      "golden_hash": "469947b9359fda8b456dba0b87cf8dd88b0f397c18bd5296e981d251248edf3f"
    },
    {
      "name": "composition-break-central-issuance",
      "description": "THE POINT OF THIS NODE. The buffer set's grand total is identical before and after (10900000 both times), but moving 3500000 out of a circulation-backing buffer into a new-issuance buffer drops aggregate circulation-backing from 100000.00 to 65000.00, well below the required 100000.00. MOVEMENT_BREAKS_INVARIANT identifies MOVE-1 specifically. A per-account or grand-total check would see nothing wrong.",
      "policy_parameters": {
        "as_of": "2026-08-01",
        "value_in_circulation_minor_units": 10000000,
        "backing_ratio_bps": 10000,
        "idle_cost_bps": 50,
        "cost_per_crossing_minor_units": 1500,
        "buffers": [
          {
            "buffer_id": "buffer-backing",
            "role": "backing_account",
            "asset_type": "conventional-asset",
            "backs": "circulation",
            "balance_minor_units": 6000000,
            "min_minor_units": 1000000,
            "max_minor_units": null
          },
          {
            "buffer_id": "buffer-payout",
            "role": "payout_buffer",
            "asset_type": "settlement-asset",
            "backs": "circulation",
            "balance_minor_units": 4000000,
            "min_minor_units": 500000,
            "max_minor_units": 8000000
          },
          {
            "buffer_id": "buffer-issuance",
            "role": "settlement_balance",
            "asset_type": "settlement-asset",
            "backs": "new_issuance",
            "balance_minor_units": 900000,
            "min_minor_units": 200000,
            "max_minor_units": null
          }
        ],
        "movements": [
          {
            "movement_id": "MOVE-1",
            "from": "buffer-payout",
            "to": "buffer-issuance",
            "amount_minor_units": 3500000
          }
        ]
      },
      "output_payload": {
        "as_of": "2026-08-01",
        "backing_model": "segregated",
        "backing_applicable": true,
        "value_in_circulation_minor_units": 10000000,
        "value_in_circulation_display": "100000.00",
        "backing_ratio_bps": 10000,
        "required_backing_minor_units": 10000000,
        "required_backing_display": "100000.00",
        "buffer_count": 3,
        "buffers": [
          {
            "buffer_id": "buffer-backing",
            "role": "backing_account",
            "asset_type": "conventional-asset",
            "backs": "circulation",
            "balance_before_minor_units": 6000000,
            "balance_after_minor_units": 6000000,
            "min_minor_units": 1000000,
            "max_minor_units": null
          },
          {
            "buffer_id": "buffer-payout",
            "role": "payout_buffer",
            "asset_type": "settlement-asset",
            "backs": "circulation",
            "balance_before_minor_units": 4000000,
            "balance_after_minor_units": 500000,
            "min_minor_units": 500000,
            "max_minor_units": 8000000
          },
          {
            "buffer_id": "buffer-issuance",
            "role": "settlement_balance",
            "asset_type": "settlement-asset",
            "backs": "new_issuance",
            "balance_before_minor_units": 900000,
            "balance_after_minor_units": 4400000,
            "min_minor_units": 200000,
            "max_minor_units": null
          }
        ],
        "aggregate_backing_before_minor_units": 10000000,
        "aggregate_backing_before_display": "100000.00",
        "backing_intact_before": true,
        "breaches_before": [],
        "aggregate_backing_after_minor_units": 6500000,
        "aggregate_backing_after_display": "65000.00",
        "backing_intact_after": false,
        "breaches_after": [],
        "movements": [
          {
            "movement_id": "MOVE-1",
            "from": "buffer-payout",
            "to": "buffer-issuance",
            "amount_minor_units": 3500000,
            "applied": true,
            "external_crossing": false
          }
        ],
        "movement_breaks_invariant": {
          "movement_id": "MOVE-1",
          "from": "buffer-payout",
          "to": "buffer-issuance",
          "amount_minor_units": 3500000,
          "reason": "aggregate circulation backing falls below the required ratio after this movement"
        },
        "buffer_margins": [
          {
            "buffer_id": "buffer-backing",
            "safe_margin_minor_units": 5000000
          },
          {
            "buffer_id": "buffer-payout",
            "safe_margin_minor_units": 0
          },
          {
            "buffer_id": "buffer-issuance",
            "safe_margin_minor_units": 4200000
          }
        ],
        "thinnest_buffer": {
          "buffer_id": "buffer-payout",
          "safe_margin_minor_units": 0
        },
        "idle_amount_minor_units": 9200000,
        "idle_cost_minor_units": 46000,
        "idle_cost_display": "460.00",
        "crossing_count": 0,
        "crossing_cost_minor_units": 0,
        "crossing_cost_display": "0.00",
        "rejected_inputs": [],
        "rationale": [
          "3 declared buffers; aggregate circulation-backing 100000.00 before movements, required 100000.00 at a 10000 bps ratio against 100000.00 in circulation.",
          "Backing was intact before the declared movements.",
          "After 1 applied movement, aggregate circulation-backing is 65000.00.",
          "Backing is short after the declared movements: composition shifted, not merely location.",
          "Movement MOVE-1 (buffer-payout -> buffer-issuance) is the first to break the invariant: aggregate circulation backing falls below the required ratio after this movement.",
          "This is an arithmetic check over declared balances and declared movements. It proves nothing about whether those declarations match any external ledger, and it recommends no action."
        ],
        "note": "Deterministic aggregate settlement-asset backing invariant check over caller-declared buffers, backing ratio, value in circulation, and a declared movement set. Verifies the AGGREGATE composition of the buffer set before and after the declared movements, not merely per-account totals or their grand sum. Settlement-asset agnostic: no currency, scheme, country, or issuer is named in this kernel. It performs no sweep, no netting, no reserve attestation, and issues no recommendation to move money. The caller declares backing_model (\"segregated\", default, or \"vacuous\" for a direct/two-tier CBDC with no backing set); the kernel never infers this from the buffer count, and BACKING_NOT_APPLICABLE is a defined non-pass answer, not BACKING_INTACT."
      },
      "compliance_flags": [
        "BACKING_SHORTFALL",
        "MOVEMENT_BREAKS_INVARIANT"
      ],
      "golden_hash": "f30eb22ed88e2f0ff4decb18eabceba7cd541c4a3420a6acc5c8bdbd09b84e7f"
    },
    {
      "name": "pooled-account-backed",
      "description": "SETTLEMENT-ASSET AGNOSTICISM CASE (b) of 3: a pooled-account-backed digital cash topology, same kernel, only the declared buffers differ. Both buffers back circulation, so a movement between them is composition-neutral. BACKING_INTACT.",
      "policy_parameters": {
        "as_of": "2026-08-01",
        "value_in_circulation_minor_units": 5000000,
        "backing_ratio_bps": 10000,
        "idle_cost_bps": 25,
        "cost_per_crossing_minor_units": 800,
        "buffers": [
          {
            "buffer_id": "pooled-account-1",
            "role": "backing_account",
            "asset_type": "conventional-asset",
            "backs": "circulation",
            "balance_minor_units": 3000000,
            "min_minor_units": 500000,
            "max_minor_units": null
          },
          {
            "buffer_id": "pooled-account-2",
            "role": "payout_buffer",
            "asset_type": "conventional-asset",
            "backs": "circulation",
            "balance_minor_units": 2200000,
            "min_minor_units": 300000,
            "max_minor_units": null
          }
        ],
        "movements": [
          {
            "movement_id": "MOVE-1",
            "from": "pooled-account-1",
            "to": "pooled-account-2",
            "amount_minor_units": 500000
          }
        ]
      },
      "output_payload": {
        "as_of": "2026-08-01",
        "backing_model": "segregated",
        "backing_applicable": true,
        "value_in_circulation_minor_units": 5000000,
        "value_in_circulation_display": "50000.00",
        "backing_ratio_bps": 10000,
        "required_backing_minor_units": 5000000,
        "required_backing_display": "50000.00",
        "buffer_count": 2,
        "buffers": [
          {
            "buffer_id": "pooled-account-1",
            "role": "backing_account",
            "asset_type": "conventional-asset",
            "backs": "circulation",
            "balance_before_minor_units": 3000000,
            "balance_after_minor_units": 2500000,
            "min_minor_units": 500000,
            "max_minor_units": null
          },
          {
            "buffer_id": "pooled-account-2",
            "role": "payout_buffer",
            "asset_type": "conventional-asset",
            "backs": "circulation",
            "balance_before_minor_units": 2200000,
            "balance_after_minor_units": 2700000,
            "min_minor_units": 300000,
            "max_minor_units": null
          }
        ],
        "aggregate_backing_before_minor_units": 5200000,
        "aggregate_backing_before_display": "52000.00",
        "backing_intact_before": true,
        "breaches_before": [],
        "aggregate_backing_after_minor_units": 5200000,
        "aggregate_backing_after_display": "52000.00",
        "backing_intact_after": true,
        "breaches_after": [],
        "movements": [
          {
            "movement_id": "MOVE-1",
            "from": "pooled-account-1",
            "to": "pooled-account-2",
            "amount_minor_units": 500000,
            "applied": true,
            "external_crossing": false
          }
        ],
        "movement_breaks_invariant": null,
        "buffer_margins": [
          {
            "buffer_id": "pooled-account-1",
            "safe_margin_minor_units": 2000000
          },
          {
            "buffer_id": "pooled-account-2",
            "safe_margin_minor_units": 2400000
          }
        ],
        "thinnest_buffer": {
          "buffer_id": "pooled-account-1",
          "safe_margin_minor_units": 2000000
        },
        "idle_amount_minor_units": 4400000,
        "idle_cost_minor_units": 11000,
        "idle_cost_display": "110.00",
        "crossing_count": 0,
        "crossing_cost_minor_units": 0,
        "crossing_cost_display": "0.00",
        "rejected_inputs": [],
        "rationale": [
          "2 declared buffers; aggregate circulation-backing 52000.00 before movements, required 50000.00 at a 10000 bps ratio against 50000.00 in circulation.",
          "Backing was intact before the declared movements.",
          "After 1 applied movement, aggregate circulation-backing is 52000.00.",
          "Backing remains intact after the declared movements.",
          "This is an arithmetic check over declared balances and declared movements. It proves nothing about whether those declarations match any external ledger, and it recommends no action."
        ],
        "note": "Deterministic aggregate settlement-asset backing invariant check over caller-declared buffers, backing ratio, value in circulation, and a declared movement set. Verifies the AGGREGATE composition of the buffer set before and after the declared movements, not merely per-account totals or their grand sum. Settlement-asset agnostic: no currency, scheme, country, or issuer is named in this kernel. It performs no sweep, no netting, no reserve attestation, and issues no recommendation to move money. The caller declares backing_model (\"segregated\", default, or \"vacuous\" for a direct/two-tier CBDC with no backing set); the kernel never infers this from the buffer count, and BACKING_NOT_APPLICABLE is a defined non-pass answer, not BACKING_INTACT."
      },
      "compliance_flags": [
        "BACKING_INTACT"
      ],
      "golden_hash": "ef86ba1d0805223bd4a0f54d85bbb4333f7e6db301c729ff92fbc03b3a1fe5b8"
    },
    {
      "name": "reserve-backed-stablecoin",
      "description": "SETTLEMENT-ASSET AGNOSTICISM CASE (c) of 3: a reserve-backed stablecoin topology at a 105% backing ratio, same kernel. Zero declared movements. BACKING_INTACT.",
      "policy_parameters": {
        "as_of": "2026-08-01",
        "value_in_circulation_minor_units": 20000000,
        "backing_ratio_bps": 10500,
        "idle_cost_bps": 10,
        "cost_per_crossing_minor_units": 2500,
        "buffers": [
          {
            "buffer_id": "reserve-account",
            "role": "backing_account",
            "asset_type": "reserve-asset",
            "backs": "circulation",
            "balance_minor_units": 15000000,
            "min_minor_units": 2000000,
            "max_minor_units": null
          },
          {
            "buffer_id": "redemption-buffer",
            "role": "payout_buffer",
            "asset_type": "settlement-asset",
            "backs": "circulation",
            "balance_minor_units": 6000000,
            "min_minor_units": 1000000,
            "max_minor_units": 9000000
          }
        ],
        "movements": []
      },
      "output_payload": {
        "as_of": "2026-08-01",
        "backing_model": "segregated",
        "backing_applicable": true,
        "value_in_circulation_minor_units": 20000000,
        "value_in_circulation_display": "200000.00",
        "backing_ratio_bps": 10500,
        "required_backing_minor_units": 21000000,
        "required_backing_display": "210000.00",
        "buffer_count": 2,
        "buffers": [
          {
            "buffer_id": "reserve-account",
            "role": "backing_account",
            "asset_type": "reserve-asset",
            "backs": "circulation",
            "balance_before_minor_units": 15000000,
            "balance_after_minor_units": 15000000,
            "min_minor_units": 2000000,
            "max_minor_units": null
          },
          {
            "buffer_id": "redemption-buffer",
            "role": "payout_buffer",
            "asset_type": "settlement-asset",
            "backs": "circulation",
            "balance_before_minor_units": 6000000,
            "balance_after_minor_units": 6000000,
            "min_minor_units": 1000000,
            "max_minor_units": 9000000
          }
        ],
        "aggregate_backing_before_minor_units": 21000000,
        "aggregate_backing_before_display": "210000.00",
        "backing_intact_before": true,
        "breaches_before": [],
        "aggregate_backing_after_minor_units": 21000000,
        "aggregate_backing_after_display": "210000.00",
        "backing_intact_after": true,
        "breaches_after": [],
        "movements": [],
        "movement_breaks_invariant": null,
        "buffer_margins": [
          {
            "buffer_id": "reserve-account",
            "safe_margin_minor_units": 13000000
          },
          {
            "buffer_id": "redemption-buffer",
            "safe_margin_minor_units": 5000000
          }
        ],
        "thinnest_buffer": {
          "buffer_id": "redemption-buffer",
          "safe_margin_minor_units": 5000000
        },
        "idle_amount_minor_units": 18000000,
        "idle_cost_minor_units": 18000,
        "idle_cost_display": "180.00",
        "crossing_count": 0,
        "crossing_cost_minor_units": 0,
        "crossing_cost_display": "0.00",
        "rejected_inputs": [],
        "rationale": [
          "2 declared buffers; aggregate circulation-backing 210000.00 before movements, required 210000.00 at a 10500 bps ratio against 200000.00 in circulation.",
          "Backing was intact before the declared movements.",
          "After 0 applied movements, aggregate circulation-backing is 210000.00.",
          "Backing remains intact after the declared movements.",
          "This is an arithmetic check over declared balances and declared movements. It proves nothing about whether those declarations match any external ledger, and it recommends no action."
        ],
        "note": "Deterministic aggregate settlement-asset backing invariant check over caller-declared buffers, backing ratio, value in circulation, and a declared movement set. Verifies the AGGREGATE composition of the buffer set before and after the declared movements, not merely per-account totals or their grand sum. Settlement-asset agnostic: no currency, scheme, country, or issuer is named in this kernel. It performs no sweep, no netting, no reserve attestation, and issues no recommendation to move money. The caller declares backing_model (\"segregated\", default, or \"vacuous\" for a direct/two-tier CBDC with no backing set); the kernel never infers this from the buffer count, and BACKING_NOT_APPLICABLE is a defined non-pass answer, not BACKING_INTACT."
      },
      "compliance_flags": [
        "BACKING_INTACT"
      ],
      "golden_hash": "4ce8d6d01f4b68db94913191f07169aeaadb684a6f9847421080d9e3152067a1"
    },
    {
      "name": "floor-breach-detected",
      "description": "Aggregate backing stays intact (13000.00 both before and after) but the movement drains buffer A below its declared 5000.00 floor. BUFFER_BELOW_FLOOR fires even though BACKING_INTACT holds -- per-buffer and aggregate checks are independent.",
      "policy_parameters": {
        "as_of": "2026-08-01",
        "value_in_circulation_minor_units": 1000000,
        "backing_ratio_bps": 10000,
        "idle_cost_bps": 0,
        "cost_per_crossing_minor_units": 0,
        "buffers": [
          {
            "buffer_id": "A",
            "role": "backing_account",
            "asset_type": "x",
            "backs": "circulation",
            "balance_minor_units": 1200000,
            "min_minor_units": 500000,
            "max_minor_units": null
          },
          {
            "buffer_id": "B",
            "role": "payout_buffer",
            "asset_type": "x",
            "backs": "circulation",
            "balance_minor_units": 100000,
            "min_minor_units": 50000,
            "max_minor_units": null
          }
        ],
        "movements": [
          {
            "movement_id": "MOVE-1",
            "from": "A",
            "to": "B",
            "amount_minor_units": 800000
          }
        ]
      },
      "output_payload": {
        "as_of": "2026-08-01",
        "backing_model": "segregated",
        "backing_applicable": true,
        "value_in_circulation_minor_units": 1000000,
        "value_in_circulation_display": "10000.00",
        "backing_ratio_bps": 10000,
        "required_backing_minor_units": 1000000,
        "required_backing_display": "10000.00",
        "buffer_count": 2,
        "buffers": [
          {
            "buffer_id": "A",
            "role": "backing_account",
            "asset_type": "x",
            "backs": "circulation",
            "balance_before_minor_units": 1200000,
            "balance_after_minor_units": 400000,
            "min_minor_units": 500000,
            "max_minor_units": null
          },
          {
            "buffer_id": "B",
            "role": "payout_buffer",
            "asset_type": "x",
            "backs": "circulation",
            "balance_before_minor_units": 100000,
            "balance_after_minor_units": 900000,
            "min_minor_units": 50000,
            "max_minor_units": null
          }
        ],
        "aggregate_backing_before_minor_units": 1300000,
        "aggregate_backing_before_display": "13000.00",
        "backing_intact_before": true,
        "breaches_before": [],
        "aggregate_backing_after_minor_units": 1300000,
        "aggregate_backing_after_display": "13000.00",
        "backing_intact_after": true,
        "breaches_after": [
          {
            "buffer_id": "A",
            "kind": "BUFFER_BELOW_FLOOR",
            "balance_minor_units": 400000,
            "threshold_minor_units": 500000
          }
        ],
        "movements": [
          {
            "movement_id": "MOVE-1",
            "from": "A",
            "to": "B",
            "amount_minor_units": 800000,
            "applied": true,
            "external_crossing": false
          }
        ],
        "movement_breaks_invariant": {
          "movement_id": "MOVE-1",
          "from": "A",
          "to": "B",
          "amount_minor_units": 800000,
          "reason": "this movement puts a buffer below its declared floor or above its declared ceiling"
        },
        "buffer_margins": [
          {
            "buffer_id": "A",
            "safe_margin_minor_units": -100000
          },
          {
            "buffer_id": "B",
            "safe_margin_minor_units": 850000
          }
        ],
        "thinnest_buffer": {
          "buffer_id": "A",
          "safe_margin_minor_units": -100000
        },
        "idle_amount_minor_units": 850000,
        "idle_cost_minor_units": 0,
        "idle_cost_display": "0.00",
        "crossing_count": 0,
        "crossing_cost_minor_units": 0,
        "crossing_cost_display": "0.00",
        "rejected_inputs": [],
        "rationale": [
          "2 declared buffers; aggregate circulation-backing 13000.00 before movements, required 10000.00 at a 10000 bps ratio against 10000.00 in circulation.",
          "Backing was intact before the declared movements.",
          "After 1 applied movement, aggregate circulation-backing is 13000.00.",
          "Backing remains intact after the declared movements.",
          "Movement MOVE-1 (A -> B) is the first to break the invariant: this movement puts a buffer below its declared floor or above its declared ceiling.",
          "This is an arithmetic check over declared balances and declared movements. It proves nothing about whether those declarations match any external ledger, and it recommends no action."
        ],
        "note": "Deterministic aggregate settlement-asset backing invariant check over caller-declared buffers, backing ratio, value in circulation, and a declared movement set. Verifies the AGGREGATE composition of the buffer set before and after the declared movements, not merely per-account totals or their grand sum. Settlement-asset agnostic: no currency, scheme, country, or issuer is named in this kernel. It performs no sweep, no netting, no reserve attestation, and issues no recommendation to move money. The caller declares backing_model (\"segregated\", default, or \"vacuous\" for a direct/two-tier CBDC with no backing set); the kernel never infers this from the buffer count, and BACKING_NOT_APPLICABLE is a defined non-pass answer, not BACKING_INTACT."
      },
      "compliance_flags": [
        "BACKING_INTACT",
        "BUFFER_BELOW_FLOOR",
        "MOVEMENT_BREAKS_INVARIANT"
      ],
      "golden_hash": "ee11692c3a899f24d4c37f0960ce1c1f0c9bc34e478aa7f74801e61dd7b09062"
    },
    {
      "name": "zero-circulation-zero-buffers-finite",
      "description": "FINITE GATE: zero declared circulation and zero declared buffers both resolve to a defined, non-dividing verdict. BACKING_INPUTS_INSUFFICIENT alongside BACKING_INTACT (vacuously, 0 >= 0), never NaN or a thrown error.",
      "policy_parameters": {
        "as_of": "2026-08-01",
        "value_in_circulation_minor_units": 0,
        "backing_ratio_bps": 10000,
        "idle_cost_bps": 0,
        "cost_per_crossing_minor_units": 0,
        "buffers": [],
        "movements": []
      },
      "output_payload": {
        "as_of": "2026-08-01",
        "backing_model": "segregated",
        "backing_applicable": true,
        "value_in_circulation_minor_units": 0,
        "value_in_circulation_display": "0.00",
        "backing_ratio_bps": 10000,
        "required_backing_minor_units": 0,
        "required_backing_display": "0.00",
        "buffer_count": 0,
        "buffers": [],
        "aggregate_backing_before_minor_units": 0,
        "aggregate_backing_before_display": "0.00",
        "backing_intact_before": true,
        "breaches_before": [],
        "aggregate_backing_after_minor_units": 0,
        "aggregate_backing_after_display": "0.00",
        "backing_intact_after": true,
        "breaches_after": [],
        "movements": [],
        "movement_breaks_invariant": null,
        "buffer_margins": [],
        "thinnest_buffer": null,
        "idle_amount_minor_units": 0,
        "idle_cost_minor_units": 0,
        "idle_cost_display": "0.00",
        "crossing_count": 0,
        "crossing_cost_minor_units": 0,
        "crossing_cost_display": "0.00",
        "rejected_inputs": [],
        "rationale": [
          "0 declared buffers; aggregate circulation-backing 0.00 before movements, required 0.00 at a 10000 bps ratio against 0.00 in circulation.",
          "Backing was intact before the declared movements.",
          "After 0 applied movements, aggregate circulation-backing is 0.00.",
          "Backing remains intact after the declared movements.",
          "This is an arithmetic check over declared balances and declared movements. It proves nothing about whether those declarations match any external ledger, and it recommends no action."
        ],
        "note": "Deterministic aggregate settlement-asset backing invariant check over caller-declared buffers, backing ratio, value in circulation, and a declared movement set. Verifies the AGGREGATE composition of the buffer set before and after the declared movements, not merely per-account totals or their grand sum. Settlement-asset agnostic: no currency, scheme, country, or issuer is named in this kernel. It performs no sweep, no netting, no reserve attestation, and issues no recommendation to move money. The caller declares backing_model (\"segregated\", default, or \"vacuous\" for a direct/two-tier CBDC with no backing set); the kernel never infers this from the buffer count, and BACKING_NOT_APPLICABLE is a defined non-pass answer, not BACKING_INTACT."
      },
      "compliance_flags": [
        "BACKING_INPUTS_INSUFFICIENT",
        "BACKING_INTACT"
      ],
      "golden_hash": "de4f56d205c6521d80a9ff7b3e3d45cc11894741ff08d13a42dfd8edf688b138"
    },
    {
      "name": "rejected-inputs-fractional",
      "description": "A fractional buffer balance (1.5 minor units) is coerced to 0 and named in rejected_inputs, never silently dropped and never NaN. The resulting all-zero backing is correctly reported as already short before any movement.",
      "policy_parameters": {
        "as_of": "2026-08-01",
        "value_in_circulation_minor_units": 1000000,
        "backing_ratio_bps": 10000,
        "idle_cost_bps": 0,
        "cost_per_crossing_minor_units": 0,
        "buffers": [
          {
            "buffer_id": "A",
            "role": "backing_account",
            "asset_type": "x",
            "backs": "circulation",
            "balance_minor_units": 1.5,
            "min_minor_units": 0,
            "max_minor_units": null
          }
        ],
        "movements": []
      },
      "output_payload": {
        "as_of": "2026-08-01",
        "backing_model": "segregated",
        "backing_applicable": true,
        "value_in_circulation_minor_units": 1000000,
        "value_in_circulation_display": "10000.00",
        "backing_ratio_bps": 10000,
        "required_backing_minor_units": 1000000,
        "required_backing_display": "10000.00",
        "buffer_count": 1,
        "buffers": [
          {
            "buffer_id": "A",
            "role": "backing_account",
            "asset_type": "x",
            "backs": "circulation",
            "balance_before_minor_units": 0,
            "balance_after_minor_units": 0,
            "min_minor_units": 0,
            "max_minor_units": null
          }
        ],
        "aggregate_backing_before_minor_units": 0,
        "aggregate_backing_before_display": "0.00",
        "backing_intact_before": false,
        "breaches_before": [],
        "aggregate_backing_after_minor_units": 0,
        "aggregate_backing_after_display": "0.00",
        "backing_intact_after": false,
        "breaches_after": [],
        "movements": [],
        "movement_breaks_invariant": null,
        "buffer_margins": [
          {
            "buffer_id": "A",
            "safe_margin_minor_units": 0
          }
        ],
        "thinnest_buffer": {
          "buffer_id": "A",
          "safe_margin_minor_units": 0
        },
        "idle_amount_minor_units": 0,
        "idle_cost_minor_units": 0,
        "idle_cost_display": "0.00",
        "crossing_count": 0,
        "crossing_cost_minor_units": 0,
        "crossing_cost_display": "0.00",
        "rejected_inputs": [
          {
            "where": "buffers[0].balance_minor_units",
            "reason": "not a safe integer number of minor units",
            "supplied": 1.5
          }
        ],
        "rationale": [
          "1 declared buffer; aggregate circulation-backing 0.00 before movements, required 10000.00 at a 10000 bps ratio against 10000.00 in circulation.",
          "Backing was already short before the declared movements.",
          "After 0 applied movements, aggregate circulation-backing is 0.00.",
          "Backing remains short after the declared movements.",
          "This is an arithmetic check over declared balances and declared movements. It proves nothing about whether those declarations match any external ledger, and it recommends no action."
        ],
        "note": "Deterministic aggregate settlement-asset backing invariant check over caller-declared buffers, backing ratio, value in circulation, and a declared movement set. Verifies the AGGREGATE composition of the buffer set before and after the declared movements, not merely per-account totals or their grand sum. Settlement-asset agnostic: no currency, scheme, country, or issuer is named in this kernel. It performs no sweep, no netting, no reserve attestation, and issues no recommendation to move money. The caller declares backing_model (\"segregated\", default, or \"vacuous\" for a direct/two-tier CBDC with no backing set); the kernel never infers this from the buffer count, and BACKING_NOT_APPLICABLE is a defined non-pass answer, not BACKING_INTACT."
      },
      "compliance_flags": [
        "BACKING_SHORTFALL"
      ],
      "golden_hash": "efa144e1b59f9bb273fe859b80fd54b5c2a312e73f3756f0a8009a782411564a"
    },
    {
      "name": "vacuous-direct-cbdc",
      "description": "SPEC §10.1: a direct/one-tier CBDC has NO backing set -- the holder claim IS central bank money. Declaring backing_model: vacuous returns BACKING_NOT_APPLICABLE, never BACKING_SHORTFALL and never BACKING_INPUTS_INSUFFICIENT (the pre-fix false-positive this row corrects). backing_intact_before/after are null, not true -- this is not a pass.",
      "policy_parameters": {
        "as_of": "2026-08-01",
        "backing_model": "vacuous",
        "value_in_circulation_minor_units": 50000000,
        "backing_ratio_bps": 10000,
        "idle_cost_bps": 0,
        "cost_per_crossing_minor_units": 0,
        "buffers": [],
        "movements": []
      },
      "output_payload": {
        "as_of": "2026-08-01",
        "backing_model": "vacuous",
        "backing_applicable": false,
        "value_in_circulation_minor_units": 50000000,
        "value_in_circulation_display": "500000.00",
        "backing_ratio_bps": 10000,
        "required_backing_minor_units": 50000000,
        "required_backing_display": "500000.00",
        "buffer_count": 0,
        "buffers": [],
        "aggregate_backing_before_minor_units": 0,
        "aggregate_backing_before_display": "0.00",
        "backing_intact_before": null,
        "breaches_before": [],
        "aggregate_backing_after_minor_units": 0,
        "aggregate_backing_after_display": "0.00",
        "backing_intact_after": null,
        "breaches_after": [],
        "movements": [],
        "movement_breaks_invariant": null,
        "buffer_margins": [],
        "thinnest_buffer": null,
        "idle_amount_minor_units": 0,
        "idle_cost_minor_units": 0,
        "idle_cost_display": "0.00",
        "crossing_count": 0,
        "crossing_cost_minor_units": 0,
        "crossing_cost_display": "0.00",
        "rejected_inputs": [],
        "rationale": [
          "Backing model declared as vacuous: no backing set exists for this settlement-asset topology (e.g. a direct/one-tier CBDC, where the holder's claim IS central bank money, or a two-tier/intermediated CBDC, where the claim is still on the central bank). BACKING_NOT_APPLICABLE is a defined answer, not a pass and not a shortfall -- this model has no backing question to evaluate.",
          "This is an arithmetic check over declared balances and declared movements. It proves nothing about whether those declarations match any external ledger, and it recommends no action."
        ],
        "note": "Deterministic aggregate settlement-asset backing invariant check over caller-declared buffers, backing ratio, value in circulation, and a declared movement set. Verifies the AGGREGATE composition of the buffer set before and after the declared movements, not merely per-account totals or their grand sum. Settlement-asset agnostic: no currency, scheme, country, or issuer is named in this kernel. It performs no sweep, no netting, no reserve attestation, and issues no recommendation to move money. The caller declares backing_model (\"segregated\", default, or \"vacuous\" for a direct/two-tier CBDC with no backing set); the kernel never infers this from the buffer count, and BACKING_NOT_APPLICABLE is a defined non-pass answer, not BACKING_INTACT."
      },
      "compliance_flags": [
        "BACKING_NOT_APPLICABLE"
      ],
      "golden_hash": "ca51c36dde7b9e3f0ec90b0baa4281538908ef473e8c66b9b2f122f02a47ca74"
    },
    {
      "name": "vacuous-with-liquidity-buffer-floor-breach",
      "description": "A two-tier CBDC agent bank can still declare an operational liquidity buffer even though the backing question is vacuous. Floor/ceiling breach detection is independent of backing_model: BUFFER_BELOW_FLOOR fires alongside BACKING_NOT_APPLICABLE, proving the two checks do not collapse into each other.",
      "policy_parameters": {
        "as_of": "2026-08-01",
        "backing_model": "vacuous",
        "value_in_circulation_minor_units": 50000000,
        "backing_ratio_bps": 10000,
        "idle_cost_bps": 0,
        "cost_per_crossing_minor_units": 0,
        "buffers": [
          {
            "buffer_id": "agent-liquidity",
            "role": "liquidity_buffer",
            "asset_type": "settlement-asset",
            "backs": "operational",
            "balance_minor_units": 400000,
            "min_minor_units": 500000,
            "max_minor_units": null
          }
        ],
        "movements": []
      },
      "output_payload": {
        "as_of": "2026-08-01",
        "backing_model": "vacuous",
        "backing_applicable": false,
        "value_in_circulation_minor_units": 50000000,
        "value_in_circulation_display": "500000.00",
        "backing_ratio_bps": 10000,
        "required_backing_minor_units": 50000000,
        "required_backing_display": "500000.00",
        "buffer_count": 1,
        "buffers": [
          {
            "buffer_id": "agent-liquidity",
            "role": "liquidity_buffer",
            "asset_type": "settlement-asset",
            "backs": "operational",
            "balance_before_minor_units": 400000,
            "balance_after_minor_units": 400000,
            "min_minor_units": 500000,
            "max_minor_units": null
          }
        ],
        "aggregate_backing_before_minor_units": 0,
        "aggregate_backing_before_display": "0.00",
        "backing_intact_before": null,
        "breaches_before": [
          {
            "buffer_id": "agent-liquidity",
            "kind": "BUFFER_BELOW_FLOOR",
            "balance_minor_units": 400000,
            "threshold_minor_units": 500000
          }
        ],
        "aggregate_backing_after_minor_units": 0,
        "aggregate_backing_after_display": "0.00",
        "backing_intact_after": null,
        "breaches_after": [
          {
            "buffer_id": "agent-liquidity",
            "kind": "BUFFER_BELOW_FLOOR",
            "balance_minor_units": 400000,
            "threshold_minor_units": 500000
          }
        ],
        "movements": [],
        "movement_breaks_invariant": null,
        "buffer_margins": [
          {
            "buffer_id": "agent-liquidity",
            "safe_margin_minor_units": -100000
          }
        ],
        "thinnest_buffer": {
          "buffer_id": "agent-liquidity",
          "safe_margin_minor_units": -100000
        },
        "idle_amount_minor_units": 0,
        "idle_cost_minor_units": 0,
        "idle_cost_display": "0.00",
        "crossing_count": 0,
        "crossing_cost_minor_units": 0,
        "crossing_cost_display": "0.00",
        "rejected_inputs": [],
        "rationale": [
          "Backing model declared as vacuous: no backing set exists for this settlement-asset topology (e.g. a direct/one-tier CBDC, where the holder's claim IS central bank money, or a two-tier/intermediated CBDC, where the claim is still on the central bank). BACKING_NOT_APPLICABLE is a defined answer, not a pass and not a shortfall -- this model has no backing question to evaluate.",
          "This is an arithmetic check over declared balances and declared movements. It proves nothing about whether those declarations match any external ledger, and it recommends no action."
        ],
        "note": "Deterministic aggregate settlement-asset backing invariant check over caller-declared buffers, backing ratio, value in circulation, and a declared movement set. Verifies the AGGREGATE composition of the buffer set before and after the declared movements, not merely per-account totals or their grand sum. Settlement-asset agnostic: no currency, scheme, country, or issuer is named in this kernel. It performs no sweep, no netting, no reserve attestation, and issues no recommendation to move money. The caller declares backing_model (\"segregated\", default, or \"vacuous\" for a direct/two-tier CBDC with no backing set); the kernel never infers this from the buffer count, and BACKING_NOT_APPLICABLE is a defined non-pass answer, not BACKING_INTACT."
      },
      "compliance_flags": [
        "BACKING_NOT_APPLICABLE",
        "BUFFER_BELOW_FLOOR"
      ],
      "golden_hash": "1c9d63cbb691b394c7d3ba9007081e354f6e509c7efadea774cc935c0f69b5e6"
    }
  ]
}
