{
  "tool_id": "art-521-settlement-asset-backing-invariant",
  "tool_version": "1.0.0",
  "display_name": "Settlement-Asset Backing Invariant",
  "mcp_name": "verify_settlement_asset_backing",
  "mandate_type": "compliance_mandate",
  "wave": 80,
  "gpu": false,
  "url": "https://ainumbers.co/chaingraph/art-521-settlement-asset-backing-invariant.html",
  "description": "Checks whether value held across an issuance topology stays fully backed in aggregate, not merely per account, as balances move between caller-declared buffers. The caller names each buffer (its role, asset type, and what it backs), declares a backing-ratio requirement, per-buffer floor and ceiling, and a movement set. Evaluates the aggregate backing verdict before and after the declared movements, per-buffer floor/ceiling breaches, the thinnest safe margin per buffer, declared idle-balance cost versus declared crossing cost, and the specific movement that first breaks the invariant. Settlement-asset agnostic: the same kernel runs unchanged for centrally-issued digital cash, pooled-account-backed digital cash, and a reserve-backed stablecoin, demonstrated on fixtures with zero kernel difference. Does not sweep, net, or attest reserves, and issues no recommendation to move money.",
  "input_schema_ref": "chaingraph/art-521-settlement-asset-backing-invariant.html#manifest",
  "consumes": [],
  "feeds": [],
  "status": "live",
  "conformance_fixtures": true,
  "compute_capability": "server",
  "compute_images": [{"system":"sha256-source","image_id":"sha256:2c62975ee6e29f7fd6568274a00305cd6d0043e1c89119d37e1e5d16ce3371ef","valid_from":"2026-07-10"},{"system":"risc0","image_id":"sha256:a1a0bc89b5b1febaeda3519f6dbade0fa5ac16beeb143c4e1b01689573567bc6","valid_from":"2026-08-01"}],
  "export_capability": [
    "json"
  ],
  "compute_proof_ready": "ready",
  "compute_proof": {
    "type": "ZkVmReceipt",
    "system": "risc0",
    "receiptFormat": "groth16-bn254",
    "imageId": "sha256:a1a0bc89b5b1febaeda3519f6dbade0fa5ac16beeb143c4e1b01689573567bc6",
    "seal": "FQeAgCGnSV1eoklPvd7IDhJJUhjlA9o5KeVGq3F2y2YSbNJWOM/oFob8AO5TvJWuTIc/Yiyz0ppLgcTl9dee1SEnop4gP4IH72Tp2IF+YsalSisdSARf8eC6KKbTpKy5HdcjQY1yuWxIIZXQzzeTz5dorOLxSRIT+W+Dh0XBuEgI0EbONjedgFQ6XWWZvmmyoR42SnrkJfWHJxCf3+WWlwCxtdkQ9LlH84hwEMpIbRFQOcNEnvoz1ucwpkhY8IOHAQIwQoUF0Fwz1lt7Qdjb35jXrqg8+WhGxtDsXOLW5kMHPTeondLoWO5auBN+mSVyVBwlV/q1UvP4BjHjqoaBoQ==",
    "journal": {
      "chaingraph_version": "0.4.0",
      "kernel_digest": "sha256:2c62975ee6e29f7fd6568274a00305cd6d0043e1c89119d37e1e5d16ce3371ef",
      "output": {
        "aggregate_backing_after_display": "102000.00",
        "aggregate_backing_after_minor_units": 10200000,
        "aggregate_backing_before_display": "102000.00",
        "aggregate_backing_before_minor_units": 10200000,
        "as_of": "2026-08-01",
        "backing_applicable": true,
        "backing_intact_after": true,
        "backing_intact_before": true,
        "backing_model": "segregated",
        "backing_ratio_bps": 10000,
        "breaches_after": [],
        "breaches_before": [],
        "buffer_count": 3,
        "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
          }
        ],
        "buffers": [
          {
            "asset_type": "conventional-asset",
            "backs": "circulation",
            "balance_after_minor_units": 5800000,
            "balance_before_minor_units": 6000000,
            "buffer_id": "buffer-backing",
            "max_minor_units": null,
            "min_minor_units": 1000000,
            "role": "backing_account"
          },
          {
            "asset_type": "settlement-asset",
            "backs": "circulation",
            "balance_after_minor_units": 4400000,
            "balance_before_minor_units": 4200000,
            "buffer_id": "buffer-payout",
            "max_minor_units": 8000000,
            "min_minor_units": 500000,
            "role": "payout_buffer"
          },
          {
            "asset_type": "settlement-asset",
            "backs": "new_issuance",
            "balance_after_minor_units": 900000,
            "balance_before_minor_units": 900000,
            "buffer_id": "buffer-issuance",
            "max_minor_units": null,
            "min_minor_units": 200000,
            "role": "settlement_balance"
          }
        ],
        "crossing_cost_display": "15.00",
        "crossing_cost_minor_units": 1500,
        "crossing_count": 1,
        "idle_amount_minor_units": 9400000,
        "idle_cost_display": "470.00",
        "idle_cost_minor_units": 47000,
        "movement_breaks_invariant": null,
        "movements": [
          {
            "amount_minor_units": 200000,
            "applied": true,
            "external_crossing": true,
            "from": "buffer-backing",
            "movement_id": "MOVE-1",
            "to": "buffer-payout"
          }
        ],
        "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.",
        "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."
        ],
        "rejected_inputs": [],
        "required_backing_display": "100000.00",
        "required_backing_minor_units": 10000000,
        "thinnest_buffer": {
          "buffer_id": "buffer-issuance",
          "safe_margin_minor_units": 700000
        },
        "value_in_circulation_display": "100000.00",
        "value_in_circulation_minor_units": 10000000
      }
    }
  }
}
