Skip to main content

Versioned — methodology history, archive

Earlier changes to the scoring engine

Scoring weights, dimension definitions, eligibility filters, question structure. Every published change is recorded here with the date, the rationale, the categories it reaches and the person named as approver. Superseding versions go on top. A changed fee or licence is a data change and a placement that was added, cut or archived is a universe change; each keeps its own ledger.

The 15 newest versions, the current one first, are on the changelog.

Version2026.10.3Published2026-10-01Approvedmathias-siemonsmeier

Hardware wallets add proof the device is genuine and key creation you can check

Effective 2026-10-01 to 2026-10-02, superseded by 2026.10.4. Overall ranks and Fit ranks in the categories below were scored under this version from its publish date; the measured effect on each order is stated in the changes.

Hardware wallets move from four published ladders to six. Two criteria join, each graded on the model the row prices: proof the device is genuine and unmodified before you load funds (12), and key creation and signing a buyer can check against bad firmware (12). The four v2 criteria keep their ladders and their order, rescaled to 27, 27, 11 and 11. BitBox02 Nova, SecuX, Satochip, Keycard and the Keycard Shell are ranked for the first time, and TAPSIGNER is refused.

Rationale

Two risks the four v2 ladders could not see are a counterfeit or tampered unit in the box, and firmware that quietly weakens or leaks the key it makes. Neither is visible to a buyer, and makers differ sharply in what they let you check: some answer a fresh challenge with a key unique to the unit, some only print a seal; some let the computer check the seed it helped make or let you roll dice for it, most use only the device's own randomness. The owner approved both ladders, the weights and four readings on 2026-10-01: a BitBox02 final word chosen on the device counts as owner entropy as Jade's does; a per-unit key the maker records in its own registry counts as a certificate it issued; a BIP-39 passphrase is not owner entropy; and a phrase an app generates and loads onto the device is a phrase made elsewhere.

Changes
  • AddedTwo hardware_wallet criteria with published 0-10 ladders. Proof the device is genuine and unmodified (12): a documented pre-use check of any kind 2, a check that a counterfeit or modified unit is documented to fail, on the device or in the buyer's software, 5, a fresh challenge answered with a key unique to the unit under a certificate the maker issued 7, the bootloader measured inside that signed answer 8, the firmware too 10; a check counts only while no published, unfixed bypass of that check exists on the priced model. Key creation and signing you can check (12): host or owner randomness mixed in, even uncheckably, 4; one end a buyer can check, either a committed-then-revealed host contribution or owner entropy entered on the device under a published recomputation method, or anti-exfiltration on by default for signing, 7; both ends 10.
  • ChangedWeights: secure element you can look up 27 (was 35), firmware anyone can rebuild and match 27 (35), proof the device is genuine 12 (new), key creation and signing you can check 12 (new), signing and recovering without the maker 11 (15), years without a device-level fund loss 11 (15). The two criteria a buyer cannot check alone still carry 54 of 100 points.
  • ChangedAll 114 criterion scores across 19 rows carry a quote and source in research-pending/rereads/2026-10-01-hardware_wallet.json, extended the same day (receipts and a refute-by-default model run per row); the refuter cut Blockstream Jade's genuine check from 5 to 0, because Blockstream's Genuine Check is sold only with the Jade Plus and Core and no pre-use check is documented for the Classic. The signed build records now number 45, adding the two that match the BitBox02 Nova's firmware and six for the Keycard Shell's.
  • AddedBitBox02 Nova (€175) is ranked as its own row, because its cells differ from the original BitBox02's on two criteria: an EAL6+ secure chip you can look up (10 against 5) and a 2025 first shipment (5 against 10). SecuX is ranked on its cheapest model, the W10 ($49), and Satochip on its €25 card. Keycard is ranked on its €29 card, and the Keycard Shell (€129) as its own row because its cells differ from the card's on three criteria: rebuildable firmware (7 against 5), independence from the maker (10 against 8, since applet 4.0 cards, which Sparrow cannot use, are already shipping) and a 2025 first shipment (5 against 10). TAPSIGNER is refused: Coinkite names no chip a certification body lists and publishes no source for its signing applet. SecuX's NeoGold, Neo-X and Nifty, which would each earn a row of their own, are refused on the same standard.
  • ChangedPublished hardware_wallet order: BitBox02 Nova enters at #1 (81), one point ahead of Trezor (80). Both score 10 on the secure element, rebuildable firmware and independence from the maker, and 7 on the genuine check; the Nova's key creation and signing you can check (10 against 7) outweighs Trezor's longer record (7 against 5), so the lead is one re-read from changing, and the published robustness flag says so. BitBox02 moves from #2 to #3 and Keystone holds #4. OneKey falls from #3 to #6 and Ledger from #6 to #11: neither lets a buyer check how the key was made. Blockstream Jade moves from #5 to #7 and COLDCARD from #7 to #10, and Foundation Passport holds #8; KeepKey, Cypherock, GridPlus, SafePal, CoolWallet and Tangem each move down as the new rows enter. The Keycard Shell enters at #5, level on 69 with OneKey and Jade, the Keycard at #9, Satochip at #14 and SecuX at #17. No other category moves.
  • ChangedCorrected 2026-10-14: Foundation Passport's vendor-independence criterion stays 6, but its published score moved: Foundation Passport #8 65 → #8 68. Every published hardware_wallet row this version moved, rank and score before and after: BitBox02 Nova enters at #1 (81); Trezor #1 81 → #2 80; BitBox02 #2 73 → #3 76; Keycard Shell enters at #5 (69); OneKey #3 73 → #6 69; Blockstream Jade #5 70 → #7 69; Foundation Passport #8 65 → #8 68; Keycard enters at #9 (67); Coldcard #7 65 → #10 66; Ledger #6 65 → #11 63; KeepKey #9 62 → #12 62; Cypherock X1 #10 61 → #13 60; Satochip enters at #14 (57); GridPlus Lattice1 #11 52 → #15 52; SafePal S1 #12 48 → #16 48; SecuX enters at #17 (46); CoolWallet #13 45 → #18 44; Tangem #14 41 → #19 42. Keystone keeps #4 at 70.
Version2026.10.2Published2026-10-01Approvedmathias-siemonsmeier

Hardware wallets are ranked on what a buyer cannot check alone

Effective 2026-10-01 to 2026-10-01, superseded by 2026.10.3. Overall ranks and Fit ranks in the categories below were scored under this version from its publish date; the measured effect on each order is stated in the changes.

Hardware wallets move from two broad criteria to four published ladders: a secure element whose part number and certificate anyone can look up (35), firmware that someone independent has rebuilt from source and matched to the shipped binary (35), signing and recovering without the maker (15), and years in buyers' hands without a device-level fund loss (15). Every criterion is graded on the model each row prices, the cheapest one the maker sells, and every score carries a quote and a source. Air-gapped signing and Bitcoin-only builds become requirements you can set in Find my best rather than points.

Rationale

The two-criterion model scored a certification level the maker claimed and the years since the brand's first device, so a chip nobody could look up scored like a certified one, and a model that shipped last year inherited a decade of someone else's record. Two things decide whether a hardware wallet deserves trust and a buyer cannot check either alone: whether the chip guarding the key is certified, and whether the firmware it runs is the code anyone can read. Both are now graded from public registries and signed build records. The owner approved the four ladders, the weights, the grading unit and every listed policy on 2026-10-01, and ruled the same day that firmware installed as a signed file by an open-source tool, with no live maker server, is not a dependency on the maker.

