{
  "version": "2026-06-02",
  "title": "QUAD public failure-first matrix",
  "owner": "uquad.org main website",
  "source_class": "static public failure matrix",
  "freshness": "Static fallback. Verify current failure state on the owning surface before quoting live status.",
  "boundary": "This file describes public failure labels, evidence to bring, next checks, and non-inference boundaries. It does not prove that any route has been tested live, recovered live, funded, settled, admitted, liquid, launched, sale-accessible, reward-eligible, allocated, or economically activated.",
  "global_rules": [
    "A happy path is not enough.",
    "A clear refusal is a valid product state.",
    "A stale value weakens the claim.",
    "A missing receipt is not proof of success.",
    "A support playbook is not manual override authority.",
    "If current owner state cannot be read, say it cannot be verified."
  ],
  "required_fields": [
    "failure_id",
    "owner_surface",
    "failure_class",
    "trigger",
    "expected_public_state",
    "evidence_to_bring",
    "next_public_check",
    "terminal_or_recovery_shape",
    "must_not_infer"
  ],
  "states": [
    "pending",
    "refused",
    "stale",
    "unavailable",
    "unpaid",
    "expired",
    "duplicate",
    "invalid",
    "unauthorized",
    "degraded",
    "quarantined",
    "recovered",
    "cannot_verify"
  ],
  "failure_cases": [
    {
      "failure_id": "stale-public-data-v1",
      "owner_surface": "Main website and owning chain surface",
      "failure_class": "freshness",
      "trigger": "A status value, proof row, dependency, or route output is older than the owning page says it should be.",
      "expected_public_state": "stale",
      "evidence_to_bring": [
        "status URL",
        "last update timestamp",
        "owner surface",
        "value being quoted"
      ],
      "next_public_check": "https://uquad.org/sources.html",
      "terminal_or_recovery_shape": "Downgrade the claim until the owner route publishes a fresh value or a cannot_verify label.",
      "must_not_infer": [
        "current chain state",
        "current balance",
        "current route availability",
        "settlement",
        "admission",
        "launch status"
      ]
    },
    {
      "failure_id": "replay-or-duplicate-v1",
      "owner_surface": "Core, Bridge, Infra, or Liquid",
      "failure_class": "replay_duplicate",
      "trigger": "A packet, request, quote, receipt, route id, or action id repeats a known public record.",
      "expected_public_state": "duplicate",
      "evidence_to_bring": [
        "duplicate id",
        "original id where known",
        "owner surface",
        "public route"
      ],
      "next_public_check": "https://uquad.org/errors.html",
      "terminal_or_recovery_shape": "Link to the original public record where safe, or refuse replay where the owning route requires uniqueness.",
      "must_not_infer": [
        "second payment accepted",
        "second settlement",
        "new allocation",
        "new receipt meaning",
        "bypass authority"
      ]
    },
    {
      "failure_id": "timeout-v1",
      "owner_surface": "Core, Infra, Bridge, Liquid, or external rail",
      "failure_class": "timeout",
      "trigger": "A quote, route, packet, proof window, finality wait, or provider action exceeds its public window.",
      "expected_public_state": "expired",
      "evidence_to_bring": [
        "quote id or route id",
        "timestamp",
        "owner surface",
        "visible expiry label"
      ],
      "next_public_check": "https://uquad.org/fees.html",
      "terminal_or_recovery_shape": "Publish expired, retryable, refund, refused, or cannot_verify according to the owner route.",
      "must_not_infer": [
        "funds lost",
        "route accepted",
        "manual override",
        "destination admission",
        "guaranteed recovery"
      ]
    },
    {
      "failure_id": "bad-denom-v1",
      "owner_surface": "Core, Bridge, Liquid, or wallet metadata",
      "failure_class": "denom",
      "trigger": "The denom, voucher, wrapper, or fee unit does not match the public contract for the route.",
      "expected_public_state": "invalid",
      "evidence_to_bring": [
        "displayed denom",
        "expected denom",
        "route or quote id",
        "wallet label where relevant"
      ],
      "next_public_check": "https://uquad.org/wallets.html",
      "terminal_or_recovery_shape": "Refuse or re-quote using the owner-published denom labels.",
      "must_not_infer": [
        "spend authority",
        "redemption",
        "admission",
        "yield",
        "destination acceptance"
      ]
    },
    {
      "failure_id": "missing-receipt-v1",
      "owner_surface": "Core, Infra, Bridge, Liquid, or support",
      "failure_class": "receipt",
      "trigger": "An action appears to have occurred, but the expected public receipt or proof route is missing.",
      "expected_public_state": "cannot_verify",
      "evidence_to_bring": [
        "transaction hash or action id",
        "expected receipt route",
        "owner surface",
        "timestamp"
      ],
      "next_public_check": "https://uquad.org/support.html",
      "terminal_or_recovery_shape": "Wait, reissue bounded evidence, downgrade, or refuse the stronger claim until the owner publishes proof.",
      "must_not_infer": [
        "successful completion",
        "custody",
        "settlement",
        "payload truth",
        "expanded receipt meaning"
      ]
    },
    {
      "failure_id": "challenged-receipt-v1",
      "owner_surface": "Infra or Bridge",
      "failure_class": "challenge",
      "trigger": "A receipt, provider result, host evidence, or proof is challenged by an owner route.",
      "expected_public_state": "quarantined",
      "evidence_to_bring": [
        "receipt id",
        "challenge id where public",
        "owner surface",
        "visible challenge label"
      ],
      "next_public_check": "https://uquad.org/acceptance.html",
      "terminal_or_recovery_shape": "Keep the evidence quarantined, refused, recovered, or downgraded until the owner publishes terminal state.",
      "must_not_infer": [
        "false proof",
        "accepted proof",
        "provider entitlement",
        "destination admission",
        "manual settlement"
      ]
    },
    {
      "failure_id": "underfunded-gas-or-unpaid-quote-v1",
      "owner_surface": "Infra, Bridge, Liquid, Core, wallet, or relayer",
      "failure_class": "funding",
      "trigger": "The visible action lacks required gas, quote payment, service funding, host cost, or relayer float.",
      "expected_public_state": "unpaid",
      "evidence_to_bring": [
        "quote id",
        "expected amount",
        "expected denom",
        "visible payment or gas label"
      ],
      "next_public_check": "https://uquad.org/fees.html",
      "terminal_or_recovery_shape": "Wait for accepted payment proof, expire, refuse, refund, or re-quote according to the owner route.",
      "must_not_infer": [
        "accepted work",
        "stored payload",
        "route admission",
        "provider payout",
        "reward denial"
      ]
    },
    {
      "failure_id": "wrong-signer-or-unauthorized-v1",
      "owner_surface": "Core, Infra, Bridge, Liquid, wallet, or operator route",
      "failure_class": "authority",
      "trigger": "The requester, signer, account class, or permission label does not allow the action.",
      "expected_public_state": "unauthorized",
      "evidence_to_bring": [
        "public account label",
        "route",
        "visible permission message",
        "owner surface"
      ],
      "next_public_check": "https://uquad.org/custody.html",
      "terminal_or_recovery_shape": "Refuse the action or route the reader to the public account class and owner surface.",
      "must_not_infer": [
        "custody",
        "reserve access",
        "spendability",
        "governance right",
        "private support authority"
      ]
    },
    {
      "failure_id": "bad-route-or-sibling-unavailable-v1",
      "owner_surface": "Core, Infra, Bridge, Liquid, or external rail",
      "failure_class": "dependency",
      "trigger": "A route depends on a sibling surface, external rail, relayer, indexer, RPC, wallet, or host that is stale, closed, or unavailable.",
      "expected_public_state": "degraded",
      "evidence_to_bring": [
        "route id",
        "source surface",
        "dependency surface",
        "last available status"
      ],
      "next_public_check": "https://uquad.org/dependencies.html",
      "terminal_or_recovery_shape": "Continue, sleep, refuse, retry, quarantine, downgrade, or cannot_verify according to the owner route.",
      "must_not_infer": [
        "full stack outage",
        "sibling authority",
        "destination admission",
        "live route readiness",
        "economic activation"
      ]
    },
    {
      "failure_id": "old-genesis-or-wrong-home-v1",
      "owner_surface": "Core, Infra, Bridge, Liquid, wallet, validator, or operator route",
      "failure_class": "configuration",
      "trigger": "A wallet, node, validator, CLI, or indexer is using stale chain metadata, wrong home, old genesis, or incompatible endpoint information.",
      "expected_public_state": "invalid",
      "evidence_to_bring": [
        "chain id",
        "metadata route",
        "visible error label",
        "owner surface"
      ],
      "next_public_check": "https://uquad.org/operators.html",
      "terminal_or_recovery_shape": "Reconfigure from owner-published metadata or say current metadata cannot be verified.",
      "must_not_infer": [
        "chain reset proof",
        "current block height",
        "validator failure",
        "wallet custody",
        "mainnet activation"
      ]
    },
    {
      "failure_id": "rpc-stale-or-conflicting-head-v1",
      "owner_surface": "Core, Infra, Bridge, Liquid, RPC provider, indexer, or host chain",
      "failure_class": "observability",
      "trigger": "RPC, indexer, explorer, or host-chain views disagree or stop advancing.",
      "expected_public_state": "cannot_verify",
      "evidence_to_bring": [
        "endpoint or page URL",
        "observed height or timestamp",
        "owner surface",
        "conflicting source"
      ],
      "next_public_check": "https://uquad.org/sources.html",
      "terminal_or_recovery_shape": "Use the owner-published source ladder, downgrade stale views, and avoid inventing current state.",
      "must_not_infer": [
        "chain halt",
        "current height",
        "fork resolution",
        "host custody",
        "settlement truth"
      ]
    },
    {
      "failure_id": "oracle-stale-or-venue-paused-v1",
      "owner_surface": "Liquid, Bridge, or external market rail",
      "failure_class": "market_input",
      "trigger": "A price, venue, route provider, risk input, or execution path is stale, paused, unavailable, or below the owner route's confidence threshold.",
      "expected_public_state": "refused",
      "evidence_to_bring": [
        "quote id",
        "venue or oracle label",
        "risk label",
        "owner surface"
      ],
      "next_public_check": "https://uquad.org/risks.html",
      "terminal_or_recovery_shape": "Refuse, pause, re-quote, quarantine, or downgrade until the owner publishes fresh acceptable input.",
      "must_not_infer": [
        "market activity",
        "settlement",
        "liquidity",
        "guaranteed execution",
        "Core worth"
      ]
    },
    {
      "failure_id": "capacity-exhaustion-v1",
      "owner_surface": "Infra, Bridge, Liquid, Core, or external provider",
      "failure_class": "capacity",
      "trigger": "A storage, proof, provider, route, relayer, settlement, or public site lane lacks capacity for the requested action.",
      "expected_public_state": "degraded",
      "evidence_to_bring": [
        "service class",
        "route or object id",
        "visible capacity label",
        "owner surface"
      ],
      "next_public_check": "https://uquad.org/status.html",
      "terminal_or_recovery_shape": "Queue, refuse, retry, downgrade, or publish unavailable state without implying future entitlement.",
      "must_not_infer": [
        "service guarantee",
        "provider payout",
        "priority entitlement",
        "allocation",
        "production readiness"
      ]
    }
  ]
}
