{
 "license": "CC-BY-4.0",
 "licenseUrl": "https://creativecommons.org/licenses/by/4.0/",
 "attribution": "ChainChoice (https://chainchoice.io)",
 "_note": "Written by scripts/check-risk-taxonomy-coverage.ts in both build chains from src/lib/risk/, the methodology specs, data/incidents.json and data/calibration-corpus.json; a build output, not committed. It changes no score: it records which failure families each ranking scores, shows as a fact, leaves out, or does not apply to.",
 "url": "https://chainchoice.io/data/risk-coverage.json",
 "families": [
  {
   "id": "contract",
   "label": "Contract failure",
   "short": "the code holding the funds is exploited",
   "failure": "Code that holds or moves the funds is exploited or misbehaves.",
   "modes": [
    {
     "id": "code_exploit",
     "label": "Audit depth and exploit record of the deployed code"
    },
    {
     "id": "inherited",
     "label": "Code it builds on (a base protocol, strategy or wrapper) is exploited"
    },
    {
     "id": "supply_chain",
     "label": "The software is tampered with between its authors and the reader"
    }
   ],
   "calibratedBy": []
  },
  {
   "id": "control",
   "label": "Control failure",
   "short": "a key or vote changes the rules, freezes or mints",
   "failure": "A key, operator or vote changes the rules, freezes or seizes balances, or mints more.",
   "modes": [
    {
     "id": "upgrade",
     "label": "Who can change the code or the chain, and with how much warning"
    },
    {
     "id": "freeze",
     "label": "Who can freeze, revoke, burn or seize a balance or an account"
    },
    {
     "id": "mint",
     "label": "Who can mint or issue more"
    },
    {
     "id": "rate_limits",
     "label": "How much one compromised key can mint or move before it is stopped"
    },
    {
     "id": "deployment",
     "label": "Who may deploy or extend it, and whether its provenance can be checked"
    },
    {
     "id": "parameters",
     "label": "Who sets rates, strategies, curators or rebalancing"
    },
    {
     "id": "operator_override",
     "label": "Whose key or decision outranks the reader's"
    },
    {
     "id": "governance",
     "label": "Whether a vote moves the money, and who controls the votes"
    }
   ],
   "calibratedBy": [
    {
     "failure": "Bybit cold-wallet theft (February 2025)",
     "category": "smart_accounts",
     "criterionId": "upgradeControl",
     "mode": "upgrade"
    }
   ]
  },
  {
   "id": "oracle",
   "label": "Oracle failure",
   "short": "a wrong price or outcome liquidates or settles a position",
   "failure": "A wrong, stale or manipulated price or outcome liquidates a position or settles it wrongly.",
   "modes": [
    {
     "id": "liquidation_price",
     "label": "The price that liquidates a position or forces a sale"
    },
    {
     "id": "resolution",
     "label": "How an outcome is resolved, and who can dispute it"
    },
    {
     "id": "feed_design",
     "label": "How the feed fails: sources, aggregation and fallback"
    },
    {
     "id": "feed_record",
     "label": "Exploits that ran through the feed"
    },
    {
     "id": "incident_disclosure",
     "label": "Whether feed incidents are disclosed"
    }
   ],
   "calibratedBy": []
  },
  {
   "id": "verification",
   "label": "Verification failure",
   "short": "an invalid state or transfer is accepted",
   "failure": "The chain, proof system, signer set or message layer accepts an invalid state or transfer.",
   "modes": [
    {
     "id": "proof",
     "label": "How state is proven valid"
    },
    {
     "id": "data_availability",
     "label": "Whether the data to rebuild the state is published"
    },
    {
     "id": "sampling",
     "label": "Whether the data can be sampled, and how long it stays retrievable"
    },
    {
     "id": "signer_set",
     "label": "How concentrated the validator, operator or signer set is"
    },
    {
     "id": "finality",
     "label": "Finality, and how a reorganisation is handled"
    },
    {
     "id": "client_diversity",
     "label": "Independent client implementations"
    },
    {
     "id": "message_trust",
     "label": "How a cross-chain message or transfer is verified"
    },
    {
     "id": "configurable_security",
     "label": "Who chooses the verification an application relies on"
    },
    {
     "id": "failure_record",
     "label": "Invalid messages or states accepted before"
    }
   ],
   "calibratedBy": [
    {
     "failure": "Nomad bridge exploit (August 2022)",
     "category": "bridges",
     "criterionId": "trust",
     "mode": "message_trust"
    },
    {
     "failure": "Multichain (July 2023)",
     "category": "bridges",
     "criterionId": "trust",
     "mode": "message_trust"
    }
   ]
  },
  {
   "id": "liveness",
   "label": "Liveness failure",
   "short": "the operator stops, censors you or loses data",
   "failure": "The operator, sequencer or service stops, censors the reader, or loses what it stores.",
   "modes": [
    {
     "id": "censorship",
     "label": "Getting a transaction included when the operator censors it"
    },
    {
     "id": "escape_hatch",
     "label": "Withdrawing when the operator stops"
    },
    {
     "id": "halt",
     "label": "Outage record, and what happens during one"
    },
    {
     "id": "missed_execution",
     "label": "A call that is never made, made twice or left stuck"
    },
    {
     "id": "durability",
     "label": "Whether stored data survives"
    }
   ],
   "calibratedBy": []
  },
  {
   "id": "custody",
   "label": "Custody failure",
   "short": "whoever holds the assets loses or withholds them",
   "failure": "Whoever holds the keys, the float or the approvals loses, misuses or withholds the assets.",
   "modes": [
    {
     "id": "holder",
     "label": "Who can move the assets"
    },
    {
     "id": "float",
     "label": "Where funds in flight or a float sit"
    },
    {
     "id": "incident",
     "label": "Custodial loss and withdrawal record"
    },
    {
     "id": "credential",
     "label": "What a stolen API key or credential can do"
    },
    {
     "id": "approvals",
     "label": "What a signed approval or mandate lets the other side take"
    }
   ],
   "calibratedBy": []
  },
  {
   "id": "insolvency",
   "label": "Insolvency failure",
   "short": "the firm or issuer that owes you cannot pay",
   "failure": "The firm, issuer or pool that owes the reader cannot pay, and the reader learns their rank in its estate.",
   "modes": [
    {
     "id": "legal_claim",
     "label": "Whose asset it is if the firm fails"
    },
    {
     "id": "backing",
     "label": "What backs it, and what the assurance covers"
    },
    {
     "id": "deposit_protection",
     "label": "Whether a fiat balance is a guaranteed deposit"
    },
    {
     "id": "loss_record",
     "label": "Losses depositors or lenders have already borne"
    },
    {
     "id": "loss_waterfall",
     "label": "Who absorbs a loss before the reader, and how far one loss spreads"
    },
    {
     "id": "obligor",
     "label": "Who owes the payoff, the yield or the fixed leg"
    },
    {
     "id": "indemnity",
     "label": "Who pays when a slash, hack or claim happens"
    },
    {
     "id": "cover_scope",
     "label": "What a cover or insurance actually covers"
    }
   ],
   "calibratedBy": [
    {
     "failure": "FTX (November 2022)",
     "category": "exchange",
     "criterionId": "insolvency_and_account_terms",
     "mode": "legal_claim"
    },
    {
     "failure": "Celsius Network (June 2022)",
     "category": "exchange",
     "criterionId": "insolvency_and_account_terms",
     "mode": "legal_claim"
    },
    {
     "failure": "Celsius Network (June 2022)",
     "category": "institutional_custody",
     "criterionId": "insolvency_survival_mechanism",
     "mode": "legal_claim"
    }
   ]
  },
  {
   "id": "regulatory",
   "label": "Regulatory failure",
   "short": "no licence where you are, or a forced market exit",
   "failure": "The provider is not licensed where it serves the reader, loses its licence, exits the market or is shut down.",
   "modes": [
    {
     "id": "licence",
     "label": "The licensed entity that serves the reader, on a register"
    },
    {
     "id": "access",
     "label": "Whether the reader may buy or use it where they live"
    },
    {
     "id": "perimeter",
     "label": "Which activities the provider accepts, and its exit record"
    },
    {
     "id": "enforcement",
     "label": "Enforcement actions and their effect on users"
    },
    {
     "id": "tax",
     "label": "The tax treatment and filings the product produces"
    }
   ],
   "calibratedBy": []
  },
  {
   "id": "execution",
   "label": "Execution failure",
   "short": "you get a worse price, later, or nothing",
   "failure": "A trade, payment or transfer settles worse, later or not at all compared with what was shown.",
   "modes": [
    {
     "id": "price_integrity",
     "label": "Whether the quoted price is the settled price"
    },
    {
     "id": "order_flow",
     "label": "Who sees the order first: MEV and order-flow exposure"
    },
    {
     "id": "settlement",
     "label": "Settlement, delivery and how a failed payment is handled"
    },
    {
     "id": "dispute",
     "label": "Recourse when a trade, payment or service goes wrong"
    },
    {
     "id": "fill_fallback",
     "label": "What happens when nobody fills the order"
    }
   ],
   "calibratedBy": []
  },
  {
   "id": "exit",
   "label": "Exit failure",
   "short": "you cannot get out at par, on time, or with what is yours",
   "failure": "The reader cannot get out at par, on time, or with what is theirs, including when the vendor goes away.",
   "modes": [
    {
     "id": "redemption",
     "label": "Redeeming for the underlying asset"
    },
    {
     "id": "unbonding",
     "label": "Lock-ups, unbonding and queue length"
    },
    {
     "id": "secondary",
     "label": "The exit price in the market: peg, discount and depth"
    },
    {
     "id": "portability",
     "label": "Leaving with the keys, data, contract or audience"
    },
    {
     "id": "vendor_failure",
     "label": "Whether it keeps working if the vendor stops"
    }
   ],
   "calibratedBy": [
    {
     "failure": "FTX (November 2022)",
     "category": "portfolio_tracking",
     "criterionId": "tier_truth_and_continuity",
     "mode": "vendor_failure"
    }
   ]
  },
  {
   "id": "keys",
   "label": "Key failure",
   "short": "your own keys are made, shown or recovered unsafely",
   "failure": "The reader's own keys are generated, stored, shown or recovered unsafely.",
   "modes": [
    {
     "id": "secure_hardware",
     "label": "Tamper-resistant hardware that can be looked up"
    },
    {
     "id": "firmware",
     "label": "Firmware or software anyone can rebuild and match"
    },
    {
     "id": "supply_chain",
     "label": "Proof the device is genuine and unmodified"
    },
    {
     "id": "key_generation",
     "label": "Key creation and the signing protocol, verifiable"
    },
    {
     "id": "signing_visibility",
     "label": "Seeing what is being signed"
    },
    {
     "id": "recovery",
     "label": "Recovery when a device or share is lost"
    },
    {
     "id": "backup_durability",
     "label": "Whether the backup survives fire, water and time"
    },
    {
     "id": "vendor_independence",
     "label": "Signing and recovering without the maker"
    },
    {
     "id": "device_record",
     "label": "Fund losses traced to the device or software"
    }
   ],
   "calibratedBy": []
  },
  {
   "id": "information",
   "label": "Information failure",
   "short": "the number is wrong or bought, or your data leaks",
   "failure": "The number the reader relies on is wrong, revised, manipulated or bought, or the data they hand over leaks.",
   "modes": [
    {
     "id": "accuracy",
     "label": "Completeness and correctness of the number"
    },
    {
     "id": "derivation",
     "label": "Whether the method behind the number can be reproduced"
    },
    {
     "id": "revision",
     "label": "Whether a number is revised after it was used"
    },
    {
     "id": "manipulation",
     "label": "Wash, bot or sybil activity filtered out"
    },
    {
     "id": "independence",
     "label": "Who pays for, or stands behind, the number or the opinion"
    },
    {
     "id": "privacy",
     "label": "What personal or biometric data is held, exposed or sold"
    }
   ],
   "calibratedBy": []
  }
 ],
 "profiles": {
  "custodial": "A custodial service: the provider holds the reader's assets or money on its own books.",
  "protocol": "A non-custodial onchain protocol.",
  "chain": "A chain, rollup or chain-level layer.",
  "self_custody": "Self-custody software, hardware or backup the reader controls.",
  "issued_asset": "An issued or tokenised asset the reader holds.",
  "data_tool": "Software that reports numbers; it holds no funds and signs nothing.",
  "vendor": "A service a business integrates; it is bought, not held."
 },
 "flagshipCoreFamilies": {
  "dex": [
   "contract",
   "control",
   "oracle",
   "execution"
  ],
  "bridges": [
   "verification",
   "custody",
   "liveness"
  ],
  "l2_chains": [
   "verification",
   "liveness",
   "control"
  ],
  "exchange": [
   "custody",
   "regulatory",
   "insolvency",
   "execution"
  ],
  "wallet": [
   "keys",
   "information"
  ],
  "hardware_wallet": [
   "keys",
   "information"
  ],
  "staking": [
   "insolvency",
   "exit",
   "control"
  ],
  "onramp": [
   "regulatory",
   "execution",
   "custody"
  ]
 },
 "flagshipCoreGaps": [
  "dex.oracle",
  "dex.execution",
  "bridges.custody",
  "bridges.liveness",
  "exchange.execution",
  "wallet.information",
  "hardware_wallet.information",
  "onramp.custody"
 ],
 "uncalibratedFamilies": [
  "contract",
  "oracle",
  "liveness",
  "custody",
  "regulatory",
  "execution",
  "keys",
  "information"
 ],
 "categories": {
  "payment_gateway": {
   "profile": "custodial",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "The ranked services keep balances on their own books; no contract holds the reader's funds."
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "No onchain price feed liquidates or settles the reader's balance."
    },
    "verification": {
     "state": "na",
     "reason": "Not a chain or bridge: no proof system or signer set stands between the reader and the asset."
    },
    "liveness": {
     "state": "gap"
    },
    "custody": {
     "state": "scored",
     "criteria": [
      "operating_model"
     ],
     "modes": [
      "holder"
     ]
    },
    "insolvency": {
     "state": "gap"
    },
    "regulatory": {
     "state": "gap"
    },
    "execution": {
     "state": "scored",
     "criteria": [
      "settlement"
     ],
     "modes": [
      "settlement"
     ]
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "The provider holds the keys; losing them is the provider's custody failure, not the reader's key failure."
    },
    "information": {
     "state": "gap"
    }
   }
  },
  "stablecoin_settlement": {
   "profile": "custodial",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "The ranked services keep balances on their own books; no contract holds the reader's funds."
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "No onchain price feed liquidates or settles the reader's balance."
    },
    "verification": {
     "state": "na",
     "reason": "Not a chain or bridge: no proof system or signer set stands between the reader and the asset."
    },
    "liveness": {
     "state": "gap"
    },
    "custody": {
     "state": "scored",
     "criteria": [
      "float_custody"
     ],
     "modes": [
      "float"
     ]
    },
    "insolvency": {
     "state": "gap"
    },
    "regulatory": {
     "state": "scored",
     "criteria": [
      "licence_perimeter"
     ],
     "modes": [
      "licence"
     ]
    },
    "execution": {
     "state": "scored",
     "criteria": [
      "settlement_finality"
     ],
     "modes": [
      "settlement"
     ]
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "The provider holds the keys; losing them is the provider's custody failure, not the reader's key failure."
    },
    "information": {
     "state": "gap"
    }
   }
  },
  "stablecoin_issuance": {
   "profile": "vendor",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "It holds none of the buyer's funds in a contract."
    },
    "control": {
     "state": "scored",
     "criteria": [
      "mint_authority_and_exit"
     ],
     "modes": [
      "mint"
     ]
    },
    "oracle": {
     "state": "na",
     "reason": "It settles nothing on a price."
    },
    "verification": {
     "state": "na",
     "reason": "It is not a chain or a bridge."
    },
    "liveness": {
     "state": "gap"
    },
    "custody": {
     "state": "gap"
    },
    "insolvency": {
     "state": "gap"
    },
    "regulatory": {
     "state": "scored",
     "criteria": [
      "issuer_of_record_charter"
     ],
     "modes": [
      "licence"
     ]
    },
    "execution": {
     "state": "na",
     "reason": "It moves no money on the buyer's behalf."
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "It holds no signing keys for the buyer."
    },
    "information": {
     "state": "na",
     "reason": "It publishes no number the buyer acts on and holds no personal data of the buyer's customers."
    }
   }
  },
  "subscriptions": {
   "profile": "vendor",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "It holds none of the buyer's funds in a contract."
    },
    "control": {
     "state": "na",
     "reason": "It controls none of the buyer's assets."
    },
    "oracle": {
     "state": "na",
     "reason": "It settles nothing on a price."
    },
    "verification": {
     "state": "na",
     "reason": "It is not a chain or a bridge."
    },
    "liveness": {
     "state": "gap"
    },
    "custody": {
     "state": "scored",
     "criteria": [
      "what_the_mandate_permits"
     ],
     "modes": [
      "approvals"
     ]
    },
    "insolvency": {
     "state": "na",
     "reason": "It holds no client assets; a failed vendor is the exit family's risk."
    },
    "regulatory": {
     "state": "na",
     "reason": "It is sold as software or a service; no licence governs its use."
    },
    "execution": {
     "state": "scored",
     "criteria": [
      "renewal_failure_path"
     ],
     "modes": [
      "settlement"
     ]
    },
    "exit": {
     "state": "scored",
     "criteria": [
      "mandate_survives_the_provider"
     ],
     "modes": [
      "vendor_failure"
     ]
    },
    "keys": {
     "state": "na",
     "reason": "It holds no signing keys for the buyer."
    },
    "information": {
     "state": "scored",
     "criteria": [
      "revocation_visibility"
     ],
     "modes": [
      "accuracy"
     ]
    }
   }
  },
  "business_banking": {
   "profile": "custodial",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "The ranked services keep balances on their own books; no contract holds the reader's funds."
    },
    "control": {
     "state": "scored",
     "criteria": [
      "closure_notice_and_freeze"
     ],
     "modes": [
      "freeze"
     ]
    },
    "oracle": {
     "state": "na",
     "reason": "No onchain price feed liquidates or settles the reader's balance."
    },
    "verification": {
     "state": "na",
     "reason": "Not a chain or bridge: no proof system or signer set stands between the reader and the asset."
    },
    "liveness": {
     "state": "gap"
    },
    "custody": {
     "state": "gap"
    },
    "insolvency": {
     "state": "scored",
     "criteria": [
      "deposit_guarantee_reach"
     ],
     "modes": [
      "deposit_protection"
     ]
    },
    "regulatory": {
     "state": "scored",
     "criteria": [
      "published_crypto_perimeter",
      "licence_identity_resolvable"
     ],
     "modes": [
      "perimeter",
      "licence"
     ],
     "shared": "Whether crypto activity is inside the bank's accepted perimeter and whether its licensed entity can be found on a register fail separately: a fully licensed bank can still close a crypto client's account."
    },
    "execution": {
     "state": "gap"
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "The provider holds the keys; losing them is the provider's custody failure, not the reader's key failure."
    },
    "information": {
     "state": "gap"
    }
   }
  },
  "crypto_payroll": {
   "profile": "custodial",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "The ranked services keep balances on their own books; no contract holds the reader's funds."
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "No onchain price feed liquidates or settles the reader's balance."
    },
    "verification": {
     "state": "na",
     "reason": "Not a chain or bridge: no proof system or signer set stands between the reader and the asset."
    },
    "liveness": {
     "state": "gap"
    },
    "custody": {
     "state": "scored",
     "criteria": [
      "floatCustody"
     ],
     "modes": [
      "float"
     ]
    },
    "insolvency": {
     "state": "gap"
    },
    "regulatory": {
     "state": "scored",
     "criteria": [
      "compliantCoverage",
      "taxFilings"
     ],
     "modes": [
      "access",
      "tax"
     ],
     "shared": "Whether payroll may lawfully be paid in crypto where the employee lives and whether the tax filings are produced fail separately: a lawful payment can still leave the employer without its withholding filings."
    },
    "execution": {
     "state": "gap"
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "The provider holds the keys; losing them is the provider's custody failure, not the reader's key failure."
    },
    "information": {
     "state": "gap"
    }
   }
  },
  "crypto_card": {
   "profile": "custodial",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "The ranked services keep balances on their own books; no contract holds the reader's funds."
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "No onchain price feed liquidates or settles the reader's balance."
    },
    "verification": {
     "state": "na",
     "reason": "Not a chain or bridge: no proof system or signer set stands between the reader and the asset."
    },
    "liveness": {
     "state": "gap"
    },
    "custody": {
     "state": "gap"
    },
    "insolvency": {
     "state": "gap"
    },
    "regulatory": {
     "state": "scored",
     "criteria": [
      "whose_licence_issues_it",
      "disposal_at_the_till"
     ],
     "modes": [
      "licence",
      "tax"
     ],
     "shared": "Whose licence issues the card and how each swipe is taxed as a disposal fail separately: a properly licensed programme still creates a taxable event at the till."
    },
    "execution": {
     "state": "gap"
    },
    "exit": {
     "state": "scored",
     "criteria": [
      "programme_survival"
     ],
     "modes": [
      "vendor_failure"
     ]
    },
    "keys": {
     "state": "na",
     "reason": "The provider holds the keys; losing them is the provider's custody failure, not the reader's key failure."
    },
    "information": {
     "state": "gap"
    }
   }
  },
  "gift_cards": {
   "profile": "custodial",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "The ranked services keep balances on their own books; no contract holds the reader's funds."
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "No onchain price feed liquidates or settles the reader's balance."
    },
    "verification": {
     "state": "na",
     "reason": "Not a chain or bridge: no proof system or signer set stands between the reader and the asset."
    },
    "liveness": {
     "state": "gap"
    },
    "custody": {
     "state": "gap"
    },
    "insolvency": {
     "state": "gap"
    },
    "regulatory": {
     "state": "gap"
    },
    "execution": {
     "state": "scored",
     "criteria": [
      "failure_recourse"
     ],
     "modes": [
      "dispute"
     ]
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "The provider holds the keys; losing them is the provider's custody failure, not the reader's key failure."
    },
    "information": {
     "state": "gap"
    }
   }
  },
  "bill_pay": {
   "profile": "custodial",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "The ranked services keep balances on their own books; no contract holds the reader's funds."
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "No onchain price feed liquidates or settles the reader's balance."
    },
    "verification": {
     "state": "na",
     "reason": "Not a chain or bridge: no proof system or signer set stands between the reader and the asset."
    },
    "liveness": {
     "state": "gap"
    },
    "custody": {
     "state": "gap"
    },
    "insolvency": {
     "state": "gap"
    },
    "regulatory": {
     "state": "gap"
    },
    "execution": {
     "state": "scored",
     "criteria": [
      "posted_by_due_date",
      "exact_amount_and_rate_lock",
      "proof_and_who_is_liable"
     ],
     "modes": [
      "settlement",
      "price_integrity",
      "dispute"
     ],
     "shared": "Paying by the due date, paying the exact amount at a locked rate, and recourse when a payment goes wrong fail separately: a bill paid on time at the wrong rate needs the dispute path the other two do not score."
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "The provider holds the keys; losing them is the provider's custody failure, not the reader's key failure."
    },
    "information": {
     "state": "gap"
    }
   }
  },
  "crypto_neobanks": {
   "profile": "custodial",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "The ranked services keep balances on their own books; no contract holds the reader's funds."
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "No onchain price feed liquidates or settles the reader's balance."
    },
    "verification": {
     "state": "na",
     "reason": "Not a chain or bridge: no proof system or signer set stands between the reader and the asset."
    },
    "liveness": {
     "state": "gap"
    },
    "custody": {
     "state": "gap"
    },
    "insolvency": {
     "state": "scored",
     "criteria": [
      "depositProtection",
      "cryptoAssetSafety"
     ],
     "modes": [
      "deposit_protection",
      "legal_claim"
     ],
     "shared": "The fiat balance's deposit guarantee and the reader's legal claim on crypto held by the firm protect different assets: a guaranteed euro balance says nothing about the crypto in the same app."
    },
    "regulatory": {
     "state": "scored",
     "criteria": [
      "licenceStrength"
     ],
     "modes": [
      "licence"
     ]
    },
    "execution": {
     "state": "gap"
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "The provider holds the keys; losing them is the provider's custody failure, not the reader's key failure."
    },
    "information": {
     "state": "gap"
    }
   }
  },
  "remittances": {
   "profile": "custodial",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "The ranked services keep balances on their own books; no contract holds the reader's funds."
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "No onchain price feed liquidates or settles the reader's balance."
    },
    "verification": {
     "state": "na",
     "reason": "Not a chain or bridge: no proof system or signer set stands between the reader and the asset."
    },
    "liveness": {
     "state": "gap"
    },
    "custody": {
     "state": "gap"
    },
    "insolvency": {
     "state": "gap"
    },
    "regulatory": {
     "state": "scored",
     "criteria": [
      "payout_partner_regulatory"
     ],
     "modes": [
      "licence"
     ]
    },
    "execution": {
     "state": "scored",
     "criteria": [
      "corridor_proof"
     ],
     "modes": [
      "settlement"
     ]
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "The provider holds the keys; losing them is the provider's custody failure, not the reader's key failure."
    },
    "information": {
     "state": "gap"
    }
   }
  },
  "exchange": {
   "profile": "custodial",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "The ranked services keep balances on their own books; no contract holds the reader's funds."
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "No onchain price feed liquidates or settles the reader's balance."
    },
    "verification": {
     "state": "na",
     "reason": "Not a chain or bridge: no proof system or signer set stands between the reader and the asset."
    },
    "liveness": {
     "state": "gap"
    },
    "custody": {
     "state": "scored",
     "criteria": [
      "withdrawal_incident_record"
     ],
     "modes": [
      "incident"
     ]
    },
    "insolvency": {
     "state": "scored",
     "criteria": [
      "insolvency_and_account_terms"
     ],
     "modes": [
      "legal_claim"
     ]
    },
    "regulatory": {
     "state": "scored",
     "criteria": [
      "licence_coverage_map"
     ],
     "modes": [
      "licence"
     ]
    },
    "execution": {
     "state": "gap"
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "The provider holds the keys; losing them is the provider's custody failure, not the reader's key failure."
    },
    "information": {
     "state": "fact",
     "note": "it appears as dated entries on each provider page's incident timeline.",
     "kinds": [
      "data_breach",
      "account_takeover"
     ]
    }
   }
  },
  "otc_desks": {
   "profile": "custodial",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "The ranked services keep balances on their own books; no contract holds the reader's funds."
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "No onchain price feed liquidates or settles the reader's balance."
    },
    "verification": {
     "state": "na",
     "reason": "Not a chain or bridge: no proof system or signer set stands between the reader and the asset."
    },
    "liveness": {
     "state": "gap"
    },
    "custody": {
     "state": "gap"
    },
    "insolvency": {
     "state": "scored",
     "criteria": [
      "counterparty_and_client_asset_footing"
     ],
     "modes": [
      "legal_claim"
     ]
    },
    "regulatory": {
     "state": "gap"
    },
    "execution": {
     "state": "scored",
     "criteria": [
      "documented_settlement_mechanics",
      "published_price_transparency"
     ],
     "modes": [
      "settlement",
      "price_integrity"
     ],
     "shared": "Settlement mechanics and whether the quoted price is the settled price fail separately: a desk can settle reliably at a price it widened after the quote."
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "The provider holds the keys; losing them is the provider's custody failure, not the reader's key failure."
    },
    "information": {
     "state": "gap"
    }
   }
  },
  "institutional_execution": {
   "profile": "vendor",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "It holds none of the buyer's funds in a contract."
    },
    "control": {
     "state": "na",
     "reason": "It controls none of the buyer's assets."
    },
    "oracle": {
     "state": "na",
     "reason": "It settles nothing on a price."
    },
    "verification": {
     "state": "na",
     "reason": "It is not a chain or a bridge."
    },
    "liveness": {
     "state": "scored",
     "criteria": [
      "operational_transparency_and_incident_history"
     ],
     "modes": [
      "halt"
     ]
    },
    "custody": {
     "state": "na",
     "reason": "It holds none of the buyer's assets."
    },
    "insolvency": {
     "state": "na",
     "reason": "It holds no client assets; a failed vendor is the exit family's risk."
    },
    "regulatory": {
     "state": "na",
     "reason": "It is sold as software or a service; no licence governs its use."
    },
    "execution": {
     "state": "gap"
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "It holds no signing keys for the buyer."
    },
    "information": {
     "state": "scored",
     "criteria": [
      "venue_claims_verifiability",
      "commercial_and_identity_disclosure"
     ],
     "modes": [
      "accuracy",
      "independence"
     ],
     "shared": "Whether venue claims can be verified and whether the desk discloses who it is and who pays it fail separately: accurate venue data can still come from an undisclosed, conflicted counterparty."
    }
   }
  },
  "p2p_exchanges": {
   "profile": "custodial",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "The ranked services keep balances on their own books; no contract holds the reader's funds."
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "No onchain price feed liquidates or settles the reader's balance."
    },
    "verification": {
     "state": "na",
     "reason": "Not a chain or bridge: no proof system or signer set stands between the reader and the asset."
    },
    "liveness": {
     "state": "gap"
    },
    "custody": {
     "state": "scored",
     "criteria": [
      "escrow_control"
     ],
     "modes": [
      "holder"
     ]
    },
    "insolvency": {
     "state": "gap"
    },
    "regulatory": {
     "state": "gap"
    },
    "execution": {
     "state": "scored",
     "criteria": [
      "dispute_standard"
     ],
     "modes": [
      "dispute"
     ]
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "The provider holds the keys; losing them is the provider's custody failure, not the reader's key failure."
    },
    "information": {
     "state": "scored",
     "criteria": [
      "kyc_gate"
     ],
     "modes": [
      "privacy"
     ]
    }
   }
  },
  "onramp": {
   "profile": "custodial",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "The ranked services keep balances on their own books; no contract holds the reader's funds."
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "No onchain price feed liquidates or settles the reader's balance."
    },
    "verification": {
     "state": "na",
     "reason": "Not a chain or bridge: no proof system or signer set stands between the reader and the asset."
    },
    "liveness": {
     "state": "gap"
    },
    "custody": {
     "state": "gap"
    },
    "insolvency": {
     "state": "gap"
    },
    "regulatory": {
     "state": "scored",
     "criteria": [
      "licence_identity"
     ],
     "modes": [
      "licence"
     ]
    },
    "execution": {
     "state": "scored",
     "criteria": [
      "quote_honesty_and_settlement"
     ],
     "modes": [
      "price_integrity"
     ]
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "The provider holds the keys; losing them is the provider's custody failure, not the reader's key failure."
    },
    "information": {
     "state": "scored",
     "criteria": [
      "kyc_friction_time_to_coins"
     ],
     "modes": [
      "privacy"
     ]
    }
   }
  },
  "offramps": {
   "profile": "custodial",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "The ranked services keep balances on their own books; no contract holds the reader's funds."
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "No onchain price feed liquidates or settles the reader's balance."
    },
    "verification": {
     "state": "na",
     "reason": "Not a chain or bridge: no proof system or signer set stands between the reader and the asset."
    },
    "liveness": {
     "state": "gap"
    },
    "custody": {
     "state": "gap"
    },
    "insolvency": {
     "state": "gap"
    },
    "regulatory": {
     "state": "scored",
     "criteria": [
      "licenceDepth"
     ],
     "modes": [
      "licence"
     ]
    },
    "execution": {
     "state": "scored",
     "criteria": [
      "priceTransparency",
      "payoutSpeedRails"
     ],
     "modes": [
      "price_integrity",
      "settlement"
     ],
     "shared": "Price transparency and payout speed fail separately: an offramp can pay out instantly at a spread it did not show."
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "The provider holds the keys; losing them is the provider's custody failure, not the reader's key failure."
    },
    "information": {
     "state": "gap"
    }
   }
  },
  "simple_buy": {
   "profile": "custodial",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "The ranked services keep balances on their own books; no contract holds the reader's funds."
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "No onchain price feed liquidates or settles the reader's balance."
    },
    "verification": {
     "state": "na",
     "reason": "Not a chain or bridge: no proof system or signer set stands between the reader and the asset."
    },
    "liveness": {
     "state": "gap"
    },
    "custody": {
     "state": "scored",
     "criteria": [
      "trust"
     ],
     "modes": [
      "holder"
     ]
    },
    "insolvency": {
     "state": "gap"
    },
    "regulatory": {
     "state": "gap"
    },
    "execution": {
     "state": "gap"
    },
    "exit": {
     "state": "scored",
     "criteria": [
      "withdrawal"
     ],
     "modes": [
      "portability"
     ]
    },
    "keys": {
     "state": "na",
     "reason": "The provider holds the keys; losing them is the provider's custody failure, not the reader's key failure."
    },
    "information": {
     "state": "gap"
    }
   }
  },
  "savings_plans": {
   "profile": "custodial",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "The ranked services keep balances on their own books; no contract holds the reader's funds."
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "No onchain price feed liquidates or settles the reader's balance."
    },
    "verification": {
     "state": "na",
     "reason": "Not a chain or bridge: no proof system or signer set stands between the reader and the asset."
    },
    "liveness": {
     "state": "gap"
    },
    "custody": {
     "state": "gap"
    },
    "insolvency": {
     "state": "scored",
     "criteria": [
      "licence"
     ],
     "modes": [
      "legal_claim"
     ]
    },
    "regulatory": {
     "state": "gap"
    },
    "execution": {
     "state": "scored",
     "criteria": [
      "executionTransparency"
     ],
     "modes": [
      "price_integrity"
     ]
    },
    "exit": {
     "state": "scored",
     "criteria": [
      "custodyExit"
     ],
     "modes": [
      "portability"
     ]
    },
    "keys": {
     "state": "na",
     "reason": "The provider holds the keys; losing them is the provider's custody failure, not the reader's key failure."
    },
    "information": {
     "state": "gap"
    }
   }
  },
  "dex": {
   "profile": "protocol",
   "cells": {
    "contract": {
     "state": "scored",
     "criteria": [
      "security"
     ],
     "modes": [
      "code_exploit"
     ]
    },
    "control": {
     "state": "scored",
     "criteria": [
      "decentralization"
     ],
     "modes": [
      "upgrade"
     ]
    },
    "oracle": {
     "state": "gap"
    },
    "verification": {
     "state": "na",
     "reason": "It runs on chains whose verification is ranked under chains, and adds no proof or signer layer of its own."
    },
    "liveness": {
     "state": "na",
     "reason": "It runs while the chains it is deployed on run; their liveness is ranked under chains."
    },
    "custody": {
     "state": "na",
     "reason": "Non-custodial: no firm holds the reader's assets between transactions."
    },
    "insolvency": {
     "state": "na",
     "reason": "A trade settles on chain; no balance sheet owes the reader anything afterwards."
    },
    "regulatory": {
     "state": "gap"
    },
    "execution": {
     "state": "gap"
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "The reader signs from their own wallet, which is ranked under wallets."
    },
    "information": {
     "state": "na",
     "reason": "It needs no account or identity documents, and the figures that matter are read on chain."
    }
   }
  },
  "dex_aggregator": {
   "profile": "protocol",
   "cells": {
    "contract": {
     "state": "scored",
     "criteria": [
      "security"
     ],
     "modes": [
      "code_exploit"
     ]
    },
    "control": {
     "state": "scored",
     "criteria": [
      "trust"
     ],
     "modes": [
      "operator_override"
     ]
    },
    "oracle": {
     "state": "na",
     "reason": "No oracle price liquidates or settles a position in the ranked products."
    },
    "verification": {
     "state": "na",
     "reason": "It runs on chains whose verification is ranked under chains, and adds no proof or signer layer of its own."
    },
    "liveness": {
     "state": "na",
     "reason": "It runs while the chains it is deployed on run; their liveness is ranked under chains."
    },
    "custody": {
     "state": "gap"
    },
    "insolvency": {
     "state": "na",
     "reason": "A trade settles on chain; no balance sheet owes the reader anything afterwards."
    },
    "regulatory": {
     "state": "gap"
    },
    "execution": {
     "state": "gap"
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "The reader signs from their own wallet, which is ranked under wallets."
    },
    "information": {
     "state": "na",
     "reason": "It needs no account or identity documents, and the figures that matter are read on chain."
    }
   }
  },
  "perp_dex": {
   "profile": "protocol",
   "cells": {
    "contract": {
     "state": "scored",
     "criteria": [
      "security"
     ],
     "modes": [
      "code_exploit"
     ]
    },
    "control": {
     "state": "scored",
     "criteria": [
      "decentralization"
     ],
     "modes": [
      "upgrade"
     ]
    },
    "oracle": {
     "state": "gap"
    },
    "verification": {
     "state": "na",
     "reason": "It runs on chains whose verification is ranked under chains, and adds no proof or signer layer of its own."
    },
    "liveness": {
     "state": "na",
     "reason": "It runs while the chains it is deployed on run; their liveness is ranked under chains."
    },
    "custody": {
     "state": "na",
     "reason": "Non-custodial: no firm holds the reader's assets between transactions."
    },
    "insolvency": {
     "state": "gap"
    },
    "regulatory": {
     "state": "gap"
    },
    "execution": {
     "state": "gap"
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "The reader signs from their own wallet, which is ranked under wallets."
    },
    "information": {
     "state": "na",
     "reason": "It needs no account or identity documents, and the figures that matter are read on chain."
    }
   }
  },
  "intents": {
   "profile": "protocol",
   "cells": {
    "contract": {
     "state": "gap"
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "No oracle price liquidates or settles a position in the ranked products."
    },
    "verification": {
     "state": "na",
     "reason": "It runs on chains whose verification is ranked under chains, and adds no proof or signer layer of its own."
    },
    "liveness": {
     "state": "na",
     "reason": "It runs while the chains it is deployed on run; their liveness is ranked under chains."
    },
    "custody": {
     "state": "na",
     "reason": "Non-custodial: no firm holds the reader's assets between transactions."
    },
    "insolvency": {
     "state": "na",
     "reason": "A trade settles on chain; no balance sheet owes the reader anything afterwards."
    },
    "regulatory": {
     "state": "gap"
    },
    "execution": {
     "state": "scored",
     "criteria": [
      "bid_visibility",
      "solver_admission",
      "nofill_fallback"
     ],
     "modes": [
      "price_integrity",
      "order_flow",
      "fill_fallback"
     ],
     "shared": "Bid visibility, solver admission and the no-fill fallback are three stages of one order that fail separately: a fair quote from an open solver set can still leave the order stuck when nobody fills it."
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "The reader signs from their own wallet, which is ranked under wallets."
    },
    "information": {
     "state": "na",
     "reason": "It needs no account or identity documents, and the figures that matter are read on chain."
    }
   }
  },
  "mev_protection": {
   "profile": "protocol",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "The ranked products are RPC endpoints and order-flow auctions; no contract holds the reader's funds."
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "No oracle price liquidates or settles a position in the ranked products."
    },
    "verification": {
     "state": "na",
     "reason": "It runs on chains whose verification is ranked under chains, and adds no proof or signer layer of its own."
    },
    "liveness": {
     "state": "scored",
     "criteria": [
      "inclusionAndCensorship"
     ],
     "modes": [
      "censorship"
     ]
    },
    "custody": {
     "state": "na",
     "reason": "Non-custodial: no firm holds the reader's assets between transactions."
    },
    "insolvency": {
     "state": "na",
     "reason": "A trade settles on chain; no balance sheet owes the reader anything afterwards."
    },
    "regulatory": {
     "state": "gap"
    },
    "execution": {
     "state": "scored",
     "criteria": [
      "orderFlowPrivacy"
     ],
     "modes": [
      "order_flow"
     ]
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "The reader signs from their own wallet, which is ranked under wallets."
    },
    "information": {
     "state": "scored",
     "criteria": [
      "evidenceIndependence"
     ],
     "modes": [
      "independence"
     ]
    }
   }
  },
  "prediction_markets": {
   "profile": "protocol",
   "cells": {
    "contract": {
     "state": "gap"
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "scored",
     "criteria": [
      "resolution"
     ],
     "modes": [
      "resolution"
     ]
    },
    "verification": {
     "state": "na",
     "reason": "It runs on chains whose verification is ranked under chains, and adds no proof or signer layer of its own."
    },
    "liveness": {
     "state": "na",
     "reason": "It runs while the chains it is deployed on run; their liveness is ranked under chains."
    },
    "custody": {
     "state": "na",
     "reason": "Non-custodial: no firm holds the reader's assets between transactions."
    },
    "insolvency": {
     "state": "na",
     "reason": "A trade settles on chain; no balance sheet owes the reader anything afterwards."
    },
    "regulatory": {
     "state": "scored",
     "criteria": [
      "access"
     ],
     "modes": [
      "access"
     ]
    },
    "execution": {
     "state": "gap"
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "The reader signs from their own wallet, which is ranked under wallets."
    },
    "information": {
     "state": "na",
     "reason": "It needs no account or identity documents, and the figures that matter are read on chain."
    }
   }
  },
  "trading_bots": {
   "profile": "vendor",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "It holds none of the buyer's funds in a contract."
    },
    "control": {
     "state": "na",
     "reason": "It controls none of the buyer's assets."
    },
    "oracle": {
     "state": "na",
     "reason": "It settles nothing on a price."
    },
    "verification": {
     "state": "na",
     "reason": "It is not a chain or a bridge."
    },
    "liveness": {
     "state": "scored",
     "criteria": [
      "reliability"
     ],
     "modes": [
      "halt"
     ]
    },
    "custody": {
     "state": "scored",
     "criteria": [
      "custody"
     ],
     "modes": [
      "credential"
     ]
    },
    "insolvency": {
     "state": "na",
     "reason": "It holds no client assets; a failed vendor is the exit family's risk."
    },
    "regulatory": {
     "state": "na",
     "reason": "It is sold as software or a service; no licence governs its use."
    },
    "execution": {
     "state": "gap"
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "It holds no signing keys for the buyer."
    },
    "information": {
     "state": "na",
     "reason": "It publishes no number the buyer acts on and holds no personal data of the buyer's customers."
    }
   }
  },
  "nft_marketplace": {
   "profile": "protocol",
   "cells": {
    "contract": {
     "state": "gap"
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "No oracle price liquidates or settles a position in the ranked products."
    },
    "verification": {
     "state": "na",
     "reason": "It runs on chains whose verification is ranked under chains, and adds no proof or signer layer of its own."
    },
    "liveness": {
     "state": "na",
     "reason": "It runs while the chains it is deployed on run; their liveness is ranked under chains."
    },
    "custody": {
     "state": "scored",
     "criteria": [
      "custody"
     ],
     "modes": [
      "approvals"
     ]
    },
    "insolvency": {
     "state": "na",
     "reason": "A trade settles on chain; no balance sheet owes the reader anything afterwards."
    },
    "regulatory": {
     "state": "gap"
    },
    "execution": {
     "state": "gap"
    },
    "exit": {
     "state": "scored",
     "criteria": [
      "liquidity"
     ],
     "modes": [
      "secondary"
     ]
    },
    "keys": {
     "state": "na",
     "reason": "The reader signs from their own wallet, which is ranked under wallets."
    },
    "information": {
     "state": "na",
     "reason": "It needs no account or identity documents, and the figures that matter are read on chain."
    }
   }
  },
  "wallet": {
   "profile": "self_custody",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "The ranked wallets hold keys, not contracts; an exploit of the wallet software is scored in its incident record."
    },
    "control": {
     "state": "na",
     "reason": "The vendor cannot move the reader's funds; what it can change is the software, scored under keys."
    },
    "oracle": {
     "state": "na",
     "reason": "No price feed acts on the reader's keys."
    },
    "verification": {
     "state": "na",
     "reason": "Verification belongs to the chains the reader connects to, ranked under chains."
    },
    "liveness": {
     "state": "na",
     "reason": "The keys work without the vendor's servers."
    },
    "custody": {
     "state": "na",
     "reason": "The keys stay with the reader; no firm holds the assets."
    },
    "insolvency": {
     "state": "na",
     "reason": "No firm owes the reader a balance; a failed vendor leaves the keys where they were."
    },
    "regulatory": {
     "state": "na",
     "reason": "Holding one's own keys needs no licensed provider."
    },
    "execution": {
     "state": "na",
     "reason": "Swaps routed inside a wallet are ranked under DEX aggregators."
    },
    "exit": {
     "state": "na",
     "reason": "Leaving a wallet means taking the keys elsewhere, which is the key-export criterion (signing and recovering without the maker)."
    },
    "keys": {
     "state": "scored",
     "criteria": [
      "key_export",
      "signing_visibility",
      "incident_record",
      "recovery_exit"
     ],
     "modes": [
      "vendor_independence",
      "signing_visibility",
      "device_record",
      "recovery"
     ],
     "shared": "A software wallet's keys fail in four independent ways (locked to the vendor, signing blind, a past loss of user funds, no recovery), and choosing a wallet is mostly a keys decision, so the family carries four criteria by design."
    },
    "information": {
     "state": "gap"
    }
   }
  },
  "hardware_wallet": {
   "profile": "self_custody",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "No contract holds the funds; the device signs for keys the reader holds."
    },
    "control": {
     "state": "na",
     "reason": "The maker cannot move funds; what it can change is the firmware, scored under keys."
    },
    "oracle": {
     "state": "na",
     "reason": "No price feed acts on the reader's keys."
    },
    "verification": {
     "state": "na",
     "reason": "Verification belongs to the chains the reader connects to, ranked under chains."
    },
    "liveness": {
     "state": "na",
     "reason": "The keys work without the vendor's servers."
    },
    "custody": {
     "state": "na",
     "reason": "The keys stay with the reader; no firm holds the assets."
    },
    "insolvency": {
     "state": "na",
     "reason": "No firm owes the reader a balance; a failed vendor leaves the keys where they were."
    },
    "regulatory": {
     "state": "na",
     "reason": "Holding one's own keys needs no licensed provider."
    },
    "execution": {
     "state": "na",
     "reason": "Swaps routed inside a wallet are ranked under DEX aggregators."
    },
    "exit": {
     "state": "na",
     "reason": "Leaving the maker means signing and recovering without it, scored under keys."
    },
    "keys": {
     "state": "scored",
     "criteria": [
      "secure_element",
      "reproducible_firmware",
      "genuine_check",
      "key_integrity",
      "vendor_independence",
      "fund_loss_record"
     ],
     "modes": [
      "secure_hardware",
      "firmware",
      "supply_chain",
      "key_generation",
      "vendor_independence",
      "device_record"
     ],
     "shared": "A hardware wallet is the keys family, and each criterion is a separate attack path: a certified secure element does not prove the firmware matches its source, neither proves the device in the box is genuine, and none of them shows how keys are generated, whether signing works without the maker, or the device's fund-loss record."
    },
    "information": {
     "state": "fact",
     "note": "it appears as dated entries on each provider page's incident timeline.",
     "kinds": [
      "data_breach"
     ]
    }
   }
  },
  "mpc_wallets": {
   "profile": "self_custody",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "Keys are split into shares off chain; no contract holds the funds."
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "No price feed acts on the reader's keys."
    },
    "verification": {
     "state": "na",
     "reason": "Verification belongs to the chains the reader connects to, ranked under chains."
    },
    "liveness": {
     "state": "na",
     "reason": "The keys work without the vendor's servers."
    },
    "custody": {
     "state": "scored",
     "criteria": [
      "share_custody_model_mpc"
     ],
     "modes": [
      "holder"
     ]
    },
    "insolvency": {
     "state": "na",
     "reason": "No firm owes the reader a balance; a failed vendor leaves the keys where they were."
    },
    "regulatory": {
     "state": "na",
     "reason": "Holding one's own keys needs no licensed provider."
    },
    "execution": {
     "state": "na",
     "reason": "Swaps routed inside a wallet are ranked under DEX aggregators."
    },
    "exit": {
     "state": "scored",
     "criteria": [
      "exit_survivability_mpc"
     ],
     "modes": [
      "vendor_failure"
     ]
    },
    "keys": {
     "state": "scored",
     "criteria": [
      "crypto_audit_posture_mpc"
     ],
     "modes": [
      "key_generation"
     ]
    },
    "information": {
     "state": "gap"
    }
   }
  },
  "smart_accounts": {
   "profile": "self_custody",
   "cells": {
    "contract": {
     "state": "scored",
     "criteria": [
      "contractSecurityRecord"
     ],
     "modes": [
      "code_exploit"
     ]
    },
    "control": {
     "state": "scored",
     "criteria": [
      "upgradeControl"
     ],
     "modes": [
      "upgrade"
     ]
    },
    "oracle": {
     "state": "na",
     "reason": "No price feed acts on the reader's keys."
    },
    "verification": {
     "state": "na",
     "reason": "Verification belongs to the chains the reader connects to, ranked under chains."
    },
    "liveness": {
     "state": "na",
     "reason": "The keys work without the vendor's servers."
    },
    "custody": {
     "state": "na",
     "reason": "The keys stay with the reader; no firm holds the assets."
    },
    "insolvency": {
     "state": "na",
     "reason": "No firm owes the reader a balance; a failed vendor leaves the keys where they were."
    },
    "regulatory": {
     "state": "na",
     "reason": "Holding one's own keys needs no licensed provider."
    },
    "execution": {
     "state": "na",
     "reason": "Swaps routed inside a wallet are ranked under DEX aggregators."
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "scored",
     "criteria": [
      "recoveryMechanics"
     ],
     "modes": [
      "recovery"
     ]
    },
    "information": {
     "state": "gap"
    }
   }
  },
  "lightning_wallets": {
   "profile": "self_custody",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "Lightning balances sit in bitcoin channel outputs, not in an upgradeable contract; the channel counterparty is the custody family."
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "No price feed acts on the reader's keys."
    },
    "verification": {
     "state": "na",
     "reason": "Verification belongs to the chains the reader connects to, ranked under chains."
    },
    "liveness": {
     "state": "gap"
    },
    "custody": {
     "state": "scored",
     "criteria": [
      "custody_of_balance"
     ],
     "modes": [
      "holder"
     ]
    },
    "insolvency": {
     "state": "na",
     "reason": "No firm owes the reader a balance; a failed vendor leaves the keys where they were."
    },
    "regulatory": {
     "state": "na",
     "reason": "Holding one's own keys needs no licensed provider."
    },
    "execution": {
     "state": "na",
     "reason": "Swaps routed inside a wallet are ranked under DEX aggregators."
    },
    "exit": {
     "state": "scored",
     "criteria": [
      "exit_to_chain"
     ],
     "modes": [
      "redemption"
     ]
    },
    "keys": {
     "state": "scored",
     "criteria": [
      "recovery_and_failure"
     ],
     "modes": [
      "recovery"
     ]
    },
    "information": {
     "state": "gap"
    }
   }
  },
  "seed_backup": {
   "profile": "self_custody",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "A backup plate holds no contract."
    },
    "control": {
     "state": "na",
     "reason": "Nothing the maker can change after it ships."
    },
    "oracle": {
     "state": "na",
     "reason": "No price feed acts on the reader's keys."
    },
    "verification": {
     "state": "na",
     "reason": "Verification belongs to the chains the reader connects to, ranked under chains."
    },
    "liveness": {
     "state": "na",
     "reason": "The keys work without the vendor's servers."
    },
    "custody": {
     "state": "na",
     "reason": "The keys stay with the reader; no firm holds the assets."
    },
    "insolvency": {
     "state": "na",
     "reason": "No firm owes the reader a balance; a failed vendor leaves the keys where they were."
    },
    "regulatory": {
     "state": "na",
     "reason": "Holding one's own keys needs no licensed provider."
    },
    "execution": {
     "state": "na",
     "reason": "Swaps routed inside a wallet are ranked under DEX aggregators."
    },
    "exit": {
     "state": "na",
     "reason": "Nothing to leave: the reader owns the backup outright."
    },
    "keys": {
     "state": "scored",
     "criteria": [
      "independent_destruction_test",
      "recovery_format_and_readback"
     ],
     "modes": [
      "backup_durability",
      "recovery"
     ],
     "shared": "Surviving destruction tests and being readable back in a standard recovery format fail separately: a plate that survives a fire is useless if its encoding cannot be restored into another wallet."
    },
    "information": {
     "state": "scored",
     "criteria": [
      "rating_provenance"
     ],
     "modes": [
      "derivation"
     ]
    }
   }
  },
  "key_recovery": {
   "profile": "self_custody",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "The ranked services release keys or shares under a contract in law, not an onchain contract."
    },
    "control": {
     "state": "scored",
     "criteria": [
      "trigger_enforcement_and_wrongful_release"
     ],
     "modes": [
      "operator_override"
     ]
    },
    "oracle": {
     "state": "na",
     "reason": "No price feed acts on the reader's keys."
    },
    "verification": {
     "state": "na",
     "reason": "Verification belongs to the chains the reader connects to, ranked under chains."
    },
    "liveness": {
     "state": "na",
     "reason": "The keys work without the vendor's servers."
    },
    "custody": {
     "state": "gap"
    },
    "insolvency": {
     "state": "na",
     "reason": "No firm owes the reader a balance; a failed vendor leaves the keys where they were."
    },
    "regulatory": {
     "state": "na",
     "reason": "Holding one's own keys needs no licensed provider."
    },
    "execution": {
     "state": "scored",
     "criteria": [
      "who_is_on_the_hook"
     ],
     "modes": [
      "dispute"
     ]
    },
    "exit": {
     "state": "scored",
     "criteria": [
      "recovery_without_the_vendor"
     ],
     "modes": [
      "vendor_failure"
     ]
    },
    "keys": {
     "state": "gap"
    },
    "information": {
     "state": "gap"
    }
   }
  },
  "institutional_custody": {
   "profile": "custodial",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "The ranked services keep balances on their own books; no contract holds the reader's funds."
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "No onchain price feed liquidates or settles the reader's balance."
    },
    "verification": {
     "state": "na",
     "reason": "Not a chain or bridge: no proof system or signer set stands between the reader and the asset."
    },
    "liveness": {
     "state": "gap"
    },
    "custody": {
     "state": "gap"
    },
    "insolvency": {
     "state": "scored",
     "criteria": [
      "insolvency_survival_mechanism",
      "insurance_as_written"
     ],
     "modes": [
      "legal_claim",
      "cover_scope"
     ],
     "shared": "The legal mechanism that keeps assets out of the custodian's estate and the insurance as written are separate protections: segregation fails with a weak trust structure, insurance fails with an exclusion."
    },
    "regulatory": {
     "state": "scored",
     "criteria": [
      "custody_legal_entity_licence"
     ],
     "modes": [
      "licence"
     ]
    },
    "execution": {
     "state": "gap"
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "The provider holds the keys; losing them is the provider's custody failure, not the reader's key failure."
    },
    "information": {
     "state": "gap"
    }
   }
  },
  "staking": {
   "profile": "custodial",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "The ranked services keep balances on their own books; no contract holds the reader's funds."
    },
    "control": {
     "state": "scored",
     "criteria": [
      "governance_under_custody"
     ],
     "modes": [
      "governance"
     ]
    },
    "oracle": {
     "state": "na",
     "reason": "No onchain price feed liquidates or settles the reader's balance."
    },
    "verification": {
     "state": "na",
     "reason": "Not a chain or bridge: no proof system or signer set stands between the reader and the asset."
    },
    "liveness": {
     "state": "gap"
    },
    "custody": {
     "state": "gap"
    },
    "insolvency": {
     "state": "scored",
     "criteria": [
      "slashing_indemnity"
     ],
     "modes": [
      "indemnity"
     ]
    },
    "regulatory": {
     "state": "gap"
    },
    "execution": {
     "state": "gap"
    },
    "exit": {
     "state": "scored",
     "criteria": [
      "unbonding_disclosure"
     ],
     "modes": [
      "unbonding"
     ]
    },
    "keys": {
     "state": "na",
     "reason": "The provider holds the keys; losing them is the provider's custody failure, not the reader's key failure."
    },
    "information": {
     "state": "gap"
    }
   }
  },
  "liquid_staking": {
   "profile": "protocol",
   "cells": {
    "contract": {
     "state": "gap"
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "No oracle price liquidates or settles a position in the ranked products."
    },
    "verification": {
     "state": "scored",
     "criteria": [
      "decentralisation"
     ],
     "modes": [
      "signer_set"
     ]
    },
    "liveness": {
     "state": "na",
     "reason": "It runs while the chains it is deployed on run; their liveness is ranked under chains."
    },
    "custody": {
     "state": "na",
     "reason": "Non-custodial: no firm holds the reader's assets between transactions."
    },
    "insolvency": {
     "state": "gap"
    },
    "regulatory": {
     "state": "gap"
    },
    "execution": {
     "state": "gap"
    },
    "exit": {
     "state": "scored",
     "criteria": [
      "redemption",
      "peg"
     ],
     "modes": [
      "redemption",
      "secondary"
     ],
     "shared": "Redeeming through the protocol and selling at the market peg are two exits that fail separately: a withdrawal queue can stall while the peg holds, or the peg can break while redemption works."
    },
    "keys": {
     "state": "na",
     "reason": "The reader signs from their own wallet, which is ranked under wallets."
    },
    "information": {
     "state": "na",
     "reason": "It needs no account or identity documents, and the figures that matter are read on chain."
    }
   }
  },
  "retail_staking": {
   "profile": "custodial",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "The ranked services keep balances on their own books; no contract holds the reader's funds."
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "No onchain price feed liquidates or settles the reader's balance."
    },
    "verification": {
     "state": "na",
     "reason": "Not a chain or bridge: no proof system or signer set stands between the reader and the asset."
    },
    "liveness": {
     "state": "gap"
    },
    "custody": {
     "state": "gap"
    },
    "insolvency": {
     "state": "gap"
    },
    "regulatory": {
     "state": "gap"
    },
    "execution": {
     "state": "gap"
    },
    "exit": {
     "state": "scored",
     "criteria": [
      "exit_path"
     ],
     "modes": [
      "unbonding"
     ]
    },
    "keys": {
     "state": "na",
     "reason": "The provider holds the keys; losing them is the provider's custody failure, not the reader's key failure."
    },
    "information": {
     "state": "scored",
     "criteria": [
      "rate_disclosure"
     ],
     "modes": [
      "derivation"
     ]
    }
   }
  },
  "liquid_lockers": {
   "profile": "protocol",
   "cells": {
    "contract": {
     "state": "scored",
     "criteria": [
      "base_protocol_unwind",
      "contract_control_incidents"
     ],
     "modes": [
      "inherited",
      "code_exploit"
     ],
     "shared": "The base protocol a locker wraps and the locker's own contracts are separate code, and either can be exploited without the other."
    },
    "control": {
     "state": "scored",
     "criteria": [
      "vote_and_bribe_pass_through"
     ],
     "modes": [
      "governance"
     ]
    },
    "oracle": {
     "state": "na",
     "reason": "No oracle price liquidates or settles a position in the ranked products."
    },
    "verification": {
     "state": "na",
     "reason": "It runs on chains whose verification is ranked under chains, and adds no proof or signer layer of its own."
    },
    "liveness": {
     "state": "na",
     "reason": "It runs while the chains it is deployed on run; their liveness is ranked under chains."
    },
    "custody": {
     "state": "na",
     "reason": "Non-custodial: no firm holds the reader's assets between transactions."
    },
    "insolvency": {
     "state": "na",
     "reason": "A trade settles on chain; no balance sheet owes the reader anything afterwards."
    },
    "regulatory": {
     "state": "gap"
    },
    "execution": {
     "state": "gap"
    },
    "exit": {
     "state": "scored",
     "criteria": [
      "exit_realisability"
     ],
     "modes": [
      "secondary"
     ]
    },
    "keys": {
     "state": "na",
     "reason": "The reader signs from their own wallet, which is ranked under wallets."
    },
    "information": {
     "state": "na",
     "reason": "It needs no account or identity documents, and the figures that matter are read on chain."
    }
   }
  },
  "restaking": {
   "profile": "protocol",
   "cells": {
    "contract": {
     "state": "scored",
     "criteria": [
      "incidentRecord",
      "dependencyCurrency"
     ],
     "modes": [
      "code_exploit",
      "inherited"
     ],
     "shared": "The restaking protocol's own exploit record and how current the code it depends on is fail separately: a clean record says nothing about an outdated dependency."
    },
    "control": {
     "state": "scored",
     "criteria": [
      "slashingSurface"
     ],
     "modes": [
      "operator_override"
     ]
    },
    "oracle": {
     "state": "na",
     "reason": "No oracle price liquidates or settles a position in the ranked products."
    },
    "verification": {
     "state": "na",
     "reason": "It runs on chains whose verification is ranked under chains, and adds no proof or signer layer of its own."
    },
    "liveness": {
     "state": "na",
     "reason": "It runs while the chains it is deployed on run; their liveness is ranked under chains."
    },
    "custody": {
     "state": "na",
     "reason": "Non-custodial: no firm holds the reader's assets between transactions."
    },
    "insolvency": {
     "state": "gap"
    },
    "regulatory": {
     "state": "gap"
    },
    "execution": {
     "state": "gap"
    },
    "exit": {
     "state": "scored",
     "criteria": [
      "worstCaseExit"
     ],
     "modes": [
      "unbonding"
     ]
    },
    "keys": {
     "state": "na",
     "reason": "The reader signs from their own wallet, which is ranked under wallets."
    },
    "information": {
     "state": "na",
     "reason": "It needs no account or identity documents, and the figures that matter are read on chain."
    }
   }
  },
  "lending_borrowing": {
   "profile": "protocol",
   "cells": {
    "contract": {
     "state": "gap"
    },
    "control": {
     "state": "scored",
     "criteria": [
      "rate_authorship"
     ],
     "modes": [
      "parameters"
     ]
    },
    "oracle": {
     "state": "scored",
     "criteria": [
      "oracle_liquidation_price"
     ],
     "modes": [
      "liquidation_price"
     ]
    },
    "verification": {
     "state": "na",
     "reason": "It runs on chains whose verification is ranked under chains, and adds no proof or signer layer of its own."
    },
    "liveness": {
     "state": "na",
     "reason": "It runs while the chains it is deployed on run; their liveness is ranked under chains."
    },
    "custody": {
     "state": "na",
     "reason": "Non-custodial: no firm holds the reader's assets between transactions."
    },
    "insolvency": {
     "state": "scored",
     "criteria": [
      "blast_radius",
      "shortfall_record"
     ],
     "modes": [
      "loss_waterfall",
      "loss_record"
     ],
     "shared": "How far one bad debt spreads across markets and the losses lenders have already borne are separate: the first is the design, the second the record."
    },
    "regulatory": {
     "state": "gap"
    },
    "execution": {
     "state": "gap"
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "The reader signs from their own wallet, which is ranked under wallets."
    },
    "information": {
     "state": "na",
     "reason": "It needs no account or identity documents, and the figures that matter are read on chain."
    }
   }
  },
  "crypto_backed_loans": {
   "profile": "custodial",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "The ranked services keep balances on their own books; no contract holds the reader's funds."
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "scored",
     "criteria": [
      "margin_call_and_forced_sale"
     ],
     "modes": [
      "liquidation_price"
     ]
    },
    "verification": {
     "state": "na",
     "reason": "Not a chain or bridge: no proof system or signer set stands between the reader and the asset."
    },
    "liveness": {
     "state": "gap"
    },
    "custody": {
     "state": "gap"
    },
    "insolvency": {
     "state": "scored",
     "criteria": [
      "collateral_title_and_reuse"
     ],
     "modes": [
      "legal_claim"
     ]
    },
    "regulatory": {
     "state": "scored",
     "criteria": [
      "lender_of_record_and_lending_licence"
     ],
     "modes": [
      "licence"
     ]
    },
    "execution": {
     "state": "gap"
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "The provider holds the keys; losing them is the provider's custody failure, not the reader's key failure."
    },
    "information": {
     "state": "gap"
    }
   }
  },
  "cdp_stablecoins": {
   "profile": "protocol",
   "cells": {
    "contract": {
     "state": "gap"
    },
    "control": {
     "state": "scored",
     "criteria": [
      "borrowCostPredictability"
     ],
     "modes": [
      "parameters"
     ]
    },
    "oracle": {
     "state": "scored",
     "criteria": [
      "liquidationMechanics"
     ],
     "modes": [
      "liquidation_price"
     ]
    },
    "verification": {
     "state": "na",
     "reason": "It runs on chains whose verification is ranked under chains, and adds no proof or signer layer of its own."
    },
    "liveness": {
     "state": "na",
     "reason": "It runs while the chains it is deployed on run; their liveness is ranked under chains."
    },
    "custody": {
     "state": "na",
     "reason": "Non-custodial: no firm holds the reader's assets between transactions."
    },
    "insolvency": {
     "state": "scored",
     "criteria": [
      "collateralIntegrity"
     ],
     "modes": [
      "backing"
     ]
    },
    "regulatory": {
     "state": "gap"
    },
    "execution": {
     "state": "gap"
    },
    "exit": {
     "state": "scored",
     "criteria": [
      "pegResilience"
     ],
     "modes": [
      "secondary"
     ]
    },
    "keys": {
     "state": "na",
     "reason": "The reader signs from their own wallet, which is ranked under wallets."
    },
    "information": {
     "state": "na",
     "reason": "It needs no account or identity documents, and the figures that matter are read on chain."
    }
   }
  },
  "private_credit": {
   "profile": "protocol",
   "cells": {
    "contract": {
     "state": "gap"
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "No oracle price liquidates or settles a position in the ranked products."
    },
    "verification": {
     "state": "na",
     "reason": "It runs on chains whose verification is ranked under chains, and adds no proof or signer layer of its own."
    },
    "liveness": {
     "state": "na",
     "reason": "It runs while the chains it is deployed on run; their liveness is ranked under chains."
    },
    "custody": {
     "state": "na",
     "reason": "Non-custodial: no firm holds the reader's assets between transactions."
    },
    "insolvency": {
     "state": "scored",
     "criteria": [
      "loss_history_disclosure",
      "underwriter_identity_and_skin",
      "depositor_legal_claim"
     ],
     "modes": [
      "loss_record",
      "obligor",
      "legal_claim"
     ],
     "shared": "Losses already borne, who underwrites with skin in the game, and the depositor's legal claim are three separate failures of a credit pool: a clean loss history does not make the claim enforceable."
    },
    "regulatory": {
     "state": "gap"
    },
    "execution": {
     "state": "gap"
    },
    "exit": {
     "state": "scored",
     "criteria": [
      "redemption_terms_and_gating"
     ],
     "modes": [
      "redemption"
     ]
    },
    "keys": {
     "state": "na",
     "reason": "The reader signs from their own wallet, which is ranked under wallets."
    },
    "information": {
     "state": "na",
     "reason": "It needs no account or identity documents, and the figures that matter are read on chain."
    }
   }
  },
  "flash_loans": {
   "profile": "protocol",
   "cells": {
    "contract": {
     "state": "scored",
     "criteria": [
      "incident_record"
     ],
     "modes": [
      "code_exploit"
     ]
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "No oracle price liquidates or settles a position in the ranked products."
    },
    "verification": {
     "state": "na",
     "reason": "It runs on chains whose verification is ranked under chains, and adds no proof or signer layer of its own."
    },
    "liveness": {
     "state": "na",
     "reason": "It runs while the chains it is deployed on run; their liveness is ranked under chains."
    },
    "custody": {
     "state": "na",
     "reason": "Non-custodial: no firm holds the reader's assets between transactions."
    },
    "insolvency": {
     "state": "na",
     "reason": "A trade settles on chain; no balance sheet owes the reader anything afterwards."
    },
    "regulatory": {
     "state": "na",
     "reason": "It is called by contracts inside one transaction; no provider serves a reader in a jurisdiction."
    },
    "execution": {
     "state": "na",
     "reason": "A flash loan executes in full or reverts inside one transaction."
    },
    "exit": {
     "state": "na",
     "reason": "A flash loan opens and closes in one transaction; there is no position to leave."
    },
    "keys": {
     "state": "na",
     "reason": "The reader signs from their own wallet, which is ranked under wallets."
    },
    "information": {
     "state": "na",
     "reason": "It needs no account or identity documents, and the figures that matter are read on chain."
    }
   }
  },
  "nft_lending": {
   "profile": "protocol",
   "cells": {
    "contract": {
     "state": "scored",
     "criteria": [
      "operating_record"
     ],
     "modes": [
      "code_exploit"
     ]
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "scored",
     "criteria": [
      "liquidation_trigger"
     ],
     "modes": [
      "liquidation_price"
     ]
    },
    "verification": {
     "state": "na",
     "reason": "It runs on chains whose verification is ranked under chains, and adds no proof or signer layer of its own."
    },
    "liveness": {
     "state": "na",
     "reason": "It runs while the chains it is deployed on run; their liveness is ranked under chains."
    },
    "custody": {
     "state": "na",
     "reason": "Non-custodial: no firm holds the reader's assets between transactions."
    },
    "insolvency": {
     "state": "scored",
     "criteria": [
      "default_recovery"
     ],
     "modes": [
      "legal_claim"
     ]
    },
    "regulatory": {
     "state": "gap"
    },
    "execution": {
     "state": "gap"
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "The reader signs from their own wallet, which is ranked under wallets."
    },
    "information": {
     "state": "na",
     "reason": "It needs no account or identity documents, and the figures that matter are read on chain."
    }
   }
  },
  "yield_vaults": {
   "profile": "protocol",
   "cells": {
    "contract": {
     "state": "scored",
     "criteria": [
      "strategyRisk"
     ],
     "modes": [
      "inherited"
     ]
    },
    "control": {
     "state": "scored",
     "criteria": [
      "mandate"
     ],
     "modes": [
      "parameters"
     ]
    },
    "oracle": {
     "state": "na",
     "reason": "No oracle price liquidates or settles a position in the ranked products."
    },
    "verification": {
     "state": "na",
     "reason": "It runs on chains whose verification is ranked under chains, and adds no proof or signer layer of its own."
    },
    "liveness": {
     "state": "na",
     "reason": "It runs while the chains it is deployed on run; their liveness is ranked under chains."
    },
    "custody": {
     "state": "na",
     "reason": "Non-custodial: no firm holds the reader's assets between transactions."
    },
    "insolvency": {
     "state": "na",
     "reason": "A trade settles on chain; no balance sheet owes the reader anything afterwards."
    },
    "regulatory": {
     "state": "gap"
    },
    "execution": {
     "state": "gap"
    },
    "exit": {
     "state": "scored",
     "criteria": [
      "exit"
     ],
     "modes": [
      "redemption"
     ]
    },
    "keys": {
     "state": "na",
     "reason": "The reader signs from their own wallet, which is ranked under wallets."
    },
    "information": {
     "state": "na",
     "reason": "It needs no account or identity documents, and the figures that matter are read on chain."
    }
   }
  },
  "yield_aggregators": {
   "profile": "protocol",
   "cells": {
    "contract": {
     "state": "scored",
     "criteria": [
      "dependency_surface",
      "inherited_exploit_record"
     ],
     "modes": [
      "inherited",
      "code_exploit"
     ],
     "shared": "How many protocols a vault depends on today and the exploits its code and strategies have already suffered are separate: a short dependency list can still carry a past loss."
    },
    "control": {
     "state": "scored",
     "criteria": [
      "strategy_change_control"
     ],
     "modes": [
      "parameters"
     ]
    },
    "oracle": {
     "state": "na",
     "reason": "No oracle price liquidates or settles a position in the ranked products."
    },
    "verification": {
     "state": "na",
     "reason": "It runs on chains whose verification is ranked under chains, and adds no proof or signer layer of its own."
    },
    "liveness": {
     "state": "na",
     "reason": "It runs while the chains it is deployed on run; their liveness is ranked under chains."
    },
    "custody": {
     "state": "na",
     "reason": "Non-custodial: no firm holds the reader's assets between transactions."
    },
    "insolvency": {
     "state": "na",
     "reason": "A trade settles on chain; no balance sheet owes the reader anything afterwards."
    },
    "regulatory": {
     "state": "gap"
    },
    "execution": {
     "state": "gap"
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "The reader signs from their own wallet, which is ranked under wallets."
    },
    "information": {
     "state": "na",
     "reason": "It needs no account or identity documents, and the figures that matter are read on chain."
    }
   }
  },
  "perp_house_vaults": {
   "profile": "protocol",
   "cells": {
    "contract": {
     "state": "gap"
    },
    "control": {
     "state": "scored",
     "criteria": [
      "pool_protection_mechanism"
     ],
     "modes": [
      "parameters"
     ]
    },
    "oracle": {
     "state": "gap"
    },
    "verification": {
     "state": "na",
     "reason": "It runs on chains whose verification is ranked under chains, and adds no proof or signer layer of its own."
    },
    "liveness": {
     "state": "na",
     "reason": "It runs while the chains it is deployed on run; their liveness is ranked under chains."
    },
    "custody": {
     "state": "na",
     "reason": "Non-custodial: no firm holds the reader's assets between transactions."
    },
    "insolvency": {
     "state": "scored",
     "criteria": [
      "verifiable_loss_of_record",
      "loss_waterfall_and_exit_price"
     ],
     "modes": [
      "loss_record",
      "loss_waterfall"
     ],
     "shared": "Losses the vault has verifiably booked and who absorbs the next loss before depositors are separate: the record is the past, the waterfall is the next liquidation cascade."
    },
    "regulatory": {
     "state": "gap"
    },
    "execution": {
     "state": "gap"
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "The reader signs from their own wallet, which is ranked under wallets."
    },
    "information": {
     "state": "na",
     "reason": "It needs no account or identity documents, and the figures that matter are read on chain."
    }
   }
  },
  "liquidity_management": {
   "profile": "protocol",
   "cells": {
    "contract": {
     "state": "scored",
     "criteria": [
      "manager_audit_record"
     ],
     "modes": [
      "code_exploit"
     ]
    },
    "control": {
     "state": "scored",
     "criteria": [
      "rebalance_control"
     ],
     "modes": [
      "parameters"
     ]
    },
    "oracle": {
     "state": "na",
     "reason": "No oracle price liquidates or settles a position in the ranked products."
    },
    "verification": {
     "state": "na",
     "reason": "It runs on chains whose verification is ranked under chains, and adds no proof or signer layer of its own."
    },
    "liveness": {
     "state": "na",
     "reason": "It runs while the chains it is deployed on run; their liveness is ranked under chains."
    },
    "custody": {
     "state": "na",
     "reason": "Non-custodial: no firm holds the reader's assets between transactions."
    },
    "insolvency": {
     "state": "na",
     "reason": "A trade settles on chain; no balance sheet owes the reader anything afterwards."
    },
    "regulatory": {
     "state": "gap"
    },
    "execution": {
     "state": "gap"
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "The reader signs from their own wallet, which is ranked under wallets."
    },
    "information": {
     "state": "scored",
     "criteria": [
      "return_versus_hold_disclosure"
     ],
     "modes": [
      "accuracy"
     ]
    }
   }
  },
  "options_vaults": {
   "profile": "protocol",
   "cells": {
    "contract": {
     "state": "scored",
     "criteria": [
      "security_and_operating_record"
     ],
     "modes": [
      "code_exploit"
     ]
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "gap"
    },
    "verification": {
     "state": "na",
     "reason": "It runs on chains whose verification is ranked under chains, and adds no proof or signer layer of its own."
    },
    "liveness": {
     "state": "na",
     "reason": "It runs while the chains it is deployed on run; their liveness is ranked under chains."
    },
    "custody": {
     "state": "na",
     "reason": "Non-custodial: no firm holds the reader's assets between transactions."
    },
    "insolvency": {
     "state": "na",
     "reason": "A trade settles on chain; no balance sheet owes the reader anything afterwards."
    },
    "regulatory": {
     "state": "gap"
    },
    "execution": {
     "state": "gap"
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "The reader signs from their own wallet, which is ranked under wallets."
    },
    "information": {
     "state": "scored",
     "criteria": [
      "verifiable_track_record",
      "documented_drawdown_risk"
     ],
     "modes": [
      "accuracy",
      "derivation"
     ],
     "shared": "Whether the track record can be verified and whether drawdown risk is documented fail separately: a verified return series can still hide the tail the strategy sells."
    }
   }
  },
  "fixed_rate_yield": {
   "profile": "protocol",
   "cells": {
    "contract": {
     "state": "gap"
    },
    "control": {
     "state": "scored",
     "criteria": [
      "rate_lock_integrity"
     ],
     "modes": [
      "parameters"
     ]
    },
    "oracle": {
     "state": "na",
     "reason": "No oracle price liquidates or settles a position in the ranked products."
    },
    "verification": {
     "state": "na",
     "reason": "It runs on chains whose verification is ranked under chains, and adds no proof or signer layer of its own."
    },
    "liveness": {
     "state": "na",
     "reason": "It runs while the chains it is deployed on run; their liveness is ranked under chains."
    },
    "custody": {
     "state": "na",
     "reason": "Non-custodial: no firm holds the reader's assets between transactions."
    },
    "insolvency": {
     "state": "scored",
     "criteria": [
      "fixed_leg_obligor"
     ],
     "modes": [
      "obligor"
     ]
    },
    "regulatory": {
     "state": "gap"
    },
    "execution": {
     "state": "gap"
    },
    "exit": {
     "state": "scored",
     "criteria": [
      "maturity_handling",
      "early_exit_cost"
     ],
     "modes": [
      "redemption",
      "secondary"
     ],
     "shared": "Redemption at maturity and the cost of leaving early are separate exits: a product can pay in full at maturity and charge heavily for an early exit."
    },
    "keys": {
     "state": "na",
     "reason": "The reader signs from their own wallet, which is ranked under wallets."
    },
    "information": {
     "state": "na",
     "reason": "It needs no account or identity documents, and the figures that matter are read on chain."
    }
   }
  },
  "stablecoin_yield": {
   "profile": "custodial",
   "cells": {
    "contract": {
     "state": "gap"
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "No onchain price feed liquidates or settles the reader's balance."
    },
    "verification": {
     "state": "na",
     "reason": "Not a chain or bridge: no proof system or signer set stands between the reader and the asset."
    },
    "liveness": {
     "state": "gap"
    },
    "custody": {
     "state": "gap"
    },
    "insolvency": {
     "state": "scored",
     "criteria": [
      "yieldSource"
     ],
     "modes": [
      "obligor"
     ]
    },
    "regulatory": {
     "state": "scored",
     "criteria": [
      "access"
     ],
     "modes": [
      "access"
     ]
    },
    "execution": {
     "state": "gap"
    },
    "exit": {
     "state": "scored",
     "criteria": [
      "redemption"
     ],
     "modes": [
      "redemption"
     ]
    },
    "keys": {
     "state": "na",
     "reason": "The provider holds the keys; losing them is the provider's custody failure, not the reader's key failure."
    },
    "information": {
     "state": "gap"
    }
   }
  },
  "defi_insurance": {
   "profile": "protocol",
   "cells": {
    "contract": {
     "state": "gap"
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "No oracle price liquidates or settles a position in the ranked products."
    },
    "verification": {
     "state": "na",
     "reason": "It runs on chains whose verification is ranked under chains, and adds no proof or signer layer of its own."
    },
    "liveness": {
     "state": "na",
     "reason": "It runs while the chains it is deployed on run; their liveness is ranked under chains."
    },
    "custody": {
     "state": "na",
     "reason": "Non-custodial: no firm holds the reader's assets between transactions."
    },
    "insolvency": {
     "state": "scored",
     "criteria": [
      "claimsRecord",
      "exclusions",
      "backing"
     ],
     "modes": [
      "indemnity",
      "cover_scope",
      "backing"
     ],
     "shared": "Whether claims have been paid, what the exclusions leave out, and what capital backs the cover fail separately: well-capitalised cover can still exclude the hack the reader suffers."
    },
    "regulatory": {
     "state": "scored",
     "criteria": [
      "access"
     ],
     "modes": [
      "access"
     ]
    },
    "execution": {
     "state": "gap"
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "The reader signs from their own wallet, which is ranked under wallets."
    },
    "information": {
     "state": "na",
     "reason": "It needs no account or identity documents, and the figures that matter are read on chain."
    }
   }
  },
  "stablecoins": {
   "profile": "issued_asset",
   "cells": {
    "contract": {
     "state": "gap"
    },
    "control": {
     "state": "scored",
     "criteria": [
      "seizure_and_upgrade_authority"
     ],
     "modes": [
      "freeze"
     ]
    },
    "oracle": {
     "state": "na",
     "reason": "No oracle price liquidates the holding."
    },
    "verification": {
     "state": "na",
     "reason": "It is issued on chains ranked under chains and adds no proof or signer layer of its own."
    },
    "liveness": {
     "state": "na",
     "reason": "Holding the token needs no operator to stay online; getting out is the exit family."
    },
    "custody": {
     "state": "gap"
    },
    "insolvency": {
     "state": "scored",
     "criteria": [
      "counterparty_and_insolvency_rank",
      "reserve_and_assurance_scope"
     ],
     "modes": [
      "legal_claim",
      "backing"
     ],
     "shared": "The holder's rank if the issuer fails and what the reserves and their assurance cover are separate: full reserves do not help a holder with no claim on them."
    },
    "regulatory": {
     "state": "gap"
    },
    "execution": {
     "state": "na",
     "reason": "It is bought and redeemed at the issuer's published price; the spread is ranked as a cost."
    },
    "exit": {
     "state": "scored",
     "criteria": [
      "redemption_right_exercised"
     ],
     "modes": [
      "redemption"
     ]
    },
    "keys": {
     "state": "na",
     "reason": "The reader holds the token in a wallet ranked under wallets."
    },
    "information": {
     "state": "gap"
    }
   }
  },
  "wrapped_assets": {
   "profile": "issued_asset",
   "cells": {
    "contract": {
     "state": "gap"
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "No oracle price liquidates the holding."
    },
    "verification": {
     "state": "gap"
    },
    "liveness": {
     "state": "na",
     "reason": "Holding the token needs no operator to stay online; getting out is the exit family."
    },
    "custody": {
     "state": "scored",
     "criteria": [
      "custody_control"
     ],
     "modes": [
      "holder"
     ]
    },
    "insolvency": {
     "state": "scored",
     "criteria": [
      "reserve_proof"
     ],
     "modes": [
      "backing"
     ]
    },
    "regulatory": {
     "state": "gap"
    },
    "execution": {
     "state": "na",
     "reason": "It is bought and redeemed at the issuer's published price; the spread is ranked as a cost."
    },
    "exit": {
     "state": "scored",
     "criteria": [
      "redemption_access"
     ],
     "modes": [
      "redemption"
     ]
    },
    "keys": {
     "state": "na",
     "reason": "The reader holds the token in a wallet ranked under wallets."
    },
    "information": {
     "state": "gap"
    }
   }
  },
  "tokenised_tbills": {
   "profile": "issued_asset",
   "cells": {
    "contract": {
     "state": "gap"
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "No oracle price liquidates the holding."
    },
    "verification": {
     "state": "na",
     "reason": "It is issued on chains ranked under chains and adds no proof or signer layer of its own."
    },
    "liveness": {
     "state": "na",
     "reason": "Holding the token needs no operator to stay online; getting out is the exit family."
    },
    "custody": {
     "state": "gap"
    },
    "insolvency": {
     "state": "scored",
     "criteria": [
      "legalClaim"
     ],
     "modes": [
      "legal_claim"
     ]
    },
    "regulatory": {
     "state": "scored",
     "criteria": [
      "access"
     ],
     "modes": [
      "access"
     ]
    },
    "execution": {
     "state": "na",
     "reason": "It is bought and redeemed at the issuer's published price; the spread is ranked as a cost."
    },
    "exit": {
     "state": "scored",
     "criteria": [
      "redemption"
     ],
     "modes": [
      "redemption"
     ]
    },
    "keys": {
     "state": "na",
     "reason": "The reader holds the token in a wallet ranked under wallets."
    },
    "information": {
     "state": "gap"
    }
   }
  },
  "money_market_funds": {
   "profile": "issued_asset",
   "cells": {
    "contract": {
     "state": "gap"
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "No oracle price liquidates the holding."
    },
    "verification": {
     "state": "na",
     "reason": "It is issued on chains ranked under chains and adds no proof or signer layer of its own."
    },
    "liveness": {
     "state": "na",
     "reason": "Holding the token needs no operator to stay online; getting out is the exit family."
    },
    "custody": {
     "state": "gap"
    },
    "insolvency": {
     "state": "scored",
     "criteria": [
      "token_share_record",
      "portfolio_liquidity_rules"
     ],
     "modes": [
      "legal_claim",
      "backing"
     ],
     "shared": "Whether the token is a registered fund share and whether the portfolio's liquidity rules hold are separate: a legal share can still sit on illiquid assets."
    },
    "regulatory": {
     "state": "scored",
     "criteria": [
      "regulator_registration"
     ],
     "modes": [
      "licence"
     ]
    },
    "execution": {
     "state": "na",
     "reason": "It is bought and redeemed at the issuer's published price; the spread is ranked as a cost."
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "The reader holds the token in a wallet ranked under wallets."
    },
    "information": {
     "state": "gap"
    }
   }
  },
  "tokenised_commodities": {
   "profile": "issued_asset",
   "cells": {
    "contract": {
     "state": "gap"
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "No oracle price liquidates the holding."
    },
    "verification": {
     "state": "na",
     "reason": "It is issued on chains ranked under chains and adds no proof or signer layer of its own."
    },
    "liveness": {
     "state": "na",
     "reason": "Holding the token needs no operator to stay online; getting out is the exit family."
    },
    "custody": {
     "state": "gap"
    },
    "insolvency": {
     "state": "scored",
     "criteria": [
      "vault_and_verifier"
     ],
     "modes": [
      "backing"
     ]
    },
    "regulatory": {
     "state": "gap"
    },
    "execution": {
     "state": "na",
     "reason": "It is bought and redeemed at the issuer's published price; the spread is ranked as a cost."
    },
    "exit": {
     "state": "scored",
     "criteria": [
      "redemption_floor"
     ],
     "modes": [
      "redemption"
     ]
    },
    "keys": {
     "state": "na",
     "reason": "The reader holds the token in a wallet ranked under wallets."
    },
    "information": {
     "state": "scored",
     "criteria": [
      "proof_reachability"
     ],
     "modes": [
      "accuracy"
     ]
    }
   }
  },
  "carbon_credits": {
   "profile": "issued_asset",
   "cells": {
    "contract": {
     "state": "gap"
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "No oracle price liquidates the holding."
    },
    "verification": {
     "state": "na",
     "reason": "It is issued on chains ranked under chains and adds no proof or signer layer of its own."
    },
    "liveness": {
     "state": "na",
     "reason": "Holding the token needs no operator to stay online; getting out is the exit family."
    },
    "custody": {
     "state": "gap"
    },
    "insolvency": {
     "state": "scored",
     "criteria": [
      "registry_serial_link"
     ],
     "modes": [
      "backing"
     ]
    },
    "regulatory": {
     "state": "gap"
    },
    "execution": {
     "state": "scored",
     "criteria": [
      "retirement_finality"
     ],
     "modes": [
      "settlement"
     ]
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "The reader holds the token in a wallet ranked under wallets."
    },
    "information": {
     "state": "scored",
     "criteria": [
      "vintage_methodology"
     ],
     "modes": [
      "accuracy"
     ]
    }
   }
  },
  "tokenised_bonds": {
   "profile": "issued_asset",
   "cells": {
    "contract": {
     "state": "gap"
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "No oracle price liquidates the holding."
    },
    "verification": {
     "state": "na",
     "reason": "It is issued on chains ranked under chains and adds no proof or signer layer of its own."
    },
    "liveness": {
     "state": "na",
     "reason": "Holding the token needs no operator to stay online; getting out is the exit family."
    },
    "custody": {
     "state": "gap"
    },
    "insolvency": {
     "state": "scored",
     "criteria": [
      "legal_claim_in_default"
     ],
     "modes": [
      "legal_claim"
     ]
    },
    "regulatory": {
     "state": "scored",
     "criteria": [
      "who_may_buy_where"
     ],
     "modes": [
      "access"
     ]
    },
    "execution": {
     "state": "na",
     "reason": "It is bought and redeemed at the issuer's published price; the spread is ranked as a cost."
    },
    "exit": {
     "state": "scored",
     "criteria": [
      "redemption_tested_not_promised"
     ],
     "modes": [
      "redemption"
     ]
    },
    "keys": {
     "state": "na",
     "reason": "The reader holds the token in a wallet ranked under wallets."
    },
    "information": {
     "state": "gap"
    }
   }
  },
  "tokenised_funds": {
   "profile": "issued_asset",
   "cells": {
    "contract": {
     "state": "gap"
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "No oracle price liquidates the holding."
    },
    "verification": {
     "state": "na",
     "reason": "It is issued on chains ranked under chains and adds no proof or signer layer of its own."
    },
    "liveness": {
     "state": "na",
     "reason": "Holding the token needs no operator to stay online; getting out is the exit family."
    },
    "custody": {
     "state": "gap"
    },
    "insolvency": {
     "state": "scored",
     "criteria": [
      "claimDistance"
     ],
     "modes": [
      "legal_claim"
     ]
    },
    "regulatory": {
     "state": "scored",
     "criteria": [
      "access"
     ],
     "modes": [
      "access"
     ]
    },
    "execution": {
     "state": "na",
     "reason": "It is bought and redeemed at the issuer's published price; the spread is ranked as a cost."
    },
    "exit": {
     "state": "scored",
     "criteria": [
      "liquidity"
     ],
     "modes": [
      "redemption"
     ]
    },
    "keys": {
     "state": "na",
     "reason": "The reader holds the token in a wallet ranked under wallets."
    },
    "information": {
     "state": "gap"
    }
   }
  },
  "tokenised_equities": {
   "profile": "issued_asset",
   "cells": {
    "contract": {
     "state": "gap"
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "No oracle price liquidates the holding."
    },
    "verification": {
     "state": "na",
     "reason": "It is issued on chains ranked under chains and adds no proof or signer layer of its own."
    },
    "liveness": {
     "state": "na",
     "reason": "Holding the token needs no operator to stay online; getting out is the exit family."
    },
    "custody": {
     "state": "gap"
    },
    "insolvency": {
     "state": "scored",
     "criteria": [
      "share_or_promise",
      "who_is_on_the_paper"
     ],
     "modes": [
      "legal_claim",
      "obligor"
     ],
     "shared": "Whether the token is the share or a promise of it, and who the obligor on the paper is, are separate: a real share held through a weak intermediary still fails with that intermediary."
    },
    "regulatory": {
     "state": "scored",
     "criteria": [
      "us_person_answer"
     ],
     "modes": [
      "access"
     ]
    },
    "execution": {
     "state": "na",
     "reason": "It is bought and redeemed at the issuer's published price; the spread is ranked as a cost."
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "The reader holds the token in a wallet ranked under wallets."
    },
    "information": {
     "state": "scored",
     "criteria": [
      "corporate_actions_record"
     ],
     "modes": [
      "accuracy"
     ]
    }
   }
  },
  "tokenised_realestate": {
   "profile": "issued_asset",
   "cells": {
    "contract": {
     "state": "gap"
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "No oracle price liquidates the holding."
    },
    "verification": {
     "state": "na",
     "reason": "It is issued on chains ranked under chains and adds no proof or signer layer of its own."
    },
    "liveness": {
     "state": "na",
     "reason": "Holding the token needs no operator to stay online; getting out is the exit family."
    },
    "custody": {
     "state": "gap"
    },
    "insolvency": {
     "state": "scored",
     "criteria": [
      "legalClaim"
     ],
     "modes": [
      "legal_claim"
     ]
    },
    "regulatory": {
     "state": "scored",
     "criteria": [
      "access"
     ],
     "modes": [
      "access"
     ]
    },
    "execution": {
     "state": "na",
     "reason": "It is bought and redeemed at the issuer's published price; the spread is ranked as a cost."
    },
    "exit": {
     "state": "scored",
     "criteria": [
      "exit"
     ],
     "modes": [
      "secondary"
     ]
    },
    "keys": {
     "state": "na",
     "reason": "The reader holds the token in a wallet ranked under wallets."
    },
    "information": {
     "state": "gap"
    }
   }
  },
  "structured_products": {
   "profile": "issued_asset",
   "cells": {
    "contract": {
     "state": "gap"
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "No oracle price liquidates the holding."
    },
    "verification": {
     "state": "na",
     "reason": "It is issued on chains ranked under chains and adds no proof or signer layer of its own."
    },
    "liveness": {
     "state": "na",
     "reason": "Holding the token needs no operator to stay online; getting out is the exit family."
    },
    "custody": {
     "state": "gap"
    },
    "insolvency": {
     "state": "scored",
     "criteria": [
      "counterparty_backing"
     ],
     "modes": [
      "obligor"
     ]
    },
    "regulatory": {
     "state": "gap"
    },
    "execution": {
     "state": "na",
     "reason": "It is bought and redeemed at the issuer's published price; the spread is ranked as a cost."
    },
    "exit": {
     "state": "scored",
     "criteria": [
      "settlement_and_exit"
     ],
     "modes": [
      "redemption"
     ]
    },
    "keys": {
     "state": "na",
     "reason": "The reader holds the token in a wallet ranked under wallets."
    },
    "information": {
     "state": "scored",
     "criteria": [
      "contract_defined_payoff"
     ],
     "modes": [
      "derivation"
     ]
    }
   }
  },
  "tokenisation_platforms": {
   "profile": "vendor",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "It holds none of the buyer's funds in a contract."
    },
    "control": {
     "state": "scored",
     "criteria": [
      "control_surface_and_who_holds_it"
     ],
     "modes": [
      "freeze"
     ]
    },
    "oracle": {
     "state": "na",
     "reason": "It settles nothing on a price."
    },
    "verification": {
     "state": "na",
     "reason": "It is not a chain or a bridge."
    },
    "liveness": {
     "state": "gap"
    },
    "custody": {
     "state": "na",
     "reason": "It holds none of the buyer's assets."
    },
    "insolvency": {
     "state": "scored",
     "criteria": [
      "instrument_and_record_authority"
     ],
     "modes": [
      "legal_claim"
     ]
    },
    "regulatory": {
     "state": "scored",
     "criteria": [
      "counterparty_and_licence"
     ],
     "modes": [
      "licence"
     ]
    },
    "execution": {
     "state": "na",
     "reason": "It moves no money on the buyer's behalf."
    },
    "exit": {
     "state": "scored",
     "criteria": [
      "continuity_if_platform_stops"
     ],
     "modes": [
      "vendor_failure"
     ]
    },
    "keys": {
     "state": "na",
     "reason": "It holds no signing keys for the buyer."
    },
    "information": {
     "state": "na",
     "reason": "It publishes no number the buyer acts on and holds no personal data of the buyer's customers."
    }
   }
  },
  "bridges": {
   "profile": "protocol",
   "cells": {
    "contract": {
     "state": "gap"
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "No oracle price liquidates or settles a position in the ranked products."
    },
    "verification": {
     "state": "scored",
     "criteria": [
      "trust"
     ],
     "modes": [
      "message_trust"
     ]
    },
    "liveness": {
     "state": "gap"
    },
    "custody": {
     "state": "gap"
    },
    "insolvency": {
     "state": "na",
     "reason": "A trade settles on chain; no balance sheet owes the reader anything afterwards."
    },
    "regulatory": {
     "state": "gap"
    },
    "execution": {
     "state": "gap"
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "The reader signs from their own wallet, which is ranked under wallets."
    },
    "information": {
     "state": "na",
     "reason": "It needs no account or identity documents, and the figures that matter are read on chain."
    }
   }
  },
  "cross_chain_messaging": {
   "profile": "protocol",
   "cells": {
    "contract": {
     "state": "gap"
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "No oracle price liquidates or settles a position in the ranked products."
    },
    "verification": {
     "state": "scored",
     "criteria": [
      "message_trust_model",
      "security_configurability",
      "message_failure_record"
     ],
     "modes": [
      "message_trust",
      "configurable_security",
      "failure_record"
     ],
     "shared": "How a message is verified, who chooses that verification, and invalid messages accepted before fail separately: a strong default is worth nothing where an application can opt out of it, and neither shows the record."
    },
    "liveness": {
     "state": "gap"
    },
    "custody": {
     "state": "na",
     "reason": "Non-custodial: no firm holds the reader's assets between transactions."
    },
    "insolvency": {
     "state": "na",
     "reason": "A trade settles on chain; no balance sheet owes the reader anything afterwards."
    },
    "regulatory": {
     "state": "gap"
    },
    "execution": {
     "state": "gap"
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "The reader signs from their own wallet, which is ranked under wallets."
    },
    "information": {
     "state": "na",
     "reason": "It needs no account or identity documents, and the figures that matter are read on chain."
    }
   }
  },
  "cross_chain_swaps": {
   "profile": "protocol",
   "cells": {
    "contract": {
     "state": "gap"
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "No oracle price liquidates or settles a position in the ranked products."
    },
    "verification": {
     "state": "scored",
     "criteria": [
      "bridgeSecurityModel"
     ],
     "modes": [
      "message_trust"
     ]
    },
    "liveness": {
     "state": "na",
     "reason": "It runs while the chains it is deployed on run; their liveness is ranked under chains."
    },
    "custody": {
     "state": "na",
     "reason": "Non-custodial: no firm holds the reader's assets between transactions."
    },
    "insolvency": {
     "state": "na",
     "reason": "A trade settles on chain; no balance sheet owes the reader anything afterwards."
    },
    "regulatory": {
     "state": "gap"
    },
    "execution": {
     "state": "scored",
     "criteria": [
      "feeTransparency"
     ],
     "modes": [
      "price_integrity"
     ]
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "The reader signs from their own wallet, which is ranked under wallets."
    },
    "information": {
     "state": "na",
     "reason": "It needs no account or identity documents, and the figures that matter are read on chain."
    }
   }
  },
  "token_standards": {
   "profile": "protocol",
   "cells": {
    "contract": {
     "state": "gap"
    },
    "control": {
     "state": "scored",
     "criteria": [
      "mint_authority_and_revocation",
      "authorised_deployment_and_provenance",
      "blast_radius_caps"
     ],
     "modes": [
      "mint",
      "deployment",
      "rate_limits"
     ],
     "shared": "Who can mint or revoke, whether a deployment's provenance can be checked, and how much one compromised key can mint before a cap stops it fail separately: the right mint authority is still a disaster without a rate limit."
    },
    "oracle": {
     "state": "na",
     "reason": "No oracle price liquidates or settles a position in the ranked products."
    },
    "verification": {
     "state": "gap"
    },
    "liveness": {
     "state": "na",
     "reason": "It runs while the chains it is deployed on run; their liveness is ranked under chains."
    },
    "custody": {
     "state": "na",
     "reason": "Non-custodial: no firm holds the reader's assets between transactions."
    },
    "insolvency": {
     "state": "na",
     "reason": "A trade settles on chain; no balance sheet owes the reader anything afterwards."
    },
    "regulatory": {
     "state": "gap"
    },
    "execution": {
     "state": "gap"
    },
    "exit": {
     "state": "scored",
     "criteria": [
      "exit_and_token_captivity"
     ],
     "modes": [
      "portability"
     ]
    },
    "keys": {
     "state": "na",
     "reason": "The reader signs from their own wallet, which is ranked under wallets."
    },
    "information": {
     "state": "na",
     "reason": "It needs no account or identity documents, and the figures that matter are read on chain."
    }
   }
  },
  "l2_chains": {
   "profile": "chain",
   "cells": {
    "contract": {
     "state": "gap"
    },
    "control": {
     "state": "scored",
     "criteria": [
      "exit_window"
     ],
     "modes": [
      "upgrade"
     ]
    },
    "oracle": {
     "state": "na",
     "reason": "No oracle price is part of the chain's own state transition."
    },
    "verification": {
     "state": "scored",
     "criteria": [
      "da",
      "proof_system"
     ],
     "modes": [
      "data_availability",
      "proof"
     ],
     "shared": "Data availability and the proof system are the two independent halves of an L2's state security (separate slices of L2BEAT's risk rosette): valid proofs over unpublished data cannot be rebuilt, and published data with no proof cannot be challenged."
    },
    "liveness": {
     "state": "scored",
     "criteria": [
      "proposer_failure",
      "sequencer_failure"
     ],
     "modes": [
      "escape_hatch",
      "censorship"
     ],
     "shared": "Withdrawing when the proposer stops and getting included when the sequencer censors are separate L2BEAT risks: an escape hatch can exist where forced inclusion does not."
    },
    "custody": {
     "state": "na",
     "reason": "Assets on the chain are self-custodied; a bridge's custody is ranked under bridges."
    },
    "insolvency": {
     "state": "na",
     "reason": "A chain owes no one a balance; there is no estate to rank in."
    },
    "regulatory": {
     "state": "na",
     "reason": "No licensed entity serves the reader; the chain is not a provider with a licence."
    },
    "execution": {
     "state": "gap"
    },
    "exit": {
     "state": "na",
     "reason": "Leaving means withdrawing through the chain itself, which is the liveness family; there is no redemption or vendor to exit."
    },
    "keys": {
     "state": "na",
     "reason": "Keys belong to the reader's wallet, ranked under wallets."
    },
    "information": {
     "state": "na",
     "reason": "The chain publishes its own state; no third-party number or personal data is involved."
    }
   }
  },
  "sidechains": {
   "profile": "chain",
   "cells": {
    "contract": {
     "state": "gap"
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "No oracle price is part of the chain's own state transition."
    },
    "verification": {
     "state": "scored",
     "criteria": [
      "validator_set_concentration",
      "finality_and_reorg_behaviour"
     ],
     "modes": [
      "signer_set",
      "finality"
     ],
     "shared": "How concentrated the validator set is and how finality and reorganisations behave fail separately: a large validator set can still finalise slowly or reorganise."
    },
    "liveness": {
     "state": "scored",
     "criteria": [
      "failure_and_halt_record"
     ],
     "modes": [
      "halt"
     ]
    },
    "custody": {
     "state": "scored",
     "criteria": [
      "bridge_custody_control"
     ],
     "modes": [
      "holder"
     ]
    },
    "insolvency": {
     "state": "na",
     "reason": "A chain owes no one a balance; there is no estate to rank in."
    },
    "regulatory": {
     "state": "na",
     "reason": "No licensed entity serves the reader; the chain is not a provider with a licence."
    },
    "execution": {
     "state": "gap"
    },
    "exit": {
     "state": "na",
     "reason": "Leaving means withdrawing through the chain itself, which is the liveness family; there is no redemption or vendor to exit."
    },
    "keys": {
     "state": "na",
     "reason": "Keys belong to the reader's wallet, ranked under wallets."
    },
    "information": {
     "state": "na",
     "reason": "The chain publishes its own state; no third-party number or personal data is involved."
    }
   }
  },
  "layer1_chains": {
   "profile": "chain",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "A base layer keeps balances in its own state, not in a contract."
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "No oracle price is part of the chain's own state transition."
    },
    "verification": {
     "state": "scored",
     "criteria": [
      "finality_integrity",
      "decentralisation_depth",
      "client_diversity"
     ],
     "modes": [
      "finality",
      "signer_set",
      "client_diversity"
     ],
     "shared": "Finality, validator decentralisation and client diversity fail separately: a decentralised validator set running one client fails with that client's bug."
    },
    "liveness": {
     "state": "scored",
     "criteria": [
      "liveness_record"
     ],
     "modes": [
      "halt"
     ]
    },
    "custody": {
     "state": "na",
     "reason": "Assets on the chain are self-custodied; a bridge's custody is ranked under bridges."
    },
    "insolvency": {
     "state": "na",
     "reason": "A chain owes no one a balance; there is no estate to rank in."
    },
    "regulatory": {
     "state": "na",
     "reason": "No licensed entity serves the reader; the chain is not a provider with a licence."
    },
    "execution": {
     "state": "gap"
    },
    "exit": {
     "state": "na",
     "reason": "Leaving means withdrawing through the chain itself, which is the liveness family; there is no redemption or vendor to exit."
    },
    "keys": {
     "state": "na",
     "reason": "Keys belong to the reader's wallet, ranked under wallets."
    },
    "information": {
     "state": "na",
     "reason": "The chain publishes its own state; no third-party number or personal data is involved."
    }
   }
  },
  "appchains_l3s": {
   "profile": "chain",
   "cells": {
    "contract": {
     "state": "gap"
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "No oracle price is part of the chain's own state transition."
    },
    "verification": {
     "state": "scored",
     "criteria": [
      "settlement_security_inherited",
      "operator_set_today"
     ],
     "modes": [
      "proof",
      "signer_set"
     ],
     "shared": "The security inherited from the settlement layer and the operator set running the chain today fail separately: an L3 on a strong L2 can still be run by one operator."
    },
    "liveness": {
     "state": "scored",
     "criteria": [
      "permissionless_exit"
     ],
     "modes": [
      "escape_hatch"
     ]
    },
    "custody": {
     "state": "na",
     "reason": "Assets on the chain are self-custodied; a bridge's custody is ranked under bridges."
    },
    "insolvency": {
     "state": "na",
     "reason": "A chain owes no one a balance; there is no estate to rank in."
    },
    "regulatory": {
     "state": "na",
     "reason": "No licensed entity serves the reader; the chain is not a provider with a licence."
    },
    "execution": {
     "state": "gap"
    },
    "exit": {
     "state": "na",
     "reason": "Leaving means withdrawing through the chain itself, which is the liveness family; there is no redemption or vendor to exit."
    },
    "keys": {
     "state": "na",
     "reason": "Keys belong to the reader's wallet, ranked under wallets."
    },
    "information": {
     "state": "na",
     "reason": "The chain publishes its own state; no third-party number or personal data is involved."
    }
   }
  },
  "data_availability": {
   "profile": "chain",
   "cells": {
    "contract": {
     "state": "gap"
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "No oracle price is part of the chain's own state transition."
    },
    "verification": {
     "state": "scored",
     "criteria": [
      "security_model_actual",
      "das_and_retention"
     ],
     "modes": [
      "data_availability",
      "sampling"
     ],
     "shared": "The DA layer's actual security model and whether data can be sampled and stays retrievable fail separately: a strong committee can still drop data after a short retention window."
    },
    "liveness": {
     "state": "scored",
     "criteria": [
      "halt_blast_radius"
     ],
     "modes": [
      "halt"
     ]
    },
    "custody": {
     "state": "na",
     "reason": "Assets on the chain are self-custodied; a bridge's custody is ranked under bridges."
    },
    "insolvency": {
     "state": "na",
     "reason": "A chain owes no one a balance; there is no estate to rank in."
    },
    "regulatory": {
     "state": "na",
     "reason": "No licensed entity serves the reader; the chain is not a provider with a licence."
    },
    "execution": {
     "state": "na",
     "reason": "A data-availability layer stores published data; it orders no user trades."
    },
    "exit": {
     "state": "na",
     "reason": "Leaving means withdrawing through the chain itself, which is the liveness family; there is no redemption or vendor to exit."
    },
    "keys": {
     "state": "na",
     "reason": "Keys belong to the reader's wallet, ranked under wallets."
    },
    "information": {
     "state": "na",
     "reason": "The chain publishes its own state; no third-party number or personal data is involved."
    }
   }
  },
  "shared_sequencers": {
   "profile": "chain",
   "cells": {
    "contract": {
     "state": "gap"
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "No oracle price is part of the chain's own state transition."
    },
    "verification": {
     "state": "scored",
     "criteria": [
      "sequencer_set_decentralisation"
     ],
     "modes": [
      "signer_set"
     ]
    },
    "liveness": {
     "state": "scored",
     "criteria": [
      "documented_halt_behaviour"
     ],
     "modes": [
      "halt"
     ]
    },
    "custody": {
     "state": "na",
     "reason": "Assets on the chain are self-custodied; a bridge's custody is ranked under bridges."
    },
    "insolvency": {
     "state": "na",
     "reason": "A chain owes no one a balance; there is no estate to rank in."
    },
    "regulatory": {
     "state": "na",
     "reason": "No licensed entity serves the reader; the chain is not a provider with a licence."
    },
    "execution": {
     "state": "scored",
     "criteria": [
      "published_economics_mev"
     ],
     "modes": [
      "order_flow"
     ]
    },
    "exit": {
     "state": "na",
     "reason": "Leaving means withdrawing through the chain itself, which is the liveness family; there is no redemption or vendor to exit."
    },
    "keys": {
     "state": "na",
     "reason": "Keys belong to the reader's wallet, ranked under wallets."
    },
    "information": {
     "state": "na",
     "reason": "The chain publishes its own state; no third-party number or personal data is involved."
    }
   }
  },
  "rollup_as_a_service": {
   "profile": "vendor",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "It holds none of the buyer's funds in a contract."
    },
    "control": {
     "state": "scored",
     "criteria": [
      "key_custody_onchain"
     ],
     "modes": [
      "upgrade"
     ]
    },
    "oracle": {
     "state": "na",
     "reason": "It settles nothing on a price."
    },
    "verification": {
     "state": "na",
     "reason": "It is not a chain or a bridge."
    },
    "liveness": {
     "state": "gap"
    },
    "custody": {
     "state": "na",
     "reason": "It holds none of the buyer's assets."
    },
    "insolvency": {
     "state": "na",
     "reason": "It holds no client assets; a failed vendor is the exit family's risk."
    },
    "regulatory": {
     "state": "na",
     "reason": "It is sold as software or a service; no licence governs its use."
    },
    "execution": {
     "state": "na",
     "reason": "It moves no money on the buyer's behalf."
    },
    "exit": {
     "state": "scored",
     "criteria": [
      "exit_path_documented"
     ],
     "modes": [
      "vendor_failure"
     ]
    },
    "keys": {
     "state": "na",
     "reason": "It holds no signing keys for the buyer."
    },
    "information": {
     "state": "scored",
     "criteria": [
      "operating_record_verified"
     ],
     "modes": [
      "accuracy"
     ]
    }
   }
  },
  "oracles": {
   "profile": "protocol",
   "cells": {
    "contract": {
     "state": "gap"
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "scored",
     "criteria": [
      "incidentTransparency",
      "exploitRecord",
      "failureMode"
     ],
     "modes": [
      "incident_disclosure",
      "feed_record",
      "feed_design"
     ],
     "shared": "How a feed is designed to fail, the exploits that ran through it, and whether incidents are disclosed are separate: a sound design still needs a record, and the record means little if incidents go unreported."
    },
    "verification": {
     "state": "na",
     "reason": "It runs on chains whose verification is ranked under chains, and adds no proof or signer layer of its own."
    },
    "liveness": {
     "state": "na",
     "reason": "It runs while the chains it is deployed on run; their liveness is ranked under chains."
    },
    "custody": {
     "state": "na",
     "reason": "Non-custodial: no firm holds the reader's assets between transactions."
    },
    "insolvency": {
     "state": "na",
     "reason": "A trade settles on chain; no balance sheet owes the reader anything afterwards."
    },
    "regulatory": {
     "state": "gap"
    },
    "execution": {
     "state": "gap"
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "The reader signs from their own wallet, which is ranked under wallets."
    },
    "information": {
     "state": "na",
     "reason": "It needs no account or identity documents, and the figures that matter are read on chain."
    }
   }
  },
  "rpc_nodes": {
   "profile": "vendor",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "It holds none of the buyer's funds in a contract."
    },
    "control": {
     "state": "na",
     "reason": "It controls none of the buyer's assets."
    },
    "oracle": {
     "state": "na",
     "reason": "It settles nothing on a price."
    },
    "verification": {
     "state": "na",
     "reason": "It is not a chain or a bridge."
    },
    "liveness": {
     "state": "scored",
     "criteria": [
      "reliabilityAndCoverage"
     ],
     "modes": [
      "halt"
     ]
    },
    "custody": {
     "state": "na",
     "reason": "It holds none of the buyer's assets."
    },
    "insolvency": {
     "state": "na",
     "reason": "It holds no client assets; a failed vendor is the exit family's risk."
    },
    "regulatory": {
     "state": "na",
     "reason": "It is sold as software or a service; no licence governs its use."
    },
    "execution": {
     "state": "na",
     "reason": "It moves no money on the buyer's behalf."
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "It holds no signing keys for the buyer."
    },
    "information": {
     "state": "gap"
    }
   }
  },
  "indexers": {
   "profile": "vendor",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "It holds none of the buyer's funds in a contract."
    },
    "control": {
     "state": "na",
     "reason": "It controls none of the buyer's assets."
    },
    "oracle": {
     "state": "na",
     "reason": "It settles nothing on a price."
    },
    "verification": {
     "state": "na",
     "reason": "It is not a chain or a bridge."
    },
    "liveness": {
     "state": "gap"
    },
    "custody": {
     "state": "na",
     "reason": "It holds none of the buyer's assets."
    },
    "insolvency": {
     "state": "na",
     "reason": "It holds no client assets; a failed vendor is the exit family's risk."
    },
    "regulatory": {
     "state": "na",
     "reason": "It is sold as software or a service; no licence governs its use."
    },
    "execution": {
     "state": "na",
     "reason": "It moves no money on the buyer's behalf."
    },
    "exit": {
     "state": "scored",
     "criteria": [
      "portability",
      "vendorContinuity"
     ],
     "modes": [
      "portability",
      "vendor_failure"
     ],
     "shared": "Moving the data or subgraph elsewhere and the vendor's continuity are separate exits: a portable format does not keep a hosted endpoint running."
    },
    "keys": {
     "state": "na",
     "reason": "It holds no signing keys for the buyer."
    },
    "information": {
     "state": "gap"
    }
   }
  },
  "market_data_apis": {
   "profile": "vendor",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "It holds none of the buyer's funds in a contract."
    },
    "control": {
     "state": "na",
     "reason": "It controls none of the buyer's assets."
    },
    "oracle": {
     "state": "na",
     "reason": "It settles nothing on a price."
    },
    "verification": {
     "state": "na",
     "reason": "It is not a chain or a bridge."
    },
    "liveness": {
     "state": "gap"
    },
    "custody": {
     "state": "na",
     "reason": "It holds none of the buyer's assets."
    },
    "insolvency": {
     "state": "na",
     "reason": "It holds no client assets; a failed vendor is the exit family's risk."
    },
    "regulatory": {
     "state": "na",
     "reason": "It is sold as software or a service; no licence governs its use."
    },
    "execution": {
     "state": "na",
     "reason": "It moves no money on the buyer's behalf."
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "It holds no signing keys for the buyer."
    },
    "information": {
     "state": "gap"
    }
   }
  },
  "decentralised_storage": {
   "profile": "vendor",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "It holds none of the buyer's funds in a contract."
    },
    "control": {
     "state": "na",
     "reason": "It controls none of the buyer's assets."
    },
    "oracle": {
     "state": "na",
     "reason": "It settles nothing on a price."
    },
    "verification": {
     "state": "na",
     "reason": "It is not a chain or a bridge."
    },
    "liveness": {
     "state": "scored",
     "criteria": [
      "durabilityEnforceability"
     ],
     "modes": [
      "durability"
     ]
    },
    "custody": {
     "state": "na",
     "reason": "It holds none of the buyer's assets."
    },
    "insolvency": {
     "state": "na",
     "reason": "It holds no client assets; a failed vendor is the exit family's risk."
    },
    "regulatory": {
     "state": "na",
     "reason": "It is sold as software or a service; no licence governs its use."
    },
    "execution": {
     "state": "na",
     "reason": "It moves no money on the buyer's behalf."
    },
    "exit": {
     "state": "scored",
     "criteria": [
      "exitAndContinuityRisk"
     ],
     "modes": [
      "vendor_failure"
     ]
    },
    "keys": {
     "state": "na",
     "reason": "It holds no signing keys for the buyer."
    },
    "information": {
     "state": "na",
     "reason": "It publishes no number the buyer acts on and holds no personal data of the buyer's customers."
    }
   }
  },
  "decentralised_compute": {
   "profile": "vendor",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "It holds none of the buyer's funds in a contract."
    },
    "control": {
     "state": "na",
     "reason": "It controls none of the buyer's assets."
    },
    "oracle": {
     "state": "na",
     "reason": "It settles nothing on a price."
    },
    "verification": {
     "state": "na",
     "reason": "It is not a chain or a bridge."
    },
    "liveness": {
     "state": "gap"
    },
    "custody": {
     "state": "na",
     "reason": "It holds none of the buyer's assets."
    },
    "insolvency": {
     "state": "na",
     "reason": "It holds no client assets; a failed vendor is the exit family's risk."
    },
    "regulatory": {
     "state": "na",
     "reason": "It is sold as software or a service; no licence governs its use."
    },
    "execution": {
     "state": "scored",
     "criteria": [
      "dc_failure_recourse"
     ],
     "modes": [
      "dispute"
     ]
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "It holds no signing keys for the buyer."
    },
    "information": {
     "state": "scored",
     "criteria": [
      "dc_supply_verification"
     ],
     "modes": [
      "accuracy"
     ]
    }
   }
  },
  "lightning_payment_infrastructure": {
   "profile": "vendor",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "It holds none of the buyer's funds in a contract."
    },
    "control": {
     "state": "na",
     "reason": "It controls none of the buyer's assets."
    },
    "oracle": {
     "state": "na",
     "reason": "It settles nothing on a price."
    },
    "verification": {
     "state": "na",
     "reason": "It is not a chain or a bridge."
    },
    "liveness": {
     "state": "scored",
     "criteria": [
      "availability_and_outage_behaviour"
     ],
     "modes": [
      "halt"
     ]
    },
    "custody": {
     "state": "scored",
     "criteria": [
      "custody_of_funds_in_flight"
     ],
     "modes": [
      "float"
     ]
    },
    "insolvency": {
     "state": "na",
     "reason": "It holds no client assets; a failed vendor is the exit family's risk."
    },
    "regulatory": {
     "state": "na",
     "reason": "It is sold as software or a service; no licence governs its use."
    },
    "execution": {
     "state": "na",
     "reason": "It moves no money on the buyer's behalf."
    },
    "exit": {
     "state": "scored",
     "criteria": [
      "exit_and_portability"
     ],
     "modes": [
      "portability"
     ]
    },
    "keys": {
     "state": "na",
     "reason": "It holds no signing keys for the buyer."
    },
    "information": {
     "state": "na",
     "reason": "It publishes no number the buyer acts on and holds no personal data of the buyer's customers."
    }
   }
  },
  "relayers": {
   "profile": "vendor",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "It holds none of the buyer's funds in a contract."
    },
    "control": {
     "state": "na",
     "reason": "It controls none of the buyer's assets."
    },
    "oracle": {
     "state": "na",
     "reason": "It settles nothing on a price."
    },
    "verification": {
     "state": "na",
     "reason": "It is not a chain or a bridge."
    },
    "liveness": {
     "state": "scored",
     "criteria": [
      "exactly_once_execution"
     ],
     "modes": [
      "missed_execution"
     ]
    },
    "custody": {
     "state": "scored",
     "criteria": [
      "relayer_authority_and_key_custody",
      "credential_blast_radius",
      "gas_float_custody"
     ],
     "modes": [
      "holder",
      "credential",
      "float"
     ],
     "shared": "Who holds the relayer's signing key, what a stolen credential can do, and where the gas float sits are three separate custody failures of one service."
    },
    "insolvency": {
     "state": "na",
     "reason": "It holds no client assets; a failed vendor is the exit family's risk."
    },
    "regulatory": {
     "state": "na",
     "reason": "It is sold as software or a service; no licence governs its use."
    },
    "execution": {
     "state": "na",
     "reason": "It moves no money on the buyer's behalf."
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "It holds no signing keys for the buyer."
    },
    "information": {
     "state": "na",
     "reason": "It publishes no number the buyer acts on and holds no personal data of the buyer's customers."
    }
   }
  },
  "automation_keepers": {
   "profile": "vendor",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "It holds none of the buyer's funds in a contract."
    },
    "control": {
     "state": "scored",
     "criteria": [
      "trigger_surface_and_predicate_locus"
     ],
     "modes": [
      "operator_override"
     ]
    },
    "oracle": {
     "state": "na",
     "reason": "It settles nothing on a price."
    },
    "verification": {
     "state": "na",
     "reason": "It is not a chain or a bridge."
    },
    "liveness": {
     "state": "scored",
     "criteria": [
      "visibility_of_the_non_event"
     ],
     "modes": [
      "missed_execution"
     ]
    },
    "custody": {
     "state": "na",
     "reason": "It holds none of the buyer's assets."
    },
    "insolvency": {
     "state": "na",
     "reason": "It holds no client assets; a failed vendor is the exit family's risk."
    },
    "regulatory": {
     "state": "na",
     "reason": "It is sold as software or a service; no licence governs its use."
    },
    "execution": {
     "state": "scored",
     "criteria": [
      "published_lateness_bound"
     ],
     "modes": [
      "settlement"
     ]
    },
    "exit": {
     "state": "scored",
     "criteria": [
      "survives_the_vendor"
     ],
     "modes": [
      "vendor_failure"
     ]
    },
    "keys": {
     "state": "na",
     "reason": "It holds no signing keys for the buyer."
    },
    "information": {
     "state": "na",
     "reason": "It publishes no number the buyer acts on and holds no personal data of the buyer's customers."
    }
   }
  },
  "account_abstraction_infra": {
   "profile": "vendor",
   "cells": {
    "contract": {
     "state": "gap"
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "It settles nothing on a price."
    },
    "verification": {
     "state": "na",
     "reason": "It is not a chain or a bridge."
    },
    "liveness": {
     "state": "gap"
    },
    "custody": {
     "state": "na",
     "reason": "It holds none of the buyer's assets."
    },
    "insolvency": {
     "state": "na",
     "reason": "It holds no client assets; a failed vendor is the exit family's risk."
    },
    "regulatory": {
     "state": "na",
     "reason": "It is sold as software or a service; no licence governs its use."
    },
    "execution": {
     "state": "na",
     "reason": "It moves no money on the buyer's behalf."
    },
    "exit": {
     "state": "scored",
     "criteria": [
      "exit_without_vendor"
     ],
     "modes": [
      "vendor_failure"
     ]
    },
    "keys": {
     "state": "na",
     "reason": "It holds no signing keys for the buyer."
    },
    "information": {
     "state": "na",
     "reason": "It publishes no number the buyer acts on and holds no personal data of the buyer's customers."
    }
   }
  },
  "dev_frameworks": {
   "profile": "vendor",
   "cells": {
    "contract": {
     "state": "scored",
     "criteria": [
      "supply_chain_posture"
     ],
     "modes": [
      "supply_chain"
     ]
    },
    "control": {
     "state": "na",
     "reason": "It controls none of the buyer's assets."
    },
    "oracle": {
     "state": "na",
     "reason": "It settles nothing on a price."
    },
    "verification": {
     "state": "na",
     "reason": "It is not a chain or a bridge."
    },
    "liveness": {
     "state": "gap"
    },
    "custody": {
     "state": "na",
     "reason": "It holds none of the buyer's assets."
    },
    "insolvency": {
     "state": "na",
     "reason": "It holds no client assets; a failed vendor is the exit family's risk."
    },
    "regulatory": {
     "state": "na",
     "reason": "It is sold as software or a service; no licence governs its use."
    },
    "execution": {
     "state": "na",
     "reason": "It moves no money on the buyer's behalf."
    },
    "exit": {
     "state": "scored",
     "criteria": [
      "maintenance_cadence",
      "lock_in_exit_cost"
     ],
     "modes": [
      "vendor_failure",
      "portability"
     ],
     "shared": "Maintenance cadence and the cost of leaving the framework are separate exits: an actively maintained framework can still lock the code in."
    },
    "keys": {
     "state": "na",
     "reason": "It holds no signing keys for the buyer."
    },
    "information": {
     "state": "na",
     "reason": "It publishes no number the buyer acts on and holds no personal data of the buyer's customers."
    }
   }
  },
  "mining_pools": {
   "profile": "vendor",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "It holds none of the buyer's funds in a contract."
    },
    "control": {
     "state": "na",
     "reason": "It controls none of the buyer's assets."
    },
    "oracle": {
     "state": "na",
     "reason": "It settles nothing on a price."
    },
    "verification": {
     "state": "na",
     "reason": "It is not a chain or a bridge."
    },
    "liveness": {
     "state": "scored",
     "criteria": [
      "block_template_control"
     ],
     "modes": [
      "censorship"
     ]
    },
    "custody": {
     "state": "scored",
     "criteria": [
      "payout_custody_coinbase_directness"
     ],
     "modes": [
      "holder"
     ]
    },
    "insolvency": {
     "state": "scored",
     "criteria": [
      "payout_scheme_risk_transfer"
     ],
     "modes": [
      "obligor"
     ]
    },
    "regulatory": {
     "state": "na",
     "reason": "It is sold as software or a service; no licence governs its use."
    },
    "execution": {
     "state": "na",
     "reason": "It moves no money on the buyer's behalf."
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "It holds no signing keys for the buyer."
    },
    "information": {
     "state": "na",
     "reason": "It publishes no number the buyer acts on and holds no personal data of the buyer's customers."
    }
   }
  },
  "depin_networks": {
   "profile": "protocol",
   "cells": {
    "contract": {
     "state": "gap"
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "No oracle price liquidates or settles a position in the ranked products."
    },
    "verification": {
     "state": "na",
     "reason": "It runs on chains whose verification is ranked under chains, and adds no proof or signer layer of its own."
    },
    "liveness": {
     "state": "na",
     "reason": "It runs while the chains it is deployed on run; their liveness is ranked under chains."
    },
    "custody": {
     "state": "na",
     "reason": "Non-custodial: no firm holds the reader's assets between transactions."
    },
    "insolvency": {
     "state": "na",
     "reason": "A trade settles on chain; no balance sheet owes the reader anything afterwards."
    },
    "regulatory": {
     "state": "gap"
    },
    "execution": {
     "state": "gap"
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "The reader signs from their own wallet, which is ranked under wallets."
    },
    "information": {
     "state": "scored",
     "criteria": [
      "demand_revenue_verified",
      "reward_integrity_depin",
      "operator_disclosure_depin"
     ],
     "modes": [
      "accuracy",
      "manipulation",
      "independence"
     ],
     "shared": "Verified demand revenue, reward integrity against farming, and operator disclosure are three separate ways a DePIN network's numbers mislead."
    }
   }
  },
  "smart_contract_audits": {
   "profile": "vendor",
   "cells": {
    "contract": {
     "state": "scored",
     "criteria": [
      "postAuditRecord"
     ],
     "modes": [
      "code_exploit"
     ]
    },
    "control": {
     "state": "na",
     "reason": "It controls none of the buyer's assets."
    },
    "oracle": {
     "state": "na",
     "reason": "It settles nothing on a price."
    },
    "verification": {
     "state": "na",
     "reason": "It is not a chain or a bridge."
    },
    "liveness": {
     "state": "gap"
    },
    "custody": {
     "state": "na",
     "reason": "It holds none of the buyer's assets."
    },
    "insolvency": {
     "state": "na",
     "reason": "It holds no client assets; a failed vendor is the exit family's risk."
    },
    "regulatory": {
     "state": "na",
     "reason": "It is sold as software or a service; no licence governs its use."
    },
    "execution": {
     "state": "na",
     "reason": "It moves no money on the buyer's behalf."
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "It holds no signing keys for the buyer."
    },
    "information": {
     "state": "scored",
     "criteria": [
      "accountability"
     ],
     "modes": [
      "derivation"
     ]
    }
   }
  },
  "bug_bounties": {
   "profile": "vendor",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "It holds none of the buyer's funds in a contract."
    },
    "control": {
     "state": "na",
     "reason": "It controls none of the buyer's assets."
    },
    "oracle": {
     "state": "na",
     "reason": "It settles nothing on a price."
    },
    "verification": {
     "state": "na",
     "reason": "It is not a chain or a bridge."
    },
    "liveness": {
     "state": "gap"
    },
    "custody": {
     "state": "na",
     "reason": "It holds none of the buyer's assets."
    },
    "insolvency": {
     "state": "na",
     "reason": "It holds no client assets; a failed vendor is the exit family's risk."
    },
    "regulatory": {
     "state": "na",
     "reason": "It is sold as software or a service; no licence governs its use."
    },
    "execution": {
     "state": "scored",
     "criteria": [
      "disputeRecourse"
     ],
     "modes": [
      "dispute"
     ]
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "It holds no signing keys for the buyer."
    },
    "information": {
     "state": "scored",
     "criteria": [
      "payoutTransparency"
     ],
     "modes": [
      "accuracy"
     ]
    }
   }
  },
  "wallet_screening": {
   "profile": "data_tool",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "It holds no funds in a contract."
    },
    "control": {
     "state": "na",
     "reason": "It holds and controls none of the reader's assets."
    },
    "oracle": {
     "state": "na",
     "reason": "It settles nothing on a price."
    },
    "verification": {
     "state": "na",
     "reason": "It is not a chain or a bridge."
    },
    "liveness": {
     "state": "na",
     "reason": "An outage delays a number; it moves no funds."
    },
    "custody": {
     "state": "na",
     "reason": "It holds none of the reader's assets."
    },
    "insolvency": {
     "state": "na",
     "reason": "It is a subscription; the vendor holds no client assets."
    },
    "regulatory": {
     "state": "na",
     "reason": "No licence governs using the software."
    },
    "execution": {
     "state": "na",
     "reason": "It places no trades and moves no money."
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "It signs nothing and holds no keys."
    },
    "information": {
     "state": "scored",
     "criteria": [
      "attribution",
      "falsePositive"
     ],
     "modes": [
      "derivation",
      "accuracy"
     ],
     "shared": "How an address's attribution is derived and how often clean addresses are flagged fail separately: a documented method can still produce false positives."
    }
   }
  },
  "transaction_simulation": {
   "profile": "data_tool",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "It holds no funds in a contract."
    },
    "control": {
     "state": "na",
     "reason": "It holds and controls none of the reader's assets."
    },
    "oracle": {
     "state": "na",
     "reason": "It settles nothing on a price."
    },
    "verification": {
     "state": "na",
     "reason": "It is not a chain or a bridge."
    },
    "liveness": {
     "state": "na",
     "reason": "An outage delays a number; it moves no funds."
    },
    "custody": {
     "state": "na",
     "reason": "It holds none of the reader's assets."
    },
    "insolvency": {
     "state": "na",
     "reason": "It is a subscription; the vendor holds no client assets."
    },
    "regulatory": {
     "state": "na",
     "reason": "No licence governs using the software."
    },
    "execution": {
     "state": "scored",
     "criteria": [
      "accountability"
     ],
     "modes": [
      "dispute"
     ]
    },
    "exit": {
     "state": "scored",
     "criteria": [
      "survivalRisk"
     ],
     "modes": [
      "vendor_failure"
     ]
    },
    "keys": {
     "state": "na",
     "reason": "It signs nothing and holds no keys."
    },
    "information": {
     "state": "scored",
     "criteria": [
      "detectionMethod"
     ],
     "modes": [
      "accuracy"
     ]
    }
   }
  },
  "revoke_tools": {
   "profile": "data_tool",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "It holds no funds in a contract."
    },
    "control": {
     "state": "na",
     "reason": "It holds and controls none of the reader's assets."
    },
    "oracle": {
     "state": "na",
     "reason": "It settles nothing on a price."
    },
    "verification": {
     "state": "na",
     "reason": "It is not a chain or a bridge."
    },
    "liveness": {
     "state": "na",
     "reason": "An outage delays a number; it moves no funds."
    },
    "custody": {
     "state": "scored",
     "criteria": [
      "trust_surface_openness"
     ],
     "modes": [
      "approvals"
     ]
    },
    "insolvency": {
     "state": "na",
     "reason": "It is a subscription; the vendor holds no client assets."
    },
    "regulatory": {
     "state": "na",
     "reason": "No licence governs using the software."
    },
    "execution": {
     "state": "na",
     "reason": "It places no trades and moves no money."
    },
    "exit": {
     "state": "scored",
     "criteria": [
      "maintenance_funding_durability"
     ],
     "modes": [
      "vendor_failure"
     ]
    },
    "keys": {
     "state": "na",
     "reason": "It signs nothing and holds no keys."
    },
    "information": {
     "state": "scored",
     "criteria": [
      "data_freshness_verifiability"
     ],
     "modes": [
      "accuracy"
     ]
    }
   }
  },
  "onchain_monitoring": {
   "profile": "data_tool",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "It holds no funds in a contract."
    },
    "control": {
     "state": "na",
     "reason": "It holds and controls none of the reader's assets."
    },
    "oracle": {
     "state": "na",
     "reason": "It settles nothing on a price."
    },
    "verification": {
     "state": "na",
     "reason": "It is not a chain or a bridge."
    },
    "liveness": {
     "state": "gap"
    },
    "custody": {
     "state": "na",
     "reason": "It holds none of the reader's assets."
    },
    "insolvency": {
     "state": "na",
     "reason": "It is a subscription; the vendor holds no client assets."
    },
    "regulatory": {
     "state": "na",
     "reason": "No licence governs using the software."
    },
    "execution": {
     "state": "na",
     "reason": "It places no trades and moves no money."
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "It signs nothing and holds no keys."
    },
    "information": {
     "state": "scored",
     "criteria": [
      "verifiedInterventions",
      "falsePositivePosture"
     ],
     "modes": [
      "accuracy",
      "derivation"
     ],
     "shared": "Verified interventions and the false-positive posture fail separately: a monitor that stopped real attacks can still page on noise."
    }
   }
  },
  "privacy_tools": {
   "profile": "protocol",
   "cells": {
    "contract": {
     "state": "scored",
     "criteria": [
      "pt_security_custody"
     ],
     "modes": [
      "code_exploit"
     ]
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "No oracle price liquidates or settles a position in the ranked products."
    },
    "verification": {
     "state": "scored",
     "criteria": [
      "pt_crypto_setup"
     ],
     "modes": [
      "proof"
     ]
    },
    "liveness": {
     "state": "na",
     "reason": "It runs while the chains it is deployed on run; their liveness is ranked under chains."
    },
    "custody": {
     "state": "na",
     "reason": "Non-custodial: no firm holds the reader's assets between transactions."
    },
    "insolvency": {
     "state": "na",
     "reason": "A trade settles on chain; no balance sheet owes the reader anything afterwards."
    },
    "regulatory": {
     "state": "scored",
     "criteria": [
      "pt_compliance_posture"
     ],
     "modes": [
      "enforcement"
     ]
    },
    "execution": {
     "state": "gap"
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "The reader signs from their own wallet, which is ranked under wallets."
    },
    "information": {
     "state": "scored",
     "criteria": [
      "pt_anonymity_set"
     ],
     "modes": [
      "privacy"
     ]
    }
   }
  },
  "kyc_compliance": {
   "profile": "vendor",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "It holds none of the buyer's funds in a contract."
    },
    "control": {
     "state": "na",
     "reason": "It controls none of the buyer's assets."
    },
    "oracle": {
     "state": "na",
     "reason": "It settles nothing on a price."
    },
    "verification": {
     "state": "na",
     "reason": "It is not a chain or a bridge."
    },
    "liveness": {
     "state": "gap"
    },
    "custody": {
     "state": "na",
     "reason": "It holds none of the buyer's assets."
    },
    "insolvency": {
     "state": "na",
     "reason": "It holds no client assets; a failed vendor is the exit family's risk."
    },
    "regulatory": {
     "state": "gap"
    },
    "execution": {
     "state": "na",
     "reason": "It moves no money on the buyer's behalf."
    },
    "exit": {
     "state": "scored",
     "criteria": [
      "vendor_continuity"
     ],
     "modes": [
      "vendor_failure"
     ]
    },
    "keys": {
     "state": "na",
     "reason": "It holds no signing keys for the buyer."
    },
    "information": {
     "state": "scored",
     "criteria": [
      "data_custody_risk"
     ],
     "modes": [
      "privacy"
     ]
    }
   }
  },
  "travel_rule_compliance": {
   "profile": "vendor",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "It holds none of the buyer's funds in a contract."
    },
    "control": {
     "state": "na",
     "reason": "It controls none of the buyer's assets."
    },
    "oracle": {
     "state": "na",
     "reason": "It settles nothing on a price."
    },
    "verification": {
     "state": "na",
     "reason": "It is not a chain or a bridge."
    },
    "liveness": {
     "state": "gap"
    },
    "custody": {
     "state": "na",
     "reason": "It holds none of the buyer's assets."
    },
    "insolvency": {
     "state": "na",
     "reason": "It holds no client assets; a failed vendor is the exit family's risk."
    },
    "regulatory": {
     "state": "scored",
     "criteria": [
      "unhosted_wallet_control"
     ],
     "modes": [
      "perimeter"
     ]
    },
    "execution": {
     "state": "scored",
     "criteria": [
      "failure_paths"
     ],
     "modes": [
      "settlement"
     ]
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "It holds no signing keys for the buyer."
    },
    "information": {
     "state": "scored",
     "criteria": [
      "custody_and_go_live"
     ],
     "modes": [
      "privacy"
     ]
    }
   }
  },
  "decentralised_id": {
   "profile": "vendor",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "It holds none of the buyer's funds in a contract."
    },
    "control": {
     "state": "na",
     "reason": "It controls none of the buyer's assets."
    },
    "oracle": {
     "state": "na",
     "reason": "It settles nothing on a price."
    },
    "verification": {
     "state": "na",
     "reason": "It is not a chain or a bridge."
    },
    "liveness": {
     "state": "gap"
    },
    "custody": {
     "state": "scored",
     "criteria": [
      "custody_and_revocation"
     ],
     "modes": [
      "holder"
     ]
    },
    "insolvency": {
     "state": "na",
     "reason": "It holds no client assets; a failed vendor is the exit family's risk."
    },
    "regulatory": {
     "state": "scored",
     "criteria": [
      "enforcement_and_continuity_risk"
     ],
     "modes": [
      "enforcement"
     ]
    },
    "execution": {
     "state": "na",
     "reason": "It moves no money on the buyer's behalf."
    },
    "exit": {
     "state": "scored",
     "criteria": [
      "verification_independence"
     ],
     "modes": [
      "vendor_failure"
     ]
    },
    "keys": {
     "state": "na",
     "reason": "It holds no signing keys for the buyer."
    },
    "information": {
     "state": "scored",
     "criteria": [
      "biometric_and_pii_posture"
     ],
     "modes": [
      "privacy"
     ]
    }
   }
  },
  "proof_of_personhood": {
   "profile": "vendor",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "It holds none of the buyer's funds in a contract."
    },
    "control": {
     "state": "na",
     "reason": "It controls none of the buyer's assets."
    },
    "oracle": {
     "state": "na",
     "reason": "It settles nothing on a price."
    },
    "verification": {
     "state": "na",
     "reason": "It is not a chain or a bridge."
    },
    "liveness": {
     "state": "gap"
    },
    "custody": {
     "state": "na",
     "reason": "It holds none of the buyer's assets."
    },
    "insolvency": {
     "state": "na",
     "reason": "It holds no client assets; a failed vendor is the exit family's risk."
    },
    "regulatory": {
     "state": "na",
     "reason": "It is sold as software or a service; no licence governs its use."
    },
    "execution": {
     "state": "na",
     "reason": "It moves no money on the buyer's behalf."
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "It holds no signing keys for the buyer."
    },
    "information": {
     "state": "scored",
     "criteria": [
      "cost_to_farm_an_identity",
      "issuer_independent_uniqueness_check",
      "biometric_data_and_deletion",
      "verified_population_you_can_count"
     ],
     "modes": [
      "manipulation",
      "derivation",
      "privacy",
      "accuracy"
     ],
     "shared": "The cost to farm an identity, an issuer-independent uniqueness check, how biometric data is kept and deleted, and a countable verified population are four separate failures of one identity claim."
    }
   }
  },
  "attestations": {
   "profile": "vendor",
   "cells": {
    "contract": {
     "state": "gap"
    },
    "control": {
     "state": "scored",
     "criteria": [
      "revocation_and_expiry",
      "deployment_verifiability"
     ],
     "modes": [
      "freeze",
      "deployment"
     ],
     "shared": "Revocation and expiry, and whether the deployment can be verified, are separate controls: a revocable attestation from an unverifiable contract is still unverifiable."
    },
    "oracle": {
     "state": "na",
     "reason": "It settles nothing on a price."
    },
    "verification": {
     "state": "na",
     "reason": "It is not a chain or a bridge."
    },
    "liveness": {
     "state": "gap"
    },
    "custody": {
     "state": "na",
     "reason": "It holds none of the buyer's assets."
    },
    "insolvency": {
     "state": "na",
     "reason": "It holds no client assets; a failed vendor is the exit family's risk."
    },
    "regulatory": {
     "state": "na",
     "reason": "It is sold as software or a service; no licence governs its use."
    },
    "execution": {
     "state": "na",
     "reason": "It moves no money on the buyer's behalf."
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "It holds no signing keys for the buyer."
    },
    "information": {
     "state": "scored",
     "criteria": [
      "issuer_accountability"
     ],
     "modes": [
      "independence"
     ]
    }
   }
  },
  "tax_software": {
   "profile": "data_tool",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "It holds no funds in a contract."
    },
    "control": {
     "state": "na",
     "reason": "It holds and controls none of the reader's assets."
    },
    "oracle": {
     "state": "na",
     "reason": "It settles nothing on a price."
    },
    "verification": {
     "state": "na",
     "reason": "It is not a chain or a bridge."
    },
    "liveness": {
     "state": "na",
     "reason": "An outage delays a number; it moves no funds."
    },
    "custody": {
     "state": "na",
     "reason": "It holds none of the reader's assets."
    },
    "insolvency": {
     "state": "na",
     "reason": "It is a subscription; the vendor holds no client assets."
    },
    "regulatory": {
     "state": "scored",
     "criteria": [
      "named_form_output"
     ],
     "modes": [
      "tax"
     ]
    },
    "execution": {
     "state": "na",
     "reason": "It places no trades and moves no money."
    },
    "exit": {
     "state": "scored",
     "criteria": [
      "portable_record_and_prior_year_access"
     ],
     "modes": [
      "portability"
     ]
    },
    "keys": {
     "state": "na",
     "reason": "It signs nothing and holds no keys."
    },
    "information": {
     "state": "scored",
     "criteria": [
      "basis_method_fidelity",
      "awkward_case_treatment"
     ],
     "modes": [
      "derivation",
      "accuracy"
     ],
     "shared": "Whether the cost-basis method is applied faithfully and how awkward cases are treated fail separately: correct FIFO can still mishandle a bridge transfer or an airdrop."
    }
   }
  },
  "enterprise_accounting": {
   "profile": "data_tool",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "It holds no funds in a contract."
    },
    "control": {
     "state": "na",
     "reason": "It holds and controls none of the reader's assets."
    },
    "oracle": {
     "state": "na",
     "reason": "It settles nothing on a price."
    },
    "verification": {
     "state": "na",
     "reason": "It is not a chain or a bridge."
    },
    "liveness": {
     "state": "na",
     "reason": "An outage delays a number; it moves no funds."
    },
    "custody": {
     "state": "na",
     "reason": "It holds none of the reader's assets."
    },
    "insolvency": {
     "state": "na",
     "reason": "It is a subscription; the vendor holds no client assets."
    },
    "regulatory": {
     "state": "na",
     "reason": "No licence governs using the software."
    },
    "execution": {
     "state": "na",
     "reason": "It places no trades and moves no money."
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "It signs nothing and holds no keys."
    },
    "information": {
     "state": "scored",
     "criteria": [
      "inventory_and_valuation_policy",
      "chain_to_ledger_reconciliation",
      "assurance_and_period_control"
     ],
     "modes": [
      "derivation",
      "accuracy",
      "revision"
     ],
     "shared": "The inventory and valuation policy, chain-to-ledger reconciliation and period control are three separate assertions an auditor tests one by one."
    }
   }
  },
  "portfolio_tracking": {
   "profile": "data_tool",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "It holds no funds in a contract."
    },
    "control": {
     "state": "na",
     "reason": "It holds and controls none of the reader's assets."
    },
    "oracle": {
     "state": "na",
     "reason": "It settles nothing on a price."
    },
    "verification": {
     "state": "na",
     "reason": "It is not a chain or a bridge."
    },
    "liveness": {
     "state": "na",
     "reason": "An outage delays a number; it moves no funds."
    },
    "custody": {
     "state": "scored",
     "criteria": [
      "api_key_blast_radius"
     ],
     "modes": [
      "credential"
     ]
    },
    "insolvency": {
     "state": "na",
     "reason": "It is a subscription; the vendor holds no client assets."
    },
    "regulatory": {
     "state": "na",
     "reason": "No licence governs using the software."
    },
    "execution": {
     "state": "na",
     "reason": "It places no trades and moves no money."
    },
    "exit": {
     "state": "scored",
     "criteria": [
      "tier_truth_and_continuity"
     ],
     "modes": [
      "vendor_failure"
     ]
    },
    "keys": {
     "state": "na",
     "reason": "It signs nothing and holds no keys."
    },
    "information": {
     "state": "scored",
     "criteria": [
      "data_monetization_truth",
      "sync_fidelity_and_gap_honesty"
     ],
     "modes": [
      "privacy",
      "accuracy"
     ],
     "shared": "Whether the tracker sells the reader's data and whether its sync shows gaps honestly fail separately: an accurate tracker can still monetise the portfolio."
    }
   }
  },
  "defi_dashboards": {
   "profile": "data_tool",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "It holds no funds in a contract."
    },
    "control": {
     "state": "na",
     "reason": "It holds and controls none of the reader's assets."
    },
    "oracle": {
     "state": "na",
     "reason": "It settles nothing on a price."
    },
    "verification": {
     "state": "na",
     "reason": "It is not a chain or a bridge."
    },
    "liveness": {
     "state": "na",
     "reason": "An outage delays a number; it moves no funds."
    },
    "custody": {
     "state": "na",
     "reason": "It holds none of the reader's assets."
    },
    "insolvency": {
     "state": "na",
     "reason": "It is a subscription; the vendor holds no client assets."
    },
    "regulatory": {
     "state": "na",
     "reason": "No licence governs using the software."
    },
    "execution": {
     "state": "na",
     "reason": "It places no trades and moves no money."
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "It signs nothing and holds no keys."
    },
    "information": {
     "state": "scored",
     "criteria": [
      "valuationAuditability",
      "custodyAndDataExposure",
      "longTailAndLpFidelity"
     ],
     "modes": [
      "derivation",
      "privacy",
      "accuracy"
     ],
     "shared": "Auditable valuation, what the dashboard exposes about the reader, and fidelity on long-tail and LP positions are separate failures of one number."
    }
   }
  },
  "screeners": {
   "profile": "data_tool",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "It holds no funds in a contract."
    },
    "control": {
     "state": "na",
     "reason": "It holds and controls none of the reader's assets."
    },
    "oracle": {
     "state": "na",
     "reason": "It settles nothing on a price."
    },
    "verification": {
     "state": "na",
     "reason": "It is not a chain or a bridge."
    },
    "liveness": {
     "state": "na",
     "reason": "An outage delays a number; it moves no funds."
    },
    "custody": {
     "state": "na",
     "reason": "It holds none of the reader's assets."
    },
    "insolvency": {
     "state": "na",
     "reason": "It is a subscription; the vendor holds no client assets."
    },
    "regulatory": {
     "state": "na",
     "reason": "No licence governs using the software."
    },
    "execution": {
     "state": "na",
     "reason": "It places no trades and moves no money."
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "It signs nothing and holds no keys."
    },
    "information": {
     "state": "scored",
     "criteria": [
      "paid_placement_disclosure",
      "coverage_and_provenance"
     ],
     "modes": [
      "independence",
      "accuracy"
     ],
     "shared": "Paid-placement disclosure and coverage provenance fail separately: complete data can still be ordered by who paid."
    }
   }
  },
  "onchain_analytics": {
   "profile": "data_tool",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "It holds no funds in a contract."
    },
    "control": {
     "state": "na",
     "reason": "It holds and controls none of the reader's assets."
    },
    "oracle": {
     "state": "na",
     "reason": "It settles nothing on a price."
    },
    "verification": {
     "state": "na",
     "reason": "It is not a chain or a bridge."
    },
    "liveness": {
     "state": "na",
     "reason": "An outage delays a number; it moves no funds."
    },
    "custody": {
     "state": "na",
     "reason": "It holds none of the reader's assets."
    },
    "insolvency": {
     "state": "na",
     "reason": "It is a subscription; the vendor holds no client assets."
    },
    "regulatory": {
     "state": "na",
     "reason": "No licence governs using the software."
    },
    "execution": {
     "state": "na",
     "reason": "It places no trades and moves no money."
    },
    "exit": {
     "state": "scored",
     "criteria": [
      "queryPortability"
     ],
     "modes": [
      "portability"
     ]
    },
    "keys": {
     "state": "na",
     "reason": "It signs nothing and holds no keys."
    },
    "information": {
     "state": "scored",
     "criteria": [
      "attributionAuditability"
     ],
     "modes": [
      "derivation"
     ]
    }
   }
  },
  "nft_analytics": {
   "profile": "data_tool",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "It holds no funds in a contract."
    },
    "control": {
     "state": "na",
     "reason": "It holds and controls none of the reader's assets."
    },
    "oracle": {
     "state": "na",
     "reason": "It settles nothing on a price."
    },
    "verification": {
     "state": "na",
     "reason": "It is not a chain or a bridge."
    },
    "liveness": {
     "state": "na",
     "reason": "An outage delays a number; it moves no funds."
    },
    "custody": {
     "state": "na",
     "reason": "It holds none of the reader's assets."
    },
    "insolvency": {
     "state": "na",
     "reason": "It is a subscription; the vendor holds no client assets."
    },
    "regulatory": {
     "state": "na",
     "reason": "No licence governs using the software."
    },
    "execution": {
     "state": "na",
     "reason": "It places no trades and moves no money."
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "It signs nothing and holds no keys."
    },
    "information": {
     "state": "scored",
     "criteria": [
      "wash_filter",
      "number_definition",
      "token_level_mark",
      "revision_policy"
     ],
     "modes": [
      "manipulation",
      "derivation",
      "accuracy",
      "revision"
     ],
     "shared": "Wash filtering, the definition of a number, the token-level mark and the revision policy are four separate ways an NFT figure misleads."
    }
   }
  },
  "sentiment_analytics": {
   "profile": "data_tool",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "It holds no funds in a contract."
    },
    "control": {
     "state": "na",
     "reason": "It holds and controls none of the reader's assets."
    },
    "oracle": {
     "state": "na",
     "reason": "It settles nothing on a price."
    },
    "verification": {
     "state": "na",
     "reason": "It is not a chain or a bridge."
    },
    "liveness": {
     "state": "na",
     "reason": "An outage delays a number; it moves no funds."
    },
    "custody": {
     "state": "na",
     "reason": "It holds none of the reader's assets."
    },
    "insolvency": {
     "state": "na",
     "reason": "It is a subscription; the vendor holds no client assets."
    },
    "regulatory": {
     "state": "na",
     "reason": "No licence governs using the software."
    },
    "execution": {
     "state": "na",
     "reason": "It places no trades and moves no money."
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "It signs nothing and holds no keys."
    },
    "information": {
     "state": "scored",
     "criteria": [
      "published_predictive_evidence",
      "manipulation_filtering_documented"
     ],
     "modes": [
      "accuracy",
      "manipulation"
     ],
     "shared": "Published predictive evidence and documented manipulation filtering fail separately: a signal can be filtered of bots and still predict nothing."
    }
   }
  },
  "trading_tools": {
   "profile": "data_tool",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "It holds no funds in a contract."
    },
    "control": {
     "state": "na",
     "reason": "It holds and controls none of the reader's assets."
    },
    "oracle": {
     "state": "na",
     "reason": "It settles nothing on a price."
    },
    "verification": {
     "state": "na",
     "reason": "It is not a chain or a bridge."
    },
    "liveness": {
     "state": "na",
     "reason": "An outage delays a number; it moves no funds."
    },
    "custody": {
     "state": "na",
     "reason": "It holds none of the reader's assets."
    },
    "insolvency": {
     "state": "na",
     "reason": "It is a subscription; the vendor holds no client assets."
    },
    "regulatory": {
     "state": "na",
     "reason": "No licence governs using the software."
    },
    "execution": {
     "state": "na",
     "reason": "It places no trades and moves no money."
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "It signs nothing and holds no keys."
    },
    "information": {
     "state": "scored",
     "criteria": [
      "derivation_you_can_reproduce",
      "venue_set_and_disclosed_gaps",
      "when_yesterdays_number_changes"
     ],
     "modes": [
      "derivation",
      "accuracy",
      "revision"
     ],
     "shared": "A reproducible derivation, the venue set with its disclosed gaps, and when yesterday's number changes are separate failures of one chart."
    }
   }
  },
  "paid_research_seats": {
   "profile": "data_tool",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "It holds no funds in a contract."
    },
    "control": {
     "state": "na",
     "reason": "It holds and controls none of the reader's assets."
    },
    "oracle": {
     "state": "na",
     "reason": "It settles nothing on a price."
    },
    "verification": {
     "state": "na",
     "reason": "It is not a chain or a bridge."
    },
    "liveness": {
     "state": "na",
     "reason": "An outage delays a number; it moves no funds."
    },
    "custody": {
     "state": "na",
     "reason": "It holds none of the reader's assets."
    },
    "insolvency": {
     "state": "na",
     "reason": "It is a subscription; the vendor holds no client assets."
    },
    "regulatory": {
     "state": "na",
     "reason": "No licence governs using the software."
    },
    "execution": {
     "state": "na",
     "reason": "It places no trades and moves no money."
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "It signs nothing and holds no keys."
    },
    "information": {
     "state": "scored",
     "criteria": [
      "independence_and_who_pays",
      "rating_construction_you_can_reread",
      "what_you_can_read_before_you_pay"
     ],
     "modes": [
      "independence",
      "derivation",
      "accuracy"
     ],
     "shared": "Who pays the researcher, whether the rating can be re-derived, and what can be read before paying fail separately: a reproducible rating can still be paid for by its subject."
    }
   }
  },
  "block_explorers": {
   "profile": "data_tool",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "It holds no funds in a contract."
    },
    "control": {
     "state": "na",
     "reason": "It holds and controls none of the reader's assets."
    },
    "oracle": {
     "state": "na",
     "reason": "It settles nothing on a price."
    },
    "verification": {
     "state": "na",
     "reason": "It is not a chain or a bridge."
    },
    "liveness": {
     "state": "na",
     "reason": "An outage delays a number; it moves no funds."
    },
    "custody": {
     "state": "na",
     "reason": "It holds none of the reader's assets."
    },
    "insolvency": {
     "state": "na",
     "reason": "It is a subscription; the vendor holds no client assets."
    },
    "regulatory": {
     "state": "na",
     "reason": "No licence governs using the software."
    },
    "execution": {
     "state": "na",
     "reason": "It places no trades and moves no money."
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "It signs nothing and holds no keys."
    },
    "information": {
     "state": "scored",
     "criteria": [
      "dataQuality",
      "independence"
     ],
     "modes": [
      "accuracy",
      "independence"
     ],
     "shared": "Data quality and the explorer's independence fail separately: an accurate explorer can still be run by the chain it reports on."
    }
   }
  },
  "web3_apps": {
   "profile": "protocol",
   "cells": {
    "contract": {
     "state": "gap"
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "No oracle price liquidates or settles a position in the ranked products."
    },
    "verification": {
     "state": "na",
     "reason": "It runs on chains whose verification is ranked under chains, and adds no proof or signer layer of its own."
    },
    "liveness": {
     "state": "na",
     "reason": "It runs while the chains it is deployed on run; their liveness is ranked under chains."
    },
    "custody": {
     "state": "na",
     "reason": "Non-custodial: no firm holds the reader's assets between transactions."
    },
    "insolvency": {
     "state": "na",
     "reason": "A trade settles on chain; no balance sheet owes the reader anything afterwards."
    },
    "regulatory": {
     "state": "gap"
    },
    "execution": {
     "state": "gap"
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "The reader signs from their own wallet, which is ranked under wallets."
    },
    "information": {
     "state": "na",
     "reason": "It needs no account or identity documents, and the figures that matter are read on chain."
    }
   }
  },
  "socialfi": {
   "profile": "protocol",
   "cells": {
    "contract": {
     "state": "gap"
    },
    "control": {
     "state": "scored",
     "criteria": [
      "who_outranks_my_keys"
     ],
     "modes": [
      "operator_override"
     ]
    },
    "oracle": {
     "state": "na",
     "reason": "No oracle price liquidates or settles a position in the ranked products."
    },
    "verification": {
     "state": "na",
     "reason": "It runs on chains whose verification is ranked under chains, and adds no proof or signer layer of its own."
    },
    "liveness": {
     "state": "na",
     "reason": "It runs while the chains it is deployed on run; their liveness is ranked under chains."
    },
    "custody": {
     "state": "scored",
     "criteria": [
      "handle_and_graph_custody"
     ],
     "modes": [
      "holder"
     ]
    },
    "insolvency": {
     "state": "na",
     "reason": "A trade settles on chain; no balance sheet owes the reader anything afterwards."
    },
    "regulatory": {
     "state": "gap"
    },
    "execution": {
     "state": "gap"
    },
    "exit": {
     "state": "scored",
     "criteria": [
      "exit_path_and_somewhere_to_go"
     ],
     "modes": [
      "portability"
     ]
    },
    "keys": {
     "state": "na",
     "reason": "The reader signs from their own wallet, which is ranked under wallets."
    },
    "information": {
     "state": "gap"
    }
   }
  },
  "naming_services": {
   "profile": "protocol",
   "cells": {
    "contract": {
     "state": "gap"
    },
    "control": {
     "state": "scored",
     "criteria": [
      "ownershipDurability",
      "registryDecentralisation"
     ],
     "modes": [
      "operator_override",
      "governance"
     ],
     "shared": "Whether the operator can override ownership and how decentralised the registry is are separate: a decentralised registry can still let its operator reclaim a name."
    },
    "oracle": {
     "state": "na",
     "reason": "No oracle price liquidates or settles a position in the ranked products."
    },
    "verification": {
     "state": "na",
     "reason": "It runs on chains whose verification is ranked under chains, and adds no proof or signer layer of its own."
    },
    "liveness": {
     "state": "na",
     "reason": "It runs while the chains it is deployed on run; their liveness is ranked under chains."
    },
    "custody": {
     "state": "na",
     "reason": "Non-custodial: no firm holds the reader's assets between transactions."
    },
    "insolvency": {
     "state": "na",
     "reason": "A trade settles on chain; no balance sheet owes the reader anything afterwards."
    },
    "regulatory": {
     "state": "gap"
    },
    "execution": {
     "state": "gap"
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "The reader signs from their own wallet, which is ranked under wallets."
    },
    "information": {
     "state": "na",
     "reason": "It needs no account or identity documents, and the figures that matter are read on chain."
    }
   }
  },
  "governance_tools": {
   "profile": "vendor",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "It holds none of the buyer's funds in a contract."
    },
    "control": {
     "state": "scored",
     "criteria": [
      "enforceable_execution"
     ],
     "modes": [
      "governance"
     ]
    },
    "oracle": {
     "state": "na",
     "reason": "It settles nothing on a price."
    },
    "verification": {
     "state": "na",
     "reason": "It is not a chain or a bridge."
    },
    "liveness": {
     "state": "gap"
    },
    "custody": {
     "state": "scored",
     "criteria": [
      "post_vote_treasury_control"
     ],
     "modes": [
      "holder"
     ]
    },
    "insolvency": {
     "state": "na",
     "reason": "It holds no client assets; a failed vendor is the exit family's risk."
    },
    "regulatory": {
     "state": "na",
     "reason": "It is sold as software or a service; no licence governs its use."
    },
    "execution": {
     "state": "na",
     "reason": "It moves no money on the buyer's behalf."
    },
    "exit": {
     "state": "scored",
     "criteria": [
      "exit_path"
     ],
     "modes": [
      "vendor_failure"
     ]
    },
    "keys": {
     "state": "na",
     "reason": "It holds no signing keys for the buyer."
    },
    "information": {
     "state": "na",
     "reason": "It publishes no number the buyer acts on and holds no personal data of the buyer's customers."
    }
   }
  },
  "incentive_distribution": {
   "profile": "vendor",
   "cells": {
    "contract": {
     "state": "scored",
     "criteria": [
      "incident_and_operator_record"
     ],
     "modes": [
      "code_exploit"
     ]
    },
    "control": {
     "state": "na",
     "reason": "It controls none of the buyer's assets."
    },
    "oracle": {
     "state": "na",
     "reason": "It settles nothing on a price."
    },
    "verification": {
     "state": "na",
     "reason": "It is not a chain or a bridge."
    },
    "liveness": {
     "state": "gap"
    },
    "custody": {
     "state": "scored",
     "criteria": [
      "budget_control_after_publication"
     ],
     "modes": [
      "holder"
     ]
    },
    "insolvency": {
     "state": "na",
     "reason": "It holds no client assets; a failed vendor is the exit family's risk."
    },
    "regulatory": {
     "state": "na",
     "reason": "It is sold as software or a service; no licence governs its use."
    },
    "execution": {
     "state": "na",
     "reason": "It moves no money on the buyer's behalf."
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "It holds no signing keys for the buyer."
    },
    "information": {
     "state": "scored",
     "criteria": [
      "recomputable_allocation",
      "sybil_defence_in_writing"
     ],
     "modes": [
      "derivation",
      "manipulation"
     ],
     "shared": "Whether an allocation can be recomputed and whether the sybil defence is written down fail separately: a reproducible allocation can still have paid sybils."
    }
   }
  },
  "creator_mint_platforms": {
   "profile": "vendor",
   "cells": {
    "contract": {
     "state": "na",
     "reason": "It holds none of the buyer's funds in a contract."
    },
    "control": {
     "state": "scored",
     "criteria": [
      "contract_is_mine"
     ],
     "modes": [
      "operator_override"
     ]
    },
    "oracle": {
     "state": "na",
     "reason": "It settles nothing on a price."
    },
    "verification": {
     "state": "na",
     "reason": "It is not a chain or a bridge."
    },
    "liveness": {
     "state": "scored",
     "criteria": [
      "art_still_loads"
     ],
     "modes": [
      "durability"
     ]
    },
    "custody": {
     "state": "na",
     "reason": "It holds none of the buyer's assets."
    },
    "insolvency": {
     "state": "na",
     "reason": "It holds no client assets; a failed vendor is the exit family's risk."
    },
    "regulatory": {
     "state": "na",
     "reason": "It is sold as software or a service; no licence governs its use."
    },
    "execution": {
     "state": "na",
     "reason": "It moves no money on the buyer's behalf."
    },
    "exit": {
     "state": "scored",
     "criteria": [
      "abandonment_record",
      "royalties_survive"
     ],
     "modes": [
      "vendor_failure",
      "portability"
     ],
     "shared": "The platform's abandonment record and whether royalties survive leaving it are separate exits: a platform that never shut down can still keep the royalties when the creator moves."
    },
    "keys": {
     "state": "na",
     "reason": "It holds no signing keys for the buyer."
    },
    "information": {
     "state": "na",
     "reason": "It publishes no number the buyer acts on and holds no personal data of the buyer's customers."
    }
   }
  },
  "token_launch_platforms": {
   "profile": "protocol",
   "cells": {
    "contract": {
     "state": "gap"
    },
    "control": {
     "state": "scored",
     "criteria": [
      "creator_control_surface",
      "post_deploy_rug_surface"
     ],
     "modes": [
      "parameters",
      "upgrade"
     ],
     "shared": "What the creator controls at launch and what can still be changed after deployment are separate: a fair launch can still leave an upgrade path that drains the pool."
    },
    "oracle": {
     "state": "na",
     "reason": "No oracle price liquidates or settles a position in the ranked products."
    },
    "verification": {
     "state": "na",
     "reason": "It runs on chains whose verification is ranked under chains, and adds no proof or signer layer of its own."
    },
    "liveness": {
     "state": "na",
     "reason": "It runs while the chains it is deployed on run; their liveness is ranked under chains."
    },
    "custody": {
     "state": "scored",
     "criteria": [
      "graduation_and_lp_disposition"
     ],
     "modes": [
      "holder"
     ]
    },
    "insolvency": {
     "state": "na",
     "reason": "A trade settles on chain; no balance sheet owes the reader anything afterwards."
    },
    "regulatory": {
     "state": "gap"
    },
    "execution": {
     "state": "gap"
    },
    "exit": {
     "state": "gap"
    },
    "keys": {
     "state": "na",
     "reason": "The reader signs from their own wallet, which is ranked under wallets."
    },
    "information": {
     "state": "na",
     "reason": "It needs no account or identity documents, and the figures that matter are read on chain."
    }
   }
  },
  "launchpads": {
   "profile": "protocol",
   "cells": {
    "contract": {
     "state": "gap"
    },
    "control": {
     "state": "gap"
    },
    "oracle": {
     "state": "na",
     "reason": "No oracle price liquidates or settles a position in the ranked products."
    },
    "verification": {
     "state": "na",
     "reason": "It runs on chains whose verification is ranked under chains, and adds no proof or signer layer of its own."
    },
    "liveness": {
     "state": "na",
     "reason": "It runs while the chains it is deployed on run; their liveness is ranked under chains."
    },
    "custody": {
     "state": "na",
     "reason": "Non-custodial: no firm holds the reader's assets between transactions."
    },
    "insolvency": {
     "state": "na",
     "reason": "A trade settles on chain; no balance sheet owes the reader anything afterwards."
    },
    "regulatory": {
     "state": "scored",
     "criteria": [
      "access_rules_and_exclusions"
     ],
     "modes": [
      "access"
     ]
    },
    "execution": {
     "state": "gap"
    },
    "exit": {
     "state": "scored",
     "criteria": [
      "sale_terms_and_unlock_disclosure"
     ],
     "modes": [
      "unbonding"
     ]
    },
    "keys": {
     "state": "na",
     "reason": "The reader signs from their own wallet, which is ranked under wallets."
    },
    "information": {
     "state": "scored",
     "criteria": [
      "published_track_record"
     ],
     "modes": [
      "accuracy"
     ]
    }
   }
  }
 },
 "exclusions": [
  {
   "category": "subscriptions",
   "criterionId": "revocation_visibility",
   "refs": [
    "subscriptions.renewal_failure_path"
   ],
   "clause": "DO NOT SCORE HERE: what happens once a charge has already failed — retries, grace windows and expiry are renewal_failure_path (26)."
  },
  {
   "category": "subscriptions",
   "criterionId": "revocation_visibility",
   "refs": [
    "subscriptions.what_the_mandate_permits"
   ],
   "clause": "Do not score the amount, period, cap or expiry the customer agreed to — that is what_the_mandate_permits (22)."
  },
  {
   "category": "subscriptions",
   "criterionId": "revocation_visibility",
   "refs": [
    "subscriptions.mandate_survives_the_provider"
   ],
   "clause": "Do not score the vendor disappearing — that is mandate_survives_the_provider (24)."
  },
  {
   "category": "subscriptions",
   "criterionId": "revocation_visibility",
   "refs": [
    "automation_keepers.visibility_of_the_non_event"
   ],
   "clause": "Do not score automation_keepers' visibility_of_the_non_event (24), which grades whether a scheduled CALL that never fired is visible — infrastructure liveness, not a counterparty withdrawing consent."
  },
  {
   "category": "subscriptions",
   "criterionId": "revocation_visibility",
   "refs": [
    "revoke_tools.data_freshness_verifiability"
   ],
   "clause": "Do not score revoke_tools' data_freshness_verifiability (35), which is a consumer inspecting their own approvals — the opposite side of the same primitive."
  },
  {
   "category": "subscriptions",
   "criterionId": "revocation_visibility",
   "refs": [],
   "clause": "Do not score onchain_monitoring's general address alerting."
  },
  {
   "category": "subscriptions",
   "criterionId": "renewal_failure_path",
   "refs": [
    "subscriptions.revocation_visibility"
   ],
   "clause": "DO NOT SCORE HERE: whether the merchant learns the mandate died BEFORE the due date, or cause attribution as a notice mechanism — that is revocation_visibility (28)."
  },
  {
   "category": "subscriptions",
   "criterionId": "renewal_failure_path",
   "refs": [
    "subscriptions.what_the_mandate_permits"
   ],
   "clause": "Do not score the size, period or expiry of the authorisation the retry draws against — that is what_the_mandate_permits (22)."
  },
  {
   "category": "subscriptions",
   "criterionId": "renewal_failure_path",
   "refs": [
    "subscriptions.mandate_survives_the_provider"
   ],
   "clause": "Do not score vendor wind-down or licensing — that is mandate_survives_the_provider (24)."
  },
  {
   "category": "subscriptions",
   "criterionId": "renewal_failure_path",
   "refs": [
    "payment_gateway.settlement",
    "stablecoin_settlement.settlement_finality",
    "bill_pay.posted_by_due_date",
    "automation_keepers.published_lateness_bound"
   ],
   "clause": "Do not score payment_gateway's settlement (24), stablecoin_settlement's settlement_finality (20) on returned or frozen payouts and cut-off calendars, bill_pay's posted_by_due_date (32) on elapsed days to a named biller, or automation_keepers' published_lateness_bound (18), which is machine punctuality rather than commercial recovery."
  },
  {
   "category": "subscriptions",
   "criterionId": "mandate_survives_the_provider",
   "refs": [
    "subscriptions.what_the_mandate_permits",
    "subscriptions.renewal_failure_path",
    "subscriptions.revocation_visibility",
    "stablecoin_settlement.licence_perimeter",
    "stablecoin_settlement.float_custody"
   ],
   "clause": "DO NOT SCORE HERE: the cap or expiry of the authorisation — what_the_mandate_permits (22). Retry windows and grace periods — renewal_failure_path (26). Cancellation events — revocation_visibility (28). Do not run a general licence-quality contest: stablecoin_settlement's licence_perimeter (25) and float_custody (30) score where a platform's own converted balance legally sits; capture registrations here and score them ONLY as they bear on whether recurring COLLECTION survives."
  },
  {
   "category": "subscriptions",
   "criterionId": "mandate_survives_the_provider",
   "refs": [
    "crypto_payroll.floatCustody",
    "payment_gateway.region_fit",
    "payment_gateway.operating_model",
    "automation_keepers.survives_the_vendor",
    "revoke_tools.maintenance_funding_durability"
   ],
   "clause": "Do not score crypto_payroll's floatCustody (26), payment_gateway's region_fit (22) or operating_model (18), automation_keepers' survives_the_vendor (30) — which asks whether a third party would turn the crank on an arbitrary function call, not whether the merchant's right to be paid is an object they own — or revoke_tools' maintenance_funding_durability (15)."
  },
  {
   "category": "subscriptions",
   "criterionId": "what_the_mandate_permits",
   "refs": [
    "subscriptions.renewal_failure_path",
    "subscriptions.revocation_visibility",
    "subscriptions.mandate_survives_the_provider"
   ],
   "clause": "DO NOT SCORE HERE: what happens when the cap is hit or the balance is short — renewal_failure_path (26). Whether the merchant is told about a change or revocation — revocation_visibility (28). Whether the authorisation outlives the vendor, audit reports, or contract immutability as such — mandate_survives_the_provider (24)."
  },
  {
   "category": "subscriptions",
   "criterionId": "what_the_mandate_permits",
   "refs": [],
   "clause": "Do not score which or how many chains, tokens or wallets the mandate works on, or checkout form factor: those are shortlist FILTERS and belong in structured facts."
  },
  {
   "category": "subscriptions",
   "criterionId": "what_the_mandate_permits",
   "refs": [
    "payment_gateway.integration"
   ],
   "clause": "Do not score payment_gateway's integration (20) — SDK, plugin and API ergonomics are banned here."
  },
  {
   "category": "subscriptions",
   "criterionId": "what_the_mandate_permits",
   "refs": [],
   "clause": "Do not score a one-off router approval on a swap (dex_aggregator), end-user approval-revocation tooling (revoke_tools), or a spending cap on a card product (crypto_card)."
  },
  {
   "category": "business_banking",
   "criterionId": "deposit_guarantee_reach",
   "refs": [
    "business_banking.published_crypto_perimeter",
    "business_banking.closure_notice_and_freeze",
    "business_banking.licence_identity_resolvable",
    "crypto_neobanks.depositProtection",
    "stablecoin_settlement.float_custody"
   ],
   "clause": "DO NOT SCORE HERE: which crypto activities the provider accepts or refuses, and any prior sector exit — published_crypto_perimeter. Notice, freeze and return timetable — closure_notice_and_freeze. Licence numbers, whose licence it is, and register lookups — licence_identity_resolvable. Consumer-account deposit protection — crypto_neobanks/depositProtection. A payments platform's float — stablecoin_settlement/float_custody."
  },
  {
   "category": "business_banking",
   "criterionId": "published_crypto_perimeter",
   "refs": [
    "business_banking.deposit_guarantee_reach",
    "business_banking.closure_notice_and_freeze",
    "business_banking.licence_identity_resolvable"
   ],
   "clause": "DO NOT SCORE HERE: the deposit instrument or safeguarding wrapper — deposit_guarantee_reach. Notice periods and termination mechanics once accepted — closure_notice_and_freeze. Licence numbers and registers — licence_identity_resolvable. Corridor coverage, settlement speed or FX pricing — stablecoin_settlement."
  },
  {
   "category": "business_banking",
   "criterionId": "closure_notice_and_freeze",
   "refs": [
    "business_banking.deposit_guarantee_reach",
    "business_banking.published_crypto_perimeter",
    "business_banking.licence_identity_resolvable",
    "stablecoin_settlement.settlement_finality"
   ],
   "clause": "DO NOT SCORE HERE: whether the balance is guaranteed or safeguarded — deposit_guarantee_reach. Whether this buyer would be accepted at all, and the sector-exit record — published_crypto_perimeter. Which regulator supervises the entity and whether the identifier resolves — licence_identity_resolvable. Payment reversal and returned-payout mechanics — stablecoin_settlement/settlement_finality."
  },
  {
   "category": "business_banking",
   "criterionId": "licence_identity_resolvable",
   "refs": [
    "business_banking.deposit_guarantee_reach",
    "business_banking.published_crypto_perimeter",
    "business_banking.closure_notice_and_freeze",
    "crypto_neobanks.licenceStrength"
   ],
   "clause": "DO NOT SCORE HERE: whether the licence delivers a deposit guarantee — deposit_guarantee_reach. Whether the licensee will actually bank crypto firms — published_crypto_perimeter. Termination and freeze rights — closure_notice_and_freeze. Dual-leg consumer authorisation — crypto_neobanks/licenceStrength."
  },
  {
   "category": "wallet",
   "criterionId": "key_export",
   "refs": [
    "wallet.recovery_exit"
   ],
   "clause": "DO NOT SCORE the restore/recovery procedure, backup redundancy, or what happens if the vendor disappears — those are 'If I lose my device, how do I get back in?'."
  },
  {
   "category": "wallet",
   "criterionId": "key_export",
   "refs": [],
   "clause": "DO NOT SCORE incident history here."
  },
  {
   "category": "wallet",
   "criterionId": "signing_visibility",
   "refs": [],
   "clause": "DO NOT SCORE chain coverage, supported asset counts, swap routing or in-app buy rails here — those are filters, not quality."
  },
  {
   "category": "wallet",
   "criterionId": "signing_visibility",
   "refs": [
    "wallet.incident_record"
   ],
   "clause": "DO NOT SCORE the historical exploit record; that is 'What has gone wrong, and did they publish it?'."
  },
  {
   "category": "wallet",
   "criterionId": "incident_record",
   "refs": [
    "wallet.signing_visibility"
   ],
   "clause": "DO NOT SCORE the signing-time protections that prevent incidents — those are 'Can I see exactly what I am signing?'."
  },
  {
   "category": "wallet",
   "criterionId": "incident_record",
   "refs": [],
   "clause": "DO NOT SCORE key-export policy here."
  },
  {
   "category": "wallet",
   "criterionId": "recovery_exit",
   "refs": [
    "wallet.key_export"
   ],
   "clause": "DO NOT SCORE whether raw key export is offered at all — that is 'Can I export my own keys and use them elsewhere?'."
  },
  {
   "category": "wallet",
   "criterionId": "recovery_exit",
   "refs": [],
   "clause": "DO NOT SCORE simulation, scanning or incident history."
  },
  {
   "category": "crypto_card",
   "criterionId": "swipe_cost_abroad",
   "refs": [],
   "clause": "DO NOT SCORE HERE: the headline cashback or reward PERCENTAGE - record it as a dated fact; only the stake, lock and subscription needed to reach it are a cost and belong here."
  },
  {
   "category": "crypto_card",
   "criterionId": "swipe_cost_abroad",
   "refs": [
    "crypto_neobanks.conversionCost"
   ],
   "clause": "DO NOT SCORE crypto_neobanks' conversionCost (15), which prices fiat-to-crypto conversion inside the ACCOUNT before money reaches the card."
  },
  {
   "category": "crypto_card",
   "criterionId": "swipe_cost_abroad",
   "refs": [
    "offramps.allInSellCost",
    "offramps.priceTransparency"
   ],
   "clause": "DO NOT SCORE offramps' allInSellCost (40) or priceTransparency (25), which price an exit to a bank account rather than a merchant authorisation."
  },
  {
   "category": "crypto_card",
   "criterionId": "swipe_cost_abroad",
   "refs": [
    "gift_cards.anchor_cost"
   ],
   "clause": "DO NOT SCORE gift_cards' anchor_cost (40), which measures spread on a bearer code."
  },
  {
   "category": "crypto_card",
   "criterionId": "swipe_cost_abroad",
   "refs": [],
   "clause": "Do not score chain coverage, asset counts, form factor or app polish - shortlist filters, shown as facts."
  },
  {
   "category": "crypto_card",
   "criterionId": "programme_survival",
   "refs": [
    "crypto_neobanks.cryptoAssetSafety"
   ],
   "clause": "DO NOT SCORE crypto_neobanks' cryptoAssetSafety (25), which asks where your ASSETS stand in an insolvency - a balance-sheet question; this asks whether the plastic authorises on Tuesday, an operational one, and they diverge (a self-custodial card can stop working while every asset stays safe)."
  },
  {
   "category": "crypto_card",
   "criterionId": "programme_survival",
   "refs": [
    "crypto_neobanks.depositProtection"
   ],
   "clause": "DO NOT SCORE crypto_neobanks' depositProtection (35)."
  },
  {
   "category": "crypto_card",
   "criterionId": "programme_survival",
   "refs": [
    "gift_cards.failure_recourse"
   ],
   "clause": "DO NOT SCORE gift_cards' failure_recourse (15), a two-party refund on a bearer instrument."
  },
  {
   "category": "crypto_card",
   "criterionId": "programme_survival",
   "refs": [
    "crypto_card.whose_licence_issues_it"
   ],
   "clause": "DO NOT SCORE the licence chain itself - that is whose_licence_issues_it (21)."
  },
  {
   "category": "crypto_card",
   "criterionId": "whose_licence_issues_it",
   "refs": [
    "crypto_neobanks.licenceStrength"
   ],
   "clause": "DO NOT SCORE crypto_neobanks' licenceStrength (25), which asks whether the ACCOUNT's fiat and crypto legs are each authorised; this asks only who stands behind the plastic and whether they are named."
  },
  {
   "category": "crypto_card",
   "criterionId": "whose_licence_issues_it",
   "refs": [
    "offramps.licenceDepth"
   ],
   "clause": "DO NOT SCORE offramps' licenceDepth (15), which weights licences by market reach for a crypto-to-fiat sale."
  },
  {
   "category": "crypto_card",
   "criterionId": "whose_licence_issues_it",
   "refs": [
    "crypto_card.programme_survival"
   ],
   "clause": "DO NOT SCORE the operational consequence of a partner walking away - that is programme_survival (26)."
  },
  {
   "category": "crypto_card",
   "criterionId": "disposal_at_the_till",
   "refs": [
    "tax_software.named_form_output",
    "tax_software.basis_method_fidelity",
    "tax_software.awkward_case_treatment"
   ],
   "clause": "DO NOT SCORE tax_software's named_form_output (32), basis_method_fidelity (26) or awkward_case_treatment (22) - those grade a tax product's ability to ingest and classify history across exchanges and chains; this grades only whether the card CREATES disposals and emits the record of them."
  },
  {
   "category": "crypto_card",
   "criterionId": "disposal_at_the_till",
   "refs": [
    "crypto_neobanks.depositProtection",
    "crypto_neobanks.cryptoAssetSafety"
   ],
   "clause": "DO NOT SCORE crypto_neobanks' depositProtection (35) or cryptoAssetSafety (25) - a disposal is a tax event, not a custody or insolvency question, and the two must never be blended."
  },
  {
   "category": "crypto_card",
   "criterionId": "disposal_at_the_till",
   "refs": [
    "crypto_card.swipe_cost_abroad",
    "crypto_card.whose_licence_issues_it"
   ],
   "clause": "DO NOT SCORE the conversion FEE itself (swipe_cost_abroad, 33), whose licence issues the credit (whose_licence_issues_it, 21), or which assets can fund the card - a filter, shown as a fact."
  },
  {
   "category": "bill_pay",
   "criterionId": "posted_by_due_date",
   "refs": [
    "offramps.payoutSpeedRails",
    "payment_gateway.settlement"
   ],
   "clause": "DO NOT SCORE Offramps' 'Payout rails speed and coverage' (20). That criterion measures the window to the SELLER'S OWN account, where slowness costs price risk and nothing else — no third party, no external deadline, no such thing as an acknowledged payment date. Never score rail speed to the vendor's own payout here; score only time to POSTED at a third-party biller. Also do not score Payment Gateways' 'settlement posture' (24), which is a merchant's cash-conversion cycle on the opposite side of the transaction."
  },
  {
   "category": "bill_pay",
   "criterionId": "named_biller_reachability",
   "refs": [
    "gift_cards.coverage_and_access",
    "remittances.corridor_proof",
    "payment_gateway.coverage"
   ],
   "clause": "DO NOT SCORE Gift Cards' 'Reach and identity cost' (20). That criterion scores catalogue breadth plus the KYC toll across SUBSTITUTABLE brands, where a bigger catalogue is straightforwardly better and a thin one is a mild markdown. Your mortgage servicer is not substitutable — 45,000 reachable billers are worth zero if your water utility is not among them — so score the mechanism that determines reachability, never the count as a virtue. Identity and KYC cost stay entirely with the parent: Bitcoin Well's no-ID Lite Account ($950 per transaction, $3,000 daily) is recorded as a limit fact and contributes nothing to this score. Also do not score Remittances' 'Corridor Proof and Payout Method' (25) — a corridor is a geography and a human cash-out method, not a named legal entity — nor Payment Gateways' 'coverage breadth' (16), which measures what a merchant can ACCEPT."
  },
  {
   "category": "bill_pay",
   "criterionId": "exact_amount_and_rate_lock",
   "refs": [
    "gift_cards.anchor_cost",
    "gift_cards.price_transparency",
    "offramps.allInSellCost",
    "offramps.priceTransparency"
   ],
   "clause": "DO NOT SCORE fee level or spread, in any form. Not Gift Cards' 'What a $100 Amazon card actually costs you' (40), not Gift Cards' 'Can you see the number before you commit' (25) — which scores quote visibility BEFORE commitment, while this scores what happens to a fixed obligation AFTER it — and not Offramps' 'All-in cost of a representative sale' (40) or 'Spread disclosure and quote binding' (25). Cost enters only as the exactness of the delivered fiat amount and the identity of who bears the move. Falsification test for the research model run: if a score here could be derived from a fee table alone, it is wrong and must be rewritten."
  },
  {
   "category": "bill_pay",
   "criterionId": "proof_and_who_is_liable",
   "refs": [
    "offramps.licenceDepth"
   ],
   "clause": "DO NOT SCORE Offramps' 'Verified licences and regulated footprint' (15) — the licence axis is banned on this page; capture the facts, score none of them."
  },
  {
   "category": "bill_pay",
   "criterionId": "proof_and_who_is_liable",
   "refs": [
    "gift_cards.failure_recourse"
   ],
   "clause": "Do not score Gift Cards' 'What happens when the code will not redeem' (15): that is a two-party refund on a bearer instrument the vendor issued and can simply reissue, after which the buyer is whole. Here the money is sitting in a third party's suspense account under a reference the AR system did not match, and a refund from the vendor cures neither the late fee nor the credit-file mark."
  },
  {
   "category": "bill_pay",
   "criterionId": "proof_and_who_is_liable",
   "refs": [
    "remittances.recipient_burden"
   ],
   "clause": "Do not score Remittances' 'Recipient Burden' (22) — a person collects, an institution does not; it either posts the credit or keeps charging interest."
  },
  {
   "category": "exchange",
   "criterionId": "personal_all_in_cost",
   "refs": [
    "simple_buy.allInCost",
    "onramp.all_in_purchase_cost"
   ],
   "clause": "DO NOT SCORE: the all-in cost of a single card or bank purchase including payment surcharge (simple_buy → 'All-in cost of the purchase'); fiat-in funding surcharges (onramp → 'What does a €200 purchase actually cost me'); negotiated block pricing (otc_desks → published price transparency); listing breadth or pair counts (a filter, shown as fact, never graded)."
  },
  {
   "category": "exchange",
   "criterionId": "withdrawal_incident_record",
   "refs": [
    "simple_buy.withdrawal",
    "onramp.kyc_friction_time_to_coins",
    "exchange.personal_all_in_cost",
    "exchange.insolvency_and_account_terms"
   ],
   "clause": "DO NOT SCORE: whether a first purchase can reach self-custody at all (simple_buy → 'Withdrawal to self-custody'); fiat speed-to-funds (onramp → 'How much identity do I surrender before the coins land'); routine withdrawal pricing (this spec → 'What will I actually pay here at my volume'); the legal fate of assets in insolvency or contractual freeze powers (this spec → 'If this exchange fails — or freezes me')."
  },
  {
   "category": "exchange",
   "criterionId": "licence_coverage_map",
   "refs": [
    "simple_buy.trust",
    "exchange.withdrawal_incident_record",
    "exchange.insolvency_and_account_terms"
   ],
   "clause": "DO NOT SCORE: custody supervision for a one-off purchase (simple_buy → 'Custody & regulatory posture'); how incidents were handled operationally (this spec → 'When this venue broke'); segregation and estate language (this spec → 'If this exchange fails — or freezes me')."
  },
  {
   "category": "exchange",
   "criterionId": "insolvency_and_account_terms",
   "refs": [
    "simple_buy.trust",
    "exchange.withdrawal_incident_record",
    "exchange.personal_all_in_cost",
    "exchange.licence_coverage_map"
   ],
   "clause": "DO NOT SCORE: who custodies a one-off purchase (simple_buy → 'Custody & regulatory posture'); operational halts and hacks (this spec → 'When this venue broke'); withdrawal fee schedules (this spec → 'What will I actually pay here at my volume'); register presence of the licence itself (this spec → 'Whose licence actually covers me')."
  },
  {
   "category": "institutional_execution",
   "criterionId": "pre_nda_documentation_surface",
   "refs": [
    "institutional_execution.operational_transparency_and_incident_history",
    "institutional_execution.venue_claims_verifiability",
    "institutional_execution.commercial_and_identity_disclosure"
   ],
   "clause": "DO NOT SCORE: status pages or uptime history (operational_transparency_and_incident_history); venue-coverage claims (venue_claims_verifiability); pricing pages, conflict statements, or legal identity (commercial_and_identity_disclosure); breadth of order types, chains, or assets as quality (filter facts, shown not graded)."
  },
  {
   "category": "institutional_execution",
   "criterionId": "operational_transparency_and_incident_history",
   "refs": [
    "institutional_execution.pre_nda_documentation_surface",
    "institutional_execution.commercial_and_identity_disclosure"
   ],
   "clause": "DO NOT SCORE: the achieved uptime level itself (we rank disclosure, not reliability we cannot audit); docs hosts (pre_nda_documentation_surface); SOC 2 / ISO claims (commercial_and_identity_disclosure); reliability of underlying venues (exchange category)."
  },
  {
   "category": "institutional_execution",
   "criterionId": "venue_claims_verifiability",
   "refs": [
    "otc_desks.published_price_transparency",
    "institutional_execution.commercial_and_identity_disclosure",
    "institutional_execution.pre_nda_documentation_surface"
   ],
   "clause": "DO NOT SCORE: the count itself as quality (filter fact, shown not graded); asset or chain coverage (filter facts); liquidity quality, spreads, or fees of the connected venues (otc_desks published_price_transparency and the exchange category); custody-network claims (institutional_custody); the legal identity of the vendor or its commercial model (commercial_and_identity_disclosure); documentation of the integrations themselves (pre_nda_documentation_surface). Only the claim's checkability is on trial here."
  },
  {
   "category": "institutional_execution",
   "criterionId": "commercial_and_identity_disclosure",
   "refs": [
    "institutional_execution.venue_claims_verifiability",
    "institutional_execution.pre_nda_documentation_surface"
   ],
   "clause": "DO NOT SCORE: the fee LEVEL (privately negotiated everywhere); minimum tickets, spreads, settlement (otc_desks); custody or asset segregation (institutional_custody); venue-claim checking (venue_claims_verifiability); docs depth (pre_nda_documentation_surface)."
  },
  {
   "category": "onramp",
   "criterionId": "all_in_purchase_cost",
   "refs": [
    "onramp.quote_honesty_and_settlement",
    "simple_buy.allInCost",
    "simple_buy.withdrawal",
    "offramps.allInSellCost"
   ],
   "clause": "DO NOT SCORE: whether the shown quote is honoured at settlement (quote_honesty_and_settlement); venue purchase costs (simple_buy allInCost and withdrawal); sell-side exit costs (offramps allInSellCost); exchange trading/funding fees (exchange); card-programme rewards (crypto_card); integrator revenue-share terms (fact, never graded)."
  },
  {
   "category": "onramp",
   "criterionId": "quote_honesty_and_settlement",
   "refs": [
    "onramp.all_in_purchase_cost",
    "offramps.priceTransparency",
    "simple_buy.trust"
   ],
   "clause": "DO NOT SCORE: the magnitude of the all-in cost itself (all_in_purchase_cost); sell-side quote binding and re-striking (offramps priceTransparency); order-book slippage on a trading venue (exchange); custodial trust or brand reputation (simple_buy trust)."
  },
  {
   "category": "onramp",
   "criterionId": "licence_identity",
   "refs": [
    "simple_buy.trust",
    "exchange.licence_coverage_map",
    "offramps.licenceDepth",
    "onramp.kyc_friction_time_to_coins"
   ],
   "clause": "DO NOT SCORE: custody supervision of a venue (simple_buy trust); the licence map of an exchange (exchange licence_coverage_map); sell-side licence depth (offramps licenceDepth); the KYC vendor's certifications (kyc_compliance); KYC burden itself (kyc_friction_time_to_coins)."
  },
  {
   "category": "onramp",
   "criterionId": "kyc_friction_time_to_coins",
   "refs": [
    "simple_buy.access",
    "offramps.payoutSpeedRails"
   ],
   "clause": "DO NOT SCORE: country coverage, supported assets, chains, or payment-method counts (shortlist filter FACTS, never graded); venue onboarding friction (simple_buy access); sell-side payout rails and windows (offramps payoutSpeedRails); general 'ease of use' (contestable editorial, excluded by design)."
  },
  {
   "category": "staking",
   "criterionId": "slashing_indemnity",
   "refs": [
    "staking.commission_transparency",
    "staking.unbonding_disclosure",
    "staking.governance_under_custody"
   ],
   "clause": "DO NOT SCORE published commission levels, unbonding duration, or governance handling — those are commission_transparency, unbonding_disclosure and governance_under_custody respectively; this criterion is about loss allocation only."
  },
  {
   "category": "staking",
   "criterionId": "unbonding_disclosure",
   "refs": [],
   "clause": "DO NOT SCORE slashing indemnity or the commission charged during the lock-up, and DO NOT re-score liquidity via receipt tokens — a transferable staked-asset token is a liquid_staking question and belongs to a different category, not here."
  },
  {
   "category": "staking",
   "criterionId": "commission_transparency",
   "refs": [],
   "clause": "DO NOT SCORE slashing indemnity, lock-up duration, or governance handling."
  },
  {
   "category": "staking",
   "criterionId": "governance_under_custody",
   "refs": [],
   "clause": "DO NOT SCORE slashing indemnity, commission, or unbonding — and do not re-score custody itself as a yes/no; every operator in this pool is non-custodial, so the discrimination is entirely in the governance mechanics."
  },
  {
   "category": "stablecoins",
   "criterionId": "counterparty_and_insolvency_rank",
   "refs": [
    "cdp_stablecoins.collateralIntegrity",
    "stablecoin_settlement.float_custody",
    "tokenised_tbills.legalClaim",
    "stablecoin_settlement.licence_perimeter",
    "exchange.insolvency_and_account_terms",
    "institutional_custody.insolvency_survival_mechanism",
    "stablecoin_yield.yieldSource"
   ],
   "clause": "DO NOT SCORE HERE: the onchain collateral mix behind a coin minted against posted collateral — cdp_stablecoins 'What actually backs the coin' (collateralIntegrity, 25%), which already scores Sky USDS 2/10 from mainnet reads. Where a PLATFORM's payment float legally sits at a settlement provider — stablecoin_settlement 'Where the Platform's Float Legally Sits' (float_custody, 30%). Whether an instrument is a registered fund share, an offshore fund share or a subordinated note — tokenised_tbills 'Legal claim quality' (legalClaim, 28%). Whose licence a reselling platform operates under — stablecoin_settlement 'Whose Licence the Platform Operates Under' (licence_perimeter, 25%). The estate treatment of a customer account at an exchange or custodian — exchange 'If this exchange fails — or freezes me' (insolvency_and_account_terms) and institutional_custody 'If they fail, are the assets still mine' (insolvency_survival_mechanism). Whether a yield product's payer can switch the rate off — stablecoin_yield 'What actually pays the yield' (yieldSource, 30%)."
  },
  {
   "category": "stablecoins",
   "criterionId": "redemption_right_exercised",
   "refs": [
    "stablecoin_yield.redemption",
    "tokenised_tbills.redemption",
    "stablecoin_settlement.settlement_finality",
    "tokenised_tbills.access"
   ],
   "clause": "DO NOT SCORE HERE: redemption of a savings wrapper or rate-bearing receipt — stablecoin_yield 'Redemption & claim quality' (redemption, 26%), which already ranks ethena_susde and sky_savings_rate. Redemption of a tokenised T-bill or MMF share, its contractual-right-versus-buffer distinction, its queues and its T+ settlement cycle — tokenised_tbills 'Redemption reality' (redemption, 24%). A CDP borrower repaying debt to reclaim posted collateral — cdp_stablecoins, which scores no redemption criterion at all because the coin redeems against debt at ~$1 by construction. A merchant or platform being paid out to a bank account, cut-off times, returned payouts — stablecoin_settlement 'Settlement Finality and Failure Handling' (settlement_finality, 20%). Exchange withdrawal limits or account gating — exchange. Investor class and minimum ticket for a fund share — tokenised_tbills 'Who can actually buy it' (access, 30%)."
  },
  {
   "category": "stablecoins",
   "criterionId": "reserve_and_assurance_scope",
   "refs": [
    "stablecoin_yield.yieldSource",
    "tokenised_tbills.feeLoad",
    "tokenised_tbills.legalClaim",
    "cdp_stablecoins.collateralIntegrity",
    "stablecoin_settlement.float_custody"
   ],
   "clause": "DO NOT SCORE HERE: the yield those reserves throw off, who keeps it, and whether it can be switched off — stablecoin_yield 'What actually pays the yield' (yieldSource, 30%). Management, performance and both-leg transaction fees on a tokenised fund — tokenised_tbills 'Total fee load' (feeLoad, 18%). The audit of a fund's NAV or the standing of its transfer agent — tokenised_tbills 'Legal claim quality' (legalClaim, 28%). Onchain collateral concentration behind a CDP-minted coin, including its PSM and allocator lines — cdp_stablecoins 'What actually backs the coin' (collateralIntegrity, 25%). A settlement provider's attestation of the platform balances it holds — stablecoin_settlement 'Where the Platform's Float Legally Sits' (float_custody, 30%)."
  },
  {
   "category": "stablecoins",
   "criterionId": "seizure_and_upgrade_authority",
   "refs": [
    "cdp_stablecoins.borrowCostPredictability",
    "stablecoin_settlement.float_custody",
    "exchange.insolvency_and_account_terms",
    "institutional_custody.insolvency_survival_mechanism"
   ],
   "clause": "DO NOT SCORE HERE: governance's power to move a stability fee, debt ceiling or collateral parameter against an open loan — cdp_stablecoins 'Cost of the loan and who controls it' (borrowCostPredictability, 20%), whose tie-break already turns on immutability. A settlement provider's ability to freeze a PLATFORM's float — stablecoin_settlement 'Where the Platform's Float Legally Sits' (float_custody, 30%). An exchange's contractual freeze, offset and termination powers over an account — exchange 'If this exchange fails — or freezes me' (insolvency_and_account_terms, 18%). A custodian's control of assets inside its estate — institutional_custody 'If they fail, are the assets still mine' (insolvency_survival_mechanism, 30%). Sanctions screening sold as a product — wallet_screening. Bridge or wrapper admin keys on a wrapped representation — wrapped_assets."
  },
  {
   "category": "tax_software",
   "criterionId": "named_form_output",
   "refs": [
    "portfolio_tracking.sync_fidelity_and_gap_honesty",
    "onchain_analytics.coverageDepth",
    "crypto_card.disposal_at_the_till"
   ],
   "clause": "DO NOT SCORE: how many exchanges, wallets or chains import and whether that sync is reliable (portfolio_tracking sync_fidelity_and_gap_honesty; onchain_analytics coverageDepth); where the company is incorporated or sells (a supportedRegions filter fact, not a grade); a country tax guide blog post — jurisdiction RULES as content marketing are not a form; whether a crypto CARD emits a spend record (crypto_card disposal_at_the_till)."
  },
  {
   "category": "tax_software",
   "criterionId": "basis_method_fidelity",
   "refs": [
    "defi_dashboards.valuationAuditability",
    "portfolio_tracking.sync_fidelity_and_gap_honesty"
   ],
   "clause": "DO NOT SCORE: where the fair-market-value or price of an asset came from and whether that oracle is auditable (defi_dashboards valuationAuditability); whether balances synced correctly in the first place (portfolio_tracking sync_fidelity_and_gap_honesty); tax-loss-harvesting features, which are an optimisation surface rather than the method that governs the filing."
  },
  {
   "category": "tax_software",
   "criterionId": "awkward_case_treatment",
   "refs": [
    "defi_dashboards.longTailAndLpFidelity",
    "crypto_card.disposal_at_the_till"
   ],
   "clause": "DO NOT SCORE: whether the app can DECODE an LP, staked or lending position at all, and how it filters spam or illiquid tokens (defi_dashboards longTailAndLpFidelity) — score only the published TAX TREATMENT once decoded; the raw count of protocols or NFT marketplaces integrated (a filter fact); wallet-level portfolio display of those positions (portfolio_tracking); whether spending crypto on a card creates a disposal (crypto_card disposal_at_the_till, weight 20, which already claims that event by name)."
  },
  {
   "category": "tax_software",
   "criterionId": "portable_record_and_prior_year_access",
   "refs": [
    "portfolio_tracking.tier_truth_and_continuity",
    "onchain_analytics.queryPortability",
    "paid_research_seats.what_you_can_read_before_you_pay",
    "portfolio_tracking.sync_fidelity_and_gap_honesty",
    "defi_dashboards.pricingTransparencyAndContinuity"
   ],
   "clause": "DO NOT SCORE: the per-tax-year price level or where the buyer lands on the transaction-count ladder — verified across all 13 catalog rows on 2026-07-27 as a near-uniform pricing FACT (a $49 / EUR 39 floor, with the fileable report behind a per-year purchase in 11 of 13), and an axis on which everyone scores the same ranks nobody; free-tier caps of trackers (portfolio_tracking tier_truth_and_continuity, which cedes 'per-tax-year plan pricing' to this category as a FACT, not as a grade); SQL authorship, open-source transformation logic, warehouse delivery and API egress credits (onchain_analytics queryPortability, which ranks an analyst's work product against a vendor-owned dataset); a research archive surviving cancellation (paid_research_seats what_you_can_read_before_you_pay); whether the imported data was CORRECT in the first place (portfolio_tracking sync_fidelity_and_gap_honesty); dashboard survival (defi_dashboards pricingTransparencyAndContinuity); the UI quality of the export screen."
  },
  {
   "category": "portfolio_tracking",
   "criterionId": "api_key_blast_radius",
   "refs": [
    "defi_dashboards.custodyAndDataExposure",
    "portfolio_tracking.data_monetization_truth"
   ],
   "clause": "DO NOT SCORE: wallet-address privacy from pasting a public address (defi_dashboards custodyAndDataExposure); who aggregated data is sold to (sibling data_monetization_truth); generic SOC 2 badges unless the report scope names key storage; seed-phrase custody (wallet categories); in-app trade execution (exchange category)."
  },
  {
   "category": "portfolio_tracking",
   "criterionId": "data_monetization_truth",
   "refs": [
    "portfolio_tracking.api_key_blast_radius",
    "defi_dashboards.custodyAndDataExposure",
    "defi_dashboards.pricingTransparencyAndContinuity",
    "portfolio_tracking.tier_truth_and_continuity"
   ],
   "clause": "DO NOT SCORE: API-key scope and storage (api_key_blast_radius); pasted-address deanonymisation for wallet dashboards (defi_dashboards custodyAndDataExposure); hidden swap-fee monetisation (defi_dashboards pricingTransparencyAndContinuity); the free tier's feature limits (tier_truth_and_continuity); GDPR boilerplate presence — only the operative sharing/sale clauses count either way."
  },
  {
   "category": "portfolio_tracking",
   "criterionId": "sync_fidelity_and_gap_honesty",
   "refs": [
    "defi_dashboards.longTailAndLpFidelity",
    "defi_dashboards.valuationAuditability",
    "tax_software.basis_method_fidelity"
   ],
   "clause": "DO NOT SCORE: LP/staked-position decoding depth and spam-token filtering (defi_dashboards longTailAndLpFidelity); price-oracle and valuation methodology (defi_dashboards valuationAuditability); cost-basis and tax-lot reconciliation (tax_software basis_method_fidelity); raw chain, exchange or asset counts — shortlist filter facts, not grades."
  },
  {
   "category": "portfolio_tracking",
   "criterionId": "tier_truth_and_continuity",
   "refs": [
    "portfolio_tracking.data_monetization_truth",
    "defi_dashboards.pricingTransparencyAndContinuity"
   ],
   "clause": "DO NOT SCORE: whether the free data is SOLD (data_monetization_truth); hidden swap-fee monetisation of wallet dashboards (defi_dashboards pricingTransparencyAndContinuity); per-tax-year plan pricing (tax_software jurisdiction and coverage); premium feature richness — only truthfulness of the boundary, not generosity."
  },
  {
   "category": "nft_analytics",
   "criterionId": "wash_filter",
   "refs": [
    "onchain_analytics.attributionAuditability",
    "nft_marketplace.liquidity"
   ],
   "clause": "DO NOT SCORE onchain_analytics' 'Attribution & methodology auditability' (weight 25), which grades whether an ADDRESS LABEL — 'exchange', 'Smart Money' — can be falsified; this grades whether a TRADE was counted, a different object with a different failure mode. And do not rebuild nft_marketplace's 'Exit liquidity honesty' (weight 24), which is our editorial read of a VENUE's order-book depth — can I sell here — not a data vendor's published filter."
  },
  {
   "category": "nft_analytics",
   "criterionId": "number_definition",
   "refs": [
    "onchain_analytics.coverageDepth",
    "market_data_apis.coverage_and_granularity"
   ],
   "clause": "DO NOT SCORE onchain_analytics' 'Chain & data coverage' (weight 25) or market_data_apis' 'Coverage and documented granularity' (weight 22). Those reward breadth — more chains, more venues, deeper history, finer ticks — and this criterion is indifferent to breadth and will score a wide aggregator BELOW a narrow one: a venue carrying a listing but no live bid drags a floor toward a price nobody will fill, so widening the set can corrupt the figure. Count nothing. Check only whether the constituent set is named and reconcilable and the derivation stated."
  },
  {
   "category": "nft_analytics",
   "criterionId": "token_level_mark",
   "refs": [
    "market_data_apis.coverage_and_granularity",
    "nft_lending.liquidation_trigger"
   ],
   "clause": "DO NOT SCORE market_data_apis' 'Coverage and documented granularity' (weight 22), which grades tick depth, candle interval and refresh rate on fungible feeds where a trade print IS the price; the question of whether a vendor will estimate a price for an asset that has never traded, and then say how wrong it expects to be, cannot arise on a page about BTC/USD. Do not rebuild nft_lending's 'What can take your NFT away' (weight 30), which grades a lending protocol's liquidation design and oracle dependence, not a data vendor's appraisal quality."
  },
  {
   "category": "nft_analytics",
   "criterionId": "revision_policy",
   "refs": [
    "oracles.incidentTransparency",
    "onchain_analytics.queryPortability",
    "indexers.vendorContinuity"
   ],
   "clause": "DO NOT SCORE oracles' 'Incident transparency' (weight 30), which grades dated public post-mortems of outages and mispricings on a live feed — an availability record, not a policy on rewriting settled history. Do not rebuild onchain_analytics' 'Query & data portability (lock-in)' (weight 30), which asks whether the buyer can get their data OUT and is silent on whether the data already extracted still matches the vendor's copy, or indexers' 'Vendor continuity and control' (weight 25), which asks whether the product was shut down, sold or handed to a new operator."
  },
  {
   "category": "lending_borrowing",
   "criterionId": "oracle_liquidation_price",
   "refs": [
    "lending_borrowing.blast_radius"
   ],
   "clause": "DO NOT SCORE how far a loss spreads once liquidation fails — that is 'If one market goes bad, how much of yours goes with it?' — and"
  },
  {
   "category": "lending_borrowing",
   "criterionId": "oracle_liquidation_price",
   "refs": [
    "lending_borrowing.shortfall_record"
   ],
   "clause": "DO NOT SCORE past oracle-driven losses, which belong to 'Has it lost lender money before, and did it publish it?'. Feed identity here, blast radius there, history there."
  },
  {
   "category": "lending_borrowing",
   "criterionId": "rate_authorship",
   "refs": [
    "lending_borrowing.oracle_liquidation_price"
   ],
   "clause": "DO NOT SCORE the price of the collateral or the feed that liquidates it — that is 'What price gets you liquidated, and how far can it drift?'."
  },
  {
   "category": "lending_borrowing",
   "criterionId": "rate_authorship",
   "refs": [
    "lending_borrowing.blast_radius"
   ],
   "clause": "DO NOT SCORE whether a curator can move your deposit into a market you did not choose, which is loss-surface and belongs to 'If one market goes bad, how much of yours goes with it?'; here, score only authorship of the rate itself."
  },
  {
   "category": "lending_borrowing",
   "criterionId": "blast_radius",
   "refs": [
    "lending_borrowing.shortfall_record"
   ],
   "clause": "DO NOT SCORE realised, dated losses — those are 'Has it lost lender money before, and did it publish it?'; this criterion scores only the designed loss path, whether or not it has ever been used."
  },
  {
   "category": "lending_borrowing",
   "criterionId": "blast_radius",
   "refs": [
    "lending_borrowing.rate_authorship"
   ],
   "clause": "DO NOT SCORE who sets the rate or the fee, which belongs to 'Who sets your rate — a utilisation curve or a curator?'."
  },
  {
   "category": "lending_borrowing",
   "criterionId": "shortfall_record",
   "refs": [
    "lending_borrowing.blast_radius"
   ],
   "clause": "DO NOT SCORE the designed loss-absorption waterfall — isolation, risk funds, slashable stakers and caps are all 'If one market goes bad, how much of yours goes with it?'; here, only whether it was drawn, when, and for how much."
  },
  {
   "category": "crypto_backed_loans",
   "criterionId": "collateral_title_and_reuse",
   "refs": [
    "crypto_backed_loans.margin_call_and_forced_sale"
   ],
   "clause": "DO NOT SCORE the price feed, the LTV triggers, the cure window or the forced sale — 'margin_call_and_forced_sale'."
  },
  {
   "category": "crypto_backed_loans",
   "criterionId": "collateral_title_and_reuse",
   "refs": [
    "crypto_backed_loans.computable_cost_before_you_apply"
   ],
   "clause": "DO NOT SCORE the rate, the fee schedule or whether the agreement is public BEFORE APPLICATION — document availability is a cost-computability question and belongs to 'computable_cost_before_you_apply'; here a document is either read or recorded as not read."
  },
  {
   "category": "crypto_backed_loans",
   "criterionId": "collateral_title_and_reuse",
   "refs": [
    "crypto_backed_loans.lender_of_record_and_lending_licence"
   ],
   "clause": "DO NOT SCORE the strength of a lending licence for its own sake — 'lender_of_record_and_lending_licence'; a licence or charter is credited here only as evidence of WHO holds title."
  },
  {
   "category": "crypto_backed_loans",
   "criterionId": "collateral_title_and_reuse",
   "refs": [
    "crypto_neobanks.depositProtection"
   ],
   "clause": "DO NOT SCORE deposit-guarantee coverage of a fiat balance (crypto_neobanks depositProtection, weight 35), nor the custodian as a product in its own right (institutional_custody, where BitGo is already ranked)."
  },
  {
   "category": "crypto_backed_loans",
   "criterionId": "collateral_title_and_reuse",
   "refs": [
    "lending_borrowing.blast_radius"
   ],
   "clause": "DO NOT SCORE what a DeFi protocol does with supplied assets — utilisation, caps and isolation are lending_borrowing's blast_radius."
  },
  {
   "category": "crypto_backed_loans",
   "criterionId": "margin_call_and_forced_sale",
   "refs": [
    "crypto_backed_loans.computable_cost_before_you_apply"
   ],
   "clause": "DO NOT SCORE the interest rate, the APR, the origination fee or the liquidation fee as a price — 'computable_cost_before_you_apply'; a liquidation penalty is scored there as a disclosed number and here only as a remedy the borrower cannot decline."
  },
  {
   "category": "crypto_backed_loans",
   "criterionId": "margin_call_and_forced_sale",
   "refs": [
    "lending_borrowing.oracle_liquidation_price"
   ],
   "clause": "DO NOT SCORE an oracle's deviation threshold, heartbeat or staleness period: no product in this pool has one, and the eight DeFi money markets that do are ranked in lending_borrowing on exactly that axis (oracle_liquidation_price, weight 32). Scoring a discretionary price here against an oracle specification there is the double-ranking this category exists to prevent."
  },
  {
   "category": "crypto_backed_loans",
   "criterionId": "margin_call_and_forced_sale",
   "refs": [
    "crypto_backed_loans.collateral_title_and_reuse"
   ],
   "clause": "DO NOT SCORE where the coin goes after the lender fails, or who may reuse it beforehand — 'collateral_title_and_reuse'."
  },
  {
   "category": "crypto_backed_loans",
   "criterionId": "computable_cost_before_you_apply",
   "refs": [],
   "clause": "DO NOT SCORE the APR as a number, ever — record it as a dated fact and rank the disclosure."
  },
  {
   "category": "crypto_backed_loans",
   "criterionId": "computable_cost_before_you_apply",
   "refs": [
    "crypto_backed_loans.margin_call_and_forced_sale"
   ],
   "clause": "DO NOT SCORE the liquidation trigger, the cure window or the deficiency obligation — 'margin_call_and_forced_sale'; a disposition cost is scored here only as a published number."
  },
  {
   "category": "crypto_backed_loans",
   "criterionId": "computable_cost_before_you_apply",
   "refs": [
    "crypto_backed_loans.collateral_title_and_reuse"
   ],
   "clause": "DO NOT SCORE who ends up with the coin, or the reuse permission — 'collateral_title_and_reuse'."
  },
  {
   "category": "crypto_backed_loans",
   "criterionId": "computable_cost_before_you_apply",
   "refs": [
    "crypto_neobanks.conversionCost"
   ],
   "clause": "DO NOT SCORE the fiat-to-crypto conversion spread on funding or repayment: crypto_neobanks owns it (conversionCost, weight 15) and a conversion is a spot trade whereas this is a term liability."
  },
  {
   "category": "crypto_backed_loans",
   "criterionId": "computable_cost_before_you_apply",
   "refs": [
    "lending_borrowing.rate_authorship"
   ],
   "clause": "DO NOT SCORE utilisation curves, kinks, slopes, reserve factors, curators or immutable IRMs — every one is lending_borrowing's rate_authorship, and none exists in a custodial loan, where the party that may move the rate is the lender itself under a contract clause."
  },
  {
   "category": "crypto_backed_loans",
   "criterionId": "computable_cost_before_you_apply",
   "refs": [
    "stablecoin_yield.conditions"
   ],
   "clause": "DO NOT SCORE token-gated tiers on a rate you RECEIVE — stablecoin_yield's conditions owns that on the deposit side; here the cash flow inverts and the tier is scored only as a computability failure."
  },
  {
   "category": "crypto_backed_loans",
   "criterionId": "lender_of_record_and_lending_licence",
   "refs": [
    "crypto_neobanks.depositProtection",
    "crypto_neobanks.licenceStrength"
   ],
   "clause": "DO NOT SCORE deposit-guarantee strength or a crypto-custody permission — crypto_neobanks owns both (depositProtection weight 35, licenceStrength weight 25) and asks whether a CASP, e-money or banking permission covers HOLDING the customer's money; this asks the opposite question about the other leg."
  },
  {
   "category": "crypto_backed_loans",
   "criterionId": "lender_of_record_and_lending_licence",
   "refs": [
    "crypto_backed_loans.collateral_title_and_reuse"
   ],
   "clause": "DO NOT SCORE a custodian's own charter as the lender's credential: Anchorage's federal charter and BitGo's trust charter are custody permissions belonging to institutional_custody, and here they are evidence under 'collateral_title_and_reuse' about whose name the wallet is in, never a lending licence."
  },
  {
   "category": "crypto_backed_loans",
   "criterionId": "lender_of_record_and_lending_licence",
   "refs": [
    "stablecoin_yield.access"
   ],
   "clause": "DO NOT SCORE whether the BUYER is eligible to transact — jurisdiction, investor class and minimums on the buyer's side are stablecoin_yield's access."
  },
  {
   "category": "crypto_backed_loans",
   "criterionId": "lender_of_record_and_lending_licence",
   "refs": [
    "private_credit.underwriter_identity_and_skin"
   ],
   "clause": "DO NOT SCORE the identity, mandate or first-loss capital of a credit underwriter: private_credit's underwriter_identity_and_skin owns that and it has no referent here, because these loans are overcollateralised against a liquid asset and underwritten by a liquidation threshold rather than by a person — which is why Nexo can advertise 'Receive between $50 and $2M with instant approval and no credit checks.'"
  },
  {
   "category": "token_standards",
   "criterionId": "mint_authority_and_revocation",
   "refs": [
    "cross_chain_messaging.message_trust_model",
    "token_standards.authorised_deployment_and_provenance",
    "token_standards.blast_radius_caps",
    "token_standards.exit_and_token_captivity",
    "wrapped_assets.redemption_access"
   ],
   "clause": "DO NOT SCORE HERE: how many verifiers must be honest before a mint message is believed, DVN or guardian counts, quorums, light clients — cross_chain_messaging's message_trust_model (weight 35), hard-barred from this page; whether a third party can stand up an unauthorised deployment — this category's authorised_deployment_and_provenance; how much a compromised minter can print — blast_radius_caps; what leaving costs — exit_and_token_captivity; whether a holder can redeem an underlying reserve — wrapped_assets' redemption_access; chain counts and asset counts, shown as facts and never graded."
  },
  {
   "category": "token_standards",
   "criterionId": "authorised_deployment_and_provenance",
   "refs": [
    "cross_chain_messaging.message_trust_model",
    "token_standards.mint_authority_and_revocation",
    "token_standards.blast_radius_caps",
    "token_standards.exit_and_token_captivity"
   ],
   "clause": "DO NOT SCORE HERE: the verifier set that validates the resulting messages — cross_chain_messaging's message_trust_model; who holds the minter once a deployment exists — mint_authority_and_revocation; supply ceilings — blast_radius_caps; migration cost — exit_and_token_captivity; how many chains a standard reaches or how large its ecosystem is, which is a filter shown as a fact and never graded."
  },
  {
   "category": "token_standards",
   "criterionId": "blast_radius_caps",
   "refs": [
    "token_standards.mint_authority_and_revocation",
    "token_standards.authorised_deployment_and_provenance",
    "cross_chain_messaging.message_failure_record",
    "cross_chain_messaging.cost_per_message",
    "wrapped_assets.reserve_proof"
   ],
   "clause": "DO NOT SCORE HERE: who holds the minter role in the first place — mint_authority_and_revocation; whether a rogue deployment can exist at all — authorised_deployment_and_provenance; the dated record of forged and stuck messages and nine-figure bridge losses — cross_chain_messaging's message_failure_record (weight 25); per-message or per-transfer fees — cross_chain_messaging's cost_per_message; how tightly a reserve is attested — wrapped_assets' reserve_proof."
  },
  {
   "category": "token_standards",
   "criterionId": "exit_and_token_captivity",
   "refs": [
    "cross_chain_messaging.cost_per_message",
    "cross_chain_messaging.message_failure_record",
    "token_standards.mint_authority_and_revocation",
    "token_standards.authorised_deployment_and_provenance",
    "token_standards.blast_radius_caps"
   ],
   "clause": "DO NOT SCORE HERE: per-transfer or per-message fees and gas quotes — cross_chain_messaging's cost_per_message (weight 15); the dated record of forged or stuck messages and verifier-attributed losses — cross_chain_messaging's message_failure_record; who currently holds the minter — mint_authority_and_revocation; whether third parties can deploy without consent — authorised_deployment_and_provenance; supply ceilings — blast_radius_caps; how many chains the standard covers or how many you would abandon by leaving, which is a filter shown as a fact."
  },
  {
   "category": "socialfi",
   "criterionId": "handle_and_graph_custody",
   "refs": [
    "socialfi.exit_path_and_somewhere_to_go",
    "socialfi.earnings_waterfall",
    "socialfi.who_outranks_my_keys"
   ],
   "clause": "DO NOT SCORE HERE: the existence of a migration procedure, an export button or a rival client — that is 'exit_path_and_somewhere_to_go'; any fee, rent, subscription or take rate — that is 'earnings_waterfall'; admin, upgrade, pause, ban or namespace-reservation power over a record that IS onchain — that is 'who_outranks_my_keys'; and name expiry, renewal clock and resolution reach, which namingServicesPool.ts already scores on lens_usernames as ownershipDurability, registryDecentralisation and resolutionReach. User counts, DAU and token price are barred outright."
  },
  {
   "category": "socialfi",
   "criterionId": "exit_path_and_somewhere_to_go",
   "refs": [
    "socialfi.handle_and_graph_custody",
    "socialfi.earnings_waterfall",
    "socialfi.who_outranks_my_keys"
   ],
   "clause": "DO NOT SCORE HERE: where the record lives or whether it survives the company — that is 'handle_and_graph_custody'; the cost, gas or rent of performing the exit — that is 'earnings_waterfall'; who could BLOCK the exit — that is 'who_outranks_my_keys'; and developer ergonomics, language support and SDK polish, which are facts and are graded nowhere."
  },
  {
   "category": "socialfi",
   "criterionId": "earnings_waterfall",
   "refs": [
    "socialfi.handle_and_graph_custody",
    "socialfi.exit_path_and_somewhere_to_go",
    "socialfi.who_outranks_my_keys"
   ],
   "clause": "DO NOT SCORE HERE: whether earnings are portable once received — that is 'handle_and_graph_custody'; whether an export or rival client exists — that is 'exit_path_and_somewhere_to_go'; whether the fee-setting key is renounced as a GOVERNANCE fact — that is 'who_outranks_my_keys', and only the rate's mutability is scored here; and token price, market cap and volume, which are barred."
  },
  {
   "category": "socialfi",
   "criterionId": "who_outranks_my_keys",
   "refs": [
    "socialfi.handle_and_graph_custody",
    "socialfi.exit_path_and_somewhere_to_go",
    "socialfi.earnings_waterfall"
   ],
   "clause": "DO NOT SCORE HERE: whether the record is onchain in the first place — that is 'handle_and_graph_custody'; whether a rival client or export exists to route around the operator — that is 'exit_path_and_somewhere_to_go'; the size or mutability of the fee itself — that is 'earnings_waterfall'; and moderation POLICY quality, which is a contestable editorial claim — score only who holds the authority."
  },
  {
   "category": "trading_tools",
   "criterionId": "derivation_you_can_reproduce",
   "refs": [
    "onchain_analytics.attributionAuditability"
   ],
   "clause": "DO NOT SCORE whether a wallet or entity LABEL can be falsified — onchain_analytics' 'Attribution & methodology auditability' (weight 25), a different object with a different failure mode."
  },
  {
   "category": "trading_tools",
   "criterionId": "derivation_you_can_reproduce",
   "refs": [
    "onchain_analytics.queryPortability"
   ],
   "clause": "DO NOT SCORE whether the buyer can extract his data — onchain_analytics' 'Query & data portability (lock-in)' (weight 30)."
  },
  {
   "category": "trading_tools",
   "criterionId": "derivation_you_can_reproduce",
   "refs": [
    "sentiment_analytics.published_predictive_evidence",
    "sentiment_analytics.manipulation_filtering_documented"
   ],
   "clause": "DO NOT SCORE whether a forecast claim was validated, or how bots are filtered — sentiment_analytics' 'Published predictive evidence' (30) and 'Documented bot filtering' (25)."
  },
  {
   "category": "trading_tools",
   "criterionId": "derivation_you_can_reproduce",
   "refs": [
    "nft_analytics.wash_filter"
   ],
   "clause": "DO NOT SCORE wash-trade removal — nft_analytics' 'What the vendor removes before it prints the number' (30)."
  },
  {
   "category": "trading_tools",
   "criterionId": "derivation_you_can_reproduce",
   "refs": [
    "trading_tools.what_the_affordable_tier_refuses"
   ],
   "clause": "DO NOT SCORE whether the tier you bought grants access to the documented metric — that is what_the_affordable_tier_refuses."
  },
  {
   "category": "trading_tools",
   "criterionId": "venue_set_and_disclosed_gaps",
   "refs": [
    "market_data_apis.coverage_and_granularity",
    "onchain_analytics.coverageDepth"
   ],
   "clause": "DO NOT SCORE breadth as a virtue — more venues, more chains, deeper history are market_data_apis' 'Coverage and documented granularity' (weight 22) and onchain_analytics' 'Chain & data coverage' (25). This criterion is indifferent to size and will rank a named 15-venue set carrying a caveat ABOVE an unnamed 100-venue set."
  },
  {
   "category": "trading_tools",
   "criterionId": "venue_set_and_disclosed_gaps",
   "refs": [],
   "clause": "DO NOT SCORE refresh rate or tick granularity as quality — show them as facts."
  },
  {
   "category": "trading_tools",
   "criterionId": "venue_set_and_disclosed_gaps",
   "refs": [],
   "clause": "DO NOT SCORE inorganic-trade filtering — nft_analytics' wash-filter criterion (30)."
  },
  {
   "category": "trading_tools",
   "criterionId": "venue_set_and_disclosed_gaps",
   "refs": [
    "trading_tools.derivation_you_can_reproduce"
   ],
   "clause": "DO NOT SCORE whether the metric built on those venues has a published formula — derivation_you_can_reproduce."
  },
  {
   "category": "trading_tools",
   "criterionId": "what_the_affordable_tier_refuses",
   "refs": [],
   "clause": "DO NOT SCORE cheapness — a $699 tier with every exclusion printed beats a $29 tier that hides them."
  },
  {
   "category": "trading_tools",
   "criterionId": "what_the_affordable_tier_refuses",
   "refs": [
    "market_data_apis.cost_at_production_volume"
   ],
   "clause": "DO NOT SCORE cost-per-call at production volume — market_data_apis' 'Published cost at production call volume' (30)."
  },
  {
   "category": "trading_tools",
   "criterionId": "what_the_affordable_tier_refuses",
   "refs": [
    "market_data_apis.redistribution_rights"
   ],
   "clause": "DO NOT SCORE the redistribution licence itself — market_data_apis' 'Redistribution and licensing rights' (28); here record only whether the tier row states personal or commercial use."
  },
  {
   "category": "trading_tools",
   "criterionId": "what_the_affordable_tier_refuses",
   "refs": [
    "market_data_apis.entry_tier_durability",
    "screeners.free_tier_survivability"
   ],
   "clause": "DO NOT SCORE free-tier generosity as its own axis — market_data_apis' 'What the free tier actually survives' (20) and screeners' 'Whether the free tier is a usable product or a demo' (20)."
  },
  {
   "category": "trading_tools",
   "criterionId": "what_the_affordable_tier_refuses",
   "refs": [
    "trading_tools.derivation_you_can_reproduce"
   ],
   "clause": "DO NOT SCORE whether the metric behind the gated feature is documented — derivation_you_can_reproduce."
  },
  {
   "category": "trading_tools",
   "criterionId": "when_yesterdays_number_changes",
   "refs": [
    "oracles.incidentTransparency",
    "trading_bots.reliability"
   ],
   "clause": "DO NOT SCORE outage history, downtime or incident post-mortems on a live feed — oracles' 'Incident transparency' (30) and trading_bots' 'Operational reliability' (20), an availability record rather than a policy on rewriting settled history."
  },
  {
   "category": "trading_tools",
   "criterionId": "when_yesterdays_number_changes",
   "refs": [
    "indexers.vendorContinuity"
   ],
   "clause": "DO NOT SCORE whether the vendor still exists, was sold, renamed or handed to a new operator — indexers' 'Vendor continuity and control' (25); a rebrand such as velodata.app redirecting to velo.xyz belongs there and is shown here only as a fact."
  },
  {
   "category": "trading_tools",
   "criterionId": "when_yesterdays_number_changes",
   "refs": [
    "onchain_analytics.queryPortability"
   ],
   "clause": "DO NOT SCORE whether the buyer can export data at all — onchain_analytics' 'Query & data portability (lock-in)' (30), which asks whether data can get OUT and is silent on whether what already came out still matches the vendor's copy."
  },
  {
   "category": "paid_research_seats",
   "criterionId": "independence_and_who_pays",
   "refs": [
    "screeners.paid_placement_disclosure",
    "paid_research_seats.rating_construction_you_can_reread"
   ],
   "clause": "DO NOT SCORE paid placement in listing rows (screeners' paid_placement_disclosure owns that), project-paid audit badges (smart_contract_audits already marks the Skynet pattern down), or whether the judgment's rubric is published (rating_construction_you_can_reread)."
  },
  {
   "category": "paid_research_seats",
   "criterionId": "rating_construction_you_can_reread",
   "refs": [
    "trading_tools.derivation_you_can_reproduce",
    "paid_research_seats.what_you_can_read_before_you_pay",
    "paid_research_seats.independence_and_who_pays"
   ],
   "clause": "DO NOT SCORE data-metric formulas or feed construction (trading_tools' derivation_you_can_reproduce), on-chain metric construction or wallet-label falsifiability (onchain_analytics' attribution & methodology auditability), whether the call turned out RIGHT (the outcome-grading axis stays rejected; old-call auditability belongs to what_you_can_read_before_you_pay), or who paid for the grade (independence_and_who_pays)."
  },
  {
   "category": "paid_research_seats",
   "criterionId": "what_the_paid_tier_refuses",
   "refs": [
    "paid_research_seats.what_you_can_read_before_you_pay",
    "trading_tools.what_the_affordable_tier_refuses"
   ],
   "clause": "DO NOT SCORE cheapness (a $4,500 seat with printed exclusions beats a $39 tier that hides them), whether the price is worth paying (editorial), post-cancellation archive access (what_you_can_read_before_you_pay owns retention), data-terminal tier exclusions (trading_tools' what_the_affordable_tier_refuses — same name-pattern, disjoint pool, never import its evidence), or API rate limits and credits (market_data_apis)."
  },
  {
   "category": "paid_research_seats",
   "criterionId": "what_you_can_read_before_you_pay",
   "refs": [
    "paid_research_seats.what_the_paid_tier_refuses"
   ],
   "clause": "DO NOT SCORE self-reported hit-rates without an auditable archive (an unverifiable number is not evidence — the outcomes axis rejected by a judging model run must not be resurrected), free tiers of data products (market_data_apis' and screeners' free-tier criteria own those pools), data export or portability (onchain_analytics' query & data portability), or what the paid tier withholds pre-purchase (what_the_paid_tier_refuses)."
  },
  {
   "category": "incentive_distribution",
   "criterionId": "recomputable_allocation",
   "refs": [
    "incentive_distribution.budget_control_after_publication"
   ],
   "clause": "DO NOT SCORE HERE: who can alter or claw back the list after publication, or where the budget sits — that is budget_control_after_publication."
  },
  {
   "category": "incentive_distribution",
   "criterionId": "recomputable_allocation",
   "refs": [
    "incentive_distribution.incident_and_operator_record"
   ],
   "clause": "Do not score a past drain of the claim contract — that is incident_and_operator_record."
  },
  {
   "category": "incentive_distribution",
   "criterionId": "recomputable_allocation",
   "refs": [
    "incentive_distribution.sybil_defence_in_writing"
   ],
   "clause": "Do not score the anti-farming filter applied to the input set — that is sybil_defence_in_writing."
  },
  {
   "category": "incentive_distribution",
   "criterionId": "recomputable_allocation",
   "refs": [
    "governance_tools.enforceable_execution",
    "attestations.revocation_and_expiry"
   ],
   "clause": "Do not score whether a passed vote executes (governance_tools/enforceable_execution), attestation revocation semantics (attestations/revocation_and_expiry), or a data vendor's wash-trade adjustment (nft_analytics)."
  },
  {
   "category": "incentive_distribution",
   "criterionId": "budget_control_after_publication",
   "refs": [
    "incentive_distribution.recomputable_allocation"
   ],
   "clause": "DO NOT SCORE HERE: whether the arithmetic was checkable — that is recomputable_allocation."
  },
  {
   "category": "incentive_distribution",
   "criterionId": "budget_control_after_publication",
   "refs": [
    "incentive_distribution.incident_and_operator_record"
   ],
   "clause": "Do not score a past exploit of this same arrangement — that is incident_and_operator_record."
  },
  {
   "category": "incentive_distribution",
   "criterionId": "budget_control_after_publication",
   "refs": [
    "incentive_distribution.sybil_defence_in_writing"
   ],
   "clause": "Do not score exclusion of flagged wallets — that is sybil_defence_in_writing."
  },
  {
   "category": "incentive_distribution",
   "criterionId": "budget_control_after_publication",
   "refs": [
    "governance_tools.published_price",
    "crypto_payroll.floatCustody",
    "governance_tools.post_vote_treasury_control"
   ],
   "clause": "Do not score the take rate AS A PRICE (it belongs in pricingNote, and duplicates governance_tools/published_price), employer payroll float (crypto_payroll/floatCustody), or DAO treasury powers after a vote (governance_tools/post_vote_treasury_control)."
  },
  {
   "category": "incentive_distribution",
   "criterionId": "incident_and_operator_record",
   "refs": [
    "incentive_distribution.budget_control_after_publication"
   ],
   "clause": "DO NOT SCORE HERE: today's custody arrangement, admin roles or clawback rights — that is budget_control_after_publication, which reads the same arrangement before it failed."
  },
  {
   "category": "incentive_distribution",
   "criterionId": "incident_and_operator_record",
   "refs": [
    "incentive_distribution.recomputable_allocation"
   ],
   "clause": "Do not score reproducibility — that is recomputable_allocation."
  },
  {
   "category": "incentive_distribution",
   "criterionId": "incident_and_operator_record",
   "refs": [
    "decentralised_id.enforcement_and_continuity_risk",
    "liquidity_management.manager_audit_record",
    "yield_aggregators.inherited_exploit_record"
   ],
   "clause": "Do not score regulatory enforcement orders or identity-product continuity (decentralised_id/enforcement_and_continuity_risk), vault-manager audits (liquidity_management/manager_audit_record), or inherited strategy losses (yield_aggregators/inherited_exploit_record)."
  },
  {
   "category": "incentive_distribution",
   "criterionId": "sybil_defence_in_writing",
   "refs": [
    "proof_of_personhood.cost_to_farm_an_identity",
    "proof_of_personhood.issuer_independent_uniqueness_check",
    "proof_of_personhood.biometric_data_and_deletion"
   ],
   "clause": "DO NOT SCORE HERE: the identity primitive itself — enrolment cost, uniqueness guarantee and biometric handling belong to proof_of_personhood/cost_to_farm_an_identity, issuer_independent_uniqueness_check and biometric_data_and_deletion, where eight such products are already ranked."
  },
  {
   "category": "incentive_distribution",
   "criterionId": "sybil_defence_in_writing",
   "refs": [
    "incentive_distribution.recomputable_allocation"
   ],
   "clause": "Do not score whether the resulting allocation is re-derivable — that is recomputable_allocation."
  },
  {
   "category": "incentive_distribution",
   "criterionId": "sybil_defence_in_writing",
   "refs": [
    "incentive_distribution.budget_control_after_publication"
   ],
   "clause": "Do not score the power to void a published claim — that is budget_control_after_publication."
  },
  {
   "category": "incentive_distribution",
   "criterionId": "sybil_defence_in_writing",
   "refs": [
    "launchpads.access_rules_and_exclusions"
   ],
   "clause": "Do not score the price of the tier the filter sits behind (pricingNote), or jurisdictional exclusions from a sale (launchpads/access_rules_and_exclusions)."
  },
  {
   "category": "automation_keepers",
   "criterionId": "trigger_surface_and_predicate_locus",
   "refs": [
    "relayers.relayer_authority_and_key_custody"
   ],
   "clause": "DO NOT SCORE relayers' 'What the relayer is authorised to do, and whether you can keep the address' (32): msg.sender routing, dedicated proxy addresses, forwarders, key custody, address portability and the role an executor must be granted are banned here including as a tiebreak."
  },
  {
   "category": "automation_keepers",
   "criterionId": "trigger_surface_and_predicate_locus",
   "refs": [
    "account_abstraction_infra.verified_chain_coverage"
   ],
   "clause": "Do not score account_abstraction_infra's 'Verified mainnet chain coverage' (20) either — count CONDITIONS, never CHAINS; a product may support twenty chains while expressing one kind of trigger."
  },
  {
   "category": "automation_keepers",
   "criterionId": "survives_the_vendor",
   "refs": [
    "account_abstraction_infra.exit_without_vendor"
   ],
   "clause": "DO NOT SCORE account_abstraction_infra's 'Exit path without the vendor' (30): that criterion grades VOLUNTARY departure — standard compliance, account portability, licence terms, generic open-source self-hostability. This grades INVOLUNTARY departure and asks only whether a THIRD PARTY can and would make THIS call once the vendor is gone."
  },
  {
   "category": "automation_keepers",
   "criterionId": "visibility_of_the_non_event",
   "refs": [
    "relayers.exactly_once_execution"
   ],
   "clause": "DO NOT SCORE relayers' 'Exactly-once execution and stuck-queue recovery' (26): duplicates, nonce gaps, repricing and cancel endpoints all concern an object that exists and carries an id, whereas this concerns a call never attempted, for which no hash, queue entry or status enum can exist."
  },
  {
   "category": "automation_keepers",
   "criterionId": "visibility_of_the_non_event",
   "refs": [
    "relayers.gas_float_custody",
    "oracles.incidentTransparency"
   ],
   "clause": "Do not score relayers' 'Where the gas float sits and how you get it back' (20) either — the Chainlink upkeep-balance sentence above may be used ONLY as evidence about who bears the duty to notice, never as a float-custody or top-up fact. This is also not oracles' 'Incident transparency' (30), which grades a vendor's public disclosure of its own outages to the world; a vendor with an exemplary status page can still let one tenant's upkeep go quiet for six weeks."
  },
  {
   "category": "automation_keepers",
   "criterionId": "published_lateness_bound",
   "refs": [
    "account_abstraction_infra.published_unit_price",
    "account_abstraction_infra.sponsored_gas_markup"
   ],
   "clause": "DO NOT SCORE account_abstraction_infra's 'Published price per user operation' (30) or 'Markup on sponsored gas' (20): a per-execution rate, a subscription tier and a payment-premium percentage are banned here even when they sit in the same pricing table as the SLA figure. Score the BOUND, never the price — price is recorded on this page as disclosure and ranked in no criterion."
  },
  {
   "category": "mining_pools",
   "criterionId": "payout_scheme_risk_transfer",
   "refs": [
    "mining_pools.fee_completeness_txfee_mev",
    "mining_pools.payout_custody_coinbase_directness",
    "mining_pools.block_template_control"
   ],
   "clause": "DO NOT SCORE the fee percentage (fee_completeness_txfee_mev owns it), who holds the coin or when it is released (payout_custody_coinbase_directness), or who authors the block (block_template_control)."
  },
  {
   "category": "mining_pools",
   "criterionId": "payout_scheme_risk_transfer",
   "refs": [],
   "clause": "DO NOT SCORE the pool's hashrate share, its luck percentage, its block count or its orphan rate as a ranking input — those are network telemetry that decays weekly, and a score built on them stops surviving a reader checking it within a month."
  },
  {
   "category": "mining_pools",
   "criterionId": "payout_scheme_risk_transfer",
   "refs": [],
   "clause": "DO NOT SCORE the bitcoin price, hashprice, or hardware efficiency: they are market data and no criterion in this category touches them."
  },
  {
   "category": "mining_pools",
   "criterionId": "payout_custody_coinbase_directness",
   "refs": [
    "institutional_custody.custody_legal_entity_licence",
    "institutional_custody.insolvency_survival_mechanism",
    "institutional_custody.insurance_as_written",
    "institutional_custody.pre_sales_price_visibility"
   ],
   "clause": "DO NOT SCORE this as institutional_custody. That category (src/lib/methodologySpecs/institutionalCustody.ts) scores a named legal entity's charter on a public register, its insolvency mechanism and its insurance tower across custody_legal_entity_licence, insolvency_survival_mechanism, insurance_as_written and pre_sales_price_visibility — no mining pool holds a trust charter, so importing that frame would score every provider 0 and discriminate nothing."
  },
  {
   "category": "mining_pools",
   "criterionId": "payout_custody_coinbase_directness",
   "refs": [],
   "clause": "DO NOT SCORE corporate solvency, audits or proof-of-reserves."
  },
  {
   "category": "mining_pools",
   "criterionId": "payout_custody_coinbase_directness",
   "refs": [
    "mining_pools.fee_completeness_txfee_mev"
   ],
   "clause": "DO NOT SCORE the fee (fee_completeness_txfee_mev)."
  },
  {
   "category": "mining_pools",
   "criterionId": "payout_custody_coinbase_directness",
   "refs": [
    "staking.unbonding_disclosure"
   ],
   "clause": "DO NOT SCORE unbonding, lock-up or exit queues — those are staking's unbonding_disclosure, and importing that frame is the single most likely way this category gets mis-modelled as a staking subset: a miner bonds no principal and has nothing to unbond, and the only time-value question in proof-of-work is how long the pool sits on money the miner has ALREADY earned."
  },
  {
   "category": "mining_pools",
   "criterionId": "fee_completeness_txfee_mev",
   "refs": [
    "mining_pools.payout_scheme_risk_transfer",
    "mining_pools.payout_custody_coinbase_directness",
    "mining_pools.block_template_control",
    "staking.commission_transparency",
    "decentralised_compute.dc_price_transparency"
   ],
   "clause": "DO NOT SCORE scheme choice (payout_scheme_risk_transfer), threshold or release timing (payout_custody_coinbase_directness), or template authorship (block_template_control). DO NOT import staking's commission_transparency frame (src/lib/methodologySpecs/staking.ts:38): that criterion exists because none of the seven institutional staking operators in stakingPool.ts publishes a rate at all and price is reachable only through 'Meet With Us', whereas every pool in this candidate set publishes one — the failure mode here is an INCOMPLETE BASE, not an absent number. DO NOT import decentralised_compute's dc_price_transparency either: that scores a BUYER hunting a fetchable rate to pay; the miner is the SELLER and the rate is already on the page."
  },
  {
   "category": "mining_pools",
   "criterionId": "block_template_control",
   "refs": [
    "layer1_chains.decentralisation_depth"
   ],
   "clause": "DO NOT SCORE how much of the network the pool builds. Realised hashrate share was proposed and is deliberately REJECTED as a ranking input: it is a property of the network rather than of the purchase, it decays week to week so a score built on it stops surviving a reader checking it, and Bitcoin's own concentration belongs to layer1_chains' decentralisation_depth (src/lib/methodologySpecs/layer1Chains.ts:38, validator count and Nakamoto coefficient), which scores one row for the whole chain. Record each pool's share and block-height window as CONTEXT in the evidence, never as a score."
  },
  {
   "category": "mining_pools",
   "criterionId": "block_template_control",
   "refs": [
    "mining_pools.payout_custody_coinbase_directness"
   ],
   "clause": "DO NOT SCORE the pool's KYC or AML onboarding requirements as a compliance product — kyc_compliance owns identity-verification vendors — except where onboarding changes what enters a block or whether a payout is withheld, and the withheld payout is scored under payout_custody_coinbase_directness."
  },
  {
   "category": "mining_pools",
   "criterionId": "block_template_control",
   "refs": [],
   "clause": "DO NOT SCORE the licences, reserves or asset safety of a parent company's exchange or custody arm, or the quality of a parent's ASIC manufacturing business."
  },
  {
   "category": "mining_pools",
   "criterionId": "block_template_control",
   "refs": [
    "mev_protection.orderFlowPrivacy",
    "mev_protection.inclusionAndCensorship"
   ],
   "clause": "DO NOT SCORE order-flow routing, private mempools or builder-relay exposure on Ethereum — mev_protection owns orderFlowPrivacy and inclusionAndCensorship (src/lib/methodologySpecs/mevProtection.ts:36 and :38) and it scores the transaction SENDER's exposure to a builder set, the mirror image of this question."
  },
  {
   "category": "key_recovery",
   "criterionId": "recovery_without_the_vendor",
   "refs": [
    "key_recovery.trigger_enforcement_and_wrongful_release",
    "key_recovery.who_is_on_the_hook",
    "key_recovery.lifetime_cost_and_lapse"
   ],
   "clause": "DO NOT SCORE HERE: how the handover is triggered, how long the delay is, or who can bypass it (that is 'What actually makes the handover happen'); who compensates you when it fails, licences or insurance (that is 'If this fails, who is actually on the hook'); price, subscription lapse or what a lapse disables (that is 'What does this cost me every year until I die'); supported chains, asset counts, hardware compatibility and form factor (facts, not scores); secure-element certification level and firmware openness (the live hardware_wallet criteria 'Secure element you can look up' and 'Firmware anyone can rebuild and match')."
  },
  {
   "category": "key_recovery",
   "criterionId": "trigger_enforcement_and_wrongful_release",
   "refs": [
    "hardware_wallet.secure_element",
    "mpc_wallets.crypto_audit_posture_mpc",
    "key_recovery.recovery_without_the_vendor",
    "key_recovery.who_is_on_the_hook",
    "key_recovery.lifetime_cost_and_lapse"
   ],
   "clause": "DO NOT SCORE HERE: whether the mechanism survives the company, or what artefact the heir holds (that is 'If this company is gone in twenty years'); licences, insurance, underwriters or liability (that is 'If this fails, who is actually on the hook'); price or lapse (that is 'What does this cost me every year until I die'); device or app security certifications (hardware_wallet's 'Secure element you can look up'); threshold-signing protocol audits (mpc_wallets' 'Cryptographic Audit & SOC 2 Posture')."
  },
  {
   "category": "key_recovery",
   "criterionId": "who_is_on_the_hook",
   "refs": [],
   "clause": "DO NOT SCORE HERE: the recovery mechanism or the artefact (first criterion); the claim trigger, waiting period or bypass (second criterion); the price of the insurance or the plan, or premium levels read as coverage quality (fourth criterion); country availability and KYC lists (facts, not scores); qualified-custodian balance-sheet standing (the live institutional_custody category)."
  },
  {
   "category": "key_recovery",
   "criterionId": "lifetime_cost_and_lapse",
   "refs": [],
   "clause": "DO NOT SCORE HERE: whether the price is good value or fair — that is an editorial judgement, not a measurement; insurance limits, coverage amounts or premium levels as evidence of protection (third criterion); whether recovery survives the vendor (first criterion); the waiting period, evidence standard or bypass (second criterion); hardware compatibility or device counts as product facts (facts, not scores)."
  },
  {
   "category": "institutional_custody",
   "criterionId": "custody_legal_entity_licence",
   "refs": [
    "business_banking.licence_identity_resolvable",
    "mpc_wallets.share_custody_model_mpc",
    "mpc_wallets.crypto_audit_posture_mpc",
    "otc_desks.counterparty_and_client_asset_footing",
    "institutional_custody.insurance_as_written",
    "institutional_custody.insolvency_survival_mechanism"
   ],
   "clause": "DO NOT SCORE HERE: the fiat operating account's licence — business_banking/licence_identity_resolvable; MPC key-share architecture — mpc_wallets/share_custody_model_mpc; SOC 2 / ISO badges — an audit is not a licence, audit posture belongs to mpc_wallets/crypto_audit_posture_mpc; OTC settlement counterparty footing — otc_desks/counterparty_and_client_asset_footing; insurance placements — sibling insurance_as_written; segregation mechanics — sibling insolvency_survival_mechanism."
  },
  {
   "category": "institutional_custody",
   "criterionId": "insolvency_survival_mechanism",
   "refs": [
    "business_banking.deposit_guarantee_reach",
    "business_banking.closure_notice_and_freeze",
    "mpc_wallets.exit_survivability_mpc",
    "institutional_custody.insurance_as_written",
    "institutional_custody.custody_legal_entity_licence"
   ],
   "clause": "DO NOT SCORE HERE: statutory deposit schemes on fiat — business_banking/deposit_guarantee_reach; operating-account freeze and closure mechanics — business_banking/closure_notice_and_freeze; vendor-exit key recovery — mpc_wallets/exit_survivability_mpc; insurance payouts — sibling insurance_as_written; the licence itself — sibling custody_legal_entity_licence."
  },
  {
   "category": "institutional_custody",
   "criterionId": "insurance_as_written",
   "refs": [
    "business_banking.deposit_guarantee_reach",
    "mpc_wallets.crypto_audit_posture_mpc",
    "institutional_custody.custody_legal_entity_licence"
   ],
   "clause": "DO NOT SCORE HERE: statutory deposit guarantees and FDIC pass-through — business_banking/deposit_guarantee_reach; DeFi cover protocols — defi_insurance; SOC/audit reports as if they were policies — an audit is not insurance, audit posture belongs to mpc_wallets/crypto_audit_posture_mpc; whether the charter requires insurance — sibling custody_legal_entity_licence."
  },
  {
   "category": "institutional_custody",
   "criterionId": "pre_sales_price_visibility",
   "refs": [
    "otc_desks.published_price_transparency",
    "institutional_execution.commercial_and_identity_disclosure",
    "mpc_wallets.pricing_transparency_mpc"
   ],
   "clause": "DO NOT SCORE HERE: the negotiated fee LEVEL (unknowable, not a disclosure question); trading/execution fees and demo-walls — otc_desks/published_price_transparency and institutional_execution/commercial_and_identity_disclosure; per-MAU/per-signature MPC software pricing — mpc_wallets/pricing_transparency_mpc (Fireblocks' rate card counts here only as the custody buyer's cost anchor); account and payment fees — business_banking."
  },
  {
   "category": "retail_staking",
   "criterionId": "net_yield_after_commission",
   "refs": [
    "retail_staking.exit_path",
    "retail_staking.rate_disclosure"
   ],
   "clause": "DO NOT SCORE how fast the ETH comes back (exit_path) or how clearly the rate is shown (rate_disclosure)."
  },
  {
   "category": "retail_staking",
   "criterionId": "exit_path",
   "refs": [
    "retail_staking.net_yield_after_commission"
   ],
   "clause": "DO NOT SCORE the commission (net_yield_after_commission)."
  },
  {
   "category": "retail_staking",
   "criterionId": "rate_disclosure",
   "refs": [
    "retail_staking.net_yield_after_commission"
   ],
   "clause": "DO NOT SCORE the size of the commission (net_yield_after_commission)."
  },
  {
   "category": "liquid_lockers",
   "criterionId": "base_protocol_unwind",
   "refs": [],
   "clause": "Do not score a marketing FAQ as a plan; it needs a proposal id or an executed on-chain action."
  },
  {
   "category": "restaking",
   "criterionId": "slashingSurface",
   "refs": [
    "restaking.worstCaseExit"
   ],
   "clause": "DO NOT SCORE how long an exit takes or how a queue behaves — that is 'How long until I actually have my ETH back'."
  },
  {
   "category": "restaking",
   "criterionId": "slashingSurface",
   "refs": [
    "restaking.incidentRecord"
   ],
   "clause": "DO NOT SCORE losses that have already occurred — that is 'What has actually gone wrong here'."
  },
  {
   "category": "restaking",
   "criterionId": "worstCaseExit",
   "refs": [
    "restaking.slashingSurface"
   ],
   "clause": "DO NOT SCORE what can be slashed or by whom — that is 'What exactly can be taken from me'."
  },
  {
   "category": "restaking",
   "criterionId": "worstCaseExit",
   "refs": [
    "restaking.incidentRecord"
   ],
   "clause": "DO NOT SCORE the incident that caused a past pause — that is 'What has actually gone wrong here'."
  },
  {
   "category": "restaking",
   "criterionId": "incidentRecord",
   "refs": [
    "restaking.slashingSurface"
   ],
   "clause": "DO NOT SCORE forward-looking slashing design or who holds the slasher key — that is 'What exactly can be taken from me'."
  },
  {
   "category": "restaking",
   "criterionId": "incidentRecord",
   "refs": [
    "restaking.worstCaseExit"
   ],
   "clause": "DO NOT SCORE how long a withdrawal takes today — that is 'How long until I actually have my ETH back'."
  },
  {
   "category": "restaking",
   "criterionId": "dependencyCurrency",
   "refs": [],
   "clause": "DO NOT SCORE slashing design, exit duration, or the loss record — this criterion scores only whether dependencies are disclosed and whether the published record is still accurate today."
  },
  {
   "category": "creator_mint_platforms",
   "criterionId": "contract_is_mine",
   "refs": [
    "creator_mint_platforms.art_still_loads",
    "creator_mint_platforms.royalties_survive",
    "creator_mint_platforms.abandonment_record"
   ],
   "clause": "DO NOT SCORE HERE: where media and metadata physically sit or who pins them (that is 'art_still_loads'); whether royalties resolve without the vendor (that is 'royalties_survive'); repo freshness, deprecation history or any published wind-down promise (that is 'abandonment_record'); mint fees, chain coverage, token standards or ease of use, which are facts and are graded nowhere."
  },
  {
   "category": "creator_mint_platforms",
   "criterionId": "art_still_loads",
   "refs": [
    "creator_mint_platforms.contract_is_mine",
    "creator_mint_platforms.royalties_survive",
    "creator_mint_platforms.abandonment_record"
   ],
   "clause": "DO NOT SCORE HERE: who owns or can admin the contract (that is 'contract_is_mine'); royalty plumbing (that is 'royalties_survive'); a shutdown-era gateway pledge, which is exit behaviour and belongs to 'abandonment_record'; storage-brand preference, file formats or upload UX, which are facts."
  },
  {
   "category": "creator_mint_platforms",
   "criterionId": "abandonment_record",
   "refs": [
    "creator_mint_platforms.contract_is_mine",
    "creator_mint_platforms.art_still_loads",
    "creator_mint_platforms.royalties_survive"
   ],
   "clause": "DO NOT SCORE HERE: whether the product currently deploys at all, which is the POOL ENTRY liveness gate, not an axis; company funding, headcount or social activity, which are unverifiable from primary sources; current ownership terms ('contract_is_mine'); ordinary storage architecture ('art_still_loads'); royalty plumbing ('royalties_survive')."
  },
  {
   "category": "creator_mint_platforms",
   "criterionId": "royalties_survive",
   "refs": [
    "nft_marketplace.royalties",
    "creator_mint_platforms.contract_is_mine",
    "creator_mint_platforms.art_still_loads"
   ],
   "clause": "DO NOT SCORE HERE: whether a MARKETPLACE honours the royalty at trade time — that is nft_marketplace's own 'royalty enforcement' criterion (22% there) and re-ranking it would duplicate a live category; nor primary mint fee or platform take rate, which are published facts; nor contract ownership ('contract_is_mine'); nor metadata persistence ('art_still_loads')."
  },
  {
   "category": "perp_house_vaults",
   "criterionId": "verifiable_loss_of_record",
   "refs": [
    "perp_dex.security",
    "yield_vaults.strategyRisk",
    "yield_vaults.feeTransparency",
    "perp_house_vaults.fee_versus_pnl_honesty"
   ],
   "clause": "DO NOT SCORE: audit coverage, exploit history or years live — perp_dex `security`. What strategy the vault runs — yield_vaults `strategyRisk`. Fee levels or fee disclosure — yield_vaults `feeTransparency`. Whether the headline number silently excludes trader PnL — fee_versus_pnl_honesty, the fourth sibling here. TVL or adoption — an unscored structural fact per the perp_dex header."
  },
  {
   "category": "perp_house_vaults",
   "criterionId": "pool_protection_mechanism",
   "refs": [
    "perp_dex.decentralization",
    "yield_vaults.mandate",
    "perp_house_vaults.loss_waterfall_and_exit_price",
    "yield_vaults.exit"
   ],
   "clause": "DO NOT SCORE: trader-side liquidation mechanics, margin tiers or leverage — perp_dex, shown there as unscored fact. Validator-set size, upgradeability or multisig composition — perp_dex `decentralization`. Who chooses the strategy — yield_vaults `mandate`. What happens to the loss once it lands, and what leaving costs — loss_waterfall_and_exit_price, the sibling below. Ordinary redemption availability — yield_vaults `exit`."
  },
  {
   "category": "perp_house_vaults",
   "criterionId": "loss_waterfall_and_exit_price",
   "refs": [
    "yield_vaults.exit",
    "yield_vaults.feeTransparency",
    "perp_dex.security",
    "yield_vaults.mandate",
    "structured_products.counterparty_backing",
    "perp_house_vaults.pool_protection_mechanism"
   ],
   "clause": "DO NOT SCORE: redemption path, queue length or lock-ups as ordinary liquidity — yield_vaults `exit`; only gates and haircuts whose severity is a published function of vault solvency or open derivatives exposure belong here. Withdrawal or mint fees as a cost of doing business — yield_vaults `feeTransparency`. Contract-exploit risk — perp_dex `security`. Curator identity — yield_vaults `mandate`. Collateral behind a defined payoff — structured_products `counterparty_backing`. The trigger that force-closes a winner — pool_protection_mechanism, the sibling above."
  },
  {
   "category": "perp_house_vaults",
   "criterionId": "fee_versus_pnl_honesty",
   "refs": [
    "yield_vaults.feeTransparency",
    "options_vaults.depositor_cost_disclosure",
    "perp_house_vaults.verifiable_loss_of_record",
    "perp_house_vaults.loss_waterfall_and_exit_price"
   ],
   "clause": "DO NOT SCORE: what the depositor PAYS — management, performance, deposit or withdrawal fees — yield_vaults `feeTransparency`, and options_vaults `depositor_cost_disclosure` for the vault-fee analogue. Whether a loss history exists or is retrievable — verifiable_loss_of_record. Whether principal loss is disclosed as possible, or what exiting costs — loss_waterfall_and_exit_price. Trading fees charged to the TRADER as a venue-competitiveness signal — perp_dex."
  },
  {
   "category": "tokenised_bonds",
   "criterionId": "legal_claim_in_default",
   "refs": [
    "tokenised_bonds.who_may_buy_where",
    "tokenised_bonds.redemption_tested_not_promised",
    "tokenised_bonds.all_in_cost_vs_direct_route"
   ],
   "clause": "DO NOT SCORE: who may buy (who_may_buy_where); whether redemption has been tested (redemption_tested_not_promised); the cost of the wrapper (all_in_cost_vs_direct_route); shareholder and voting rights (tokenised_equities.claim_integrity); fund-share register-of-record questions (money_market_funds.token_share_record, tokenised_funds.claimDistance); cash-equivalent claim quality (tokenised_tbills.legalClaim); underwriter identity and first-loss capital (private_credit.underwriter_identity_and_skin)."
  },
  {
   "category": "tokenised_bonds",
   "criterionId": "who_may_buy_where",
   "refs": [
    "tokenised_bonds.legal_claim_in_default",
    "tokenised_bonds.all_in_cost_vs_direct_route",
    "tokenised_bonds.redemption_tested_not_promised",
    "tokenised_funds.access"
   ],
   "clause": "DO NOT SCORE: the legal nature of the claim (legal_claim_in_default); KYC friction or onboarding UX, a fact filter scored nowhere on this site; minimums treated as cost (all_in_cost_vs_direct_route); redemption-side gates (redemption_tested_not_promised); equity-token eligibility (tokenised_equities.access_eligibility); fund subscription classes (tokenised_funds.access); cash-equivalent access (tokenised_tbills.access)."
  },
  {
   "category": "tokenised_bonds",
   "criterionId": "redemption_tested_not_promised",
   "refs": [
    "tokenised_bonds.who_may_buy_where",
    "tokenised_bonds.all_in_cost_vs_direct_route",
    "tokenised_bonds.legal_claim_in_default"
   ],
   "clause": "DO NOT SCORE: eligibility to redeem (who_may_buy_where); redemption fees (all_in_cost_vs_direct_route); the legal identity of what is being redeemed (legal_claim_in_default); MMF liquidity rulebooks, WAM and WAL (money_market_funds.portfolio_liquidity_rules); T-bill token redemption (tokenised_tbills.redemption); fund queue and pro-ration mechanics (tokenised_funds.liquidity); private-credit epoch gating (private_credit.redemption_terms_and_gating)."
  },
  {
   "category": "tokenised_bonds",
   "criterionId": "all_in_cost_vs_direct_route",
   "refs": [
    "tokenised_bonds.legal_claim_in_default",
    "tokenised_bonds.who_may_buy_where",
    "tokenised_bonds.redemption_tested_not_promised"
   ],
   "clause": "DO NOT SCORE: yield levels, which are market data shown as fact; the legal wrapper (legal_claim_in_default); who may see the pricing (who_may_buy_where); whether redemption mechanically works (redemption_tested_not_promised); MMF fee-vs-yield tables (money_market_funds.published_fee_vs_yield); fund-route comparisons (tokenised_funds.feeVsAlternative); equity-token cost stacks (tokenised_equities.cost_disclosure); cash-equivalent fee load (tokenised_tbills.feeLoad)."
  },
  {
   "category": "tokenised_equities",
   "criterionId": "share_or_promise",
   "refs": [
    "tokenised_equities.who_is_on_the_paper",
    "tokenised_equities.corporate_actions_record",
    "tokenised_equities.us_person_answer",
    "tokenised_bonds.redemption_tested_not_promised",
    "tokenised_tbills.redemption",
    "tokenised_funds.liquidity"
   ],
   "clause": "DO NOT SCORE HERE: the licence or register entry of whoever issues or sells it (that is who_is_on_the_paper); dividend, split and voting mechanics (that is corporate_actions_record); whether a US person may hold it (that is us_person_answer); redemption minimums, wind-down terms, spreads and per-order fees (NOT SCORED in this category — carried on the record as dated facts, and already ranked as redemption axes in tokenised_bonds redemption_tested_not_promised, tokenised_tbills redemption and tokenised_funds liquidity); ticker counts, chain coverage and app quality (facts, never graded)."
  },
  {
   "category": "tokenised_equities",
   "criterionId": "who_is_on_the_paper",
   "refs": [
    "exchange.licence_coverage_map",
    "tokenised_equities.us_person_answer",
    "tokenised_equities.share_or_promise",
    "tokenised_equities.corporate_actions_record",
    "tokenised_funds.access"
   ],
   "clause": "DO NOT SCORE HERE: which venue's licence covers the buyer's COUNTRY for trading services and whether the venue can be found on a national register — that is the exchange category's licence_coverage_map, and re-scoring it here would rank venues on evidence they do not control; whether this buyer is eligible (that is us_person_answer); what the instrument conveys (that is share_or_promise); how distributions are handled (that is corporate_actions_record); professional/qualified gating for non-US buyers (tokenised_funds access); country and chain counts (facts)."
  },
  {
   "category": "tokenised_equities",
   "criterionId": "corporate_actions_record",
   "refs": [
    "tokenised_equities.share_or_promise",
    "tokenised_equities.who_is_on_the_paper",
    "tokenised_equities.us_person_answer",
    "tokenised_bonds.all_in_cost_vs_direct_route",
    "tokenised_tbills.feeLoad",
    "tokenised_funds.feeVsAlternative"
   ],
   "clause": "DO NOT SCORE HERE: whether title passes (that is share_or_promise); the issuer's or seller's registration (that is who_is_on_the_paper); US eligibility (that is us_person_answer); trading spreads, per-order fees and redemption thresholds (NOT SCORED — carried as dated facts; fee-load axes already exist in tokenised_bonds all_in_cost_vs_direct_route, tokenised_tbills feeLoad and tokenised_funds feeVsAlternative)."
  },
  {
   "category": "tokenised_equities",
   "criterionId": "us_person_answer",
   "refs": [
    "tokenised_funds.access",
    "tokenised_bonds.who_may_buy_where",
    "tokenised_equities.who_is_on_the_paper",
    "tokenised_equities.share_or_promise"
   ],
   "clause": "DO NOT SCORE HERE: professional, qualified or institutional gating for NON-US buyers and minimum ticket size — that is tokenised_funds access and tokenised_bonds who_may_buy_where; the licence or register entry itself (that is who_is_on_the_paper); what the token conveys (that is share_or_promise); whether the gate survives the token reaching an open chain, which is evidence for who_is_on_the_paper's 5-6 band, not a separate score."
  }
 ]
}
