Pricing Pipeline Changelog: v4 archive
Historical release evidence. Return to current versions and the complete history index.
What this controls
Pricing Pipeline Changelog: v4 archive version history
Use this changelog to trace how Pharos changed the related scoring, data-source, threshold, or interpretation rules over time. Entries record the contract active at each release; archived rules are retained so historical charts and citations can be read against the rules active at the time.
Primary references
Latest version
Corroborated severe-depeg pool challenge protection
Pool challenge and temporal-jump validation can still downgrade or scrutinize a selected severe-depeg primary price, but they no longer replace or reject that price when multiple live candidate sources corroborate severe downside and at least one is depeg-authoritative.
Impact snapshot
- Near-peg or stale DEX liquidity can no longer overwrite a severe depeg already corroborated by independent live candidates such as CoinGecko, DefiLlama-list, and Pyth
- The same severe-downside candidate evidence satisfies the temporal-jump guard when the previous trusted price was near peg
- The pool challenge remains active for weak or uncorroborated soft-source prices, and still replaces prices when independent DEX protocol medians are the only corroborating disagreement
- USR now preserves the market price near the live CoinGecko/DefiLlama/Pyth severe-depeg level while marking the result low-confidence when DEX pools disagree
v4.38Apr 15, 2026Corroborated severe-depeg pool challenge protection
Pool challenge and temporal-jump validation can still downgrade or scrutinize a selected severe-depeg primary price, but they no longer replace or reject that price when multiple live candidate sources corroborate severe downside and at least one is depeg-authoritative.
- Near-peg or stale DEX liquidity can no longer overwrite a severe depeg already corroborated by independent live candidates such as CoinGecko, DefiLlama-list, and Pyth
- The same severe-downside candidate evidence satisfies the temporal-jump guard when the previous trusted price was near peg
- The pool challenge remains active for weak or uncorroborated soft-source prices, and still replaces prices when independent DEX protocol medians are the only corroborating disagreement
- USR now preserves the market price near the live CoinGecko/DefiLlama/Pyth severe-depeg level while marking the result low-confidence when DEX pools disagree
DetailsHide details
Corroborated severe-depeg pool challenge protection
Pool challenge and temporal-jump validation can still downgrade or scrutinize a selected severe-depeg primary price, but they no longer replace or reject that price when multiple live candidate sources corroborate severe downside and at least one is depeg-authoritative.
- Near-peg or stale DEX liquidity can no longer overwrite a severe depeg already corroborated by independent live candidates such as CoinGecko, DefiLlama-list, and Pyth
- The same severe-downside candidate evidence satisfies the temporal-jump guard when the previous trusted price was near peg
- The pool challenge remains active for weak or uncorroborated soft-source prices, and still replaces prices when independent DEX protocol medians are the only corroborating disagreement
- USR now preserves the market price near the live CoinGecko/DefiLlama/Pyth severe-depeg level while marking the result low-confidence when DEX pools disagree
Impact notes
- Near-peg or stale DEX liquidity can no longer overwrite a severe depeg already corroborated by independent live candidates such as CoinGecko, DefiLlama-list, and Pyth
- The same severe-downside candidate evidence satisfies the temporal-jump guard when the previous trusted price was near peg
- The pool challenge remains active for weak or uncorroborated soft-source prices, and still replaces prices when independent DEX protocol medians are the only corroborating disagreement
- USR now preserves the market price near the live CoinGecko/DefiLlama/Pyth severe-depeg level while marking the result low-confidence when DEX pools disagree
v4.37Apr 15, 2026Severe-depeg corroboration continuity through validation
Primary severe-downside corroboration evidence is now preserved through the later prevalidation and post-enrichment validation passes when the selected primary price remains unchanged.
- Low-confidence severe depeg prices can stay published when multiple live candidate sources independently confirm the downside even if they do not form a tight high-confidence cluster
- The severe-downside guardrail is unchanged for genuinely single-source prices because candidate evidence is reused only when the current asset price, source, and confidence still match the primary result
- Assets such as USR no longer flap to `N/A` after primary pricing accepted a corroborated severe depeg and a later generic validation pass lost the candidate-price evidence
DetailsHide details
Severe-depeg corroboration continuity through validation
Primary severe-downside corroboration evidence is now preserved through the later prevalidation and post-enrichment validation passes when the selected primary price remains unchanged.
- Low-confidence severe depeg prices can stay published when multiple live candidate sources independently confirm the downside even if they do not form a tight high-confidence cluster
- The severe-downside guardrail is unchanged for genuinely single-source prices because candidate evidence is reused only when the current asset price, source, and confidence still match the primary result
- Assets such as USR no longer flap to `N/A` after primary pricing accepted a corroborated severe depeg and a later generic validation pass lost the candidate-price evidence
Impact notes
- Low-confidence severe depeg prices can stay published when multiple live candidate sources independently confirm the downside even if they do not form a tight high-confidence cluster
- The severe-downside guardrail is unchanged for genuinely single-source prices because candidate evidence is reused only when the current asset price, source, and confidence still match the primary result
- Assets such as USR no longer flap to `N/A` after primary pricing accepted a corroborated severe depeg and a later generic validation pass lost the candidate-price evidence
v4.36Apr 15, 2026Blocked Binance host accounting
Binance all-host 403/451 blocks from Worker egress are now treated as no-contribution provider blocks rather than source outages, while diagnostics keep the blocked endpoints visible.
- When every attempted Binance host returns 403 or 451, the run records diagnostics but closes the source-wide breaker instead of escalating a persistent false outage
- Binance contributes zero prices in that state, so consensus continues through Kraken, Bitstamp, Coinbase, Pyth, RedStone, Curve, DEX, CoinGecko, and DefiLlama inputs
- Transport errors, server errors, malformed responses, or successful responses with zero tracked matches still follow the normal failure diagnostics path
DetailsHide details
Blocked Binance host accounting
Binance all-host 403/451 blocks from Worker egress are now treated as no-contribution provider blocks rather than source outages, while diagnostics keep the blocked endpoints visible.
- When every attempted Binance host returns 403 or 451, the run records diagnostics but closes the source-wide breaker instead of escalating a persistent false outage
- Binance contributes zero prices in that state, so consensus continues through Kraken, Bitstamp, Coinbase, Pyth, RedStone, Curve, DEX, CoinGecko, and DefiLlama inputs
- Transport errors, server errors, malformed responses, or successful responses with zero tracked matches still follow the normal failure diagnostics path
Impact notes
- When every attempted Binance host returns 403 or 451, the run records diagnostics but closes the source-wide breaker instead of escalating a persistent false outage
- Binance contributes zero prices in that state, so consensus continues through Kraken, Bitstamp, Coinbase, Pyth, RedStone, Curve, DEX, CoinGecko, and DefiLlama inputs
- Transport errors, server errors, malformed responses, or successful responses with zero tracked matches still follow the normal failure diagnostics path
v4.35Apr 15, 2026No-candidate Jupiter breaker recovery
Jupiter no-candidate runs now close stale-open breaker state without making an external health probe, reflecting that no eligible Solana fallback work remains after authoritative gating.
- If authoritative pricing removes all Jupiter fallback candidates, the stale `jupiter-prices` breaker can recover without spending a provider request
- The change prevents irrelevant provider-edge blocks from keeping the public circuit list open when Jupiter is not part of the current pricing path
- Future eligible Jupiter fallback candidates still go through the normal circuit breaker and provider diagnostics path
DetailsHide details
No-candidate Jupiter breaker recovery
Jupiter no-candidate runs now close stale-open breaker state without making an external health probe, reflecting that no eligible Solana fallback work remains after authoritative gating.
- If authoritative pricing removes all Jupiter fallback candidates, the stale `jupiter-prices` breaker can recover without spending a provider request
- The change prevents irrelevant provider-edge blocks from keeping the public circuit list open when Jupiter is not part of the current pricing path
- Future eligible Jupiter fallback candidates still go through the normal circuit breaker and provider diagnostics path
Impact notes
- If authoritative pricing removes all Jupiter fallback candidates, the stale `jupiter-prices` breaker can recover without spending a provider request
- The change prevents irrelevant provider-edge blocks from keeping the public circuit list open when Jupiter is not part of the current pricing path
- Future eligible Jupiter fallback candidates still go through the normal circuit breaker and provider diagnostics path
v4.34Apr 15, 2026Binance host failover for Worker egress
Added a Binance ticker host failover after production Worker diagnostics showed the market-data mirror returning HTTP 403 while local audits still saw healthy Binance USD pairs.
- Binance pricing now tries `data-api.binance.vision` first and falls back to `api.binance.com` before recording the source as failed
- Provider diagnostics preserve each attempted Binance endpoint so operators can see which host succeeded or failed
- The change keeps the same tracked `USDTUSD` and `USDCUSD` market mappings and does not alter consensus weighting
DetailsHide details
Binance host failover for Worker egress
Added a Binance ticker host failover after production Worker diagnostics showed the market-data mirror returning HTTP 403 while local audits still saw healthy Binance USD pairs.
- Binance pricing now tries `data-api.binance.vision` first and falls back to `api.binance.com` before recording the source as failed
- Provider diagnostics preserve each attempted Binance endpoint so operators can see which host succeeded or failed
- The change keeps the same tracked `USDTUSD` and `USDCUSD` market mappings and does not alter consensus weighting
Impact notes
- Binance pricing now tries `data-api.binance.vision` first and falls back to `api.binance.com` before recording the source as failed
- Provider diagnostics preserve each attempted Binance endpoint so operators can see which host succeeded or failed
- The change keeps the same tracked `USDTUSD` and `USDCUSD` market mappings and does not alter consensus weighting
v4.33Apr 15, 2026Jupiter official gateway fallback
Moved Jupiter fallback probes from the Lite gateway to the official Price API V3 gateway after Worker egress repeatedly received Cloudflare 403 block pages from the Lite host.
- Jupiter fallback and health probes now use `https://api.jup.ag/price/v3` instead of the Lite gateway
- The source-level circuit can recover through the same official V3 response shape already used by the fallback parser
- The fallback remains best-effort, liquidity-gated, and downstream of authoritative protocol-backed prices
DetailsHide details
Jupiter official gateway fallback
Moved Jupiter fallback probes from the Lite gateway to the official Price API V3 gateway after Worker egress repeatedly received Cloudflare 403 block pages from the Lite host.
- Jupiter fallback and health probes now use `https://api.jup.ag/price/v3` instead of the Lite gateway
- The source-level circuit can recover through the same official V3 response shape already used by the fallback parser
- The fallback remains best-effort, liquidity-gated, and downstream of authoritative protocol-backed prices
Impact notes
- Jupiter fallback and health probes now use `https://api.jup.ag/price/v3` instead of the Lite gateway
- The source-level circuit can recover through the same official V3 response shape already used by the fallback parser
- The fallback remains best-effort, liquidity-gated, and downstream of authoritative protocol-backed prices
v4.32Apr 14, 2026Provider diagnostics and authoritative fallback gating
Pricing provider attempts now emit durable diagnostics, and authoritative live overrides are applied before fallback enrichment so known redeemable wrappers do not poison fallback-source circuit breakers.
- `sync-stablecoins` cron metadata now records Binance and Jupiter attempt status, endpoint, candidate counts, response counts, matched counts, and sanitized snippets for non-OK responses
- Protocol-backed live overrides are pre-applied before fallback enrichment and re-applied after GeckoTerminal probing, preserving final authoritative price semantics while keeping inherited-price assets out of unnecessary fallback probes
- The Jupiter breaker can run a bounded health probe when no fallback candidates remain, allowing a previously open breaker to recover once the provider is reachable instead of staying stale-open indefinitely
DetailsHide details
Provider diagnostics and authoritative fallback gating
Pricing provider attempts now emit durable diagnostics, and authoritative live overrides are applied before fallback enrichment so known redeemable wrappers do not poison fallback-source circuit breakers.
- `sync-stablecoins` cron metadata now records Binance and Jupiter attempt status, endpoint, candidate counts, response counts, matched counts, and sanitized snippets for non-OK responses
- Protocol-backed live overrides are pre-applied before fallback enrichment and re-applied after GeckoTerminal probing, preserving final authoritative price semantics while keeping inherited-price assets out of unnecessary fallback probes
- The Jupiter breaker can run a bounded health probe when no fallback candidates remain, allowing a previously open breaker to recover once the provider is reachable instead of staying stale-open indefinitely
Impact notes
- `sync-stablecoins` cron metadata now records Binance and Jupiter attempt status, endpoint, candidate counts, response counts, matched counts, and sanitized snippets for non-OK responses
- Protocol-backed live overrides are pre-applied before fallback enrichment and re-applied after GeckoTerminal probing, preserving final authoritative price semantics while keeping inherited-price assets out of unnecessary fallback probes
- The Jupiter breaker can run a bounded health probe when no fallback candidates remain, allowing a previously open breaker to recover once the provider is reachable instead of staying stale-open indefinitely
v4.31Apr 13, 2026Curated-contract price fallback and USDnr M0 inheritance
DefiLlama contract-price fallback now starts from curated tracked deployments when an upstream stablecoin row is addressless, and USDnr joins the M0 tracked-parent price inheritance path.
- Addressless DefiLlama stablecoin rows can now recover prices through exact curated `contracts` metadata instead of requiring the upstream row to carry its own `address` field
- `ctusd-citrea` can publish the fresh DefiLlama `citrea:<contract>` quote surfaced by the coins API without relying on symbol search or stale CoinGecko rows
- `usdnr-nerona` now inherits tracked `wm-m0` live pricing and historical replay through the existing authoritative `protocol-redeem` lane used by other M0 extension assets
DetailsHide details
Curated-contract price fallback and USDnr M0 inheritance
DefiLlama contract-price fallback now starts from curated tracked deployments when an upstream stablecoin row is addressless, and USDnr joins the M0 tracked-parent price inheritance path.
- Addressless DefiLlama stablecoin rows can now recover prices through exact curated `contracts` metadata instead of requiring the upstream row to carry its own `address` field
- `ctusd-citrea` can publish the fresh DefiLlama `citrea:<contract>` quote surfaced by the coins API without relying on symbol search or stale CoinGecko rows
- `usdnr-nerona` now inherits tracked `wm-m0` live pricing and historical replay through the existing authoritative `protocol-redeem` lane used by other M0 extension assets
Impact notes
- Addressless DefiLlama stablecoin rows can now recover prices through exact curated `contracts` metadata instead of requiring the upstream row to carry its own `address` field
- `ctusd-citrea` can publish the fresh DefiLlama `citrea:<contract>` quote surfaced by the coins API without relying on symbol search or stale CoinGecko rows
- `usdnr-nerona` now inherits tracked `wm-m0` live pricing and historical replay through the existing authoritative `protocol-redeem` lane used by other M0 extension assets
v4.3Apr 11, 2026CoinGecko simple-price upstream freshness gate
CoinGecko simple-price inputs now use the provider's upstream observation timestamp when available and drop stale rows instead of stamping them as fresh local fetches.
- Primary pricing requests `last_updated_at` from CoinGecko `/simple/price` and records it as upstream freshness when present
- CoinGecko simple-price rows older than the source trust window are excluded from primary consensus rather than being treated as current
- Downstream consumers such as PegScore and DEWS now see missing, lower-confidence, or non-CoinGecko corroborated inputs instead of replaying stale CoinGecko marks as fresh
DetailsHide details
CoinGecko simple-price upstream freshness gate
CoinGecko simple-price inputs now use the provider's upstream observation timestamp when available and drop stale rows instead of stamping them as fresh local fetches.
- Primary pricing requests `last_updated_at` from CoinGecko `/simple/price` and records it as upstream freshness when present
- CoinGecko simple-price rows older than the source trust window are excluded from primary consensus rather than being treated as current
- Downstream consumers such as PegScore and DEWS now see missing, lower-confidence, or non-CoinGecko corroborated inputs instead of replaying stale CoinGecko marks as fresh
Impact notes
- Primary pricing requests `last_updated_at` from CoinGecko `/simple/price` and records it as upstream freshness when present
- CoinGecko simple-price rows older than the source trust window are excluded from primary consensus rather than being treated as current
- Downstream consumers such as PegScore and DEWS now see missing, lower-confidence, or non-CoinGecko corroborated inputs instead of replaying stale CoinGecko marks as fresh
v4.2Apr 10, 2026Inherited wM pricing for M0 extension assets
Added authoritative tracked-base inheritance for M0 extension assets whose exact child-token market coverage is absent or too thin, so price publication follows the executable parent rail instead of staying missing or trusting weak child-market prints.
- Live pricing now publishes `usdk-kast` and `xo-exodus` from the authoritative `protocol-redeem` lane by inheriting tracked `wm-m0` pricing when that parent rail is available
- Historical depeg backfills for those assets now replay the tracked `wm-m0` market series instead of relying on missing or thin child-market history
- This extends the same tracked-base inheritance pattern already used for `usdai-usd-ai -> pyusd-paypal`, keeping wrapper-style M0 extension assets aligned with their executable parent value
DetailsHide details
Inherited wM pricing for M0 extension assets
Added authoritative tracked-base inheritance for M0 extension assets whose exact child-token market coverage is absent or too thin, so price publication follows the executable parent rail instead of staying missing or trusting weak child-market prints.
- Live pricing now publishes `usdk-kast` and `xo-exodus` from the authoritative `protocol-redeem` lane by inheriting tracked `wm-m0` pricing when that parent rail is available
- Historical depeg backfills for those assets now replay the tracked `wm-m0` market series instead of relying on missing or thin child-market history
- This extends the same tracked-base inheritance pattern already used for `usdai-usd-ai -> pyusd-paypal`, keeping wrapper-style M0 extension assets aligned with their executable parent value
Impact notes
- Live pricing now publishes `usdk-kast` and `xo-exodus` from the authoritative `protocol-redeem` lane by inheriting tracked `wm-m0` pricing when that parent rail is available
- Historical depeg backfills for those assets now replay the tracked `wm-m0` market series instead of relying on missing or thin child-market history
- This extends the same tracked-base inheritance pattern already used for `usdai-usd-ai -> pyusd-paypal`, keeping wrapper-style M0 extension assets aligned with their executable parent value
v4.1Apr 8, 2026Split DexScreener exact-vs-search breaker accounting
The DexScreener fallback now records exact token-address lookups and last-resort symbol search under separate circuit breakers, so a flaky search endpoint cannot suppress otherwise healthy exact-address recovery.
- `dexscreener-prices` now reflects only `/tokens/v1/{chainId}/{address}` availability in the late-stage stablecoin pricing fallback
- The symbol-search recovery path now records independently under `dexscreener-search`, which keeps search-specific failures visible without poisoning exact-address availability
- Public-health grouping excludes the search-only breaker so a best-effort addressless fallback issue does not count as a separate top-level availability circuit group
DetailsHide details
Split DexScreener exact-vs-search breaker accounting
The DexScreener fallback now records exact token-address lookups and last-resort symbol search under separate circuit breakers, so a flaky search endpoint cannot suppress otherwise healthy exact-address recovery.
- `dexscreener-prices` now reflects only `/tokens/v1/{chainId}/{address}` availability in the late-stage stablecoin pricing fallback
- The symbol-search recovery path now records independently under `dexscreener-search`, which keeps search-specific failures visible without poisoning exact-address availability
- Public-health grouping excludes the search-only breaker so a best-effort addressless fallback issue does not count as a separate top-level availability circuit group
Impact notes
- `dexscreener-prices` now reflects only `/tokens/v1/{chainId}/{address}` availability in the late-stage stablecoin pricing fallback
- The symbol-search recovery path now records independently under `dexscreener-search`, which keeps search-specific failures visible without poisoning exact-address availability
- Public-health grouping excludes the search-only breaker so a best-effort addressless fallback issue does not count as a separate top-level availability circuit group
v4.0Apr 8, 2026DexScreener request-budget walk-through for skipped fallback candidates
The DexScreener fallback budget now applies to actual outgoing requests instead of the first ten missing assets, so high-rank addressless rows that are skipped for identity reasons cannot crowd out later valid fallback candidates.
- Pass 4 still prioritizes exact-target assets first and then larger circulating names, but it now walks the full sorted missing set until it spends the 10-request DexScreener budget
- Addressless non-unique symbols that are skipped without making a request no longer consume one of the candidate slots that can reach lower-rank unique-symbol recoveries such as CHFAU or ctUSD
- This reduces false `dexscreener-prices` breaker opens during bad network windows because the pass has more chances to record at least one healthy DexScreener response before giving up
DetailsHide details
DexScreener request-budget walk-through for skipped fallback candidates
The DexScreener fallback budget now applies to actual outgoing requests instead of the first ten missing assets, so high-rank addressless rows that are skipped for identity reasons cannot crowd out later valid fallback candidates.
- Pass 4 still prioritizes exact-target assets first and then larger circulating names, but it now walks the full sorted missing set until it spends the 10-request DexScreener budget
- Addressless non-unique symbols that are skipped without making a request no longer consume one of the candidate slots that can reach lower-rank unique-symbol recoveries such as CHFAU or ctUSD
- This reduces false `dexscreener-prices` breaker opens during bad network windows because the pass has more chances to record at least one healthy DexScreener response before giving up
Impact notes
- Pass 4 still prioritizes exact-target assets first and then larger circulating names, but it now walks the full sorted missing set until it spends the 10-request DexScreener budget
- Addressless non-unique symbols that are skipped without making a request no longer consume one of the candidate slots that can reach lower-rank unique-symbol recoveries such as CHFAU or ctUSD
- This reduces false `dexscreener-prices` breaker opens during bad network windows because the pass has more chances to record at least one healthy DexScreener response before giving up