Changes
  • AddedFour hardware_wallet criteria with published 0-10 ladders: secure element you can look up (35: a named part with a certificate listed by a Common Criteria, FIPS 140-3 level 3, CSPN or PSA Level 3 registry; 10 needs EAL6+ valid on the read date or expired less than 180 days before it; an unfixed key-extraction attack caps the part at 3), firmware anyone can rebuild and match (35: a signed public build record by a verifier independent of the maker, read from WalletScrutiny's Nostr records; 10 needs the newest release matched and the whole key path in open code), sign and recover without the maker (15: standard backup 4, an independent wallet signs 6, with no maker app, server or hosted page in pairing, signing or setup 8, two such wallets 10), and years in buyers' hands without a device-level fund loss (15: no loss 5, then one point a year from two years to six; a fixed and remediated loss 1, an older one 3, an open one 0).
  • Changedhardware_wallet ranks through scoreCriterionObjective on fitStrength, like the other criterion-ranked categories; the hand-written two-axis scorer is deleted. All 56 criterion scores across 14 rows carry a quote and source in research-pending/rereads/2026-10-01-hardware_wallet.json (receipts and a refute-by-default model run per row); the 37 WalletScrutiny build records the evidence cites are archived as signed events with each signer's verified profile, ids recomputed and signatures checked, in research-pending/receipts/2026-10-01-hardware_wallet-build-records.json, and tests/build-record-receipts.test.ts re-verifies them offline and requires every firmware score of 6 or more to cite one.
  • ChangedGrading unit: every criterion, the track record included, is graded on the model the row prices, the cheapest model the maker sells under the row. CoolWallet is graded on the CoolWallet Go ($69), not the Pro ($149); Jade on the Jade Classic ($67); OneKey on the Classic 1S Pure ($79). Launch year now means the year that model first shipped: the Trezor Safe 3 counts from 2023, not the Model One of 2014.
  • ChangedVendor independence, owner ruling 2026-10-01: firmware that is a published, signed file the device verifies itself, installed by an open-source path with no live maker server, is not a maker dependency. Trezor (trezorctl) and BitBox02 (load_firmware.py) score 10; Ledger stays 6, because installing a signing app needs Ledger's live HSM; Passport stays 6, because setup checks in with Foundation's validation server.
  • ChangedPublished hardware_wallet order: Trezor stays #1 (81). BitBox02 #2 and OneKey #3 hold; Keystone rises from #5 to #4, Blockstream Jade from #8 to #5 and COLDCARD from #10 to #7; Ledger falls from #4 to #6, Cypherock from #6 to #10, SafePal from #9 to #12 and Tangem from #7 to #14. Foundation Passport enters at #8 and KeepKey at #9. No other category moves.
  • AddedFoundation Passport is ranked, graded on the Passport Prime ($349). KeepKey is ranked too: its earlier refusal rested on being outmatched on two broad axes, and on the four ladders it has no refusal ground (no secure element, but firmware rebuilt and matched, independent wallets, and no fund loss since 2015). NGRAVE ZERO and imKey are refused: neither names a secure element a certification body lists, and neither publishes device code, so there is nothing to look up or rebuild. SATSCARD and Opendime are refused because their keys leave the device, under the restored scope rule; Krux and Specter DIY because they are builds, not products. Every refusal is rewritten in the terms of the four criteria.
  • ChangedFind my best: "Air-gapped signing" and "Bitcoin only" were boosts of 3 points each and are now published requirements (SITUATIONAL_REQUIREMENTS) on the priced model's facts airGap and bitcoinOnlyBuild (an official firmware supports Bitcoin alone, shipped that way or installable by the owner). "Other chains too, such as Ethereum" is a new requirement on nonBitcoinChains, which removes Blockstream Jade and COLDCARD. The 2-point "Fully open-source" boost became "Firmware I can verify", which marks firmware anyone can rebuild as required (its weight doubled). The importance question is replaced by the priorities step, one card per criterion.
  • ChangedCOLDCARD's July 2026 seed-generation loss (Coinkite advisory, 30 July 2026: firmware before 5.6.0 weakened seeds made on Mk4, Mk5 and Q to about 72 bits, and attackers stole funds from weak seeds; no model-by-model victim list is published) scores 1 on the fund-loss ladder, fixed and remediated. Its score is not capped further, since that would count the loss twice; a dated warning leads its row and its verdict.
  • ChangedCorrected 2026-10-14: the lines above left out GridPlus Lattice1, whose score rose from 47 to 52 (#12 to #11). Every published hardware_wallet row this version moved, rank and score before and after: Trezor #1 84 → #1 81; BitBox02 #2 78 → #2 73; OneKey #3 76 → #3 73; Keystone #5 63 → #4 70; Blockstream Jade #8 56 → #5 70; Ledger #4 65 → #6 65; Coldcard #10 50 → #7 65; Foundation Passport enters at #8 (65); KeepKey enters at #9 (62); Cypherock X1 #6 62 → #10 61; GridPlus Lattice1 #12 47 → #11 52; SafePal S1 #9 52 → #12 48; Tangem #7 62 → #14 41; NGRAVE ZERO leaves the ranking (was #11 at 48). CoolWallet keeps #13 at 45.
Version2026.10.1Published2026-10-01Approvedmathias-siemonsmeier

Layer-2 chains: an eighth criterion, a fast-exit requirement, and published friction rules

Effective 2026-10-01 to 2026-10-01, superseded by 2026.10.2. Overall ranks and Fit ranks in the categories below were scored under this version from its publish date; the measured effect on each order is stated in the changes.

Layer-2 chains gain an eighth criterion: whether you can force a transaction in if the sequencer stops or censors you, read from L2BEAT's sequencer-failure entry. The weights were re-set by three model runs, each reading from one angle, and a fourth that judged them, and safety now carries 66 of 100 points. The Find my best answer "Fast, trust-minimised exit to Ethereum" becomes a requirement: it shows ZK rollups only. Experience-gated friction moves are now a published list.

Rationale

A chain where users cannot force a transaction past a censoring sequencer is less safe to leave than one where they can, and L2BEAT records it for every chain; the owner approved it as the eighth criterion on 2026-10-01. A fast exit is a requirement rather than a preference: an optimistic rollup holds native withdrawals for about seven days, so a +2 for ZK rollups could never honestly serve that reader. The friction moves were the last answer-gated score changes the methodology page did not show (CT-METH-021).

Changes
  • Addedl2_chains criterion sequencer_failure (12): 10 = forced inclusion through Ethereum within a day or a decentralised sequencer set rated good; 8 = forced inclusion after a longer delay; 5 = an L1 queue or log the sequencer must eventually process but cannot be forced to; 0 = no mechanism. 15 rows quoted from L2BEAT's API, matched by a live re-fetch on the read date (0 differences on any scored entry).
  • Changedl2_chains weights: proof system 18, withdrawals if the operator stops 18, Ethereum data availability 14, sequencer failure 12, exit window 10, EVM equivalence 10, maturity 10, rollup stage 8 (was 18/18/15/–/6/17/12/14). Three model runs proposed them (withdrawal safety, builder, minimal change) and a fourth, judging the three, set them; its exit window of 8 left the #1 resting on a 1.6-point margin that one one-point move in proof system or proposer failure would overturn, which the brief forbade, so exit window takes the safety lens's 10 and stage, which every lens found double-counted, gives 2.
  • ChangedPublished l2_chains order: the #1 does not change (Arbitrum One 81, OP Mainnet 80). Starknet rises from #10 to #8, Mantle from #12 to #10, and Linea falls from #9 to #12 because it has no forced inclusion. No other category moves.
  • ChangedFind my best: "Fast, trust-minimised exit to Ethereum" removes every chain that is not a ZK rollup (structuralFacts.rollupType must be zk) and replaces the +2 for ZK rollups; it also no longer up-weights proof system and exit window, since the filter already decides what those weights leaned towards. The results page lists each removed chain with its reason under "Removed by your requirement", the coverage line and timeline count the removals apart from the country's, and the inputs table shows the answer as a filter (decision layer 1.1.0). The explorer's quick question applies the same requirement and says how many rows it removed. Replaying the 2,217 golden cases, one winner changes: that answer now leads to Scroll.
  • AddedExperience-gated friction moves (three deductions for a reader new to crypto; a floor and one deduction for an experienced reader) are a published list (FRICTION_ADJUSTMENTS) that scoreFriction applies and /methodology prints. The 2,217 golden cases replay unchanged.
  • AddedThe arithmetic for attributes you mark required or preferred, where a category's scorer has no branch for your answers, is published on /methodology (ATTRIBUTE_FIT_RULE): required attributes share 24 points and preferred ones 16, each scaled by the provider's strength; a missing required attribute costs 4, and missing more than half caps the dimension at 8 of 40. These numbers applied before and were shown nowhere; no score changes. check-no-shadow-adjustments now reads each scorer separately, follows answers through destructuring, loop variables and derived locals, catches floors, caps and ternaries, and exempts the two attribute channels only while this rule is printed.
  • ChangedCorrected 2026-10-14: the lines above did not name every l2_chains row this version moved. Each, rank and score before and after: Unichain #5 74 → #5 75; Arbitrum Nova #6 72 → #6 73; Scroll #7 70 → #7 71; Starknet #10 63 → #8 63; zkSync Era #8 63 → #9 63; Mantle #12 58 → #10 62; Taiko Alethia #11 61 → #11 59; Linea #9 63 → #12 57; Blast #13 43 → #13 47; Manta Pacific #14 41 → #14 43. Arbitrum One, OP Mainnet, Base, Ink and Polygon zkEVM keep their rank and score.
Version2026.10.0Published2026-10-01Approvedmathias-siemonsmeier

Layer-2 chains are ranked on whether you can leave with your funds

Effective 2026-10-01 to 2026-10-01, superseded by 2026.10.1. Overall ranks and Fit ranks in the categories below were scored under this version from its publish date; the measured effect on each order is stated in the changes.

Layer-2 chains move from three criteria to seven. Four new ones read L2BEAT's own risk entries: rollup stage, proof system, the exit window before an upgrade, and whether withdrawals keep working if the operator stops proposing. Together they carry 56 of 100 points. The category now ranks through the same published-criteria engine as the other criterion-ranked categories, every score carries a quote and a source, and Taiko and Ink join the comparison. In the same version, situational adjustments are published and the one adjustment no published fact supported is removed.

Rationale

The three-criterion model ranked a chain whose operator can freeze withdrawals level with one anyone can exit. Blast, whose proof system L2BEAT reads as None, sat at #8 of 13, above Unichain and zkSync Era. The safety facts were already public and dated on L2BEAT, so the model was choosing not to read them. Separately, five quiz answers added points to products through rules the methodology page never showed, and one of them was keyed to a product id rather than to any fact (BC-METH-009).

Changes
  • AddedFour l2_chains criteria with published band ladders: proof system (18), withdrawals if the operator stops (18), rollup stage (14) and exit window before an upgrade (6). EVM equivalence moves 40 to 17, Ethereum data availability 25 to 15 and maturity 35 to 12. Every chain's emergency exit window reads None, so the exit-window ladder also reads L2BEAT's regular, non-emergency upgrade path (Arbitrum One 10 days, Starknet and Arbitrum Nova 7, zkSync Era 4 days 3 hours); data availability separates full transaction data (10) from state diffs only (9, L2BEAT: Onchain (SD)). A stage L2BEAT marks Under review keeps its last score for at most one 45-day cycle and is never interpolated.
  • Changedl2_chains ranks through scoreCriterionObjective on fitStrength, like the other criterion-ranked categories; the hand-written structural scorer is deleted. All 105 criterion scores across 15 rows carry a quote and source in research-pending/rereads/2026-10-01-l2_chains.json; 131 of 135 quotes re-fetched verbatim on the read date, and the four behind a bot wall or a JavaScript shell were read by the adversarial model run.
  • FixedFour facts corrected on the read: Scroll, Mantle and Blast are EVM-compatible, not equivalent (their own documentation, and for Blast live RPC probes); Starknet's public mainnet opened to users in 2022, not 2021. Arbitrum Nova's data has gone to Ethereum as blobs since 31 August 2026, and the row now leads with the Arbitrum DAO's decision to minimise it.
  • FixedThe old scorer credited Ethereum data availability whenever the data-availability text contained the word "ethereum", so Arbitrum Nova's committee ("…Ethereum L1 rollup fallback") and Polygon zkEVM's off-chain data ("…Ethereum L1 before the sunset") both scored full marks. Data availability is now a quoted L2BEAT reading.
  • ChangedPublished l2_chains order: Arbitrum One stays #1 and is no longer tied (81 to OP Mainnet's 80): its regular upgrade path leaves users 10 days to exit, where every OP Mainnet upgrade is instant. Until now the published tie order put it first. Base rises to #3, Ink enters at #4, Unichain rises from #9 to #5, Arbitrum Nova falls from #3 to #6, Mantle from #6 to #12 and Blast from #8 to #13. No other category's published order or score moves.
  • AddedTaiko (Stage 0, validity proofs, proposing whitelisted with no fallback) and Ink (Stage 1, permissionless fraud proofs) are ranked. World Chain is refused on scope: L2BEAT records 90.7% of the value it secures as WLD, and its protocol gives World ID holders top-of-block priority.
  • AddedSituational adjustments are published on every methodology page that has one (situationalAdjustments.ts): six rules across l2_chains, dex and hardware_wallet, each naming the answer, the fact it reads and the points. They now also apply on the criterion path, inside the same 40-point cap. check-no-shadow-adjustments fails the build on any id-keyed or unpublished signal bonus.
  • RemovedThe +3 Solana bonus keyed on the product id jupiter-ag: no published fact supported it. Replaying the 2,217 golden cases, one order changes (dex_aggregator, Solana chain answer: Jupiter falls behind KyberSwap) and no winner changes in any case; the four l2_chains cases keep Arbitrum One as the pick.
  • FixedThe fallback list shown when no product serves the visitor's country used its own copy of the scorer dispatch, which never learned about the criterion-ranked categories: twelve categories ranked there on attribute maps their methodology no longer publishes. It now uses the same objective as the ranking.
  • ChangedCorrected 2026-10-14: the lines above named eight of the l2_chains rows this version moved and left out Linea, Manta Pacific, zkSync Era, Starknet and Polygon zkEVM. Every published l2_chains row it moved, rank and score before and after: Arbitrum One #1 84 → #1 81; OP Mainnet #2 84 → #2 80; Base #4 73 → #3 77; Ink enters at #4 (76); Unichain #9 62 → #5 74; Arbitrum Nova #3 79 → #6 72; Scroll #7 73 → #7 70; zkSync Era #10 61 → #8 63; Linea #5 73 → #9 63; Starknet #12 53 → #10 63; Taiko Alethia enters at #11 (61); Mantle #6 73 → #12 58; Blast #8 68 → #13 43; Manta Pacific #11 54 → #14 41; Polygon zkEVM #13 41 → #15 41.
Version2026.09.16Published2026-09-30Approvedmathias-siemonsmeier

A discontinued product is listed for reference but never recommended

Effective 2026-09-30 to 2026-10-01, superseded by 2026.10.0. Overall ranks and Fit ranks in the categories below were scored under this version from its publish date; the measured effect on each order is stated in the changes.

A row recorded as no longer operating (sunsetAt) now sorts below every operating row before any other order key, and the questionnaire never offers it as the pick, an alternative or the runner-up it measures confidence against. It stays in the full list at the bottom, labelled "No longer operating". Published orders do not move: all twelve discontinued rows already sat below every live row in rankings.json.

Rationale

The charter rule is that an inactive provider must not remain an ordinary Find My Best winner, and 2026.09.3 promised this decision its own entry. The objective score of 0 a sunset row receives kept it last in every published order, but not in every personalised one: the region-tag data sourced on 2026-09-30 left a US reader of options_vaults with one operating row, SOFA, whose tag has no source and which the O-04g key therefore sorts below sourced rows, and Stryke, whose SSOVs closed on 2024-02-23, became the #1. A score that happens to be low is not a rule; a first order key is. Whether a discontinued row should appear in published rankings at all is a separate owner decision (sunset option A/B) that this entry does not take.

Changes
  • AddedOrder key 0: sunsetAt set sorts below sunsetAt unset, ahead of the O-04g unsourced-availability key and the weighted total. rankings.json is unchanged in all 119 categories (0 order moves, 0 score moves).
  • ChangedThe pick, the alternatives, the confidence gap and the sensitivity sweep read operating rows only. Replaying the 2,217 golden cases, one case changes: options_vaults for a US reader keeps SOFA as the pick with no runner-up, instead of Stryke. Every other case keeps its winner and runner-up.
  • Addedtests/lifecycle-never-wins.test.ts, which fails when a discontinued placement is the winner or the runner-up of any golden case, now holds a case that exercised it: it failed on Stryke before this change.
Version2026.09.15Published2026-09-16Approvedmathias-siemonsmeier

Dimension scores carry tenths, and eleven more categories are re-read from primary sources

Effective 2026-09-16 to 2026-09-30, superseded by 2026.09.16. Overall ranks and Fit ranks in the categories below were scored under this version from its publish date; the measured effect on each order is stated in the changes.

Two changes land together. Every dimension score now resolves to tenths of a point rather than whole points (owner decision O-04b), and step 1 of the formula carries weightedTotal to six decimal places so a distance of exactly 2.5 weighted points rounds the same way for the engine and for anyone rebuilding the order from public/data/rankings.json. Separately, every row of cdp_stablecoins, data_availability, decentralised_compute, decentralised_id, depin_networks, kyc_compliance, layer1_chains, mpc_wallets, privacy_tools, revoke_tools and yield_aggregators was re-read on 2026-09-15 against each provider’s own pricing, terms, docs and status feeds, with a second model run re-fetching every quote.

Rationale

Whole-point dimension scores threw away resolution the research already had, and forced the engine to break ties that the criteria themselves could separate. Tenths keep that detail, and the fixed rounding makes the published order reconstructible from the published file rather than only reproducible inside this engine. The two changes are published as one version because they were generated in one run: separating them would state an order that was never served. The re-read evidence is committed per category in research-pending/rereads/2026-09-15-<category>.json.

Changes
  • ChangedDimension scores resolve to tenths of a point (O-04b), and weightedTotal is rounded to six decimal places before the order is read. 518 published scores move across 107 categories that were not re-read; none of them moves by more than 4 points, and most move by 1.
  • Fixed66 published scores change in the eleven re-read categories, against a verbatim source each. The largest moves are Reflexer RAI (−16), Beefy and Unrekt (−11), Aztec (−10) and Golem (+9) — all of them rows whose sources had moved since their last read.
  • ChangedPublished order moves in 38 of 119 categories and three #1s change: smart_contract_audits (Zellic → Certora) and travel_rule_compliance (Sumsub Travel Rule → CodeVASP) on the finer resolution, kyc_compliance (Veriff → Sumsub) on the re-read.
  • AddedavailabilitySource (O-04g): for a reader who states a country, a row whose availability in that country rests on a region tag its record gives no source for sorts below every sourced row. It is inert in every order published here, which states no country.
  • ChangedThe personalised result changes too: replaying all 2,217 golden cases, the questionnaire’s winner moves in 29 of 119 categories — among them bridges (Relay → Across), hardware_wallet (BitBox → Trezor), exchange (Upbit → Bybit/OKX), restaking (Symbiotic → EigenLayer) and liquid_staking (Coinbase → Jito → Lido). The before/after is committed as the diff of tests/fixtures/wizard-goldens.
  • ChangedMeasured cost: answers no longer move the #1 in six categories that are not re-reads of new evidence — privacy_tools, dex_aggregator, hardware_wallet, remittances, cdp_stablecoins and web3_apps — because a finer basis separates those leaders by more than any single answer can close. hardware_wallet had come alive on 2026-09-09; it is inert again. The six are recorded as debt in check-wizard-answers-move-ranking.ts.
  • ChangedCorrected 2026-10-14: every published score in every category was recomputed under this version. The rows whose score or rank moved are summarised in the lines above, not each named.
Version2026.09.14Published2026-09-15Approvedmathias-siemonsmeier

Fourteen more categories re-read from primary sources ahead of their 25 September review date

Effective 2026-09-15 to 2026-09-16, superseded by 2026.09.15. Overall ranks and Fit ranks in the categories below were scored under this version from its publish date; the measured effect on each order is stated in the changes.

Every row of smart_accounts, crypto_neobanks, offramps, defi_dashboards, onchain_analytics, cross_chain_swaps, naming_services, bug_bounties, transaction_simulation, onchain_monitoring, decentralised_storage, rpc_nodes, indexers and mev_protection (105 rows) was re-read on 2026-09-14: pricing, availability and each published criterion score, from each provider’s own pricing, terms, docs, status feeds and on-chain calls, with an adversarial model run re-fetching every quote. 101 rows were confirmed or corrected in full. 130 criterion scores changed, and pricing and availability text no source supported was removed or replaced with quoted text.

Rationale

The site promises a 45-day re-read. Only verified values were applied; where a source supported two bands the lower was kept. A value no primary source could confirm keeps its recorded value and is listed in that row’s structuralFacts.unverified with what was checked. Two providers’ operating status (Secure3, Venn Network) could not be confirmed and is recorded, not sunset. Countries this site cannot match stay in the quoted availability notes rather than in restrictedMarkets. The verified evidence is committed per category in research-pending/rereads/2026-09-14-<category>.json.

Changes
  • Fixed130 criterion scores corrected across the 14 categories, each against a verbatim source; every row’s pricing is dated to the 2026-09-14 read.
  • ChangedPublished order: four #1s change — smart_accounts (Safe → Squads Protocol), crypto_neobanks (Xapo Bank → Revolut), cross_chain_swaps (Relay → Across) and onchain_monitoring (BlockSec Phalcon → Hypernative). 78 published scores move, and the order moves in 12 of the 14 categories.
  • FixedAvailability read from the providers’ terms: LI.FI / Jumper, Rango and deBridge exclude the United States from cross_chain_swaps, as does Xapo Bank; Wirex excludes Canada, Japan, the Philippines, Singapore and South Korea; Nansen excludes Singapore; Kraken and MoonPay off-ramps exclude Japan; MetaMask Transaction Shield excludes the United Kingdom; Banxa’s off-ramp is limited to the regions where its docs list a sell payout rail (Europe and the UK, the US, Canada, Australia and Brazil).
  • FixedPrices re-read where vendors changed them: Alchemy’s Pay as You Go is now a flat $0.525 per 1M compute units; Revolut’s crypto fees are a flat 1.49% / 0.99%; Ormi and GoPlus publish rate cards previously recorded as quote-only; Goldsky’s Starter plan is a one-time $100 credit.
  • ChangedMeasured consequence recorded in the gates: leaders one re-read from changing rise from 39 to 40 (onchain_monitoring firmed up; mev_protection and cross_chain_swaps now lead narrowly).
  • ChangedCorrected 2026-10-14: every published score in smart_accounts, crypto_neobanks, offramps, defi_dashboards, onchain_analytics, cross_chain_swaps, naming_services, bug_bounties, transaction_simulation, onchain_monitoring, decentralised_storage, rpc_nodes, indexers and mev_protection was recomputed under this version. The rows whose score or rank moved are summarised in the lines above, not each named.
Version2026.09.13Published2026-09-14Approvedmathias-siemonsmeier

Fifteen categories re-read from primary sources ahead of their 25 September review date

Effective 2026-09-14 to 2026-09-15, superseded by 2026.09.14. Overall ranks and Fit ranks in the categories below were scored under this version from its publish date; the measured effect on each order is stated in the changes.

Every row of crypto_payroll, simple_buy, smart_contract_audits, defi_insurance, wallet_screening, oracles, block_explorers, prediction_markets, trading_bots, nft_marketplace, yield_vaults, stablecoin_yield, tokenised_tbills, tokenised_funds and tokenised_realestate (122 rows) was re-read on 2026-09-14: pricing, availability and each published criterion score, from each provider’s own pricing, terms, docs and registers, with an adversarial model run re-fetching every quote. 95 rows were confirmed or corrected in full. 114 criterion scores changed, and pricing and availability text no source supported was removed or replaced with quoted text.

Rationale

The site promises a 45-day re-read. Only verified values were applied; where a source supported two bands the lower was kept. A number or score no primary source could confirm keeps its recorded value and is listed in that row’s structuralFacts.unverified with what was checked; an unsupported sentence was removed. One provider’s operating status (Breach Insurance) could not be confirmed and is recorded, not sunset. The verified evidence is committed per category in research-pending/rereads/2026-09-14-<category>.json.

Changes
  • Fixed114 criterion scores corrected across the 15 categories, each against a verbatim source; every row’s pricing is dated to the 2026-09-14 read.
  • ChangedPublished order: four #1s change — simple_buy (Relai → Strike), stablecoin_yield (Ondo USDY → Spiko), smart_contract_audits (Certora → Zellic) and money_market_funds (Fidelity Treasury Digital Fund → Spiko US T-Bills Money Market Fund). Scores move in 16 categories.
  • FixedAvailability read from the providers’ terms: PayPal Crypto is for US residents; Revolut’s simple_buy row is its Cyprus-licensed EEA service; Coinbase USDC rewards are excluded for the EEA, Japan and Vietnam under its exhaustive eligible list; Spiko onboards clients from all countries except a published list (applied to both of its rows, which moves money_market_funds). Countries this site cannot match stay in the quoted notes.
  • Addedsimple_buy for readers outside the named regions is recorded as a thin market with two eligible providers.
  • ChangedMeasured consequences recorded in the gates: leaders one re-read from changing rise from 38 to 39 (simple_buy and prediction_markets firmed up; money_market_funds, smart_contract_audits and wallet_screening now lead narrowly); categories where no wizard answer moves the #1 rise from 56 to 58; stablecoin_yield’s availability dimension no longer separates its rows.
  • ChangedCorrected 2026-10-14: every published score in crypto_payroll, simple_buy, smart_contract_audits, defi_insurance, wallet_screening, oracles, block_explorers, prediction_markets, trading_bots, nft_marketplace, yield_vaults, stablecoin_yield, tokenised_tbills, tokenised_funds, tokenised_realestate and money_market_funds was recomputed under this version. The rows whose score or rank moved are summarised in the lines above, not each named.
Version2026.09.12Published2026-09-14Approvedmathias-siemonsmeier

A tie is decided by the published criteria first

Effective 2026-09-14 to 2026-09-14, superseded by 2026.09.13. Overall ranks and Fit ranks in the categories below were scored under this version from its publish date; the measured effect on each order is stated in the changes.

When two rows share a weighted total, the order between them is now decided first by their unrounded weighted averages of the published criterion scores, under the weights in use. Rows share a total because whole dimension points round their criterion scores together; the averages still separate them. Until this version a generic chain (a price factor, a count of scores at 9 or above, whole dimension points, then the name) decided every tie, and in 62 of the 175 tied pairs with criterion scores on both sides it placed first the row the published criteria rank lower.

Rationale

The order a reader sees should follow the criteria the page publishes wherever the arithmetic can tell them apart. The generic chain still decides a tie where the averages are equal or a row is not scored on its category’s criteria. No score changes: the averages order rows and are never added to a score. The per-category prose tie-break rules are still not applied. Owner decision O-04a.

Changes
  • ChangedTie key: criteriaAverage (unrounded weighted average of the published criterion scores) now comes directly after the weighted total and before the generic factors, in the engine, in formula.tieBreakChain and in the note that describes it.
  • ChangedPublished order: 130 positions move in 46 categories and no score changes. Five published #1s change: wallet (MetaMask → Rabby Wallet), stablecoin_issuance (Anchorage Digital → Brale), options_vaults (SOFA.org → Typus Finance), flash_loans (Dai Flash Mint → Morpho) and tokenised_commodities (Kinesis Gold → Matrixdock Gold).
  • FixedPersonalised weights are no longer rounded to one decimal. Rounding each dimension weight separately changed the ratio between dimensions the reader had not touched (a trust priority turned objectiveFit and quantitative 30:18 into 27.4:16.5), so a stated priority could reorder rows on criteria nobody re-weighted. Published weights are whole numbers, so no published order or score changes from this.
  • ChangedPersonalised orders: replaying the golden answer suite against the fixtures committed with 2026.09.11, 1,002 of 2,217 cases change their order and 181 their #1 (21 of them country briefs), mostly where answers leave rows tied on whole points and the criteria now decide; 45 change their confidence label. The tie key changes no score; the unrounded weights can move a reader’s weighted total, and with it their Fit for you number, by a small amount.
  • Addedcheck-tie-order-vs-criteria: the count of tied pairs ordered against the published criteria falls from 62 to 0, and its ceiling is now 0. check-wizard-answers-move-ranking: categories where no answer moves the #1 fall from 58 to 56.
  • ChangedCorrected 2026-10-14: every published score in automation_keepers, bridges, cdp_stablecoins, cross_chain_swaps, crypto_neobanks, exchange, fixed_rate_yield, flash_loans, gift_cards, governance_tools, indexers, launchpads, lightning_payment_infrastructure, lightning_wallets, liquid_lockers, liquid_staking, market_data_apis, mining_pools, mpc_wallets, naming_services, nft_lending, options_vaults, privacy_tools, proof_of_personhood, relayers, rollup_as_a_service, sentiment_analytics, shared_sequencers, smart_contract_audits, socialfi, stablecoin_issuance, stablecoins, structured_products, subscriptions, tax_software, token_launch_platforms, token_standards, tokenised_commodities, trading_bots, trading_tools, transaction_simulation, travel_rule_compliance, wallet, wallet_screening, web3_apps and yield_aggregators was recomputed under this version. The rows whose score or rank moved are summarised in the lines above, not each named.
Version2026.09.11Published2026-09-14Approvedmathias-siemonsmeier

Confidence no longer calls a tied or one-move lead decisive, the agent API returns the published order, and the golden country briefs carry what the wizard sends

Effective 2026-09-14 to 2026-09-14, superseded by 2026.09.12. Overall ranks and Fit ranks in the categories below were scored under this version from its publish date; the measured effect on each order is stated in the changes.

Find My Best no longer calls a lead “decisive” or “strong” when the top two print the same score, or when the #1 is the published leader that the one-point robustness sweep found one move from losing first place; such leads are capped at “moderate”. /api/agent-query, /assistant and /api/v1/recommend now return ChainChoice’s published order instead of an agent ranking over a hand-typed catalogue, and outcome rates are withheld below a sample of 30. rankings.json now states the score transform the engine actually runs and computes each tie note from the two tied rows, and the golden fixtures’ country briefs were corrected to the signals the wizard sends. No published order or score changes in any of the 119 categories.

Rationale

Each part corrects something that stated more than the engine does: a confidence label over a tie or a fragile lead, an API pick the published ranking does not make, a formula text describing a removed branch, a tie note claiming the criteria did not separate rows whose criterion scores differ, and fixtures that froze a #1 no reader receives. Measured by replaying the golden suite against its committed fixtures: outside the country briefs, no order, winner, eligibility count or exclusion count moves, and the only field that changes is confidence. The country-brief changes come from the corrected fixture signals, not from an engine change.

Changes
  • ChangedFind My Best confidence tier (W1-05): a lead is capped at “moderate” when the top two print the same score or when the #1 is the published leader that the sweep (rankings.json leaderSurvivesOnePointChange) found one move from losing first place. No order, score or eligibility changes. The replayed golden answer cases change confidence in 59 cases across the 17 categories listed: 44 strong → moderate and 15 decisive → moderate. The results page’s “How close was this call?” label is now read from the recomputed sweep instead of a linear estimate, and on personalised runs it says the sweep was not recomputed for the reader’s answers.
  • FixedGolden country briefs (W1-15), a fixture correction with no engine change: the DE, US and IN briefs now carry the ISO code, country name and questionnaire region the wizard sends when a reader picks a country; before, they carried the ISO code alone. Because availability scoring reads region and country name, 322 of the 342 country fixtures had frozen a different ranked list from the one readers receive (245 differ only in scores, 77 in order, 29 of those in the #1) (for example prediction_markets US: Polymarket, not Kalshi; business_banking US: Mercury, not Meow). The corrected exchange country=IN brief puts Upbit at #1 under the questionnaire region “asia”; the fixture now matches what readers receive, but the availability data behind that result has not been re-checked.
  • ChangedAgent API (W1-16): the pick is the #1 of /data/rankings.json for the category the question maps to. A stated country (the `country` field, or a named country) removes only the rows the engine excludes for that country and never reorders the rest. The retired agent ranking used typed card fees, spreads and APRs, twelve typed 0–10 security scores and a “most secure” objective, and returned Binance as #1 for Germany, where the engine excludes Binance. Responses now carry publishedRank, publishedScore, category and country and state no fee, spread or security score. A question with no published ranking (for example yield on XRP) returns no pick. No published or wizard order on chainchoice.io changes.
  • ChangedAgent API contract (W1-16): provider ids are now the engine’s ids (for example bybit_exchange, okx_exchange) instead of the retired catalogue ids (bybit, okx). The dated yield overlay is looked up by those ids, so a rate stored under a retired catalogue id is not found and no rate is stated for that row. Outcome rates (proceed rates at /api/agent-recommendations?stats=1, accuracy and archetype-cohort retention at /api/outcomes) are null below n = 30 and carry sampleSize and windowDays. API fixture diff: exchange binance → bybit_exchange; onramp stripe-crypto → transak; crypto_card gnosis-pay → etherfi_cash; exchange for DE binance → bybit_exchange; store trezor and tax koinly unchanged, now with publishedRank 1; earn XRP nexo → no pick.
  • Fixedrankings.json formula (W1-11), no order or score change: formula.step2_absoluteScore now states the continuous transform the engine has run since af882424; the old text still described the removed `<= 20 ? round(40 + weightedTotal)` branch, which no published row reached (lowest weightedTotal 24). The file now also publishes engineMethodologyVersion and a per-category specVersion alongside methodologyVersion.
  • Fixedrankings.json tie notes (W1-12), no order or score change: each tie note is computed from the two rows. The old note said for every tie that the published criteria did not separate them, and named pricing and evidence depth as what decided the order; the criterion vectors differ in 18 of the 20 ties, and the evidence-depth factor no longer exists. Each tie block names its kind, both unrounded weighted criterion averages and the row the criteria alone prefer, and formula.tieBreakChain publishes the engine’s tie-break keys. tieBreakDecisions.againstCriteria lists the adjacent pairs the chain orders against the criteria: 62 across the catalog, 5 of them at #1/#2 (wallet, stablecoin_issuance, options_vaults, flash_loans, tokenised_commodities). Reordering them is methodology v2, not part of this version.
  • ChangedGolden fixtures re-emitted for this version: against the fixtures committed with 2026.09.10, the 1,875 answer cases differ only in confidence (the 59 above) and in contentHash, which changes in all 2,217 cases because the methodology version is part of the receipt hash. The 342 country briefs differ as described under W1-15.
Version2026.09.10Published2026-09-13Approvedmathias-siemonsmeier

dex, perp_dex and dex_aggregator re-read from primary sources: two closed venues, one replaced product, 69 corrected facts

Effective 2026-09-13 to 2026-09-14, superseded by 2026.09.11. Overall ranks and Fit ranks in the categories below were scored under this version from its publish date; the measured effect on each order is stated in the changes.

The structural facts of all 36 rows in these three categories were last read on 23–27 July. On 2026-09-13 each scored fact was re-read from the protocol’s own docs, terms, audit pages, on-chain calls or DefiLlama’s API, and an adversarial model run re-fetched every source and rejected quotes that were not verbatim or did not support the value. Drift’s program has been paused since 1 April 2026 and Odos shut down trading on 27 July 2026; both still ranked. The Synthetix Perps record described the retired debt-pool product rather than the Ethereum-mainnet order book live today. 69 values changed, and every row is now dated to the day it was read.

Rationale

Only verified values were applied. Where a source supports two bands the lower claim was kept. Three fields no primary source could confirm keep their lower-claim value and are recorded as unverified with the reason (PancakeSwap exploit history, Maverick upgradeability, Aster launch year); Bebop’s MEV protection is set to false because no Bebop source states it. The quotes, sources and the verifying model run’s notes are committed in research-pending/rereads/2026-09-13-dex-perp_dex-dex_aggregator.json.

Changes
  • FixedDrift: sunsetAt 2026-04-01 (Velocity docs: “The Drift program is paused”). Odos: sunsetAt 2026-07-27 (odos.xyz: “Odos trading and API services have shut down”). Vertex: sunsetAt corrected to 2025-07-16, the day trading ceased.
  • FixedSynthetix Perps: perpModel offchain-orderbook, launchYear 2026, auditDepth limited, custody contract-custodied, matching offchain-matched, admin-controlled. It falls from #2 to the floor.
  • Fixeddex_aggregator: Matcha immutable-core (0x Settler contracts are immutable); CowSwap partial open source and a permissioned solver set; 1inch, ParaSwap and UniswapX solvers permissioned; Jupiter closed-source routing; OpenOcean and DODO MEV protection stated in their apps; ParaSwap launched 2019. The published #1 changes from CowSwap to Matcha.
  • Fixedperp_dex: GMX extensive audits, contract-custodied, hybrid matching; Hyperliquid limited audits; Jupiter Perps audited and admin-controlled; Paradex audited, bridged, offchain-matched; Lighter and Aster corrected; market counts and leverage updated from each venue.
  • Fixeddex: Curve exploit severity moderate; Raydium constant-product and admin-controlled; chain counts for Uniswap (45), Curve (27), PancakeSwap (11), Balancer (12), Orca (1); governance text for PancakeSwap and Balancer.
  • ChangedPublished orders move in dex (Curve 54 → 49), perp_dex (Synthetix Perps, Drift to the floor; Hyperliquid 70 → 62, GMX 65 → 60, Jupiter Perps 67 → 60) and dex_aggregator (Matcha #1). Golden fixtures re-emitted.
  • ChangedCorrected 2026-10-14: rows this version moved that the lines above do not name, rank and score before and after. dex: Orca #4 → #3 at 54; Trader Joe (LFJ) #5 → #4 at 54; Velodrome #6 → #5 at 51. dex_aggregator: CoW Swap #1 84 → #3 78; 1inch #2 81 → #2 80; DODO #5 71 → #4 75; UniswapX #4 76 → #5 75; Jupiter #6 68 → #6 67; KyberSwap #7 68 → #7 67; OpenOcean #10 66 → #8 67; Bebop #9 66 → #9 65; LI.FI (Jumper) #12 58 → #10 60; ParaSwap #11 63 → #11 60; Odos #8 68 → #12 41. perp_dex: Helix (Injective) #3 → #2 at 75; dYdX #6 → #3 at 65; Lighter #9 → #7 at 54; Paradex #10 52 → #8 47; Aster #11 49 → #9 41; Synthetix Perps #2 78 → #10 41; Drift Protocol #8 54 → #11 41.
Version2026.09.9Published2026-09-13Approvedmathias-siemonsmeier

Seven perp venues, and GMX’s GM pools, are no longer shown as available where their own terms restrict them

Effective 2026-09-13 to 2026-09-13, superseded by 2026.09.10. Overall ranks and Fit ranks in the categories below were scored under this version from its publish date; the measured effect on each order is stated in the changes.

Gains Network (gTrade), GMX, Jupiter Perps, Helix, Paradex and Lighter carried supportedRegions ['us', 'europe', 'global'] with no availability note, so a US reader was told each leveraged venue was eligible for them; Hyperliquid carried no restriction at all. Each venue’s own terms, rendered and read on 2026-09-13, restrict US persons, and Helix, Paradex and Lighter also Canada, Helix and Lighter the United Kingdom. Each record now quotes its terms page with the date the page states, names as restricted the listed countries this site can match (the full lists stay in the quotes), and drops the US tag.

Rationale

Only what each page states was applied, quoted verbatim. Hyperliquid restricts Ontario, not Canada, so Canada is not excluded for it. Jupiter lists “the Republic of China”, which is ambiguous and not mapped. Synthetix’s website terms list sanctioned jurisdictions only and may not govern its perps product, Drift’s terms now sit on a Velocity Protocol page that did not render, Aster’s terms URL returns 404, and Vertex’s site returns 404; those rows are unchanged and still counted as unsourced.

Changes
  • Fixedgmx_gm_pools (perp_house_vaults): the same GMX terms govern app.gmx.io, where GM and GLV pools are bought; restrictedMarkets United States and supportedRegions [global] → [europe, global]. The 2026-08-17 research found no terms in the documentation and could not render one behind the app; the page dated 20 August 2026 now renders. US readers now have one eligible perp_house_vaults option instead of two (market-coverage ratchet lowered accordingly).
  • Fixedgains-network, gmx, jupiter-perps, helix, paradex, lighter: supportedRegions [us, europe, global] → [europe, global]; restrictedMarkets and a dated, quoted countryAvailabilityNote from each venue’s terms. hyperliquid: restrictedMarkets United States with its terms quoted.
  • ChangedPersonalised perp_dex runs for US readers no longer rank these seven; Canadian readers lose Helix, Paradex and Lighter; UK readers lose Helix and Lighter. The published ranking is unchanged in all 119 categories. One golden case changes its winner: perp_house_vaults country=US, where GMX GM pools is now excluded and Velocity’s insurance fund is the only eligible row. Fourteen other perp_house_vaults cases change only the count of rows whose terms list every country (2 → 1); no order moves. The golden set has no US, UK or Canadian perp_dex reader.
  • Addedtests/leverage-availability.test.ts holds each sourced exclusion and lowers the unsourced leverage-tag ceiling from 19 to 12.
Version2026.09.8Published2026-09-13Approvedmathias-siemonsmeier

dYdX is no longer shown as available where its own terms restrict it

Effective 2026-09-13 to 2026-09-13, superseded by 2026.09.9. Overall ranks and Fit ranks in the categories below were scored under this version from its publish date; the measured effect on each order is stated in the changes.

AffectsPerp DEXs

dYdX carried supportedRegions ['us', 'europe', 'global'] — a literal 92 catalog rows share — with no availability note, so a reader in the United States or the United Kingdom was told a leveraged derivatives venue was eligible for them. dYdX’s help centre (updated 23 April 2026) lists the United States, Canada and the United Kingdom as restricted jurisdictions for the frontends dYdX Operations Services Ltd. operates. The record now quotes that page, names those markets as restricted, and drops the US tag.

Rationale

Only the restriction a source states was applied. Eleven other perp_dex rows and eight options_vaults rows carry region tags with no sourced note; their venues publish terms only inside JavaScript apps, and a restriction list typed from a search snippet would be the invented fact this catalog refuses. They are counted by a test that may only fall (19 today) and queued for re-reading.

Changes
  • FixeddYdX: restrictedMarkets United States, Canada, United Kingdom, from help.dydx.trade (read 2026-09-13); supportedRegions [us, europe, global] → [europe, global].
  • ChangedPersonalised perp_dex runs for US, UK and Canadian readers no longer rank dYdX. The published ranking is unchanged in all 119 categories, and no golden case moves (the golden set has no US or UK perp_dex reader).
  • Addedtests/leverage-availability.test.ts: dYdX is excluded for US, GB and CA and kept for DE; leverage rows with an unsourced region tag may only fall from 19.
Version2026.09.7Published2026-09-13Approvedmathias-siemonsmeier

Two chains called optimistic rollups have no proof system

Effective 2026-09-13 to 2026-09-13, superseded by 2026.09.8. Overall ranks and Fit ranks in the categories below were scored under this version from its publish date; the measured effect on each order is stated in the changes.

Thirteen l2_chains records were re-read against L2BEAT on 2026-09-13 because their oldest evidence had crossed the published 45-day cadence. Eleven agreed on every field L2BEAT carries (category, state validation, data availability, virtual machine) and were re-dated. Two did not: Blast and Manta Pacific were recorded as optimistic rollups, and L2BEAT now lists both under "Other" with State Validation "None" — invalid state roots cannot be challenged, so the fraud-proof guarantee "optimistic" implies does not exist. Both now carry rollupType `no_proof_system`, a value added for exactly this case. Polygon zkEVM, already scored as sunset, now records L2BEAT’s current reading of its data availability (external, custom DA) beside its pre-sunset Ethereum L1 history.

Rationale

A record re-dated without being re-read is a freshness claim nobody made; a record re-read and found wrong is a correction, and is published as one. rollupType is not one of the three published l2_chains criteria, so no published score or order can move. It does feed one personal preference: a reader who says L2 liquidity matters most gives optimistic rollups a +2 fit bonus, and two chains were collecting it for a label the source no longer supports.

Changes
  • FixedBlast and Manta Pacific: rollupType optimistic → no_proof_system, with taglines, descriptions and pricing notes rewritten to L2BEAT’s own classification and a dated correction in each reviewUpdate.
  • ChangedGolden wizard suite: 1 of 2,217 cases moves — l2_chains with l2_use = liquidity, where Blast falls 72 → 69 and stays 8th. The #1 (Arbitrum One) is unchanged, and the published rankings.json is unchanged in every category.
  • FixedEleven records re-dated 2026-09-13 after the re-read agreed; the review-cadence gate returns to its three named overdue categories (bridges, web3_apps, liquid_staking).
Version2026.09.6Published2026-09-11Approvedmathias-siemonsmeier

Availability no longer decides a tie it had already been weighed in

Effective 2026-09-11 to 2026-09-13, superseded by 2026.09.7. Overall ranks and Fit ranks in the categories below were scored under this version from its publish date; the measured effect on each order is stated in the changes.

When two rows tie on the weighted total, `tiebreakDelta` decides which prints first. It carried four factors, and the fourth read `dataConfidence === 'strong'` under the comment "strong evidence confidence". That is not an evidence reading: `dataConfidence` is derived from the availability score, and the interface renders it — correctly — under the label "Market availability". So a row was given an extra point for being available in more places, AFTER availability had already contributed its weight of 20 to the very total the two rows were tied on. Availability decided the position twice, and the second time it did so under a name that said evidence. The factor is removed; the tie-break now reads only advantage on the category’s one comparable pricing basis, the depth of a row’s published strengths, and whether it leads the heaviest dimension.

Rationale

A tie-break exists to separate rows that the published criteria could not. Feeding it a quantity that is already inside those criteria makes the same fact count twice, and the reader cannot see it happen — they are looking at two equal scores and an order that appears to come from somewhere published. Whether availability belongs in the score at all is a larger question this entry does not answer; what it fixes is availability being spent twice.

Changes
  • RemovedtiebreakDelta factor 4 (`dataConfidence === 'strong'`), which read the availability score rather than any evidence measure.
  • FixedMeasured by regenerating rankings.json: 0 of 119 categories change published order and 0 change any score — across all 983 rows the default ranking is untouched.
  • ChangedThe golden wizard suite, which sees personalised runs the published feed does not, moves in 2 of 119 fixtures: bridges (15 of 26 ordered lists, across and base-bridge swap at 2/3) and trading_bots (6 of 23, bitsgap and hummingbot at 4). In BOTH the id-to-score multiset is identical — no score moved, only the order among rows that were already tied.
  • Addedcheck-tiebreak-reads-quality-only fails the build if the tie-break block references dataConfidence, avail.score or availability again, and also if it stops reading its published factors — a tie-break that reads nothing orders by insertion and looks deliberate while being arbitrary.
Version2026.09.5Published2026-09-10Approvedmathias-siemonsmeier

The published review cadence is now one the work actually keeps

Effective 2026-09-10 to 2026-09-11, superseded by 2026.09.6. Overall ranks and Fit ranks in the categories below were scored under this version from its publish date; the measured effect on each order is stated in the changes.

Every category promised a 30-day review cadence. Measured across all 118 categories carrying one, the oldest evidence per category runs to a median of 35 days, p75 37, p90 38. The gate that enforces the promise allows a 7-day grace, so the bar sat at 37 — the corpus p75 — and roughly a quarter of the catalog was out of cadence at any moment by construction rather than by neglect. On 2026-09-10 that showed as 22 categories overdue with nothing changed but the clock, because the corpus carries a large cohort minted on one day and the whole cohort crosses together. The cadence published on every methodology page is now 45 days. At 45 plus the same grace, the overdue set is exactly three categories — bridges, web3_apps and liquid_staking — whose evidence is genuinely 162 days old and whose rows carry no source URL to re-read. The enforcement ceiling FALLS from 7 to 3 as a result, and may only fall further.

Rationale

A cadence is a promise to a reader about how stale the worst record on a page may be, and a promise missed on a schedule is worse than a longer promise kept. Closing the gap by research was measured and rejected as a remedy on its own: it would have meant re-reading 202 stale rows, 28 of which publish no source URL at all, so no amount of work would have brought those inside a 30-day bar. Nothing here was re-dated and no record moved — re-dating evidence that was not re-read is the one thing this codebase refuses outright. The number changed; the freshness did not, and it is the same number a reader can now check us against.

Changes
  • ChangedreviewCadenceDays 30 → 45 across all 119 category specs, and the two prose sites that quoted "the 30-day review cadence" in tokenised_bonds.
  • Changedcheck-review-cadence-is-kept ceiling 7 → 3, negative-tested: restoring a single 30-day promise over 49-day evidence takes it to 4 and fails the build.
  • FixedMeasured by regenerating rankings.json: no category changed order and no score moved, and the golden suite confirms it independently — across all 119 fixtures and 2,217 cases the only fields that differ are methodologyVersion and contentHash. A cadence is a claim about freshness, not an input to any ranking.
Version2026.09.4Published2026-09-09Approvedmathias-siemonsmeier

A tie is no longer broken by comparing one currency against another

Effective 2026-09-09 to 2026-09-10, superseded by 2026.09.5. Overall ranks and Fit ranks in the categories below were scored under this version from its publish date; the measured effect on each order is stated in the changes.

The engine breaks a genuine score tie by relative advantage on the category’s one comparable pricing basis. That basis was already barred from deciding a tie when it is a derived ladder floor (`entryAnnualUsd`), and the rule gave two reasons: the floor rewards a cheap starter tier, AND it is "quoted in whatever currency the vendor publishes, so a tie could turn on an unconverted €39 beating a $49". The second reason is not special to that field, and the guard never checked it. hardware_wallet publishes twelve prices in USD and one in EUR — BitBox at 149, in a field named `oneTimeUsd` — so the tie-break read €149 and $149 as the same number. tax_software is mixed too and never moved, because its basis is `entryAnnualUsd`, which the older half of the same rule had already barred — the two halves were written for one reason and only one of them was being asked. The basis already carried a `currencies` list computed for exactly this question; the guard now asks it. A mixed-currency basis may still inform and display, and may no longer decide. Converting is deliberately NOT the fix: a rate converted at today’s mid-market is a number the vendor never published.

Rationale

A published order must not turn on a unit mismatch. €149 and $149 are not the same price, and a reader cannot see which of two tied rows was put first because one of them quotes in a weaker currency. The alternative — converting — would replace a published figure with an invented one and make the order depend on the day it was built.

Changes
  • ChangedbasisMayDecideRank now returns false when the basis carries more than one currency, alongside the existing entryAnnualUsd rule.
  • ChangedMeasured over all 119 categories by regenerating rankings.json: one category moves. hardware_wallet swaps two pairs, both TIED on score — ledger/coldcard at 67 and tangem/cypherock at 62. No score changed anywhere, and BitBox itself does not move: it is not tied with anyone.
  • ChangedThe golden wizard suite moves in 10 of its 2,217 personalised cases, all in hardware_wallet, and every one is a pair on an identical score (67/67, 62/62, 80/80).
  • Addedtests/economic-semantics.test.ts asserts that a mixed-currency basis cannot decide rank, and pins the two categories that are mixed — so a future record that quietly adds a second currency to a third category is caught rather than silently reordering it.
Version2026.09.3Published2026-09-06Approvedmathias-siemonsmeier

The country gate reaches every country the questionnaire offers

Effective 2026-09-06 to 2026-09-09, superseded by 2026.09.4. Overall ranks and Fit ranks in the categories below were scored under this version from its publish date; the measured effect on each order is stated in the changes.

The eligibility gate now reads the decision layer's country verdict for every row before anything is scored. Until now the engine excluded a row only when the visitor's country was one of the 27 the region table maps; a visitor from any of the other 33 questionnaire countries — India, Nigeria, New Zealand, Hungary among them — was ranked against providers whose own market list omits their region, labelled "verify availability" as if it were unknown. The verdict is the same test on the 27 mapped countries (identical on all 26,217 country-by-row pairs) and resolves the other 33 through the wizard's own region at region resolution, which the verdict says. Only an ineligible verdict excludes; unknown is kept and labelled, exactly as before.

Rationale

The wizard tells the visitor it filters to providers they can sign up for. For 33 of the 60 countries it offers, it did not — the gate silently treated "not mapped" as "eligible", which is the conversion this platform's rules forbid in both directions. The verdict already existed, was published on every result as a label, and disagreed with the ranking it sat beside. A label that says "does not list your region" above a row ranked #1 for you is a ranking that contradicts its own evidence.

Changes
  • ChangedThe gate moved from scoreAvailability to collectProducts and reads assessCountry from the decision layer. It runs for all 60 questionnaire countries: the 27 mapped ones at country resolution, the other 33 at the wizard's region resolution (an EU member the table does not map is credited with an "eu" tag; Ukraine is not).
  • ChangedMeasured effect over every category by every questionnaire country (6,959 runs): 807 runs change, in 29 categories and 48 countries; 2,182 rows leave ranked lists and 73 runs change leader — none of them a published, no-answer ranking, which are untouched by construction. Survivors keep their relative order in every run.
  • Changed19 further runs — bill_pay in 18 countries, crypto_card in New Zealand — now leave nothing eligible and show the pool for reference. Those rows had been ranked as recommendations with a "not confirmed" label; each is now labelled with its own verdict ("names Hungary as a restricted market", "lists its markets and your region is not among them") and the result says nothing is available rather than "limited availability".
  • FixedA restriction sentence is now matched word-bounded ("Niger" no longer matches "Nigeria"; "US" matches "US persons", not "industrial"). Previously a substring test.
  • Changedpayment_gateway keeps its merchant-region test and applies the country verdict on top, so the one placement the default merchant-region signal turns away (coinbase, US-only) stays out of the published order for the same reason it always was.
  • ChangedExplicitly NOT excluded: a row whose liveness verdict is "discontinued". Six categories rank a sunset row at score 0, kept for reference, and dropping it would change a published order. That is a separate decision and will carry its own entry.
  • Addedcheck-wizard-country-excludes gains a second clause for the unmapped countries (NG, IN, NZ, HU): no row the verdict calls ineligible may rank in a normal run, and a fallback run may only exist when nothing was eligible or unknown. Verified to fail with the gate disabled: 526 violations.
Version2026.09.2Published2026-09-02Approvedmathias-siemonsmeier

Twenty points that ordered nothing leave the total

Effective 2026-09-02 to 2026-09-06, superseded by 2026.09.3. Overall ranks and Fit ranks in the categories below were scored under this version from its publish date; the measured effect on each order is stated in the changes.

profileFit is no longer weighted. It took two values across 934 rows — 14 everywhere except the twelve payment_gateway rows — and was constant inside 114 of 114 categories, so its 20 of 106 points moved every product in a pool by an identical amount and never once decided an order. The published total is now 86 points across five dimensions. profileFit is still computed and still shown in every breakdown; it simply no longer pretends to rank.

Rationale

The dimension asked how well a product matches the visitor's profile, and the catalog cannot answer: supportedEntities is present on 148 of 922 rows and varies inside only 5 categories, and the profile vocabulary in bestFor separates both poles in 8 of 113 — eight rows name beginners, five name advanced users. Filling that gap by inference would print the invented number this platform exists to avoid. The questions behind it are not inert: experience_level reaches the ranking through the criterion weighting inside objectiveFit, where beginner versus advanced changes the score in 27 of 114 categories and changes the order in all 27. The signal already works, through the dimension that separates.

Changes
  • RemovedprofileFit removed from the weighting. The published composite is now availability 20, objectiveFit 30, frictionFit 10, trustBonus 8 and quantitative 18 — 86 points, down from 106.
  • FixedA stated priority for support raised profileFit, routing a visitor's answer into a dimension that could not move a result. It now raises frictionFit, where getting started and getting help are scored.
  • ChangedMeasured effect: 15 of 114 categories reordered and 3 changed leader (institutional_custody, payment_gateway, business_banking). Every one of the 36 swapped pairs sits within 0.02 points of 86 of its partner — products that were numerically tied before and after.
  • ChangedThe sensitivity analysis and the per-dimension breakdown no longer offer profileFit as a lever, since re-weighting a term that carries no weight cannot change an outcome. The breakdown still shows the number, labelled "shown, not scored".
  • FixedThe display rescale divided by a hardcoded 106 while the weights summed to 86, so the published band no longer spanned the achievable range. It now derives the divisor from the weights. Every score rose by 0 to 5 points, median 4; no category changed order and none changed leader.
  • Fixedrankings.json now publishes the weight profile each category was actually scored with. It was scored on re-weighted profiles — exchange on 24.7/37/9.9/12.3/22.2, not the base — and published only the base, so the first step of the stated formula could not be rebuilt from the file: 98 of 934 products reconstructed, the rest were off by up to 0.15. All 934 now reconstruct exactly.
  • FixedThe gate behind the reconstructibility claim read the published weights, checked they existed, and never used them: it rebuilt only the pool-relative step. A payload declaring a weight the engine had stopped using passed as "934/934 rebuild from the payload's own formula". It now rebuilds the weighted total from the breakdown too, and fails on a tampered weight, a shifted weight and a missing weight profile.
  • ChangedCorrected 2026-10-14: every published score in every category was recomputed under this version. The rows whose score or rank moved are summarised in the lines above, not each named.
Version2026.09.1Published2026-09-02Approvedmathias-siemonsmeier

An empty string matched every market

Effective 2026-09-02 to 2026-09-02, superseded by 2026.09.2. Overall ranks and Fit ranks in the categories below were scored under this version from its publish date; the measured effect on each order is stated in the changes.

scoreAvailability compared each of a product's markets against the visitor's country with String.includes. On the un-personalised path — every /best page, every prerendered route and the rankings.json feed itself — no country is stated, so the needle was the empty string and every market name matched. Two products were silently excluded from every published ranking, and a 20-versus-18 step became "does this row have a non-empty primaryMarkets array".

Rationale

bill_pay/swapin, restricted in the United Kingdom and Hungary, and stablecoin_yield/ethena_susde, restricted in the United States and Germany, are available nearly everywhere else. Both vanished from a catalog whose first rule is that an exclusion is published with its reason. The scoring half awarded six of 106 published points for catalog field population rather than for anything about the product. The country match now requires a stated country.

Changes
  • FixedRestored 2 products excluded from every published ranking by an always-true country match: bill_pay/swapin and stablecoin_yield/ethena_susde. The catalog publishes 934 scored products, up from 932.
  • FixedAvailability no longer awards a primary-market bonus when no country is stated. Measured effect: 2 categories changed leader (tokenised_tbills, tokenised_funds) and 6 reordered below the top.
  • AddedEach category now publishes dimensionSpread in rankings.json — how far each dimension actually varied across its pool. A base weight is how much a dimension COULD move a score; the spread is how much it did.
  • AddedMeasured and disclosed: profileFit takes two values across 934 rows and is constant in 114 of 114 categories, so its 20 of 106 points order nothing. frictionFit is constant in 98 categories, trustBonus in 99, quantitative in 103. objectiveFit alone reproduces the published leader in 103 of 114.
  • ChangedCorrected 2026-10-14: every published score in every category was recomputed under this version. The rows whose score or rank moved are summarised in the lines above, not each named.
Version2026.09.0Published2026-09-01Approvedmathias-siemonsmeier

User sentiment leaves the ranking

Effective 2026-09-01 to 2026-09-02, superseded by 2026.09.1. Overall ranks and Fit ranks in the categories below were scored under this version from its publish date; the measured effect on each order is stated in the changes.

Trustpilot and App Store averages no longer contribute to any score. They remain visible as evidence on the provider breakdown, labelled as context rather than a scored dimension. The quantitative dimension keeps its 0-18 range: fee and regulatory scoring are rescaled to span it, so the balance between the six dimensions is unchanged.

Rationale

Seven of 932 catalogued products carry a Trustpilot figure and six an App Store figure. Every other product received a flat neutral 2 of 5, which moved 919 products by an identical amount and therefore measured nothing. For the thirteen with data, the input imported a third party's star average into a ranking whose entire claim is that it reconstructs from published, checkable inputs. A ranking should not borrow a number it cannot show the working for.

Changes
  • RemovedSentiment (0-5) removed from the quantitative composite
  • ChangedFee (0-8) and regulatory (0-5) rescaled to span the dimension's unchanged 0-18 range
  • ChangedSentiment evidence relabelled "shown for context, not scored" on every surface that renders it
  • FixedEighteen surfaces advertised methodology v2026.04, a version that was never published; all now derive the stamp from this list
  • ChangedMeasured effect: 8 of 114 categories reordered. Two changed leader and both were ties — exchange (Bitstamp and Bybit both 82) and bridges (Across and Relay both 85). No leader moved past a product with a lower score.
  • ChangedCorrected 2026-10-14: every published score in every category was recomputed under this version. The rows whose score or rank moved are summarised in the lines above, not each named.
Version2026.04.0Published2026-04-27Approvedmathias-siemonsmeier

Geofence-aware referral routing

Effective 2026-04-27 to 2026-09-01, superseded by 2026.09.0. Overall ranks and Fit ranks in the categories below were scored under this version from its publish date; the measured effect on each order is stated in the changes.

Outbound provider links now resolve to region-appropriate URLs at click time. US visitors clicking a US-restricted exchange are routed to the operator's US entity (where one exists) or shown a region-block notice instead of a dead link.

Rationale

Providers like Binance, OKX, and Bybit geofence their main domains for US residents. Sending US users to those domains created a broken click-out experience and undermined the recommendation's credibility. The new resolver detects region from the user's declared country (quiz signal) or browser locale and chooses the correct destination.

Changes
  • AddedRegion detection from quiz signal + navigator.language fallback
  • AddedRestricted-market alternates (binance.us for US Binance traffic)
  • AddedBlock UI for restricted providers without a regional alternate
  • FixedRemoved hardcoded /en-US/ path from Bybit Card website URL
Version2026.04.0-launchPublished2026-04-01Approvedmathias-siemonsmeier

Initial published methodology

Effective 2026-04-01 to 2026-04-27, superseded by 2026.04.0. Overall ranks and Fit ranks in the categories below were scored under this version from its publish date; the measured effect on each order is stated in the changes.

First publicly versioned methodology. 11 categories with scoring weights, 5-dimension framework (fees, trust, support, control, liquidity), 6-question default decision flow per category.

Rationale

Launching the platform with a versioned methodology so every future change is traceable. Categories cover the practical entry points for crypto-curious users: exchanges, wallets, cards, on-ramps, staking, lending, tax software, portfolio trackers, payment gateways, bridges, and Web3 apps.

Changes
  • Added11 categories with category-specific scoring
  • Added5-dimension evaluation framework
  • AddedDrift-monitoring infrastructure (saved decisions, weekly cron, score-delta alerts)
  • AddedOutcome-tracking infrastructure (30-day follow-up, public accuracy stat)