Safety Scores Changelog
The active V9 identity and the full numeric V8-and-earlier grading history — every weight change, new pillar or dimension, and structural decision.
What This Controls
Safety Scores Changelog version history
Use this changelog to trace how Pharos changed the related scoring, data-source, threshold, or interpretation rules over time. The latest card below is the current public contract; older entries are retained so historical charts and citations can be read against the rules active at the time.
Primary References
v9.47Inherited upstream reserve gaps count once per upstream causeSep 7, 2026
A dependent's exposure to an upstream with an open reserve gap is one unresolved claim, not one per upstream reserve slice. The backing projection now folds every slice-level reason an upstream raises into a single reason per projected code, source code, and owner on each dependent exposure; the slice paths survive in the causal key. No evidence was added and no score or grade moves: the open data-point count stops multiplying one stale Tether attestation across every USDT holder.
- `projectResolvedUpstreamReserveExposure` (`shared/lib/safety-score-v9/backing.ts`) groups the projected upstream reasons by projected code, source code, and responsibility before emitting them. Previously each upstream reason path became its own `bounded-unknown-reserve-exposure` fact on the dependent, so an upstream on the audited fallback with nine stale reserve slices, reported on both its slice and reserve-envelope paths, put 18 open data points on every direct holder and 36 on a holder reaching it twice.
- On replay of `agents/v9-captures/capture-20260907-0917.json` at clock `1788772631`, open data points fell from 1,280 to 733: `published-evidence-expired` 602 -> 58 and `issuer-undisclosed` 354 -> 351, with `measured-adverse`, `method-unsupported`, `producer-failed`, and `integration-missing` unchanged. 30 assets changed fact counts (the Mento family, cUSD/cEUR, GHO, rUSD, FRAX/FPI, USDD, USDX, ftUSD, reUSD, bnUSD, EURO3, and others), 0 scores moved, 0 grades flipped.
- The trigger was producer-side: on 2026-09-07 one `HTTP 502` from Tether's transparency feed dropped a fresh USDT snapshot from the scoring reserve map because the loader required the latest sync status to be `ok`, sending USDT onto the audited fallback whose Q2 composition is outside the 38-day window. The loader now judges a snapshot on its own warnings (`selectScoringDegradedWarnings`), so a failed attempt that wrote nothing cannot demote the snapshot on disk. That repair cannot manifest in a frozen replay; it needs a real producer cycle.
v9.461Bridge joins and commodity outputs are resolved without synthetic coverageSep 4, 2026
Two evaluator mapping defects are corrected without claiming new evidence. Native issuance rows no longer enter the bridge-exposure completeness join, and physical GOLD/SILVER delivery outputs no longer enter the fiat valuation path. The fixed-input replay therefore closes nine wrongly emitted bridge facts and adds five honest unresolved exit facts; this is an accounting correction and an honest loss of false coverage, not evidence Pharos newly acquired.
- Bridge completeness now excludes reviewed-native selected supply rows from `bridgeControlsByDeployment` in `evaluateV9SubthresholdUnresolvedBridgeJoins` (`shared/lib/safety-score-v9/control.ts`). The route predicate and native-liability boundary are already explicit in `worker/src/lib/safety-score-v9/extension-bridge.ts:116-118` (`isBridgeRepresentationRoute`) and `:975-1008`: native controls remain umbrella facts, but native liability does not create bridge materiality and `bridgeClaimControls` excludes native route ids. This fixes a wrong join; Pharos learned nothing new.
- On replay of `agents/v9-captures/capture-20260904-1100.json` at clock `1788509806`, the bridge correction closed 9 facts (`nonmaterial-bridge-supply-unmatched` on `ausd-agora`, `pyusd-paypal`, `reusd-re-protocol`, `usbd-bima`, `fusd-finchain`, `cusd-celo`, `frxusd-frax`, `usdy-ondo-finance`, plus `missing-bridge-route-rows` on `fusd-finchain`), with 0 replacements and exactly 1 mover: `fusd-finchain` NR -> 46/D. Floors, the completeness predicate, and `unknownBridgeShare` are unchanged.
- Offchain-issuer commodity routes with `outputAssetType: "bluechip-collateral"` (physical GOLD/SILVER delivery) now resolve as `unresolved-asset` in `worker/src/lib/redemption-exit-route-observations.ts` instead of being mapped to fiat. The old mapping allowed `buildOutputReview` to imply a synthetic $1 value for a physical bar; removing that false valuation adds uncertainty rather than evidence. Pharos learned nothing new.
- On the same fixed capture, the commodity correction ADDED 5 facts (`unresolved-exit-output` and `missing-runtime-route-evidence` on `gldt-gold-dao`, `paxg-paxos`, `xnk-kinka`) and moved 2 grades: `gldt-gold-dao` 47/D -> NR and `xnk-kinka` 41/D -> 39/F. This is an honest loss of false coverage, not a newly discovered adverse fact.
- The affected asset set is `cgo-comtech`, `dgld-gold-token-sa`, `ggbr-goldfish-gold`, `gldt-gold-dao`, `gldy-streamex`, `kag-kinesis`, `kau-kinesis`, `paxg-paxos`, `pgold-pleasing`, `xagm-matrixdock`, `xaum-matrixdock`, `xaut-tether`, `xnk-kinka`.
- All measured counts and movers above come from the replay of `capture-20260904-1100.json` at clock `1788509806`. Producer-side repairs in these waves cannot manifest in a frozen replay; they require a real producer cycle before any live observation can change. No external evidence was added by either correction.
v9.46An external validator quorum is a named authority, not an unknown oneSep 1, 2026
Bridge routes whose message validation is performed by an external quorum (a LayerZero DVN set, a Chainlink CCIP DON/RMN, a Bantu AMTP validator group) had no authority model that could express them, so a reviewer who wrote the quorum down with its failure domains and sources still compiled to `unknown` and published an unresolved-control gap on every route the quorum covered. The authority ladder gains a `validator-quorum` rung: known, but weak. It grades at or below a named issuer backend and never above a named multisig.
- `validator-quorum` joins the authored authority-type vocabulary and the compiled authority-model union. It names an external message-validation quorum whose membership rotates and whose individual signers are not accountable parties, so there is no single controller address to record.
- The rung is deliberately weak. On the control-quality ladder it holds the bounded-unknown default, exactly where a named issuer backend sits, and strictly below the concentrated-admin rung a multisig starts from: naming a validation domain can never lift a control into the multisig class. On the route-level weakest-authority merge it sits below `issuer-backend` and above `eoa`, so a route co-controlled by an unattested single key still reports that key as its weakest link.
- Two authored authority types, `bridge` and `custodian`, had no branch in either authority mapper and silently fell through to `unknown`. `bridge` now compiles to `contract` (the treatment `timelock` already takes) and `custodian` to `issuer-backend` (the grouping the issuer authority-key derivation already applied to it). No active asset authored either value, so this closes a latent defect rather than moving a published score.
- Measured over the 2026-09-01 production capture: 44 `selected-bridge-route-unresolved` and 27 `unresolved-control-identity` facts across 14 assets close, 70 open data points in total, all of them previously attributed to issuer non-disclosure for what was a Pharos schema limit. Control-pillar evidence rises off the limited rung on 10 assets. Three assets gain (cash-phantom 43 to 45, krwq-iq 50 to 53, iauon-ondo 54 to 57 and C- to C); no asset loses a point and no cap changes, because every 55 evidence ceiling the closed gaps carried was already non-binding.
- Independently, an Algorand ASA manager/reserve account that the reviewer read as a single-key issuer-operated account is now recorded as `issuer-backend` rather than `unknown`, matching the treatment its sibling rows on the same profiles already carried.
v9.451An adjudicated mechanism non-disclosure says soSep 1, 2026
A mechanism component the reviewer covered and found unpublished now publishes that finding (the review date, the reason, and the source checked) instead of the generic "not a current known fact" sentence it shared with components nobody has reviewed yet. Scores, grades, owners, and the open-gap count are unchanged by construction: the fact stays bounded-unknown and the gap stays issuer-undisclosed.
- A curated `applicability: "unavailable"` mechanism component carries a written rationale and a cited source. The compiler passed both through for `not-applicable` and dropped them for `unavailable`, so the reader saw only the generic bounded-unknown sentence. The gap message now reads `Reviewed <date>: the <component> input is not published by the issuer. <rationale> Source checked: <url>`.
- The `bounded-mechanism-review` reason-code label changes from "Mechanism review incomplete" to "A mechanism detail is unresolved". The old label was false for the adjudicated majority: their review is complete, and its finding is that the issuer publishes nothing to review.
- Nothing about scoring moves. The fact remains bounded-unknown at the policy bounded-unknown quality, the gap keeps `bounded-mechanism-review` and its `issuer-undisclosed` owner, and the open data-point count is unchanged. `MECHANISM_REVIEW.completionCriteria` already admits a reviewed unavailable disposition that retains the bounded-unknown gap without changing score or grade; this release makes that disposition legible rather than acting on it.
- The same-UTC-day overlay clock guard is untouched. It reports a review the exact admission policy cannot use yet and stays `method-unsupported`; it is mutually exclusive with the adjudicated path, which requires a current overlay.
- Measured over the 2026-09-01 production capture: 183 adjudicated component rows across 98 assets carry a rationale and a source. Replaying that capture against this change produced zero score and zero grade movers.
v9.45Unproven settlement bounds become bounded exit evidence gapsAug 26, 2026
An open operator-batched redemption request queue whose settlement completion bound is unproven is a bounded exit evidence gap, not a measured zero. When that gap is the pillar's score-bearing evidence, Exit floors at the bounded-unknown score under the exit-unverified ceiling and the public card carries an explicit warning; the standalone redemption route is unrated because its capacity is missing.
- The new `unproven-settlement-bound` reason code is owned by Exit and globally bounded: when the flagged route is the pillar's score-bearing evidence, the Exit pillar floors at the policy bounded-unknown score, the existing exit-unverified ceiling applies, and the public label is `Redemption is an operator-batched request queue with no proven settlement bound`.
- As with the existing bounded missing-route treatment, a portfolio whose exit is genuinely scored by another eligible route is neither floored nor capped by an auxiliary unproven-settlement-bound diagnostic; the flagged route stays visible as an excluded trace.
- The v9.44 measured-zero ruling is unchanged. This corrects its input: an observer-synthesized zero standing in for an unproven completion bound is bounded uncertainty, not a measurement. A paused queue keeps the measured pause and the no-viable-exit-path treatment; the marker is withheld unless withdrawal requests are open on-chain.
- The eearn-ember operator-batched queue observer now publishes `unproven-settlement-bound` instead of a synthesized measured zero. The public observation carries no capacity curve; the internal fact retains the schema-required zero point for an observed route, which marker precedence keeps out of scoring and labels as the `unproven-settlement-bound` exclusion in the route trace.
- The standalone redemption route score for this shape is unrated (missing capacity) rather than zero (paired redemption-backstop v4.4).
- On the 2026-08-26 production snapshot, eEARN is the only affected asset and the only projected grade change: Exit moves from 0 to the bounded floor 35, lifting the weighted quality from 59.66 to 71.92, with the exit-unverified ceiling binding the final score at 65: projected 20 (F) to 65 (B-) once the first post-deploy reserve-sync cycle republishes the flagged observation.
v9.44Measured zero-capacity exits remain attributableAug 26, 2026
Exit no longer discards a fully observed issuer or protocol redemption route merely because its executable capacity is zero or below the first material breakpoint. The route remains the attributable primary evidence with a zero route score, its measured capacity and confidence stay public, and a zero pillar emits the explicit no-viable-exit-path reason. Atomic protocol redemptions are no longer misclassified as inherently delayed when deciding whether discounted evidence can receive credit.
- A known zero or immaterial redemption route is retained as measured evidence instead of being relabeled unsupported-same-notional-route. Its score remains zero, so the change repairs attribution and explanation rather than granting exit credit.
- The public trace preserves executable capacity, modeled-request completion, confidence, and the binding zero-capacity cap for both the primary route and alternatives. Zero completion is displayed as 0% rather than being omitted.
- A zero Exit pillar publishes no-viable-exit-path even when an older producer omitted the reason, preventing cards with a numeric zero and F grade from presenting a blank explanation.
- Protocol redemption timing now follows the route's admissible reviewed settlement model. Favorable terms retain the existing 365-day evidence expiry; conservative corrections remain durable. Atomic protocol routes remain eligible for atomic treatment, while queued or delayed routes retain the existing discount and horizon rules.
- On the pre-release production snapshot, nine cards had Exit 0 and four of those paired it with a standalone redemption headline of at least 50. This release removes that semantic contradiction through the paired redemption-backstop v4.39 capacity and settlement correction; it does not infer capacity where none was observed.
- wsrUSD is the only observed grade change on the pre-release production snapshot: its measured $74,992.50 executable capacity is immaterial against the $10 million modeled request, moving Exit from 35 to 0 and the overall score from 45 (D) to 19 (F).
v9.43Tether transparency uses the measured disclosure cadenceAug 25, 2026
The `tether-transparency` adapter now uses the existing 7-day disclosure source-age tier instead of the 3-day dashboard tier. The retained 30-day history contains 24 upstream publications with a 1.00-day median gap and a 3.00-day maximum from the recurring Friday-publish/weekend-skip pattern; that gap landed exactly on the old bound with zero margin, and the 2026-08-16 shift from 01:00Z to 23:30Z consumed the remaining margin. The last publication was 2026-08-21T23:30:02Z, and the first production breach was detected at 2026-08-25T00:11:34Z when warning_count rose from 1 to 2. This is a live-reserve admission policy change, not evaluator arithmetic.
- The seven-day tier accepts the adapter's `collateralizationRatio`, `totalAssetsUsd`, `totalLiabilitiesUsd`, and chain details up to seven days old. Reserve-category percentages remain curated in `liveReservesConfig.params.slices` and do not age with the feed, so the widened clock applies only to the upstream totals and chain details.
- Those totals are currently unscored for a `fiat-cash` asset. The bound therefore protects whether the live snapshot retains `strong` backing evidence rather than assigning points to an otherwise unscored number; for `usdt-tether`, retaining the live path keeps the policy-declared market-anchor premium eligible instead of entering the adequate audited fallback ceiling.
- The adapter declaration is shared by `usdt-tether` and `xaut-tether`. A fixed-input replay cannot observe this producer-admission change because `liveToFallbackCoins` is captured before evaluation: the 2026-08-25 production capture remains byte-identical with zero score or grade movers. The next live capture can retain a source aged 3.36 days instead of emitting `stale-source-data` and falling back.
v9.42A stale audited composition keeps an adequate ceiling, not a limited oneAug 25, 2026
An independently attested reserve composition that is no longer current was priced identically to a partial review: both floored the backing evidence level at `limited`, capping the asset at 69. A complete composition signed and reconciled by an independent attestor is stronger evidence than a partial one even after it ages, so it now carries its own reason with the `adequate` ceiling the policy declares. The evaluator also stops flooring every ceiling reason at `limited` and honours the level each reason declares, which made an existing `adequate` declaration reachable for the first time.
- `reasonClassifiedEvidenceLevel` read `limited` for any ceiling-treatment reason, ignoring the per-reason `ceilingRule.level` the policy already carried. `missing-latest-assurance-report` declared `adequate` and could never reach it, because the implied 69 evidence ceiling always bound below the reason's own 84. The declared level is now used and the weakest declared level still wins; replay shows this alone moves nothing, because every affected card also carries a `limited`-declaring reason
- A stale exposure whose composition was admitted through the audited fallback emits `stale-audited-reserve-composition` instead of `partial-reserve-review`, with a ceiling at the `adequate` rung and public copy that says the audited composition is not current rather than implying the review was incomplete
- The ladder for a stale upstream feed is now graduated rather than a cliff: a current feed scores normally, a stale feed with an independently audited composition is capped at the adequate rung, and no admissible composition at all still falls to the reason-coded floor
- Three assets become rateable that were previously withheld as `insufficient-evidence`: brla-brla-digital to 51/C-, sbc-brale to 50/C-, and wars-argentine-peso to 47/D. This is a deliberate consequence rather than a side effect: if an audited composition is adequate evidence for a ceiling it is also adequate evidence for rateability, and treating the same fact as adequate for one and limited for the other would be incoherent
- On the fixed-input release replay 3 assets move and 3 change grade, all from NR into a rated band. No previously rated card moves
v9.41A stale reserve feed degrades backing instead of erasing itAug 25, 2026
An issuer without prudential supervision could publish an independently attested reserve composition and still be reported as having no reserve composition at all, because admission required supervision and the asset's only other source was a live feed. One upstream feed going stale then removed an entire backing pillar. Such a composition is now admitted one rung down, as static-validated evidence under the shorter composition window, and it keeps the issuer attribution so an expired document is reported as expired rather than undisclosed.
- Admission and strength are separated: an independent audit is evidence about the reserves, prudential supervision is evidence about the issuer. Supervision no longer decides whether a composition is admitted, only the rung it enters at. An unsupervised issuer's audited composition enters as `static-validated` and can never reach `independent` strength through this path, so the supervision gap still costs the asset its ceiling
- The rung is reachable only where a live reserve producer was observed returning nothing for that capture. An asset with no live producer keeps the existing standalone path, and an asset whose producer is excluded from falling back is not rescued
- Audited fallback evidence is emitted with the report's own publisher and dates instead of as an anonymous standalone review, and it carries the 31-day composition window plus the 7-day reporting grace rather than the 365-day audit window it was admitted under, so the rung degrades as the composition ages
- Because the publisher is retained, a lapsed composition now resolves to `published-evidence-expired` rather than `issuer-undisclosed`. The public copy for that value stops stating that an issuer has not disclosed reserves it did in fact publish. Unknown provenance continues to fail closed
- On the fixed-input release replay, 8 assets move and 6 change grade, all upward: fdusd-first-digital, xagm-matrixdock, vnxau-vnx, tryb-bilira, wcop-ripio, and wmxn-ripio flip, with audx-aussie-dollar-token and wbrl-ripio moving inside their grade. Every mover has a live producer that was observed falling back
v9.4Evidence, scope, freshness, and incidents become explicitAug 24, 2026
Safety Score V9 replaces several broad assumptions with reviewed, scope-aware evidence. Exit terms must be established for the scored request, reserve classification and composition age independently, chain maturity follows a dated five-gate review, local controls are charged to the liabilities they can reach, and reviewed incidents enter their owning risk domain. The release also corrects stale oracle-applicability dispositions and distinguishes expired published evidence from issuer non-disclosure. Scores move in both directions because better evidence can remove a conservative penalty while adverse or missing evidence can lower or withhold a rating.
- A favorable faster-settlement term can replace the conservative default only when the exact delay has a review date and source; a conservative correction can still lower credit without asserting a favorable promise. A route whose stress capacity, settlement, or cost is not established receives the explicit bounded-terms-gap disposition: valid partial facts remain visible, but the route is excluded from primary and diversification credit and ordinary uncertainty cannot manufacture a measured-danger F
- Reserve classification remains admissible for 365 days, while reserve composition uses a 31-day window plus a fixed 7-day reporting grace. The clocks apply to live overlays as well as curated fallback rows, so an expired classification cannot remain score-bearing merely because a live adapter supplied percentages
- Chain maturity is now a dated quarterly review with five fail-closed gates: 36 months of continuous production history; a 365-day liveness record; permissionless participation or at least 21 independently operated block producers or finality members; no unilateral instant change path, with L2s at Stage 1 or later and at least a 7-day holder exit; and documented bridge or data-availability dependencies with a holder exit. Cardano, Gnosis, Hedera, Rootstock, Sui, Conflux, and Kaia are admitted; Celo remains excluded after its security-model migration and failed continuity, change-control, and dependency/exit gates
- Oracle applicability now preserves the V9 distinction between a top-level price authority and a genuinely non-applicable path. Stale pre-9.17 dispositions were reviewed asset by asset: a mint, redemption, NAV, or exchange-rate authority is scoreable without fabricated borrower-liquidation branches, while verified adverse evidence and bounded uncertainty retain different cap treatment
- A reviewed control that reaches only one deployment is charged proportionally when its liability partition is complete and reconciled; unresolved or root-reaching controls remain global. Common-control thresholds now count independent root liabilities rather than wrappers or derivatives, same-issuer controls remain diagnostic, and corrected Mento issuer attribution removes a manufactured cross-issuer failure domain
- The evidence-responsibility vocabulary adds `published-evidence-expired` for stale issuer- or parent-published material that Pharos has not kept current. Unknown provenance continues to fail closed under the existing fallback, and the new responsibility changes attribution and public copy without directly changing a score
- Reviewed incidents are typed as control, wrapper-local, operational, or peg events and enter the existing component that owns the risk rather than creating another scoring dimension. Scope distinguishes root-claim, deployment, integration-only, and holder-exit consequences, and remediation evidence preserves active, mitigated, and resolved treatment
- On the fixed-input release replay, 87 assets move and 67 change grade. The mover set contains upgrades, downgrades, newly rated cards, and newly withheld cards, so the release is explicitly not score-neutral
v9.35Deterministic cap reasons and locale-independent canonical orderingAug 23, 2026
Safety Score V9 removes two ways the host environment could influence a published result. When two cap candidates share a limit, the specific observed or withheld fact is now published ahead of the generic absence reason instead of letting alphabetical ordering decide. Separately, every canonical ordering and digest input across compilation and publication now uses a locale-independent code-unit comparator rather than host-locale collation. Cap limits and score arithmetic are unchanged.
- A specific observed or withheld fact outranks a generic absence reason at equal source and limit. Remaining ties fall through to source priority, then locale-independent code-unit ordering of kind and then reason, so the selection stays total and replay-stable
- The candidate dedupe and binding-selection comparators were unified into one ordering function. They previously differed: only the dedupe path applied the final `reason` tie-break, so the two stages could rank identical candidates differently
- On the frozen capture replay (clock 1787500014, 337 cards) no score, grade, or cap limit moves. Exactly one binding reason changes: usdaf-asymmetry publishes `peg-supply-floor-withheld` instead of `missing-applicable-peg`, both 60-point evidence ceilings. The diagnostic `caps[]` ordering also changes on 12 cards (bd-basedollar, deuro-deuro, kau-kinesis, krwq-iq, nect-beraborrow, pht-pht, scusd-rings, usdaf-asymmetry, usdu-usdu-finance, usdxl-last, weusd-picwe and xnk-kinka) where a specific peg reason now precedes `missing-applicable-peg`. Every candidate set is identical before and after; only the order moves, and two consecutive replays are byte-identical
- Canonical V9 ordering no longer depends on the runtime locale. 44 `localeCompare()` call sites across the dependency, exit, scoped-risk and archetype evaluators and the extension-transfer, publication-assessment and supply-attribution publishers now use the existing locale-independent `compareText()` comparator. Two were demonstrably load-bearing: Exit resolved an equal-score route tie before primary and diversification route identity and the ordered route traces were emitted, and the reviewed-transfer sequence feeding `sha256Hex` made a published digest input locale-dependent. A probe with two equal-scoring Unicode route keys selected different primary and secondary routes under `en_US.UTF-8` than under `sv_SE.UTF-8`
- Replaying identical facts can no longer select a different equal-scoring route, reorder a dependency path, or hash a different reviewed-transfer sequence because the host locale changed. Numeric scores and grades are unaffected (this is ordering, not arithmetic), but route and path identity, ordered traces, and their digests can rotate where a previously published non-ASCII or case-sensitive key collated differently from code-unit order. The evaluation-build manifest digest rotates accordingly
v9.34Cap claims become integral, scope-gated, and explicitAug 23, 2026
Safety Score V9 aligns cap outputs and evidence dispositions with their published meaning: cap limits now live in the integral published score space, unrated cards do not assert binding caps, and a pillar-priced signal needs an asserted residual before it can impose a whole-score cap. Absent wrapper facts stop being treated as issuer non-disclosure, and active-depeg peaks resolve through `pegReferenceId`; the release also records the existing policy-declared USDT market-anchor-longevity premium and its non-inheritable public adjustment.
- Candidate cap limits are floored at the published-score funnel before deduplication and selection. Wrapper-local parent measurements remain exact in their own trace, while published cap limits are integral. On the frozen capture replay (clock 1787500014, 337 cards), 0 scores and 0 grades moved; asusdf-astherus 49.55 became 49, susd1plus-lorenzo 43.45 became 43, and susn-noon 61.9 became 61, with no non-integral cap limit remaining
- An NR card no longer reports a binding cap because no numeric score exists for a cap to constrain. syzusd-yuzu was the only affected card; rated scores did not move, all 18 NR cards now report `bindingCap: null` with zero binding flags, and their `caps[]` candidates remain available as counterfactual diagnostics
- Absent custodyEscrow, leverage, and rehypothecationCorrelation profiles on known pure serial wrappers resolve as `not-applicable` rather than `issuer-undisclosed`; strategy vaults retain the latter when disclosure is genuinely missing, and reviewed leverage 1.0 resolves as reviewed/none. Complete wrapper fact sets rise from 1 to 11 of 56, exactly 6 published scores move, all upward: sdai-sky 75 to 78, scrvusd-curve 68 B- to 71 B, sdola-inverse-finance 51 to 54, susdd-tron-dao-reserve 38 F to 41 D, srusd-reservoir 54 C- to 55 C, and susds-sky 75 to 77
- A signal already priced in a pillar can impose a whole-score cap only when `additionalHardCapRisk` asserts the residual risk that remains outside that pillar. The replay moves 0 scores, changes 0 binding-cap identities, and preserves all 15 structural caps; the 9 pillar-priced caps remain grandfathered by the provisional marker still owed per-asset review: seven `centralized-mint:high` caps (cusd-celo, ftusd-flying-tulip, jpym-mento, jupusd-jupiter, rusd-reservoir, usd0-usual, and ussd-sonic-labs), `usdt-tether` at `centralized-mint:low`, and pht-pht at `weak-oracle-branch:critical`
- Active-depeg peak inheritance follows one `pegReferenceId` hop without redirecting child-keyed peg data, supply, or wrapper-local facts. The replay moves 0 scores and 0 `pegMultiplier` values; apyusd-apyx gains a non-binding inherited `active-depeg:f@39` candidate
- The policy-declared `market-anchor-longevity` premium is recorded as a bounded USDT-specific adjustment: 12 points, with `signal:centralized-mint:low` relief from 83 to 87 and a maximum published score of 87. Eligibility remains gated on rank 1, at least 120 months, base score at least 75, exit score at least 70, strong evidence, a clean peg, and `stress-redemption` plus `reserve-reconciliation`; the public 87 does not replace the pre-premium 83 returned for dependency inheritance
v9.33An expired exit-route observation is derated, not discardedAug 21, 2026
Exit-route evidence whose producer window expired now loses credit instead of leaving the capacity denominator, and the published route payload widens so no single route is a tenth of an anchor's evidence. Together these remove a scoring cliff in which an ordinary producer-schedule delay re-graded an asset with no market event behind it, and propagated that move through the dependency graph to everything the asset backs.
- A route whose observation aged past its lane freshness bound is now included at the reviewed `staleObservationConfidenceFactor` (0.6, the same credit other low-confidence observations receive) rather than excluded outright. The factor derates both the route's own score and the capacity it contributes, and the route reports an `observation:stale` cap in its trace. A `missing` observation, no retained evidence at all, still fails closed exactly as before, as does a stale creditable non-atomic redemption, which keeps its stricter reviewed requirement
- The bounded public route payload widens from 10 observations to 24, and its concentration bounds scale with it (per-chain 6 to 14, per-protocol and per-adapter 3 to 7) so the extra slots admit genuinely new evidence. Measured on the live surface the previous bounds were saturated on concentration, not on slot count: usdc-circle, usdt-tether and dai-makerdao each published exactly six Ethereum, three Curve and three Uniswap-V3 routes. Common-mode risk continues to be modelled downstream, where routes sharing a physical resource are grouped and only the strongest member is credited
- The measured-execution freshness ceiling moves from two hours to three, one full publication cycle wider than the two-hour score-bearing Liquidity Score cadence it must cover. At two hours the expiry ceiling equalled the republication period, so one delayed or degraded even-hour publication expired every measured profile simultaneously. Generation retention moves from three hours to four to stay above the widened bound
- Measured on the 2026-08-21 production capture replay (337 cards): no card changes score or grade. The release is score-neutral on a healthy capture by construction: the derate only engages on evidence that the previous rule would have discarded, and the widened payload only engages where the producer had more admissible evidence than it could publish. The policy semantic digest rotates with the added exit key
- A new `dex-exit-route-turnover-watchdog` reports degraded when a coin's published route set turns over substantially between publications, so producer-driven route churn is visible as an operational signal instead of surfacing only as an unexplained grade change
v9.32Mint posture separates missing reconciliation from confirmed exposureAug 21, 2026
The mint component splits the exposed floor by reconciliation evidence, recognizes verified collateral-gated issuance, and extends bounded seasoning credit to eligible adverse postures. Economically unbounded minting with unknown reconciliation now scores 35 instead of the confirmed 25 floor; a collateral-gated path scores 50 below the concentrated-admin rung at 55; and an eligible adverse posture can season without crossing the dedicated 39 ceiling. The release also reclassifies CASH as continuously reconciled and the spUSDC and USDF vaults as raiseable rather than unbounded.
- The reviewed vocabulary gains reconciliation `none` for a positively established absence, cap semantics `collateral-gated`, and the derived postures `unbounded-reconciliation-unknown` and `collateral-gated`; `unknown`, `none`, and `not-applicable` remain distinct findings
- A reviewer's explicit reconciliation `unknown` on a reviewed direct non-backend mint control now compiles through to the evaluator instead of being swallowed by the not-applicable inference, and the facts schema admits that known-review shape: the 9.27 doctrine that a recorded could-not-establish finding beats silence. An absent field keeps the fail-closed inference, issuer-backend minters keep the PoR-derived cadence, and inherited share wrappers keep the wrapper convention
- `unbounded-reconciliation-unknown` maps to the existing Exposed band at 35, while `collateral-gated` maps to the existing Concentrated band at 50. No public band, CSV header, filter value, or saved screener URL changes
- DDR conservatism is preserved: both new postures join the fragile set, only `unbounded-reconciliation-unknown` joins the economically unbounded set, and the K1 risky set is unchanged because both postures land in existing risky bands
- After at least 60 months, a non-active `unbounded-or-compromised` posture and an `unbounded-reconciliation-unknown` posture can earn the existing 10-point seasoned credit without claiming reconciliation. The former uses the dedicated 39 ceiling rather than falling to the generic 34 next-rung ceiling created by the new 35 rung; the latter remains capped at 44 by the ordinary next-rung rule. An active incident remains ineligible
- Curated evidence moves cash-phantom to continuously reconciled `unbounded-reconciled`, and moves susdc-spark plus usdf-astherus to raiseable `partially-bounded-admin`; no broader recuration is part of this release
- Measured on the 2026-08-21 production capture replay: 60 of 337 cards move, all upward, none newly unrated. The Exposed floor shrinks from 78 to 26 cards; 49 assets derive the new unbounded-reconciliation-unknown posture, and 5 not-applicable-reconciliation assets earn the adverse seasoning lift to 35. 23 grades improve (18 F to D, plus susdc-spark D to C+, usdf-astherus D to C, usg-tangent and yusd-yieldfi D to C-, cash-phantom F to D), and the largest single move is susdc-spark 44 to 64
v9.31Curated dependency links share the reserve admission gateAug 20, 2026
Curated basket links no longer assert a dependency relationship when the same reserve composition is inadmissible for Backing and no live reserve slices are present. The dependency overlay now degrades with the reserve envelope, leaving the existing reserve gap to carry the bounded score consequence instead of publishing an unrelated unreviewed-dependency reason.
- When a curated review is stale, incomplete, non-verified, or otherwise fails the existing full-composition admission path, its curated collateral edges are omitted for that cycle when no live reserve slices exist; the reserve envelope continues to publish its existing missing or partial-review gap
- A verified, current curated composition keeps the same basket edges, and live-derived edges plus manual dependency reviews remain unchanged
- No pillar weights, aggregation, caps, grade thresholds, or reason vocabulary changes; the release aligns dependency-edge admission with the reserve-envelope gate
- On the current-tree replay, five affected assets keep their score and grade while six lose the stale dependency reason; jusd-juicedollar moves 40/D to 37/F because removing its expired full-weight curated edge also removes the inherited-backing path. Accepted at release: the 2026-08-20 on-chain re-verification found the StablecoinBridgeUSDT reserve holding ~0.00042 USDT.e against ~10,460 JUSD supply, so the D grade rested on a stale optimistic edge
v9.3A verified absence of privileged mint scores what it provesAug 20, 2026
The mint component's top rung moves from 95 to 100. A derived `none-resolved` posture states that no reviewed control can mint, authorize minting, or expand issuance on this component's scope, so reserving five points at the top of that rung priced a residual the component does not measure. The motivating case is proven outright: LUSD and BOLD resolve `none-resolved` on immutable, owner-renounced deployments where no privileged minter can ever be added, yet their mint component was capped at a ceiling nothing could reach.
- `mintPostureQuality["none-resolved"]` moves 95 to 100; every other posture rung, the reconciled grading rungs, the seasoned credit, and all merged mint signals are unchanged. The ladder keeps its invariants: 100 is the new top rung and bounded credits still cannot lift a lower posture class past the rung above it
- The rung is mint-scoped, as the V9 derivation is: reviewed no-local-issuance wrappers and other assets whose mint component resolves `none-resolved` also take it, whatever their other control domains score. The oracle and bridge tier tables are independent calibrations and are unchanged
- The curated `none-resolved-mint` annotation stays a banding-only value with no quality rung of its own; the depeg resolver consumes posture bands, not component scores, so no DDR verdict input moves
- Measured on the 2026-08-20 publication capture: 30 evaluated assets move their mint component: 29 from 95 to 100 and srusd-reservoir from 92 to 97 through its unchanged -3 merged-signal penalty; 29 of them appear in published control breakdowns (syzusd-yuzu moves in the evaluated set only). Five assets move their Economic Control pillar 95 to 100 (susde-ethena, usdb-blast, usdk-kast, usdn-noble, xo-exodus) and exactly one published score moves, xo-exodus 56 to 57. No grade changes anywhere; usdn-noble's parent cap at 60 becomes its binding cap without moving its published score
- The policy semantic digest rotates because a posture quality value changed; pillar weights, aggregation, caps, grade thresholds, and every score-bearing gate value are unchanged
v9.28Scoped open questions extend to bridge controlsAug 18, 2026
The 9.27 scoped-question contract now covers structured bridge controls. A curated bridgeRouteRisk review can author scopedQuestions, each naming one structured control by its id, its exact label, or its controllerChain:controllerAddress pair, with its own question text, review date, and sources. While such a question is fresh, an unresolved named control takes the 69 control-scoped-gap ceiling instead of the 55 control-unverified ceiling: the same ninety-day freshness window, the same reversion when it ages out, and the same rule that a question softens only the control it names. The compiled bridge fact is the route-level merge of its structured controls, so the merged overlay inherits the marker only when every unresolved contributor on that route is named; one unnamed unresolved sibling keeps the hard treatment, mirroring the mint-authority whole-inventory rule at route granularity.
- bridgeRouteRisk gains scopedQuestions[] with the same shape as mintAuthority.review.scopedQuestions. The schema rejects a controlRef that names no authored structured control, and questions attach nothing to conservative route-derived fallback controls, which have no reviewer behind them
- No scoring policy changes: the scoped-control-question reason, its 69 control-scoped-gap ceiling, and its deployment-control path kind all exist since 9.27, so the policy semantic digest does not move. Only the sidecar vocabulary, the bridge compiler, and the version label change
- The three open questions the aug18 control-research wave could not attach in 9.27 are authored in the same release: usn-noon's Starknet owner account-class identity and Sophon-origin Hyperlane validator operator, and usdat-saturn's CCIP RMN blessing-roster membership
- Measured on the 2026-08-18 publication capture: no score, grade, or pillar score moves. The named controls were already resolved by the same wave's research, so the questions document residual soft unknowns today and bound the downgrade to 69 instead of 55 if any of those controls later degrades to unresolved
v9.27A reviewer-scoped open question is better evidence than silenceAug 18, 2026
Economic Control distinguishes a reviewer who investigated a control and recorded exactly what stays unknown from a control nobody has resolved. A curated mint-authority review can now author scoped questions, each naming one control by chain:address or label with its own question text, review date, and sources. While such a question is fresh, the named control's gap takes the new 69 control-scoped-gap ceiling instead of the 55 control-unverified ceiling. The 9.23 boundary migration had recorded several of these as prose (PAXG's Solana Token-2022 authority was reviewed, dated, sourced, and explicitly retained as an unresolved fact), yet the score treated that documented, bounded unknown identically to total ignorance, publishing an 85 A asset at 55 C.
- The reason registry gains `scoped-control-question` and `namedReasonCeilings` gains `control-scoped-gap` at 69, aligned with the limited-evidence ceiling: a scoped, dated, sourced open question is limited evidence, not absent evidence. All other named ceilings, treatments, weights, and thresholds are unchanged
- A scoped question names exactly one control and softens only that control's gap. The legacy `unresolvedQuestions` list keeps its all-or-nothing semantics unchanged; curators migrate a question to the scoped form only when it genuinely binds one named control
- Freshness is enforced at compile time with a 90-day window: a scoped question whose review date ages past it reverts to the hard 55 ceiling, so a named gap cannot rot as a permanent softener. The gap row stays in the DEPLOYMENT_CONTROLS curation queue throughout
- The whole-asset inventory reason softens only when every unresolved control in the inventory carries a fresh scoped question; one unscoped unresolved control keeps the hard reason for the asset
- Deployment-scoped controls with a null supply share gain a materiality release: when the asset's supply partition is complete and reconciled, the deployment's measured rows (or zero, when a complete partition holds no row for it) bound the share, and a proven sub-threshold bound stops binding the control-unverified ceiling. A missing or unreconciled partition keeps the fail-closed treatment, and global-claim controls are never released by materiality. No currently tracked asset relied on this release at the 2026-08-18 capture; it closes the gap class the 9.26 aggregate-residue fix left open per control
- Reference curation in the same release converts the documented open questions for paxg-paxos (Solana Token-2022 mint authority attribution) and xsgd-straitsx (Hedera supply and admin key attribution) into scoped questions
- Measured on the 2026-08-18 publication capture: exactly two assets move, both upward: paxg-paxos 55 C to 69 B- and xsgd-straitsx 55 C to 69 B-. No other score, grade, or pillar score changes
- Pillar weights, bounded aggregation, grade thresholds, the withhold band, and every score-bearing gate value are unchanged. The policy semantic digest moves because the registry gains the reason and the named-ceiling table gains its entry
v9.26A trace of unmapped bridge supply stops being a material control gapAug 18, 2026
Economic Control grades unattributed bridge supply against the same 10% deployment-materiality floor its per-row check already used. The aggregate check fired on any residue at all, so a rounding tail ($257 of EURC's $470M inventory, $40 of frxUSD's) was published as a material control gap and took the 55 control-unverified ceiling. Because a ceiling-treatment reason also classifies its pillar as limited evidence, the same trace applied the 69 evidence ceiling underneath it, and EURC published C/55 against an 82 it had otherwise earned. Sub-material residue is still published, now as a diagnostic that scores nothing.
- The aggregate unattributed-supply check moves from "any residue" to the deployment materiality floor already applied per row, which is what the reason's own name asserted. Residue at or above 10% keeps the material reason and its 55 control-unverified ceiling unchanged
- Residue below the floor publishes the new diagnostic reason `nonmaterial-bridge-supply-unmatched`, the twin of the existing non-material dependency reason. It carries no ceiling and does not classify its pillar as limited evidence, so the gap stays visible on the card and in the BRIDGE_MATERIALITY curation queue without bounding a score
- The material check no longer consults the subthreshold completeness proof. That proof clears each unmatched row against the floor individually, so rows that are each immaterial could sum past it and still prove complete: harmless while the trigger was any residue, an escape once the trigger is the floor itself. A material aggregate now fails closed on its own terms, and no tracked asset relied on the exemption
- Measured on the 2026-08-18 publication capture: 5 assets change score, all upward, and none worsens or becomes unrated. eurc-circle 55 C to 82 A-, frxusd-frax 55 C to 70 B, pyusd-paypal 55 C to 70 B, ausd-agora 55 C to 63 C+, and ussd-sonic-labs 45 D to 59 C as a strategy-vault wrapper whose frxUSD parent limit rises with it
- Five further assets exchange the material reason for the diagnostic without moving: cusd-celo, eurs-stasis, fusd-finchain, usbd-bima, and usdy-ondo-finance were each bounded by something other than this gap
- usdtb-ethena keeps its 55. Its 11.37% ($45.9M) Solana row matches two curated routes rather than one, which is a genuinely material attribution gap and not a rounding tail
- Pillar weights, bounded aggregation, grade thresholds, the withhold band, and every score-bearing gate value are unchanged. The policy semantic digest moves only because the reason registry gains the diagnostic entry
v9.25Undisclosed stops being published as a fact, in both directionsAug 18, 2026
The published access posture's primaryExit now reads the same route set the Exit pillar credits, and reserves "none" for a reviewed-complete, genuinely empty exit surface. Everything else (routes that exist but earn no credit, and a missing, stale, or unsupported exit surface) publishes the new "undisclosed" state. The derivation previously counted only score-eligible routes, so an asset whose Exit pillar was scoring a reviewed issuer, protocol, or eventual redemption simultaneously published "Primary exit: None", asserting an absence its own scoring contradicted. The same release fixes the mirror-image defect in Economic Control, where a missing reconciliation cadence was read as evidence of a periodic one.
- primaryExit is derived from any credited route: score-eligible, or admitted by the creditable-non-atomic-redemption rule that the Exit pillar already applies to the reviewed issuer-redemption, protocol-redemption, and eventual-redemption families. That rule now has a single definition shared by both surfaces, which is what stopped them drifting apart
- "none" now requires known negative evidence: a required exit surface observed complete with zero routes. A surface that is missing, stale, or unsupported is an absence of evidence and publishes "undisclosed" instead
- accessPostureVocabulary.primaryExit grows from five members to six with the addition of "undisclosed". It is not an unknown value, so it does not enter accessPosture.unknownFields and the detail page renders it as an explicit "Primary exit: Not disclosed" row rather than dropping the row
- Measured on the 2026-08-18 publication capture: primaryExit moves from none 184 / permissionless 146 / eligibility-gated 7 to a distribution in which every card publishing a scored exit route reports the access posture of that route. BUIDL, USDY, USYC, VBILL, JAAA, USDPT, YLDS, and the Spiko and Midas ranges stop asserting that no exit exists
- primaryExit is a published posture projection and not a scoring input. Measured against the 2026-08-18 capture, the posture change alone leaves every pillar score, cap, and grade byte-identical to 9.24; only the policy semantic digest and the version label move
- Economic Control no longer infers a periodic reserve reconciliation from the absence of one. The inference read proofOfReserves.cadence for truthiness, and the sentinel values "none" and "undisclosed" are non-empty strings, so an issuer-backend mint whose issuer publishes no reconciliation at all was graded as reconciling periodically. A dated latestReport, or a cadence that names a real rhythm, still establishes "periodic"; everything else is now "unknown"
- "unknown" rather than a known negative is deliberate: an undisclosed cadence establishes only that nothing is published, never that the issuer does not reconcile internally. The mint reconciliation vocabulary has no member for a proven absence, and inventing one would assert more than the evidence carries. A reviewed economicControlReview.mint.reconciliation continues to supersede the inference, so the gap is closable by curation
- That correction moves three assets on the 2026-08-18 capture, and only downward: a7a5-old-vector 23 to 19 (F, unchanged), cngn-compliant-naira 37 F to NR, and euri-banking-circle 52 C- to NR. Both withholds are the insufficient-evidence path (an F requires an attributable measured-adverse fact, and losing an unearned reconciliation credit does not supply one), so the model declines to rate rather than publishing an unjustified F. No asset improves, and no other asset moves
v9.24A reviewed absence of bridge or local issuance is a fact, not a gapAug 18, 2026
Economic Control now reads three reviewed answers as the measured facts they are. An inventory whose every reviewed route is native issuance is not bridge-exposed even when structured controls govern those canonical deployments; a bridge review whose unattributed supply is immaterial keeps the rows it did review; and a reviewed no-local-issuance exception compiles as a not-applicable mint section when the risk it displaces is carried by a serial-claim parent or by Bridge Risk. The 9.23 boundary release had made each of these compile as missing evidence, collapsing the control pillar to its neutral default and withholding otherwise rateable assets.
- A structured bridge control whose only reviewed routes are native issuance no longer keeps the bridge section applicable, so an asset whose reviewed answer is "no bridge" scores single-chain-or-native instead of the opaque-or-unknown fallback. A reviewed representation route keeps the section applicable even when no control compiled for it, and an unresolved zero-share deployment remains an audit fact rather than proof of no bridge
- A bounded bridge review keeps its reviewed rows when the supply the compiler could not attribute is below the deployment materiality threshold, or when a known supply review selected no bridge route at all. A material residual, an unknown share, and a supply review that is not itself a known fact all keep the previous discard, and every row still fails closed on its own
- mintAuthority.review.noLocalIssuance compiles as the mint review's existing not-applicable state. It is granted only when an inherited claim carries a compiled serial-claim edge to its parent, or an external-only representation carries the reviewed route inventory covering every authored deployment; any authored control keeps the section required
- USDN and USDK are re-curated to hold a serial claim on M0 rather than a copy of M0's collateral composition, ending a threefold count of the same Treasury exposure and scoring the inherited mint risk on the dependency edge. Both are rated D/45, below the C/55 their parent scores, which is the intended result of binding an inherited claim to its parent
- cngn's boundary-migration review questions are recorded as the decided dispositions they were. As open questions they made the mint review incomplete, which zeroed the control's incident state and suppressed the centralized-mint signal carrying the asset's only measured-adverse attribution, so the F-floor withheld a grade the evidence still supports
- Measured on the 2026-08-18 publication capture: 17 assets changed on score-material terms, 9 of them rated again and 8 improving. No asset worsened, none became newly unrated, and no rated asset moved by 10 points or more. Not Rated falls from 25 to 16
- Pillar weights, bounded aggregation, caps, grade thresholds, the withhold band, and every score-bearing gate value are unchanged; only the methodology version label moves
v9.23Mint authority follows native issuance; bridge controls stay route-scopedAug 17, 2026
Economic Control now binds Mint Authority controls to reviewed canonical native-issuance deployments and compiles structured bridge controls separately for each referenced route. A controller may operate in both domains, but a representation or transfer-rail capability can no longer become global native-mint risk.
- Active multi-deployment Mint Authority controls and mutable mint-logic upgrade paths name their reviewed native deployments; inherited or external-only products require an explicit reviewed no-local-issuance exception
- Bridge mint/burn, adapters, lockboxes or escrow, messaging, peer configuration, limits, upgrades, validators, pause, and administrators are authored as structured route-scoped controls, while conservative route-derived controls remain when structured evidence is absent
- The ownership gate blocks active bridge vocabulary in Mint Authority, invalid or non-native deployment references, and duplicate cross-domain bridge capabilities instead of silently filtering them during compilation
- A structured bridge control covering a reviewed bridge- or wrapped-representation route must name that route's bridge-mint holder; otherwise the ownership gate fails closed, because leaving the route unreferenced is what preserves the conservative route-derived mint overlay
- Common-mode evidence for a shared critical control identity is now resolved per receiving asset: a reviewed bounded-unknown member stays measured-adverse, a missing or stale member remains an integration gap, and evidence confidence is high only when the receiving asset's own member facts are known. Previously one bounded-unknown member released the shared-critical-control ceiling for peers whose own facts were known, so weaker evidence could raise a published score
- USDai's satellite OToken administrator exposure remains scoreable under Bridge Risk but no longer classifies canonical Arbitrum issuance as unbounded-or-compromised; the corrected scope moved USDai from D to B
- Across the 375 scoreable assets, 159 changed on score-material terms: 16 improved and 37 worsened, with the rest moving only posture, bridge tier, or compiled capabilities. The distribution is net more conservative, the largest moves being downgrades of 33, 23, and 22 points where satellite bridge machinery had been masking canonical or route risk
- Pillar weights, bounded aggregation, caps, grade thresholds, and non-bridge Mint Authority scoring are unchanged
v9.22Every score-bearing gate rotates the methodology-policy digestAug 16, 2026
Safety Score policy provenance now binds the reshape withhold band, danger and F-grade predicates, material-bridge share band, and score-bearing evidence-expiry windows. Policy-only replay and sensitivity analysis can change those gates through one validated projection and observe a different semantic digest instead of relying on code literals invisible to policy comparison.
- The shared scorer reads withhold, danger, F-only attribution, pre-exit danger, and material-bridge thresholds from the validated score-bearing-gates policy
- Reviewed research, access, research-overlay, mechanism-overlay, issuer-attested reserve, and curated-reserve expiry windows are separately named and included in the semantic digest even where their current values coincide
- The active values are unchanged, so scores, pillars, caps, grades, and evidence freshness outcomes do not move; the policy semantic digest and published score provenance rotate
- Presentation grade bands now derive from the active scoring policy, preventing a second display threshold authority from drifting from the engine
v9.21Reserve classifications follow source identity, not daily weightsAug 16, 2026
A live reserve slice's percentage is now only a scoring weight, never part of the join that attaches reviewed asset class, obligor, liquidity, maturity, or dependency metadata. Adapters can emit a namespace-qualified stable source key; a keyed live row joins one-to-one by that exact key and fails closed on a missing or duplicate reviewed key. Historical unkeyed rows retain a unique normalized-name compatibility join.
- Ordinary issuer rebalancing can no longer turn an unchanged reserve category into bounded unknown merely because its live percentage moved more than a fixed tolerance
- Circle USDC and EURC, Re Protocol reUSD, and Noon's USN now carry adapter-owned source keys on both live and reviewed rows; the same matched identities drive Backing classifications and dependency compilation
- On the current USDC publication inputs, the two drifted Treasury and systemically-important-bank rows leave the bounded 35 floor; the unchanged-pillar counterfactual restores Backing from 68.39 to about 90.02 and the public score from 79/B+ to 89/A+
- Explicit-key mismatches and collisions remain unclassified, newly introduced source buckets cannot inherit metadata by label accident, and live percentages remain the only weights used by scoring
- Pillar weights, reserve quality scores, bounded-unknown floors, score aggregation, structural caps, and grade thresholds are unchanged
v9.2Budgeted DEX observations stop publishing as a data-feed failureAug 13, 2026
Exit gap accounting treats the public route-selection bound as the admitted observation set. A populated p4a.8 surface that already carries its budgeted score-eligible routes is complete even when hundreds of other recognised venues failed target construction or sit behind a reviewed model limit. Leftover `quote-failed` attempts no longer keep a payload-saturated surface open; they still fail closed when the bound is not full. A recognised venue whose only remaining gates are reviewed model limits is method-unsupported rather than producer-failed.
- USDT, USDC, DAI, EURC, and other payload-saturated or fully-carved populated surfaces leave `incomplete-dex-route-coverage` instead of publishing as a data-feed failure
- Exact-route scoring completeness is unchanged: only gap accounting uses the budgeted denominator, so a partial observation set still cannot replace the aggregate DEX path
- Rate-bearing, unsupported-invariant, metapool, and paused/swap-disabled gates on a zero-observation surface are method limits, not feed outages
- Pillar weights, score aggregation, structural caps, and grade thresholds are unchanged
v9.193Reserve freshness follows the accounting state, not its API envelopeAug 13, 2026
DUSD's Makina reserve snapshot now uses the oldest underlying Caliber position-accounting timestamp and the reviewed Machine's three-hour staleness threshold. A newly generated index response can no longer make stale contract accounting score-eligible.
- Makina-indexed balances, AUM, supply, debt flags, oracle values, and redemption state were independently reconciled to Machine and Caliber contracts; the API remains the source of human protocol and strategy labels
- DUSD reserve snapshots become stale when any included position accounting exceeds the Machine's three-hour threshold, even if both API envelopes were generated recently
- Frax, Tether, and USD.AI mixed native feeds retain conservative issuer-attested ingestion provenance and now use proof-style public presentation instead of claiming that the complete feed is independently measured
- Pillar weights, score aggregation, structural caps, and grade thresholds are unchanged
v9.192Reviewed bounded residuals stop publishing as missing dataAug 12, 2026
Two reviewed-but-unproven residuals stop appearing as missing inputs. A current freeze review whose honest verdict is `possible` is measured as `reviewed-possible-access` instead of `missing-access-review`. Independently subthreshold unmatched bridge-supply rows on a resolved chain no longer mint unknown-identity controls, extending the 9.03 D-J dust rule from unrecognized labels to recognized deployments below the 10% floor.
- Twelve assets whose freeze review is current `possible` leave the open-data census for freeze/blacklist; scoring stays bounded-unknown and the verdict is not rewritten to true or false
- Transfer access facts are unchanged: they still require a material-scope bind and do not inherit the freeze disposition
- USDT's 27 unmatched resolved-chain identity facts (Starknet, Metis, Aurora, and the rest of the dust book, each well below 10% of supply) stop publishing as `unresolved-control-identity`; a row at or above the deployment floor still fails closed
- Pillar weights, score aggregation, structural caps, and grade thresholds are unchanged
v9.191Every bounded attribution keeps its owned open factAug 12, 2026
The 9.19 single-count deduplication could collide two distinct reasons that shared a gap identity, keeping the raw entry and dropping the score-bearing one whose bounded-uncertainty attribution then pointed at no owned open fact. On an asset whose mechanism reviews had aged into bounded gaps this made score publication fail its own reconciliation schema. The published fact list now restores any direct reason attribution the deduplication displaced, so every bounded-uncertainty entry reconciles to an owned open fact with its exact code, path, and responsibility.
- Score publication can no longer throw when a mechanism review ages past its window: the far-future regression compiles a full candidate with aged reviews and asserts every reason-sourced bounded attribution reconciles
- Where the collision occurred, both colliding facts are now visible, so an asset's open-fact count can rise by the entries that were previously silently dropped; on the aged-review fixture this is one additional fact
- Current-clock published output is unchanged: the reconciliation fixture pins today's USDC card byte-equal (same grade, same five open facts, same reason codes)
- Attribution semantics, the reconciliation schema, pillar weights, score aggregation, structural caps, and grade thresholds are unchanged
v9.19Open facts are counted once and carry the path that produced themAug 12, 2026
An asset's open-fact mass double-counted every mechanism gap: once through its pillar reason and again through a generic re-emission under a different path, which no consumer could reconcile back to a single gap. The duplicate entries also carried no usable fact path, so a reader could not tell what to disclose to clear them. Separately, a DEX surface on a chain with no registered discovery provider stops being reported as a method floor.
- Each gap is now published once. Deduplication is by gap identity only, so two distinct gaps that share a reason code both survive; entries that carry no gap identity keep their previous behaviour exactly
- Published facts carry the `exactFactPath` the gap constructor already held, so an open fact can be traced to the component that produced it and answered. Three assets whose residual mass was previously unattributable (nopal-nest, ntbill-nest and xusd-babelfish) resolve to their real gaps: for example nopal-nest's seven facts were five real paths plus two re-emissions
- No score, pillar, cap or grade moves: this removes duplicate reporting entries, not scored inputs, and a fixed-input replay confirms score equality
- A DEX exit surface whose deployment census carries no registered discovery provider is attributed `integration-missing` rather than `method-unsupported`, in both the portfolio-coverage and zero-route branches so one condition cannot publish two responsibilities. The chain has deployments and markets; Pharos has not wired a provider for it. `no-exact-capable-venue` remains the genuine method limit and is unchanged
- This supersedes in part the 2026-07-29 ruling that classified the no-provider census condition as a method limit
- Pillar weights, score aggregation, structural caps, and grade thresholds are unchanged
v9.18A reviewed transfer scope no longer depends on third-party chain supplyAug 11, 2026
The transfer scope test proves a review covers material deployments from per-chain supply, which only the DefiLlama list provides. An asset absent from that list had no supply rows, so the test could never be satisfied and an authored transfer review was withheld as unreviewed. A materiality-only on-chain observation now establishes deployment scope for a bounded cohort, and it is structurally walled off from circulating supply and market cap.
- Thirty-nine assets that carry an authored transfer review but no DefiLlama listing can publish that reviewed posture instead of gapping as `missing-access-review`; the remaining assets in the unlisted cohort have no review to admit and stay fail-closed
- Materiality on this path is any deployment carrying non-zero supply, not a share of a summed total. Raw `totalSupply()` is never summed across deployments: for lock-mint and bridged representations the same liability is reported more than once, which would overstate the denominator and could drop a material deployment out of review while still reporting the scope complete
- The observation carries only a deployment key, raw token units, decimals, block number and observation time. It has no USD or price field, so it cannot be consumed by the circulating-supply or market-cap paths, which are unchanged and remain sourced solely from the DefiLlama list
- The path is fail-closed on every leg: a stale generation, a null or unreadable on-chain result, decimals that disagree with the registry, an identity mismatch, a partial deployment read, or a registry or base-input fingerprint mismatch all return the existing `bounded-unknown` result
- The on-chain path engages only where there is no per-chain supply at all; where the DefiLlama list reports supply the existing share-based materiality threshold continues to decide scope unchanged
- Pillar weights, score aggregation, structural caps, and grade thresholds are unchanged
v9.17Oracle applicability no longer implies oracle safetyAug 11, 2026
Economic Control now separates a genuinely oracleless mechanism from privileged internal pricing, while a reviewed not-applicable oracle path is neutral and emits no scored component instead of manufacturing a green 95.
- The combined `oracleless-or-internal` posture is replaced by `oracleless` at 95 and `privileged-internal-pricing` at 45; external-feed tiers and scores are unchanged
- A not-applicable oracle review emits no oracle component and contributes neither credit nor penalty to Economic Control
- A reviewed top-level price authority can be scored without inventing collateral-liquidation branches
- Tori trUSD moves to privileged internal pricing because its backend constructs the economically effective signed-order quote without an independent on-chain feed or collateral-depeg circuit breaker
- Tori's strUSD loss-reporting authority is disclosed separately as wrapper-specific risk and is not attributed to ordinary trUSD balances
- On the 337-card fixed-input replay, 281 manufactured not-applicable oracle rows disappear; after partitioning unrelated registry drift, Tori is the only methodology-attributed score move, from 57/C to 52/C- as Economic Control moves from 70 to 45
- Pillar weights, aggregation, structural caps, and grade thresholds are unchanged
v9.16A reviewed access fact stops being reported as unreviewedAug 10, 2026
Two engine mechanisms made the access branch publish 'we never looked' about assets it had looked at. The transfer scope test is contract-addressed, so a chain-native asset with no contracts by design could never satisfy it; and an inherited freeze verdict whose upstream is not a tracked asset was deleted rather than measured. Both now resolve to an explicit structural fact, and neither invents data where no current review exists.
- A curated transfer review publishes a known posture with the applicability basis `non-contract-native` when the asset offers nothing the contract-scope machinery can address (no supported-chain contract, no material supported-chain supply) and every reviewed deployment sits on a chain outside the supported chain registry. The curated review is then the complete deployment scope, not a partial view of one
- That path is fail-closed on every leg: one supported-chain deployment, any material supported-chain supply, a review touching a supported chain, or a stale or absent review, and the asset keeps gapping as `missing-access-review` exactly as before. Three assets qualify: FUSD on Zano and the two Zephyr protocol assets
- An `inherited` freeze verdict that names no tracked upstream is retained as `inherited-untracked-upstream` instead of being dropped. No upstream id and no failure domain are asserted, because the branch verifies neither; the reach stays `possible` and the gap is the measured `inherited-access-exposure` rather than missing data. Seven assets move: DAI, crvUSD, BUCK, FPI, lisUSD, LUAUSD, and NXUSD
- Freeze facts stay bounded-unknown for scoring; the freeze exposure those seven assets publish moves from `unknown` to the measured `possible`. Transfer facts that become known publish a posture where they previously published none
- Pillar weights, score aggregation, structural caps, and grade thresholds are unchanged; no card changes grade
- The curation incentive is corrected at the source: an honest `inherited` verdict is no longer penalised as an unreviewed asset, which is what pushed the wave-1 over-suppression of 29 verdicts restored in `1134ab32f`
v9.15Stress-state digest removed from published cardsAug 9, 2026
The published card drops `stressStateDigest`. The what-if stress evaluator it identified was never wired into any published surface, and no consumer read the digest.
- `stressStateDigest` is no longer present on Safety Score V9 cards, in the V9 response schema, or in the OpenAPI contract
- No score movement: the field was an identity digest over retained scoring state, never an input to any pillar, cap, or grade
- The unused stress what-if evaluator that consumed the identified state is removed with it
- Pillar weights, score aggregation, structural caps, and grade thresholds are unchanged
v9.14Commodity claims get their own archetypeAug 9, 2026
Gold and silver tokens stop being scored as custodial cash. The new `commodity-claim` mechanism archetype asks the questions the asset actually poses (legal title to identified bars, vault custody continuity, bar-list assurance, and operable physical redemption) instead of reusing the fiat-cash reserve component names and smuggling the real semantics in through a mechanism profile.
- Backing mechanism components for a commodity claim are `title-and-allocation` (0.15), `custody-continuity` (0.10), `assurance-and-reconciliation` (0.13), and `physical-redemption` (0.07), against the same 0.55 reserve weight the fiat-cash archetype carries; title and custody remain the serial claims that fail closed, and title failure keeps the critical unsafe-backing signal
- Physical redemption is now graded in Backing rather than existing only as a profile exit fact. It is stated once: the Exit pillar keeps reading the same curated fact to explain a missing runtime route, so the two pillars cannot disagree and no fact is counted twice
- There is deliberately no price-basis component. A commodity token's reference price is the metal, and the peg layer already measures the token-versus-reference spread; adding a backing component for it would double-count. Price-coupling context belongs in the physical-redemption rationale
- Gold-collateralized dollar tokens are not commodity claims and stay in their dollar archetypes with metal recorded as allocated-commodity reserve; the archetype is for direct claims on the commodity itself
- Commodity-claim components follow the same ratified strict evidence standard as fiat-cash and tbill: they are compiler-bounded, only a source-cited curated overlay may claim them, and insufficient disclosure records a sourced unavailable disposition that stays bounded and non-scoring
- A commodity claim is oracle-free like custodial cash and T-bill claims: nothing is liquidated against a price feed, so the oracle review publishes not-applicable instead of demanding a profile that cannot exist
- Fifteen assets migrate off fiat-cash: XAUT, PAXG, XAUm, XAGm, PGOLD, VNXAU, GLDT, DGLD, CGO, KAU, KAG, GGBR, GRAMG, GRAMS, and XNK. Gold-referenced dollar and franc tokens (USDKG, CHFAU) and tokenized metal ETF shares (IAUON, SLVON) keep their existing archetypes
- Measured over the full active registry at a fixed input, 12 of 337 cards move and none flips a grade. Three lose one point (PAXG 79 to 78, XAUm 73 to 72, VNXAU 71 to 70) where the newly asked physical-redemption question is not answered by the sources already pinned in their reviews. XAUT's exit pillar is unchanged at 35, because the exit fact is now derived from the same curated redemption component rather than declared twice
- Pillar weights, score aggregation, structural caps, and grade thresholds are unchanged
v9.13Wrapper caps follow operator ownershipAug 8, 2026
When a risk-absorption product's taxonomy does not reveal who operates the wrapper, its reviewed operator ownership now selects the existing parent-cap form: third-party wrappers use the strategy-vault treatment, while parent-protocol wrappers keep the native-staked treatment.
- No new cap tier, pillar weight, aggregation rule, or grade threshold is introduced; the change selects between the existing vault and native-staked wrapper treatments
- K3 sBOLD is a third-party wrapper over BOLD and now receives the same vault fallback discount as Yearn yBOLD: on the fixed production replay its parent limit moves from 79 to 74 and its published result moves from 78/B+ to 74/B
- Strata srUSDe is also classified as third-party but remains 52/C- because its own score is already below the parent cap; Aave stkGHO and Sky stUSDS remain parent-protocol wrappers and keep native-staked treatment
- Every risk-absorption variant must now declare `wrapperOperator`; the field is rejected on unambiguous variant kinds, preventing product taxonomy from silently granting a third-party wrapper native treatment
v9.12A resolved mint incident costs a full posture classAug 8, 2026
The resolved-mint-incident decay shipped in 9.1 at the strongest ladder that flipped no grade: a calibration constraint, not a judgment, whose whole effect was one point on one asset. The severity is now chosen on merit: while the incident is recent the mint reads as a concentrated admin, from 24 months as a partially bounded admin, and from 48 months as a bounded admin. Every rung is an existing V9 posture value, and because the last rung sits above every uncapped mint in the incident-carrying set the penalty genuinely expires rather than becoming a permanent tax.
- The resolved-incident cap on the mint component moves from 79/85/90 to 55/70/85 for the recent (under 24 months), aging (24-48 months), and dated (48+ months) tiers; the tier boundaries themselves are unchanged
- One published grade changes: pyusd-paypal moves A- to B (mint 79 to 55, score 80 to 70) on a resolved 2025-10-15 incident. Its cap relaxes to 70 on 2027-10-15 (B+) and to 85 on 2029-10-15, by which point its seasoned-issuer credit has raised its uncapped mint to 84, so A- is fully restored
- One published score changes without a grade change: reusd-resupply 47 to 45, D either way
- usdt-tether, dola-inverse-finance, ousd-origin-protocol, lisusd-lista and the four USDT wrappers are untouched, so the dependency-projection channel is never engaged; dgld-gold-token-sa and nxusd-nereus stay pinned at the unbounded-or-compromised floor
- The decay still measures only the age of the most recent resolved incident, not its severity: an operational error reversed the same day and an exploit with real bad debt take the identical cap. Making the decay severity-aware is a schema change and is not in this version
- The curated `authorityPosture` vocabulary gains two values, neither of which scores. `unbounded-reconciled` ("Unbounded, supervised & reconciled") stops a supervised issuer being annotated with the same value as an issuer with no reconciliation at all; the depeg resolver treats it exactly like `unbounded-or-compromised`, so it moves no depeg verdict. `none-resolved-mint` ("No privileged mint path") is the mint-scoped sibling of `none-resolved`, for an asset no control can mint while other control domains still exist (the scope V9 already derives at, which whole-of-chain `none-resolved` could not express). 14 share wrappers whose own token has no minter move onto it from an adverse posture; the resolver reads it as benign (neither fragile nor risky) and it does not earn the R1 non-inflatable-supply anchor, so two of the 14 change structural stratum and seven lose K1's curated risky-minter leg
- Pillar weights, aggregation, structural caps, and grade thresholds are unchanged
v9.11Unified exit ladder boundary semanticsAug 8, 2026
The shared exit engine's two descending penalty ladders read their thresholds the same way. The queue-backlog ladder already matched at-or-above; the minimum-redeem ladder matched strictly above, so a route whose minimum landed exactly on a boundary took the gentler band. Both now match at-or-above.
- A route with a minimum redemption of exactly $1,000,000 takes the 0.75 capacity multiplier instead of 0.9; exactly $10,000 takes 0.9 instead of no penalty
- Only routes whose reviewed minimum sits exactly on a ladder threshold can move; every other route is arithmetically identical
- The comparison mode is no longer a parameter of the shared band resolver, so the two ladders cannot silently diverge again
- Ladder thresholds and multipliers, component weights, pillar weights, aggregation, caps, and grade thresholds are unchanged
v9.1One mint grader: incident decay, key custody, and quorum granularityAug 8, 2026
The standalone Mint Authority Score is retired and its distinct signals are merged into the Economic Control pillar's mint component. A resolved mint incident now decays instead of disappearing, MPC/HSM key custody reclassifies an externally-owned mint key, multisig quorum granularity replaces a binary strong-quorum test, and Safe module evidence is a small modifier. This is the only deliberate score-moving change in the consolidation wave.
- A resolved mint incident caps the mint component at 79 while recent (under 24 months), 85 while aging (24-48 months), and 90 once dated (48+ months), so it can never score as a clean record; an active incident keeps its unchanged critical path
- An externally-owned mint key takes a 3-point quality penalty that reviewed MPC or HSM custody attestation waives, mirroring the retired engine's issuer-backend treatment
- Multisig mint authority is graded on threshold, signer set, timelock, and Safe module surface instead of a single strong-quorum test; credits are relief against the penalty and can never lift a score above its posture rung
- A reviewed Safe module or guard on the binding mint control applies a 2-point penalty; unknown and not-applicable module surfaces are inert
- 41 of 337 published cards moved their mint component (-1 to -3 points) and 16 moved their published score by one point; every letter grade is unchanged, verified by a full-set replay against the 9.07 release baseline
- The curated `authorityPosture` field no longer affects the Safety Score: V9's derived posture is canonical and a curated-vs-derived disagreement raises a curation-queue item instead. It is still a structural input to the depeg resolver, so re-curating a posture can move a published depeg verdict
- Mint route-family pricing is excluded by design because the cap and claim semantics already price it; pillar weights, aggregation, caps, and grade thresholds are unchanged
- Breaking for header-keyed CSV consumers: the homepage and screener exports rename the `Mint Authority Score` column to `Mint Control Score` and `Mint Authority Band` to `Mint Control Band`. Band keys, filter values, and saved screener URLs are unchanged, and the export provenance line now stamps the safety-score identity instead of the retired mint-authority lane
v9.07Native input pipeline replaces the V8-shaped bridgeAug 7, 2026
The V9 compiler now captures a native input schema; the retired V8 scoring engine no longer executes, and no published score, grade, pillar, breakdown, or reason changes.
- Input identity is bound to the V9 evaluation build instead of the retired V8 digest
- The V8 dimension engine, penalty blends, and evaluation-build manifest are deleted
- Peg-analytics publication is an explicit producer step with unchanged content and cadence
- Captures taken before 9.07 remain replayable read-only through the retained v3 parser
- Backing, Exit, and Economic Control weights, score aggregation, caps, and grade thresholds are unchanged
v9.06Exit backup credit scales with route qualityAug 6, 2026
V9 Exit now scales its bounded backup-route credit by the backup route's own score and presents primary-route, backup, and completion measurements separately.
- Backup credit is min(10, 100 - primary route score) multiplied by backup route score / 100
- A primary route below 100 can no longer reach 100 from backup-route credit alone
- The Exit card names the selected primary route, identifies the backup credit, and shows actual stress-request completion separately from its capacity component score
- The Exit pillar name, aggregation weight, route components, caps, and grade thresholds are unchanged
v9.05Wrapper local controls retain partial evidenceJul 30, 2026
Strategy-vault wrapper loss-control facts can now use reviewed local controls from a partial deployment inventory while unresolved controls remain bounded and risk-transfer credit remains disabled unless separately documented.
- Reviewed local controls on a strategy-vault wrapper populate the wrapper loss-absorption and emergency-control dimension even when the aggregate mint/control review is still bounded
- Unresolved deployment surfaces still fail closed in Economic Control and keep their original evidence responsibility
- Security-module, recovery-mode, and other local emergency controls do not create parent-loss absorption credit; wrapper risk-transfer remains zero unless a separate enforceable backstop is reviewed
- Backing, Exit, and Economic Control weights, score aggregation, caps, and grade thresholds are unchanged
v9.04Unsupported coverage separated from producer failureJul 29, 2026
Exit-coverage, route-evidence, and dependency gaps that no supported adapter can observe are now attributed to unsupported methodology instead of transient producer failure, deployment census coverage is reported per chain, and a peg with no usable price but an adverse record becomes measured adverse.
- Deployment census coverage is evaluated per chain: deployments on chains with no supported liquidity provider are reported as an explicit unsupported remainder instead of leaving the whole asset's coverage unknown, so a clean supported scope publishes real coverage
- An exit surface with no retained pool, or with retained pools but no score-eligible execution-capability pool, is attributed to unsupported methodology when its census remainder is methodology-unsupported and no execution-capability gate applies; genuine producer failures keep producer-failed responsibility
- Runtime route evidence for that unsupported cohort is reported as unsupported rather than missing, so later adapter coverage silently returns those assets to scoring without a responsibility rewrite
- Unreviewed dependency relationships are unsupported methodology when the asset has no live-reserve adapter and remain producer-failed when one exists, correcting the misattributed hubble USDH dependency gap
- Zero-pool and zero-exact-capable exit surfaces carry their own gap messages; the reviewed-capability-pool message is now emitted only where reviewed execution-capability pools actually exist
- An asset with no usable current price whose tracked peg record is already adverse is classified as measured adverse instead of a producer feed failure, while a clean record with no usable price stays a quiet observation and the deviation is never coerced to zero
- The unreachable subthreshold unrecognized chain-label pool reason is retired from the reason registry
- Reclassified surfaces stay bounded and remain at the same evidence ceiling, so pillar weights, score aggregation, caps, and grade thresholds are unchanged and no published grade moves
v9.03Subthreshold chain-label pool toleranceJul 29, 2026
Subthreshold unrecognized chain-label supply pools remain tolerated by the bridge-materiality proof but no longer surface as public evidence-responsibility facts.
- Small raw provider chain-label pools below the common-mode materiality floor no longer create producer-failed remediation items
- Material unmatched bridge supply still fails closed through the ordinary bridge-supply reason at or above the materiality floor
- Backing, Exit, and Economic Control weights, score aggregation, caps, and grade thresholds are unchanged
v9.02Causal responsibility provenanceJul 28, 2026
V9 now preserves causal responsibility through inherited and upstream evidence paths, distinguishes producer-unpriceable exit outputs from issuer non-disclosure, and retains reviewed controls in partial inventories without changing score or grade formulas.
- Explicit reason-level responsibility is authoritative; legacy reason defaults are used only when no explicit attribution is available
- Inherited reserve gaps, unavailable backing and role-pillar dependencies, and missing parent scores propagate the originating owner instead of defaulting downstream gaps to integration-missing
- Every attributed root receives a causal-root-qualified path even when it is the only root, so adding another root cannot rename an existing public fact; only unattributed fallbacks retain aggregate base paths, and mutable ownership never enters public fact identity
- Applicable but unpublished mechanism metrics retain issuer-undisclosed responsibility and never become measured-adverse merely because a related component was reviewed
- A reviewed external exit output with known identity but no same-notional valuation is producer-failed; an issuer-undisclosed settlement asset stays issuer-undisclosed, and neither output becomes scoreable
- Date-only mechanism and exit-output dispositions become admissible after the reviewed UTC day and cannot enter earlier replay clocks
- Reviewed mint controls remain present when the aggregate inventory is unresolved; unreviewed deployment surfaces stay bounded and fail closed
- Backing, Exit, and Economic Control weights, score aggregation, caps, and grade thresholds are unchanged
v9.01Economically material route capacityJul 28, 2026
Exit routes now need economically material capacity, and sub-1% completion cannot score above 50 even when the absolute-capacity floor is met.
- The prior threshold derived from two-decimal trace rounding is replaced by the policy's first positive 1% coverage or $100K absolute-capacity breakpoint
- A route below both breakpoints receives a zero route score; a route that reaches $100K but remains below 1% completion is capped at 50
- Public Exit breakdowns identify capacity as selected-route-specific and expose executable amount, request, cost bound, horizon, protocol, pool, evidence kind, and evidence time
- Issuer redemption remains a separate near-term or eventual horizon and is not inferred from exchange volume, aggregate DEX TVL, or issuer reserves
v9.0Safety Score V9 becomes the active modelJul 27, 2026
Pharos activates the identity-bound V9 model with three risk pillars, explicit evidence responsibility, structural ceilings, and fail-closed publication health.
- All active consumers select V9 without recomputing or falling back to V8
- Backing, Exit, and Economic Control replace the five V8 dimensions for native V9 output
- Transient producer failures hold the last accepted V9 snapshot and expose held status instead of publishing infrastructure-attributed score movement
- Capability-free immutable protocol contracts resolve to immutable governance access posture instead of being mistaken for concentrated administrators
- V8.17 remains available only as historical methodology and archived score history
v8.17Aggregate pool balances remain TVL evidenceJul 13, 2026
Balance-measured aggregate pool TVL is no longer treated as a reserve-based AMM simulation unless the retained evidence includes the exact mechanics needed to model executable capacity.
- Aggregate balance measurements remain useful DEX coverage and pool-quality evidence.
- Without an exact invariant, fee, output identity, and capacity curve, the Safety Score applies the existing generic-TVL-proxy ceiling of 60 rather than the AMM-simulation ceiling of 85.
- The standalone Liquidity Score is unchanged.
- Same-notional route scoring remains inactive until the P4b rollout gate passes.
v8.16DEX exit scoring carries evidence qualityJul 12, 2026
Liquidity / Exit now carries the evidence quality behind each published DEX score instead of treating TVL proxies, fallback rows, and retained AMM reserves as measured executable depth.
- Reserve-based AMM simulation caps at 85, generic TVL proxies at 60, and synthetic/fallback evidence at 55.
- A row with provider-inaccessible deployments and no observed deployment caps at 45.
- Inputs without republished evidence fields and rows explicitly marked legacy remain neutral and wire-compatible.
- The fixed-input replay changed 18 scores and 9 grades with no NR transitions; the standalone public Liquidity Score is unchanged.
v8.15Dependency scoring is deterministic across cycles and unavailable upstreamsJul 12, 2026
Dependency Risk now uses one scoring path for available and unavailable upstreams, and report-card publication no longer permits a dependency cycle to make results depend on traversal order.
- Fully unavailable weights use the same explicit blend, 70-point fallback, weak-upstream penalty, and wrapper/mechanism ceilings as partially unavailable weights.
- Live-created cycle members fall back to curated dependency sets; an invalid fallback graph rejects the snapshot before cache or grade-history publication.
- Dependency dimensions now include structured contribution, availability, normalization, penalty, and ceiling diagnostics, including after contagion stress recomputation.
- The fixed-input all-card replay found two score changes, one expected grade crossing, 38 corrected nonbinding ceiling labels with no score effect, and no NR changes.
v8.14Dependency derivation rejects self-links and duplicate variant backingJul 12, 2026
Dependency derivation now rejects self-links and represents each tracked variant as one serial wrapper claim on its parent, so displaying a parent's reserve book does not count that backing a second time.
- Frax self-holdings remain visible in reserve composition but no longer create a FRAX-to-FRAX graph edge.
- Static metadata, adapter output, stored live snapshots, the canonical resolver, and graph emission all enforce the same self-link and target-validity invariants.
- Raw inputs now include dependency source, fallback reason, mapped live weight, and live snapshot provenance.
- The fixed-input all-card replay found two score changes and no grade or NR transitions.
v8.13All-unmapped live reserve dependencies fall back to curated linksJun 19, 2026
Dependency Risk now falls back to curated reserve links or manual dependencies when a score-grade live reserve snapshot contains no mapped tracked-asset links at all.
- Partial live mappings stay authoritative: unmapped live reserve remainder still counts as self-backed or non-stablecoin exposure instead of reviving older curated percentages.
- The fallback applies only to the all-unmapped live case, where treating the whole snapshot as self-backed can erase known upstream stablecoin dependencies.
- Raw inputs keep
dependencyFromLivetrue only for live-derived or explicitly live-unmapped dependency sets; curated/manual fallback dependencies report false.
v8.12Bridge-route risk enters DecentralizationJun 12, 2026
Reviewed bridge-route profiles now feed Decentralization through a penalty-only blend after CDP oracle scoring and before Mint Authority: min(current, 0.80 x current + 0.20 x bridge route score).
bridgeRouteRiskprofiles record route tier, summary, provenance, confidence, protocol evidence, and sources.- Missing bridge-route reviews remain neutral, and strong issuer-native or canonical routes never lift a score.
- L2BEAT Interop data powers an advisory review queue, but live report-card scoring consumes only curated Pharos metadata.
v8.11Oracle-risk profiles gain provenance and branch handlingJun 12, 2026
Oracle-risk reviews now carry provenance and optional branch rows. When a CDP profile has branch-level oracle tiers, the Decentralization blend uses the weakest branch/profile score so multi-collateral systems are scored against their weakest verified price-feed path.
oracleRiskprofiles can include reviewed date, reviewer, confidence, source links, and per-branch collateral/chains context.- Report-card payloads now expose an oracle setup presentation object, including inherited parent exposure for wrappers and savings variants.
- A warning-only coverage check and calibration report support the full CDP oracle-profile backfill and later review of the 25% blend weight.
v8.1CDP oracle setup enters DecentralizationJun 12, 2026
Crypto-backed CDP stablecoins can now carry a reviewed oracle-risk profile. When one is present, Decentralization applies a penalty-only oracle setup blend — min(current, 0.75 × current + 0.25 × oracle score) — because liquidations and redemptions depend on the collateral price-feed path.
- The blend applies only to explicit
oracleRiskprofiles on crypto-backed CDP assets; missing reviews and non-CDP assets are unchanged. - The oracle step runs after governance and chain infrastructure, before the existing Mint Authority blend. Immutable-code CDPs are not exempt because oracle feeds remain an external dependency.
- Initial reviewed profiles cover USDS as a medianized delayed oracle system and BOLD as redundant feeds with failover. Other CDPs stay unchanged until reviewed oracle metadata is curated.
v8.0Mint Authority Score enters DecentralizationJun 11, 2026
The Mint Authority Score becomes a Safety Score input: the Decentralization dimension now applies a penalty-only blend — min(current, 0.65 × current + 0.35 × MAS) — so a weak privileged-mint path can drag the dimension down, while a strong one never lifts it.
- The blend runs after the governance baseline, wrapper inheritance, and the chain-infrastructure penalty; a "Mint authority" detail row appears on the report card when the drag binds.
- Coins without a rated Mint Authority Score are unchanged — a missing or unresolved review never penalizes.
- No separate confidence gate: the Mint Authority confidence caps (verified 100 / probable 90 / manual-review 85) already encode evidence quality inside the score.
- 111 of 368 scoreable active coins move down, none up; the biggest drops are mint-incident and unbounded-mint protocols, while issuers whose governance scores already reflect their mint topology are unchanged.
v7.291Degraded-input history guardJun 6, 2026
Safety Score scoring is unchanged, but degraded report-card inputs no longer create durable grade-history transitions and the compact score cache now exposes input-staleness metadata to dependent consumers.
- Daily grade-history writes are suppressed when stale DEX liquidity or redemption-backstop inputs built the report-card snapshot.
- The history cron records degraded conditions in cron metadata instead of persisting stale-input transitions.
- The compact report-card cache now carries degraded-input metadata for Chain Health and other lightweight consumers.
v7.29fxSAVE live redemption capacityMay 27, 2026
fxSAVE redemption scoring now uses live ERC-4626 capacity instead of a heuristic strategy-buffer estimate.
- Fresh clean snapshots read idle fxSP capacity from the current on-chain reserve-sync output.
- Clean live capacity can reach medium confidence and feed Liquidity / Exit.
- Missing or degraded live telemetry leaves the route unrated rather than applying the old 20% heuristic.
v7.28FreezeWatch curated upstream review auditMay 25, 2026
FreezeWatch re-audits the active assets that still resolved as No after the Dilutable retirement.
- M by M0, ISC, and USG now resolve as direct Yes.
- DLLR, FXD, CJPY, USDQ, and USDK now resolve as Possible.
- JUSD, SILK, NXUSD, LUAUSD, KRWO, and BNUSD now resolve as Upstream.
v7.27FreezeWatch removes Dilutable admin-mint tierMay 24, 2026
FreezeWatch now uses a four-status freeze model and leaves supply-control risk to Mint Authority.
- The retired Dilutable cohort was re-reviewed under freeze-only semantics.
- Most former Dilutable assets now resolve as Upstream; USDN resolves as Possible.
- KRWO, LUAUSD, and vCRED resolve as No; admin mint authority remains descriptive and unscored.
v7.26NAV wrapper peg scoring uses configured peg references firstMay 21, 2026
NAV and savings wrappers with a configured peg reference now use the referenced base stablecoin's peg state for Safety Score peg scoring, instead of reading their own yield-accruing share price as a USD peg.
- Appreciating wrapper prices above $1 no longer trigger active-depeg D/F caps by themselves.
- Tracked wrappers such as fxSAVE inherit peg risk from the configured base asset.
- Wrapper, dependency, collateral, and liquidity risks remain scored through their own dimensions.
v7.25Wrapper decentralization inherits from tracked parent assetsMay 15, 2026
Wrapper Decentralization now follows the tracked wrapped asset when the parent relationship is known, instead of assigning every wrapper the same flat low score.
- Parent-linked wrappers such as yBOLD, sBOLD, and sfrxUSD inherit the wrapped asset's already chain-adjusted Decentralization score.
- The inherited score uses the same wrapper-kind haircut as Dependency Risk: savings minus 3, strategy-vault/risk-absorption minus 5, and bond-maturity minus 8.
- Wrappers without a resolvable single tracked parent keep the conservative fallback score of 10.
v7.24Capacity-aware redemption effective-exit blendingMay 12, 2026
Liquidity / Exit now consumes Redemption Backstop v4 current-capacity semantics instead of treating every configured redemption route as full-strength liquidity.
- Eventual-only routes remain visible as redemption coverage but do not create redemption-only Safety liquidity uplift without modeled current executable capacity.
- Redemption contribution is scaled by current capacity and confidence before it can improve the effective-exit score.
- The diversification bonus is reserved for plausibly independent issuer rails rather than correlated wrappers, same-protocol routes, or unknown-correlation exits.
v7.23sGHO and Reservoir reserve coverage refinementsMay 12, 2026
Reserve-sync refinements promote additional clean independent snapshots without widening score-grade evidence policy to static or weak-probe sources.
- sGHO now reads the legacy savings contract's
previewRedeem(totalSupply)path directly. - Reservoir srUSD/wsrUSD snapshots now map AUSD and Steakhouse Prime USDC strategy rows from the live balance-sheet API instead of treating them as unknown exposure.
- USD.AI now stamps the latest scoped proof-row timestamp while preserving oldest/latest spread metadata, and mRe7YIELD allows a weekly Chainlink NAV cadence.
v7.22Additional independent NAV and wrapper reserve feedsMay 12, 2026
More RWA NAV tokens and tracked savings wrappers now use direct independent reserve feeds instead of curated validation or weak liveness probes.
- WTGXX, VBILL, ACRED, USTBL, EUTBL, and JTRSY now use timestamped Chainlink NAV feeds for score-grade reserve freshness.
- USDCV now uses the SG Forge CoinVertible reserve parser, aligning it with EURCV's independent attestation path.
- sUSDD and sUSN now use ERC-4626
totalAssets()/asset()wrapper reads so their live reserve slices inherit tracked USDD and USN parent links.
v7.21crvUSD direct on-chain LLAMMA reserve readsMay 12, 2026
crvUSD scoring now reads LLAMMA reserve balances directly from on-chain Curve ControllerFactory data instead of relying on a legacy market-state API.
- CrvUSD continues to use existing on-chain factory flows for Yield Basis while LLAMMA
bands_yis consumed directly for collateral inventory checks. - Soft-liquidity
bands_xinventory remains in snapshot metadata rather than being reclassified as external collateral. - Freshness output for this path is marked as
"not-applicable", which allows clean crvUSD snapshots to stay eligible for score-grade live reserve inputs.
v7.20Expanded Dilutable admin-mint classification with source provenanceMay 11, 2026
The follow-up admin-mint sweep expands the Dilutable tier and records source provenance for every Dilutable override.
- DAI, DOLA, FPI, PHT, USDD, USDe, USDN (SMARDEX), crvUSD, REUSD, USDU, and XAI now resolve as
Dilutable. - Each
canBeBlacklisted: "dilutable"entry now carries a contract-source link viacanBeBlacklistedSource. - The homepage table and stablecoin detail hero link the Dilutable label directly to that source.
v7.19Dilutable freezability tier and upgradeable-proxy / admin-mint auditMay 11, 2026
A re-audit of 22 stablecoins marked Freezable: No introduces a new Dilutable tier and reclassifies five coins to Yes after finding upgradeable proxies, admin freeze mixins, or chain-native seizure precedent.
- The new
Dilutabletier sits betweenNoand directYes: the token has no transfer freeze or blacklist, but the issuer can mint unbounded supply and effectively seize value through dilution. - vCRED, LUAUSD, and srUSD now resolve as
Dilutablebecause their token contracts exposeOwnablemint orAccessControlminter-grant authority without supply caps. - HBD, mRe7YIELD, FEUSD (Felix), USDQ (Quill), and USDK (Orki) move to direct
Yesafter confirming transparent upgradeable proxies, MidasBlacklistable/Pausablemixins, or Hive Hardfork 23 chain-level balance seizure precedent. - BabelFish XUSD's explicit
canBeBlacklisted: falseoverride is removed so its bridged USDT/USDC reserve exposure now resolves toUpstreamby default.
v7.18Redemption freshness and daily-limit eligibility gatesMay 10, 2026
Liquidity / Exit now applies stricter live redemption telemetry gates before redemption capacity can improve Safety Scores.
- Unverified nested redemption freshness is excluded unless a route-specific lower-bound allowlist explicitly permits it.
- Daily redemption limits emitted by adapters cap usable scoring capacity while raw capacity stays visible.
- Proxy and queue capacity kinds cannot qualify as severe-depeg live-direct evidence.
v7.17USD3 centralized-collateral dependency correctionMay 7, 2026
USD3 / Web 3 Dollar is reclassified from DeFi to CeFi-dependent because its Reserve Protocol DTF basket is concentrated in centralized stablecoin-derived collateral.
usd3-reserve-protocolnow uses governancecentralized-dependent.- The correction reflects Savings USDS, Aave USDC, wrapped Compound USDCv3, and Steakhouse USDC strategy exposure in the curated and live reserve configuration.
- Scoring weights, thresholds, reserve risks, and live reserve adapter behavior are unchanged.
v7.16Follow-up freezability classification auditMay 6, 2026
Six disputed Freezable: No classifications were rechecked against native protocol controls and verified contract surfaces.
- HomeCoin now resolves as
Possiblebecause the holder-facing HOME token is a transparent upgradeable proxy with an active proxy-admin upgrade surface. - HBD, vCRED, Freedom Dollar, LUAUSD, and NXUSD remain
Noafter review found no freeze, blacklist, pause, denylist, arbitrary burn, or upgrade control on the holder-facing asset surface. - Owner mint authority and user or allowance burn functions stay classified as supply controls, not freeze controls, unless paired with transfer gates, arbitrary burns, blacklist controls, or mutable holder-control surfaces.
v7.15Direct freezability metadata auditMay 5, 2026
The resolved Freezable: No cohort was reviewed against token-level freeze, denylist, blacklist, pause, and arbitrary role-burn controls.
- JupUSD, eSui Dollar, MAI, JUSD, Alpha Partner USDA, Ring USDR, DOC, USDRIF, and Nest inALPHA now resolve as direct
Freezable: Yeswhere audited token or vault contracts expose holder-facing controls. - sBOLD and Enosys CDP now resolve as
Possiblebecause their audited contracts expose pause or mutable branch-control surfaces rather than a confirmed current address-level blacklist. - The remaining resolved
Nocohort stays unchanged where no direct holder-facing freeze, blacklist, pause, denylist, or arbitrary burn surface was confirmed.
v7.14Live reserve dependencies align with scoringApr 24, 2026
Score-grade live reserve slices with tracked coinId links now drive Dependency Risk, raw dependency inputs, topological ordering, and the public dependency graph together.
- Report-card Dependency Risk now uses the same fresh independent live reserve slices already eligible for collateral-quality scoring when those slices carry tracked stablecoin links.
- Unmapped live reserve share remains implicit self-backed or non-stablecoin exposure, so live snapshots no longer fall back to stale curated dependency percentages for that remainder.
- The public dependency graph now publishes the effective dependency edges used by the snapshot, while tracked variant parent wrapper edges remain synthetic and de-duplicated.
v7.13Reserve-driven blacklist risk moves to UpstreamApr 22, 2026
Blacklist labeling now reserves possible for curated direct token or vault controls.
- Reserve-side stablecoins, wrapped or custodied collateral, custody/CEX rails, and tracked parent-asset exposures now resolve to
inherited/ Upstream instead of sharing thepossiblebucket. - Explicit
canBeBlacklisted: "possible"overrides remain only on assets whose holder-facing token or vault still exposes a pause, freeze, or blacklist surface. - The change is descriptive only for Resilience and does not alter tracked-variant dependency ceilings or the parent-overall cap framework added in recent v7.x releases.
v7.12sBOLD joins tracked risk-absorption variantsApr 22, 2026
K3 sBOLD now joins the tracked parent-linked variant framework as a risk-absorption child of BOLD.
sbold-k3-capitalnow declares canonicalvariantOf/variantKindmetadata as arisk-absorptionchild ofbold-liquity.- The classification is based on Liquity Stability Pool loss-absorption dominating the wrapper's extra risk surface, rather than a generic strategy-vault interpretation.
- sBOLD now joins the tracked risk-absorption cohort beside
stUSDSandstkGHO.v1, using the existing parent minus 5 dependency ceiling and parent-overall cap.
v7.11Strategy-vault children join the tracked variant frameworkApr 22, 2026
The tracked parent-linked wrapper framework now covers the four highest-confidence strategy-vault children.
sUSDai,msY,sAID, andstcUSDnow declare canonicalvariantOf/variantKindmetadata as trackedstrategy-vaultchildren.- Dependency Risk now applies a tracked strategy-vault wrapper ceiling of parent minus 5 points, while the existing parent-overall cap still prevents the child from outscoring the parent card.
- The homepage variant owner on
/now includes aStrategyfilter state alongside the existing Savings, Risk-Abs, and Bond families. - This phase keeps the current parent-linked
pegReferenceIdpath for these four products, so severe parent depegs still constrain the child until independent NAV/peg handling ships later.
v7.10Bond-maturity variants join the parent-linked wrapper frameworkApr 22, 2026
The parent-linked wrapper framework now covers bond-maturity variants, starting with bUSD0 as a bond leg over USD0.
bUSD0now declares canonicalvariantOf/variantKindmetadata as abond-maturitychild of USD0.- Dependency Risk now applies a stricter bond wrapper ceiling of parent minus 8 points while the existing parent-overall cap still prevents the child from outscoring the parent card.
- The homepage variant owner on
/now includes aBondfilter state, and detail-page variant cards link back into that owner instead of introducing a dedicated variant route family.
v7.09Tracked wrapper and staked variants become explicit parent-linked cardsApr 22, 2026
Tracked savings and staked wrappers now carry an explicit parent relationship in Safety Scores instead of relying on reserve-shape quirks to infer the upstream stablecoin.
- Nine tracked wrapped or staked stablecoins now declare canonical
variantOf/variantKindmetadata and contribute a syntheticwrapperedge from parent to child in dependency scoring, topological ordering, and the dependency graph. - Dependency Risk now caps tracked savings wrappers at parent minus 3 points and tracked risk-absorption wrappers at parent minus 5 points, while legacy non-variant wrapper dependencies keep the original parent-minus-3 behavior.
- Tracked variants cannot outscore their parent overall card; live cards and stressed recomputation now expose
overallCapped,uncappedOverallScore,rawInputs.variantParentId, andrawInputs.variantKindso parent-cap drag is distinct from peg drag in the UI and stress tooling.
v7.08Strategy reserve tier clarificationApr 21, 2026
Reserve-risk tiering now distinguishes transparent spot or wrapped market exposure from actively managed strategy books.
- Delta-neutral wording no longer implies a medium reserve-risk tier by itself.
- Transparent spot or wrapped market exposure can remain medium when custody and counterparty risk are already captured by the custody model.
- Externally managed market-neutral, basis, perp, LP, private-deal, or custody-dependent strategy reserves are high unless stronger granular evidence shows the slice is only an idle stablecoin or cash-equivalent buffer.
- avUSD's 0xPartners-managed strategy and loss-absorption reserve slices move from medium to high.
v7.07Stale DEX liquidity stays usable for Exit scoringApr 18, 2026
Liquidity / Exit and the redemption-backstop snapshot now reuse the last-known DEX liquidity score when its freshness runway has elapsed, instead of suppressing it and cascading documented offchain-issuer routes (USDC, USDP, USDT, GUSD, …) to NR on routine sync-dex-liquidity cron lag.
- Reverses v6.1's rule that stripped stale DEX liquidity out of
effectiveExitScore; staleness is surfaced vialiquidityStaleandinputFreshness.dexLiquidity.staleso consumers can warn on age without losing the dimension. /api/redemption-backstops.effectiveExitScorestays aligned with the stale-DEX freshness policy during stale windows instead of diverging tonull, but it remains the raw best-path exit blend and can still differ numerically from report-card liquidity after Safety Score eligibility gates apply. The redemption-backstop cron still marks its rundegradedand setsmetadata.liquidityStale = truefor operational visibility.- Absent DEX snapshots (loader rejects or empty table) still produce
liquidityScore = nulland trigger the documented offchain-issuer primary-market-floor exclusion; the rule now distinguishes "present but old" from "truly missing."
v7.06GHO residual decompositionApr 16, 2026
The GHO reserve adapter now decomposes residual issuance across active facilitators and routes unmapped labels through the standard material-unknown-exposure validator instead of a GHO-specific warning.
- Aave V3 direct-minter facilitators contribute medium-risk residual slices; FlashMinter and unmapped facilitators contribute high-risk slices.
- Unmapped residual share accumulates into unknown-exposure telemetry so material unknown exposure can degrade the GHO sync consistently with other reserve adapters.
- Direct GhoReserve / GhoDirectFacilitator / RemoteGSM reads remain a follow-up pending verified Aave deployment addresses.
v7.05Primary-market exit bonusApr 16, 2026
Documented issuer redemption now earns a small primary-market exit bonus only when DEX liquidity is already present.
- Offchain issuer routes with documented-bound eventual redeemability can contribute the diversification bonus.
- The route cannot replace missing DEX liquidity; no-DEX assets still need immediate-bounded redemption evidence to score.
- Low-confidence, stale, impaired, route-limited, and severe-depeg-ineligible routes still fail closed.
v7.04Redemption freshness runwayApr 15, 2026
Redemption backstops now stay eligible through normal 4-hourly sync lag instead of dropping out of Liquidity / Exit as soon as the previous snapshot crosses one sync interval old.
- Report-card redemption freshness now uses a two-run runway for the 4-hourly redemption sync.
- Medium- and high-confidence immediate-bounded redemption routes continue to improve Liquidity / Exit between normal syncs.
- Missing, materially stale, low-confidence, impaired, eventual-only, and severe-depeg-ineligible routes still fail closed.
v7.03USTB live liquidity capacityApr 15, 2026
USTB can now use Superstate's current liquidity telemetry while keeping NAV/AUM separate from immediate exit capacity.
- Current Circle USD and USDC RedemptionIdle balances bound USTB redemption capacity.
- The on-chain NAV oracle remains reserve evidence, not immediate liquidity.
- Malformed or unavailable liquidity telemetry fails closed instead of falling back to NAV/AUM.
v7.02frxUSD live redemption capacityApr 15, 2026
frxUSD now uses fresh Frax balance-sheet redemption capacity with route-status and capacity-ratio fail-closed guards.
- frxUSD no longer relies on a static full-supply eventual redemption model.
- Live route-status telemetry can suppress redemption uplift when a route is paused, degraded, or cohort-limited.
- Nested capacity amounts no longer reuse flat reserve-composition ratios as supply-relative capacity ratios.
v7.01Safety-eligible redemption tiersApr 15, 2026
Liquidity / Exit now distinguishes standalone redemption-route quality from Safety Score-eligible exit capacity.
- Eventual-only redemption routes remain visible but no longer uplift Liquidity / Exit by themselves.
- Queue-like routes can contribute when resolved and current, with their contribution capped before blending.
- Immediate-bounded, live-direct, and validated-live routes continue to improve the dimension when fresh and unimpaired.
v7.0Independent NAV and bundle-oracle reserve feedsApr 15, 2026
More proof-style reserve feeds now use timestamped independent evidence instead of weak liveness checks.
- USYC and TBILL now use Chainlink-style NAV oracle reads with verified source timestamps.
- FRAX now reads Frax's v2 balance-sheet API and maps known balance-sheet assets explicitly.
- USD1 now reads its Chainlink bundle oracle for live reserve size, timestamp, and supply comparison.
- The global gate remains strict: proof sources without payload-native freshness stay detail-visible only.
v6.99Asymmetry USDaf live reserve freshness promotionApr 15, 2026
USDaf's Asymmetry reserve feed can now qualify for live collateral passthrough when the protocol API snapshot is fresh.
- The adapter now preserves Asymmetry's top-level API timestamp as verified reserve-source freshness.
- Branch symbols are normalized before risk lookup, so casing-only variants such as
wBTCno longer degrade the feed. - No scoring policy changed; the feed still needs fresh independent evidence and an
oksync state.
v6.98Timestamp-backed reserve feeds restored to collateral passthroughApr 15, 2026
Timestamped reserve feeds can now re-enter collateral-quality passthrough when they satisfy the existing freshness and sync-health gates.
- Circle, M0, Mento, and USD.AI reserve adapters now preserve usable upstream disclosure or dashboard timestamps instead of leaving those snapshots marked
freshnessMode=unverified. - Re Protocol and Yuzu mappings now classify newly observed reserve buckets explicitly, so clean fresh snapshots are not degraded as unknown exposure.
- The global gate is unchanged: only fresh, independent,
oksync snapshots with verified or intrinsically current freshness can drive report-card collateral scoring.
v6.97Active-depeg caps use event peak and stale redemption inputs are suppressedApr 15, 2026
Active-depeg and dependency edge cases now follow the documented Safety Score model more strictly.
- Peg Stability now passes through
computePegScore()during active depegs instead of applying the old 65-point peg-dimension cap before the multiplier. activeDepegBpsnow comes from the open depeg event's peak severity, so final Safety Score caps use the same severe-event source as redemption-route impairment.- Stale redemption-backstop snapshots no longer uplift Liquidity / Exit; the dimension falls back to fresh DEX evidence or NR until the redemption snapshot refreshes.
- Missing upstream dependency scores are applied at the existing 70-point unavailable fallback for their declared weights, and the contagion stress test now propagates transitively through downstream dependency chains.
v6.96Severe active depegs disable weak redemption upliftApr 14, 2026
Severe active depegs now force redemption uplift to prove current exercisability instead of relying on static route documentation.
- Liquidity / Exit now ignores redemption backstops that are unresolved, low-confidence, or marked impaired by route-availability evidence.
- Active depegs at or above
2500 bpsdisable static, documented-bound, live-proxy, issuer/API, queue, and estimated redemption uplift. - Live-direct, dynamic, permissionless routes with atomic or immediate settlement can still contribute during severe depegs because they carry current direct redemption evidence.
v6.95Direct inherited freeze risk now counts custodied BTC wrappers and issuer-seizable collateralApr 7, 2026
Direct inherited freeze risk now counts two reserve-side collateral classes that were previously under-attributed: custodied BTC wrappers and issuer-seizable tokenized collateral.
- Shared
isBlacklistable()now treats centralized-custody BTC wrappers such asWBTCandcbBTCas direct inherited freeze exposure rather than only weak possible clues. - Issuer-seizable tokenized collateral such as
PAXG,XAUT, and reviewed tokenized share symbols such asBOSSjoined the direct inherited-freeze signal set introduced in this phase. - Coins with these reviewed collateral assets gained inherited-freeze treatment in this phase; v7.13 later superseded the reserve-weight gate with the current any-reserve
inheritedinstead ofpossible.
v6.94NAV wrappers can inherit peg risk from a referenced base stablecoinApr 6, 2026
NAV wrappers that explicitly wrap a stablecoin now inherit peg risk from the referenced base asset instead of getting an automatic neutral peg multiplier.
- Configured NAV wrappers can now reuse a referenced base stablecoin's
pegScorein Safety Score report-card scoring. - Pure fund-share NAV tokens with no configured peg reference still keep
pegScore = NRand the neutral multiplier treatment. - This specifically closes the loophole where a wrapped stablecoin NAV structure could avoid the stronger v6.93 peg penalty even when the underlying base stablecoin had clear peg risk.
v6.93Steeper peg multiplier + active depeg grade capApr 5, 2026
Peg stability now has more weight in the final grade, and severe live depegs can hard-cap the score regardless of otherwise strong base dimensions.
PEG_MULTIPLIER_EXPONENTincreased from0.20to0.40.- Active depegs at or above
1000 bpsnow cap the overall score at D, and active depegs at or above2500 bpscap it at F. activeDepegBpsis now exposed in report-card raw inputs so the frontend and stressed-grade recomputation paths apply the same cap logic.
v6.92Direct Liquity v1 reserve observation for LUSDApr 4, 2026
LUSD now uses direct Liquity v1 system-collateral reads instead of the generic proof-style liveness probe, so clean snapshots qualify as independent live reserve evidence.
- The dedicated
liquity-v1adapter readsgetEntireSystemColl()andgetEntireSystemDebt()from the official EthereumTroveManager. - LUSD reserve snapshots remain a single-bucket 100% ETH view, but the adapter is now registered as
independentinstead ofweak-live-probe. - This promotes LUSD's clean authoritative reserve snapshots into collateral-quality live passthrough without relaxing the generic gate for other
single-assetprobes.
v6.91Reserve-side blacklist exposure heuristicsMar 30, 2026
Blacklistability attribution now treats reserve-side freeze clues as first-class signals instead of only trusting explicit slice flags and resolved upstream coin IDs.
- Shared
isBlacklistable()now resolves topossiblewhen curated or live reserve labels imply blacklistable stablecoins, wrappers, or CEX/custody rails below the majority threshold. - Majority direct reserve exposure still resolves to
inherited; the new heuristics are there to prevent reserve-side exposure from incorrectly falling through tono. - Live reserve enrichment and curated reserve evaluation now share the same direct clue detection for named stablecoin baskets and explicit custody/CEX descriptors.
- This does not relax the collateral passthrough gate:
static-validated,weak-live-probe, andfreshnessMode=unverifiedreserve feeds remain detail-visible only.
v6.9Explicit inherited blacklistabilityMar 30, 2026
Blacklistability attribution now separates mutable-contract risk from collateral-inherited freeze risk.
- Shared blacklistability resolution no longer treats
centralized-dependentgovernance as enough evidence forpossibleon its own. - Reserve-heavy downstream freeze exposure now surfaces as
inherited, which is distinct from mutable-contract risk. - Inherited status became an explicit upstream-freeze category that can use curated reserve-slice
blacklistablemarkers in addition to upstream stablecoin links; v7.13 later removed the reserve-weight gate.
v6.8On-chain reserve freshness alignmentMar 25, 2026
Safety Score structure is unchanged, but direct latest-state reserve adapters now stamp explicit on-chain freshness so eligible feeds are no longer excluded by missing timestamp metadata.
evm-branch-balancessnapshots now persistfreshnessMode=not-applicable.- Clean independent branch-balance snapshots can once again override curated collateral quality when their latest
reserve_sync_state.last_statusisok. - This aligns implementation with the existing v6.6 freshness gate rather than introducing a new collateral-scoring rule family.
v6.7CeFi-dependent blacklistability fallbackMar 25, 2026
Blacklistability attribution now treats centralized-dependent stablecoins as possible by default unless a more specific signal applies.
- Shared blacklistability resolution now falls back to
possiblefor centralized-dependent governance instead offalse. - Reserve-heavy dependency cases still surface as
possible-inheritedwhen inherited exposure is the more specific explanation. - Explicit overrides remain authoritative, including curated
falseexceptions.
v6.6Timestamp-backed live reserve scoring gateMar 24, 2026
Safety Score structure is unchanged, but collateral-quality live reserve passthrough now requires stronger freshness evidence before a live feed can override curated collateral scoring.
- Independent live reserve feeds still need a fresh authoritative snapshot whose latest
reserve_sync_state.last_statusisok. - In addition, collateral passthrough now requires scoring-eligible freshness evidence: either a verified timestamp path or a
freshnessModeofverifiedornot-applicable. - Feeds marked
unverifiedremain available on reserve detail/status surfaces, but they no longer override curated collateral quality in report-card scoring.
v6.5Clean independent live reserve passthroughMar 22, 2026
Safety Score structure is unchanged, but the collateral-quality live reserve passthrough is now stricter about evidence quality and warning-bearing feeds.
- Live collateral passthrough now requires a fresh authoritative snapshot whose latest
reserve_sync_state.last_statusisok. - The live reserve adapter registry now separates reserve shape (
sourceModel) from evidence strength (evidenceClass). single-assetandtetherstyle feeds are now treated asweak-live-probeevidence, so they remain visible on reserve detail/status surfaces but no longer override curated collateral scoring.- Source-age and material unknown-exposure warnings now degrade reserve sync health and automatically keep those snapshots out of collateral passthrough.
v6.4Live Liquity redemption fee telemetryMar 22, 2026
Safety Score structure is unchanged, but Liquity-style formula routes can now use current on-chain redemption fees when live reserve telemetry is available.
- LUSD and BOLD now reuse live reserve sync metadata for current redemption fee bps instead of always sitting in the generic reviewed-formula bucket.
- These routes remain labeled as
formulafee models andeventual-onlycapacity routes, so Pharos does not present them as having an immediate redeemable buffer. - If live fee telemetry is unavailable, the liquidity dimension falls back to the prior reviewed-formula treatment.
v6.3Documented-bound Liquity redemption confidenceMar 22, 2026
Safety Score structure is unchanged, but a narrow class of immutable on-chain redemption routes now counts as stronger exit evidence than heuristic capacity models.
- LUSD and BOLD now use
documented-boundeventual redemption capacity instead of generic heuristicsupply-fullmodeling. - These routes still present as
eventual-only, so Pharos does not treat full current supply as an immediate redeemable buffer. - Liquity-style
min 50 bps + baseRatefees remain reviewed formula inputs rather than fixed-fee assumptions.
v6.2Independent live reserve contract tighteningMar 22, 2026
Safety Score structure is unchanged, but the collateral-quality live reserve passthrough is now stricter about which hourly reserve feeds qualify.
- Live collateral passthrough now requires a fresh authoritative snapshot: the reserve row must be non-empty and matched to the coin's latest successful sync state.
- Only
dynamic-mixandsingle-bucketfeeds count as independent live collateral inputs.validated-staticfeeds stay visible on reserve detail/status surfaces but no longer override curated collateral scoring. - Single-bucket live feeds now participate in collateral drift and fallback tracking; the old implicit
>= 2 slicesgate is no longer the scoring contract.
v6.1Redemption confidence gating and capacity semanticsMar 22, 2026
Safety Score structure is unchanged, but the Liquidity dimension is now stricter about what redemption evidence can improve it.
- Low-confidence redemption routes remain visible in detail surfaces, but they no longer uplift the Safety Score liquidity dimension.
- When the reused DEX liquidity snapshot is stale, it is no longer blended into
effectiveExitScore. - Redemption detail output now distinguishes immediate redeemable capacity from eventual issuer/protocol redeemability.
v6.0Custody model tiers, mature-alt-l1, 2-factor ResilienceMar 21, 2026
Four structural changes landed together in the safety methodology: a wider custody model, a new chain tier for Solana and BNB Chain, a simpler 2-factor Resilience score, and a steeper 5-band chain penalty.
- Custody model expanded from 3 to 6 tiers: onchain, institutional-top, institutional-regulated, institutional-unregulated, institutional-sanctioned, and cex.
- Added mature-alt-l1 for Solana and BNB Chain with score 45.
- Resilience became
(collateral + custody) / 2; blacklist capability is now descriptive only. - Chain-risk penalty moved to 5 bands, and wrapper governance became exempt from that penalty.
v5.9Classification corrections: centralized-custody DeFi coinsMar 20, 2026
Three DeFi-classified coins were corrected after live reserve review showed majority centralized custody exposure.
- meUSD, ALUSD, and BtcUSD were reclassified from decentralized to centralized-dependent.
- ALUSD's earlier v4.1 correction was explicitly reversed after reserve review showed majority direct USDC/USDT exposure.
- meUSD and BtcUSD were corrected after live reserves confirmed custodial BTC-variant backing.
v5.8Live reserve passthrough for collateral qualityMar 14, 2026
Collateral quality scoring now consumes live reserve snapshots when available, using hourly data from reserve_composition instead of curated metadata.
- Coins with
liveReservesConfiguse fresh (<48h) live snapshots for collateral quality instead of curated metadata. - Delta alert fires when live-derived score diverges from curated by >15 points.
- Dependency inference remains on curated data (live slices lack coinId links).
v5.7Canonical ETH wrapper reserve alignmentMar 13, 2026
Direct ETH and canonical WETH reserve slices now share the same very-low risk tier.
- Updated the shared direct-asset reserve map used by live reserve adapters so `WETH` no longer falls into the generic wrapped-asset bucket.
- Aligned curated reserve metadata and live config overrides for coins that expose plain `WETH` or `ETH` slices.
- Left mixed strategy buckets unchanged. Delta-neutral ETH exposures, bridged ETH buckets, and mixed BTC/ETH slices still use their existing manually-modeled risk tiers.
v5.6Exit-liquidity integrationMar 12, 2026
The Safety Score liquidity dimension now evaluates exit liquidity, not just raw DEX depth.
- Added a new redemption backstop datasetfor redeemable assets, covering onchain collateral redemptions, stable basket redemptions, queue-based liquid-buffer systems, and issuer redemption rails.
- The report-card Liquidity dimension now uses an effective exit score: DEX liquidity remains the floor, while redemption quality can improve the dimension without redefining the standalone DEX liquidity score.
- Added route-family caps so queue-based and offchain issuer systems cannot look unrealistically liquid even when redemption exists.
v5.5Peg score fairness for young coinsMar 1, 2026
Three fixes to the peg score formula that prevent young coins with chronic depegs from scoring artificially high:
- Tracking window capped at coin age — uses the coin's earliest supply snapshot instead of always defaulting to a 4-year window. A 30-day-old coin is now scored over 30 days, not 1,461.
- Severity magnitude floor — every depeg event carries a minimum penalty of (peakBps / 2000) × recencyWeight, regardless of duration. Hundreds of brief high-magnitude depegs now accumulate real cost.
- Active depeg penalty steepened — floor raised from 2 to 5, divisor changed from 200 to 50. A 500 bps ongoing depeg now costs 10 points (was 2.5).
v5.4No-liquidity penaltyFeb 28, 2026
When the Liquidity dimension is NR (no DEX data), the overall score now receives a 10% penalty instead of silently redistributing the weight to other dimensions.
As DEX pipeline coverage matures, absence of liquidity data is increasingly suspect and should not inflate grades.
v5.3Remove chain infra from ResilienceFeb 28, 2026
Chain infrastructure was scored in both Resilience (as a 25% sub-factor) and Decentralization (as a penalty) — double-counting chain risk.
- Chain infra now scored exclusively in Decentralization
- Resilience becomes a 3-factor model (each ⅓): Collateral Quality, Custody Model, Blacklist Capability
v5.2Immutable-code governance tierFeb 28, 2026
New highest GovernanceQuality tier: immutable-code → 100. For protocols with no admin keys, no upgrade path, no DAO attack surface (e.g. LUSD, BOLD). Exempt from chain infrastructure penalty.
Full GovernanceQuality tiers
| Tier | Score |
|---|---|
| immutable-code | 100 |
| dao-governance | 85 |
| multisig | 55 |
| regulated-entity | 40 |
| single-entity | 20 |
| wrapper | 10 |
v5.1Regulated-entity tier + blacklist softeningFeb 28, 2026
- Blacklist scoring softened: blacklistable 0→33, possible 50→66, not-blacklistable 100 (unchanged). Non-zero floor for blacklistable tokens.
- regulated-entity tier added (score 40). Auto-promoted from single-entity when: jurisdiction regulator + license set, and proof of reserves via independent audit. Exempt from chain infra penalty.
- Grade thresholds lowered 5 points (C-range overcrowding after blacklist/decentralization changes).
v5.0GovernanceQuality + universal dependency scoringFeb 28, 2026
Decentralization: 3-tier → 6-tier GovernanceQuality
The blunt 3-level governance type (decentralized / centralized-dependent / centralized) replaced by a 6-tier GovernanceQuality scale, inferred from governance type when not explicitly set.
Dependency Risk: universal, not CeFi-only
All coins with upstream dependencies are now scored — not just centralized-dependent ones. Self-backed scores vary by governance type: decentralized 90, centralized-dependent 75, centralized 95. Dependencies auto-derived from reserve composition data.
Chain infrastructure restructured
New two-axis model: ChainTier × DeploymentModel multiplier. Threshold-based penalty applied to the Decentralization dimension.
| Peg | Liquidity | Safety | Resilience | Decentralization | Dep Risk |
|---|---|---|---|---|---|
| multiplier | 30% | — | 20% | 15% | 25% |
v4.1Liquidity weight increase + reclassificationsFeb 27, 2026
Liquidity 25%→30% (“swappability is the most defining aspect of a stablecoin”), resilience 25%→20%.
5 coins reclassified from centralized-dependent to decentralized: crvUSD, FRXUSD, USR, GYD, ALUSD.
| Peg | Liquidity | Safety | Resilience | Decentralization | Dep Risk |
|---|---|---|---|---|---|
| multiplier | 30% | — | 20% | 15% | 25% |
v4.0Peg stability becomes a multiplierFeb 27, 2026
Biggest structural change. Peg Stability removed from the weighted base dimensions entirely and applied as a post-hoc power-curve multiplier:
| pegScore | Multiplier | Impact |
|---|---|---|
| 100 | 1.000 | none |
| 90 | ≈0.979 | −2% |
| 50 | ≈0.870 | −13% |
| 10 | ≈0.631 | −37% |
| 0 | 0 | dead |
Grade thresholds lowered 5 points to compensate for structural deflation. Minimum rated base dimensions reduced from 3 to 2.
| Peg | Liquidity | Safety | Resilience | Decentralization | Dep Risk |
|---|---|---|---|---|---|
| multiplier | 25% | — | 25% | 10% | 30% |
v3.3Reserve-derived collateral qualityFeb 27, 2026
For coins with curated reserve composition data, collateral quality is computed as a weighted average of per-slice risk scores instead of using the enum fallback:
| Reserve risk tier | Score |
|---|---|
| very-low | 100 |
| low | 75 |
| medium | 50 |
| high | 25 |
| very-high | 5 |
v3.2Dependency type ceilingsFeb 27, 2026
New dependency types: wrapper, mechanism, collateral (default). After blended score is computed, ceilings apply:
- wrapper → ceiling = upstream − 3
- mechanism → ceiling = upstream
- collateral → no ceiling
Prevents thin wrappers (e.g. a USDC wrapper) from scoring higher than their upstream.
v3.0Resilience 4-factor modelFeb 26, 2026
Complete redesign of Resilience from 2 factors (chain distribution + freeze rate) to 4 equal sub-factors (25% each):
| Sub-factor | Tiers & scores |
|---|---|
| Chain Risk | ethereum=100, stage1-l2=66, established-alt-l1=20, unproven=0 |
| Collateral Quality | native=100, eth-lst=66, alt-lst-bridged-or-mixed=20, rwa=50, exotic=0 |
| Custody Model | onchain=100, institutional=50, cex=0 |
| Blacklist Capability | not-blacklistable=100, possible=50, blacklistable=0 |
| Peg | Liquidity | Safety | Resilience | Decentralization | Dep Risk |
|---|---|---|---|---|---|
| 25% | 20% | — | 20% | 10% | 25% |
v2.0Remove Safety dimensionFeb 26, 2026
Only ~20 of 142 coins had Bluechip ratings. Sparse coverage caused inconsistent weight redistribution. Safety dimension removed entirely; Bluechip display kept for informational use.
| Peg | Liquidity | Safety | Resilience | Decentralization | Dep Risk |
|---|---|---|---|---|---|
| 25% | 25% | removed | 15% | 10% | 25% |
Other changes in the v2 era
- Self-backed CeFi-Dependent score lowered 95→75 (systemic coupling risk)
- Active-depeg cap and +3 bonus removed from peg stability (pegScore already encodes severity)
- HHI concentration penalty removed from liquidity
- Decentralization widened: decentralized 95→100, centralized-dependent 70→50, centralized 50→0
- “Possible” blacklist tier added (0/50/100 scale)
- Chain-risk penalty on decentralization: stage1-l2 −15, established-alt-l1 −50, unproven −65
v1.0Initial implementationFeb 25, 2026
Six weighted dimensions:
| Dimension | Weight | Approach |
|---|---|---|
| Peg Stability | 25% | pegScore passthrough, capped at 65 during active depeg, +3 bonus if last depeg > 12 months ago |
| Liquidity | 25% | liquidityScore from DEX data, HHI penalty (−5 if >0.5, −10 if >0.8) |
| Safety | 20% | Bluechip rating passthrough (A+=100 … F=25), NR if no rating |
| Resilience | 15% | 2-factor: chain distribution 60% + freeze rate 40% |
| Decentralization | 10% | 3-tier: decentralized=95, centralized-dependent=70, centralized=50 |
| Dependency Risk | 5% | CeFi-Dependent only, unweighted avg of upstream scores |
Grade thresholds: A+≥97, A≥93, A−≥90, B+≥85, B≥80, B−≥75, C+≥70, C≥65, C−≥60, D≥50. Minimum 3 rated dimensions required.
Day-one patches
- Dependencies switched from unweighted to weighted averages
- Dependency renormalization fix: partial backing properly penalized via self-backed blending
- Peg +3 bonus restricted to coins with actual depeg history
- NAV tokens included in grading
- Rebalanced: dependency 5%→15%, resilience 15%→10%, decentralization 10%→5%
Quick Reference
Weight evolution (V8 and earlier)
V9 replaced these dimensions with Backing 40%, Exit 35%, and Economic Control 25%.
| Version | Peg | Liquidity | Safety | Resilience | Decentralization | Dep Risk |
|---|---|---|---|---|---|---|
| v1.0 | 25% | 25% | 20% | 15% | 10% | 5% |
| v1.0 patch | 25% | 25% | 20% | 10% | 5% | 15% |
| v2.0 | 25% | 25% | removed | 15% | 10% | 25% |
| v3.0 | 25% | 20% | — | 20% | 10% | 25% |
| v3.3 | 25% | 20% | — | 20% | 15% | 25% |
| v4.0 | multiplier | 25% | — | 25% | 10% | 30% |
| v4.1 | multiplier | 30% | — | 20% | 15% | 25% |
| v5.0–v8.17 | multiplier | 30% | — | 20% | 15% | 25% |
Grade threshold evolution
| Grade | v1.0 | v4.0 (−5) | v5.1 (−5) |
|---|---|---|---|
| A+ | 97 | 92 | 87 |
| A | 93 | 88 | 83 |
| A− | 90 | 85 | 80 |
| B+ | 85 | 80 | 75 |
| B | 80 | 75 | 70 |
| B− | 75 | 70 | 65 |
| C+ | 70 | 65 | 60 |
| C | 65 | 60 | 55 |
| C− | 60 | 55 | 50 |
| D | 50 | 45 | 40 |
| F | 0 | 0 | 0 |