{
  "tool_id": "art-388-tempo-fee-amm-converter",
  "note": "golden_hash filled by golden-parity.test.mjs --update. Vector 1 is a normal in-depth conversion; vector 2 exceeds the declared 30% pool-utilization guard; vector 3 is the empty-input finite-gate edge.",
  "vectors": [
    {
      "name": "normal_conversion_within_depth",
      "description": "1000 fee-token units converted at 0.9970 against deep pool reserves; well within the 30% utilization guard.",
      "policy_parameters": {
        "fee_token": "USDT",
        "validator_token": "USDC",
        "user_token_in": "1000000000000000000000",
        "pool_reserves": {
          "fee_token_reserve": "500000000000000000000000",
          "validator_token_reserve": "500000000000000000000000"
        }
      },
      "output_payload": {
        "fee_token": "USDT",
        "validator_token": "USDC",
        "conversion_ok": true,
        "validator_token_out": "997000000000000000000",
        "lp_fee_amount": "3000000000000000000",
        "pool_utilization_bps": 19,
        "max_pool_utilization_bps": 3000,
        "reason": null,
        "note": "Fee-AMM rate (0.9970 / 30bps LP fee) per docs.tempo.xyz/protocol/fees/spec-fee. Pool-utilization guard is a declared calculator parameter, not a Tempo protocol constant."
      },
      "golden_hash": "ad86324e57c38e7e42b7ddb14f5531e4d2a42f0571d51340396a2b02407a919e"
    },
    {
      "name": "insufficient_liquidity",
      "description": "Requested conversion would consume more than the declared 30% max pool utilization -- output-or-failure returns failure, not a partial fill.",
      "policy_parameters": {
        "fee_token": "USDT",
        "validator_token": "USDC",
        "user_token_in": "400000000000000000000000",
        "pool_reserves": {
          "fee_token_reserve": "500000000000000000000000",
          "validator_token_reserve": "500000000000000000000000"
        }
      },
      "output_payload": {
        "fee_token": "USDT",
        "validator_token": "USDC",
        "conversion_ok": false,
        "validator_token_out": null,
        "lp_fee_amount": "1200000000000000000000",
        "pool_utilization_bps": 7976,
        "max_pool_utilization_bps": 3000,
        "reason": "INSUFFICIENT_LIQUIDITY",
        "note": "Fee-AMM rate (0.9970 / 30bps LP fee) per docs.tempo.xyz/protocol/fees/spec-fee. Pool-utilization guard is a declared calculator parameter, not a Tempo protocol constant."
      },
      "golden_hash": "0588603eb66fedd7dfacfef5d0d4f75c0162855876bf895b3f333354729bbb00"
    },
    {
      "name": "empty_input_finite_gate",
      "description": "Empty policy_parameters must reject cleanly (MALFORMED_INPUT), never emit NaN/Infinity.",
      "policy_parameters": {},
      "output_payload": {
        "fee_token": "",
        "validator_token": "",
        "conversion_ok": false,
        "validator_token_out": null,
        "lp_fee_amount": null,
        "pool_utilization_bps": null,
        "reason": "MALFORMED_INPUT"
      },
      "golden_hash": "86fb638b0667c204644505befe2f5eac16a9c50784ff619b278d1f7203ea0a74"
    }
  ]
}
