{
  "schema_version": "closeedge_rejection_classes_v1",
  "contract_version": "1.1.0",
  "taxonomy_version": "2026-06-11",
  "source_of_truth": "/openapi.json",
  "boundary": "Operational diagnostics only. No execution, no custody, no order signing, no advice.",
  "classes": [
    {
      "class": "R1_WALLET_BINDING",
      "scope": "wallet identity, signature type, signer/maker/funder consistency",
      "codes": [
        "BINDING_EVIDENCE_MISSING",
        "UNSUPPORTED_SIGNATURE_TYPE",
        "POLY_1271_ADDRESS_MISMATCH",
        "ADDRESS_FORMAT_INVALID"
      ],
      "predicted_venue_strings": [
        "invalid signature",
        "invalid signature type",
        "invalid maker",
        "invalid signer"
      ],
      "sources": [
        "https://docs.polymarket.com/api-reference/authentication",
        "https://docs.polymarket.com/trading/deposit-wallets"
      ]
    },
    {
      "class": "R2_ALLOWANCE_BALANCE",
      "scope": "allowance, balance, balance/allowance sync, collateral mode",
      "codes": [
        "ALLOWANCE_EVIDENCE_MISSING",
        "ALLOWANCE_INSUFFICIENT",
        "BALANCE_SYNC_UNKNOWN",
        "COLLATERAL_MODE_UNKNOWN"
      ],
      "predicted_venue_strings": [
        "not enough balance / allowance",
        "allowance",
        "balance"
      ],
      "sources": [
        "https://docs.polymarket.com/trading/orders/overview",
        "https://docs.polymarket.com/resources/error-codes",
        "https://docs.polymarket.com/v2-migration"
      ]
    },
    {
      "class": "R3_TICK_PRECISION",
      "scope": "tick size and price precision",
      "codes": [
        "TICK_SIZE_MISSING",
        "PRICE_PRECISION_INVALID",
        "PRICE_OUT_OF_RANGE"
      ],
      "predicted_venue_strings": [
        "invalid tick size",
        "invalid price",
        "price out of range"
      ],
      "sources": [
        "https://docs.polymarket.com/api-reference/market-data"
      ]
    },
    {
      "class": "R4_METADATA_READINESS",
      "scope": "public metadata completeness, market state, and neg-risk metadata",
      "codes": [
        "METADATA_MISSING",
        "MARKET_NOT_ACTIVE",
        "NEG_RISK_METADATA_MISSING"
      ],
      "predicted_venue_strings": [
        "market closed",
        "market inactive",
        "market archived"
      ],
      "sources": [
        "https://docs.polymarket.com/quickstart",
        "https://docs.polymarket.com/api-reference/market-data"
      ]
    },
    {
      "class": "R5_MARKET_STATE",
      "scope": "venue mode, liveness, authenticated-client readiness, and market-state consistency not covered by metadata readiness",
      "codes": [
        "KALSHI_RSA_PSS_PATH_SIGNING_ADVISORY",
        "KALSHI_SESSION_LIVENESS_30M_ADVISORY",
        "KALSHI_RATE_LIMIT_TIER_ADVISORY"
      ],
      "predicted_venue_strings": [
        "market not accepting orders",
        "market disabled",
        "rate limit exceeded"
      ],
      "sources": [
        "https://docs.polymarket.com/api-reference/market-data",
        "https://docs.kalshi.com/getting_started/api_keys",
        "https://docs.kalshi.com/fix/authentication",
        "https://docs.kalshi.com/getting_started/rate_limits"
      ]
    },
    {
      "class": "R6_BOOK_STALENESS_LIQUIDITY",
      "scope": "public orderbook presence, freshness, spread, depth, and slippage estimate",
      "codes": [
        "BOOK_EMPTY",
        "BOOK_STALE",
        "SPREAD_TOO_WIDE",
        "DEPTH_TOO_LOW",
        "SLIPPAGE_TOO_HIGH",
        "BOOK_TIMESTAMP_MISSING"
      ],
      "predicted_venue_strings": [
        "order match delayed due to market conditions",
        "insufficient liquidity"
      ],
      "sources": [
        "https://docs.polymarket.com/api-reference/market-data",
        "https://docs.polymarket.com/resources/error-codes"
      ]
    },
    {
      "class": "R7_VENUE_MODE",
      "scope": "venue operating mode, maintenance state, session mode, or rule-change evidence that affects integration readiness",
      "codes": [
        "VENUE_RULE_CHANGE_BREAKING",
        "VENUE_RULE_CHANGE_WATCH"
      ],
      "predicted_venue_strings": [
        "migration required",
        "deprecated",
        "market not accepting orders"
      ],
      "sources": [
        "https://docs.polymarket.com/v2-migration",
        "https://docs.kalshi.com/getting_started/quick_start_market_data"
      ]
    },
    {
      "class": "R8_RESOLUTION_AMBIGUITY",
      "scope": "ambiguous, disputed, underspecified, or non-appealable resolution terms",
      "codes": [
        "NO_RULE_TEXT",
        "HIGH_DISPUTE_RISK"
      ],
      "predicted_venue_strings": [
        "disputed",
        "ambiguous resolution"
      ],
      "sources": [
        "https://docs.polymarket.com/markets/resolution",
        "https://docs.kalshi.com/getting_started/quick_start_market_data"
      ]
    }
  ]
}
