Dune price mirror: staging evidence (2026-07-20)
Permanent audit record for the PR "feat: Dune price mirror + coherent market marks (drop DeFiLlama from the mark pipeline)". Companion to dune-price-mirror-plan.md (Phase D acceptance). This page is deliberately NOT in the docs navigation; it is a frozen record of the staging validation. Every figure below was produced on the staging DB after the shadow backfill, the token_basis parity swap, and the two guarded mark-repair runs.
Evidence summary
Phantom-wallet acceptance (corrected)
The original plan target of +0.05 ± 0.02 ETH assumed both wrapper legs sat at par at the entry block. That assumption was wrong. A block-precise Curve NG round-trip mid at entry block 25407156 shows weETH at −4.5bp (wstETH slightly rich), so the TRUE entered basis is ≈ 0.00 ETH, not +0.05. The repaired app path now reports −0.021 ETH through the app's own deriveLegEnteredBasis on the re-marked rows, each leg reconstructed within 0.9bp of the on-chain pools:
| Leg | Mirror-derived (bp) | On-chain pool (bp) | Divergence (bp) |
|---|---|---|---|
| weETH | -3.96 | -4.49 | 0.53 |
| wstETH | -0.70 | -1.59 | 0.89 |
Corrected, falsifiable acceptance criterion: per-leg mark within ~1.5bp of block-precise pool truth. PASSED. The old -0.82 ETH disease is gone.
Market-depth modal markers (before -> after the token_basis swap)
Deepest 1-year discount marker on the wrapper depeg charts (client-rendered, verified in a real Chrome via CDP, not SSR grep):
| Token | Before (old feed) | After (mirror) |
|---|---|---|
| wstETH worst-1y | -2.08% | -0.78% |
| weETH worst-1y | -1.02% | -0.81% |
The old markers tagged DeFiLlama cross-vintage feed artifacts; the mirror markers track real dislocation.
On-chain spot-check (5 wrapper flow rows vs pool reads at their own blocks)
| # | Token | Block | Mirror vs pool |
|---|---|---|---|
| 1 | wstETH | 25407156 | 0.89bps |
| 2 | weETH | 25433939 | 0.28bps |
| 3 | wstETH | 25484121 | 1.82bps |
| 4 | weETH | 25534325 | 0.41bps |
| 5 | wstETH | 25563279 | 0.08bps |
All five are within the "a random sample of wrapper flow rows re-verified within a few bps" acceptance criterion (row 3 at 1.82bps is the widest, still a few bps).
Repair idempotency
Phantom wallet: 61 flow rows and 263 snapshot rows were re-marked on the first --execute. A second --execute reports 0 rows to update: the isMaterialChange write-gate holds because the same stored (already-descaled) amount multiplied by the same standing mirror bar re-derives the identical value_market (sub-EPS_REL, no write). value_redemption was never touched.
syrupUSDT: corrupt Dune bars, excluded from the swap
The Dune hourly mirror for syrupUSDT carries corrupt USD bars over 2025-07 through 2025-10: stuck plateaus ranging $0.067 to $6.36 for a token that trades near $1. These drive the parity report's 298x step-noise blow-up and the 47,846bp max offset below; they are source-query ingestion artifacts, not real price. Decisions:
- syrupUSDT is excluded from the token_basis swap (its shadow rows are deleted before the swap runs).
- 997 corrupt bars were purged from the mirror under the same [0.8, 1.5]x sanity criterion used for share-rate cleaning.
- The syrupUSDT share_rate series is clean (the redemption side is unaffected).
This class exposes a real gap: USD-book marks are a single quote and lack the same-bar numerator/denominator cancellation that protects the ETH and BTC books, so a stuck USD print is not self-cancelling. The ingest-guard design (a redemption-band check vs a stuck-price detector) is left as a decision for Fred (see the PR's Known limitations).
DeFiLlama one-print artifacts confirmed (old feed, flat in the mirror)
Two of the deepest old-series discounts are confirmed DeFiLlama single-print artifacts, flat in the mirror at the same bar:
- sUSDe / USDe, 2026-02-02: the old series prints -210bps (USDe -210.35, sUSDe -208.65) at a single 6h bucket. The mirror reads roughly -9.5bps (USDe) / +2.3bps (sUSDe) at that bar. A one-print feed spike, not a peg break.
- USDtb, 2025-11-16: the old series prints -38.90bps at a single bucket; the mirror reads +6.28bps (no dislocation). A one-print feed artifact.
Both match the previously-diagnosed token_basis noise floor (the 6h step at the i.i.d. noise floor).
Full parity report (verbatim)
token_basis parity: served vs Dune-mirror shadow
Generated 2026-07-20T04:49:39.955Z. Per token, over the window where both series exist. Values in basis points (bps) unless noted. No pass/fail threshold is applied; the numbers are for review.
Summary
| Token | Num | Old step-noise | New step-noise | New/Old | Skipped 6h (old/new) | Mean abs offset | Max abs offset | Old rows | New rows | Matched | Extremes survived |
|---|---|---|---|---|---|---|---|---|---|---|---|
| sUSDe | USD | 10.07 | 9.67 | 0.960 | 3/0 | 20.38 | 218.13 | 1304 | 1460 | 1304 | 0/5 |
| sUSDS | USD | 3.86 | 3.09 | 0.801 | 5/0 | 5.13 | 51.64 | 1298 | 1460 | 1298 | 1/5 |
| syrupUSDC | USD | 5.08 | 7.43 | 1.464 | 71/0 | 5.50 | 141.76 | 1372 | 1460 | 1372 | 5/5 |
| syrupUSDT | USD | 7.20 | 2147.96 | 298.324 | 3/1 | 1374.54 | 47846.53 | 1173 | 1161 | 1158 | 5/5 |
| reUSD | USD | 25.09 | 9.15 | 0.365 | 6/0 | 19.62 | 636.63 | 1429 | 1460 | 1429 | 5/5 |
| wstETH | ETH | 19.75 | 3.36 | 0.170 | 0/0 | 7.41 | 191.93 | 1460 | 1460 | 1460 | 5/5 |
| weETH | ETH | 12.78 | 4.17 | 0.326 | 0/0 | 5.22 | 84.16 | 1460 | 1460 | 1460 | 5/5 |
| rETH | ETH | 15.94 | 5.31 | 0.333 | 0/0 | 7.10 | 80.43 | 1460 | 1460 | 1460 | 5/5 |
| osETH | ETH | 65.30 | 65.33 | 1.000 | 5/0 | 30.87 | 1732.55 | 1449 | 1460 | 1449 | 5/5 |
| ezETH | ETH | 11.85 | 7.86 | 0.664 | 2/0 | 6.07 | 110.43 | 1454 | 1460 | 1454 | 5/5 |
| GHO | USD | 3.23 | 3.11 | 0.963 | 0/0 | 4.42 | 22.78 | 1460 | 1460 | 1460 | 5/5 |
| USDe | USD | 9.42 | 2.26 | 0.240 | 0/0 | 4.84 | 202.92 | 1460 | 1460 | 1460 | 5/5 |
| USDtb | USD | 11.42 | 4.65 | 0.407 | 1/0 | 5.60 | 212.48 | 1459 | 1460 | 1459 | 2/5 |
| WBTC | BTC | 15.09 | 3.94 | 0.261 | 0/0 | 8.32 | 50.06 | 1460 | 1460 | 1460 | 5/5 |
| cbBTC | BTC | 9.78 | 2.67 | 0.273 | 0/0 | 4.78 | 67.72 | 1460 | 1460 | 1460 | 4/5 |
| USDC | USD | 0.74 | 0.71 | 0.957 | 0/0 | 0.99 | 3.36 | 98 | 98 | 98 | 5/5 |
| USDT | USD | 1.30 | 1.21 | 0.932 | 0/0 | 0.70 | 2.97 | 98 | 98 | 98 | 5/5 |
| DAI | USD | n/a | n/a | n/a | 0/0 | n/a | n/a | 0 | 0 | 0 | 0/0 |
Step-noise is the population stddev of basis deltas between snapshots EXACTLY 6h apart; wider gaps (daily pre-2025 history, refresher outages) are skipped and counted ("Skipped 6h").
Per-token discount extremes
Survives = the shadow series shows a same-sign (discount, basis < 0) point within ±1 snapshot (6h) of the old extreme. A non-survivor is an old-feed artifact CANDIDATE (surfaced, not a verdict).
sUSDe (USD)
Overlap 2025-07-20T06:00:00.000Z .. 2026-07-20T00:00:00.000Z; old rows 2597 (overlap 1304), new rows 1460 (overlap 1460), matched 1304.
Top-5 deepest old-series discounts:
| # | Timestamp | Old basis | New nearby | Survives |
|---|---|---|---|---|
| 1 | 2026-02-02T00:00:00.000Z | -208.65 | 2.34 | NO |
| 2 | 2026-01-31T18:00:00.000Z | -83.00 | 10.70 | NO |
| 3 | 2026-02-01T12:00:00.000Z | -77.34 | 9.79 | NO |
| 4 | 2026-02-01T06:00:00.000Z | -45.37 | 10.09 | NO |
| 5 | 2026-02-05T00:00:00.000Z | -31.22 | 5.52 | NO |
sUSDS (USD)
Overlap 2025-07-20T06:00:00.000Z .. 2026-07-20T00:00:00.000Z; old rows 1404 (overlap 1298), new rows 1460 (overlap 1460), matched 1298.
Top-5 deepest old-series discounts:
| # | Timestamp | Old basis | New nearby | Survives |
|---|---|---|---|---|
| 1 | 2025-10-11T00:00:00.000Z | -46.74 | 0.59 | NO |
| 2 | 2026-03-24T12:00:00.000Z | -39.93 | -1.06 | yes |
| 3 | 2026-02-05T12:00:00.000Z | -22.59 | 3.18 | NO |
| 4 | 2025-10-16T00:00:00.000Z | -20.66 | 1.15 | NO |
| 5 | 2026-02-23T18:00:00.000Z | -18.67 | 3.59 | NO |
syrupUSDC (USD)
Overlap 2025-07-20T06:00:00.000Z .. 2026-07-20T00:00:00.000Z; old rows 2258 (overlap 1372), new rows 1460 (overlap 1460), matched 1372.
Top-5 deepest old-series discounts:
| # | Timestamp | Old basis | New nearby | Survives |
|---|---|---|---|---|
| 1 | 2025-09-01T18:00:00.000Z | -30.37 | -8.17 | yes |
| 2 | 2025-12-11T00:00:00.000Z | -12.29 | -6.48 | yes |
| 3 | 2025-12-11T06:00:00.000Z | -11.78 | -7.69 | yes |
| 4 | 2026-05-29T12:00:00.000Z | -5.29 | -7.55 | yes |
| 5 | 2026-02-01T00:00:00.000Z | -4.93 | -7.19 | yes |
syrupUSDT (USD)
Overlap 2025-09-29T06:00:00.000Z .. 2026-07-20T00:00:00.000Z; old rows 1173 (overlap 1173), new rows 1350 (overlap 1161), matched 1158.
Top-5 deepest old-series discounts:
| # | Timestamp | Old basis | New nearby | Survives |
|---|---|---|---|---|
| 1 | 2026-06-28T00:00:00.000Z | -33.81 | -17.03 | yes |
| 2 | 2026-06-25T06:00:00.000Z | -33.57 | -34.34 | yes |
| 3 | 2026-01-30T00:00:00.000Z | -32.94 | -27.45 | yes |
| 4 | 2026-06-30T12:00:00.000Z | -32.42 | -31.42 | yes |
| 5 | 2026-01-29T12:00:00.000Z | -32.17 | -27.45 | yes |
reUSD (USD)
Overlap 2025-07-20T06:00:00.000Z .. 2026-07-20T00:00:00.000Z; old rows 1512 (overlap 1429), new rows 1460 (overlap 1460), matched 1429.
Top-5 deepest old-series discounts:
| # | Timestamp | Old basis | New nearby | Survives |
|---|---|---|---|---|
| 1 | 2025-08-21T06:00:00.000Z | -647.63 | -11.00 | yes |
| 2 | 2025-08-21T18:00:00.000Z | -487.43 | -11.00 | yes |
| 3 | 2025-08-21T12:00:00.000Z | -367.42 | -11.00 | yes |
| 4 | 2025-08-22T00:00:00.000Z | -315.85 | -3.48 | yes |
| 5 | 2025-08-22T06:00:00.000Z | -307.50 | -3.48 | yes |
wstETH (ETH)
Overlap 2025-07-20T06:00:00.000Z .. 2026-07-20T00:00:00.000Z; old rows 3717 (overlap 1460), new rows 1460 (overlap 1460), matched 1460.
Top-5 deepest old-series discounts:
| # | Timestamp | Old basis | New nearby | Survives |
|---|---|---|---|---|
| 1 | 2025-08-09T00:00:00.000Z | -207.67 | -21.80 | yes |
| 2 | 2025-08-29T18:00:00.000Z | -157.90 | -28.48 | yes |
| 3 | 2025-11-06T00:00:00.000Z | -124.43 | -13.99 | yes |
| 4 | 2026-04-21T06:00:00.000Z | -113.19 | -78.16 | yes |
| 5 | 2026-04-20T18:00:00.000Z | -111.89 | -76.94 | yes |
weETH (ETH)
Overlap 2025-07-20T06:00:00.000Z .. 2026-07-20T00:00:00.000Z; old rows 3513 (overlap 1460), new rows 1460 (overlap 1460), matched 1460.
Top-5 deepest old-series discounts:
| # | Timestamp | Old basis | New nearby | Survives |
|---|---|---|---|---|
| 1 | 2026-04-20T18:00:00.000Z | -101.86 | -77.07 | yes |
| 2 | 2026-04-21T06:00:00.000Z | -93.91 | -74.41 | yes |
| 3 | 2026-04-19T06:00:00.000Z | -83.63 | -80.87 | yes |
| 4 | 2026-04-20T00:00:00.000Z | -74.53 | -75.67 | yes |
| 5 | 2026-04-20T12:00:00.000Z | -74.05 | -77.07 | yes |
rETH (ETH)
Overlap 2025-07-20T06:00:00.000Z .. 2026-07-20T00:00:00.000Z; old rows 3529 (overlap 1460), new rows 1460 (overlap 1460), matched 1460.
Top-5 deepest old-series discounts:
| # | Timestamp | Old basis | New nearby | Survives |
|---|---|---|---|---|
| 1 | 2026-04-19T18:00:00.000Z | -112.74 | -120.10 | yes |
| 2 | 2025-08-21T00:00:00.000Z | -107.34 | -55.14 | yes |
| 3 | 2025-08-05T06:00:00.000Z | -101.10 | -40.73 | yes |
| 4 | 2026-04-20T18:00:00.000Z | -99.75 | -58.92 | yes |
| 5 | 2025-08-21T06:00:00.000Z | -97.85 | -59.69 | yes |
osETH (ETH)
Overlap 2025-07-20T06:00:00.000Z .. 2026-07-20T00:00:00.000Z; old rows 2227 (overlap 1449), new rows 1460 (overlap 1460), matched 1449.
Top-5 deepest old-series discounts:
| # | Timestamp | Old basis | New nearby | Survives |
|---|---|---|---|---|
| 1 | 2026-05-04T18:00:00.000Z | -597.25 | -87.23 | yes |
| 2 | 2026-06-08T12:00:00.000Z | -433.07 | -169.22 | yes |
| 3 | 2025-12-09T00:00:00.000Z | -376.00 | -333.11 | yes |
| 4 | 2025-11-21T06:00:00.000Z | -366.41 | -372.25 | yes |
| 5 | 2025-12-08T18:00:00.000Z | -362.92 | -333.11 | yes |
ezETH (ETH)
Overlap 2025-07-20T06:00:00.000Z .. 2026-07-20T00:00:00.000Z; old rows 2241 (overlap 1454), new rows 1460 (overlap 1460), matched 1454.
Top-5 deepest old-series discounts:
| # | Timestamp | Old basis | New nearby | Survives |
|---|---|---|---|---|
| 1 | 2026-04-21T00:00:00.000Z | -115.56 | -114.51 | yes |
| 2 | 2026-04-21T06:00:00.000Z | -114.41 | -114.51 | yes |
| 3 | 2026-04-22T00:00:00.000Z | -108.47 | -129.51 | yes |
| 4 | 2026-04-21T18:00:00.000Z | -107.57 | -129.51 | yes |
| 5 | 2026-04-22T06:00:00.000Z | -104.34 | -128.02 | yes |
GHO (USD)
Overlap 2025-07-20T06:00:00.000Z .. 2026-07-20T00:00:00.000Z; old rows 3701 (overlap 1460), new rows 1460 (overlap 1460), matched 1460.
Top-5 deepest old-series discounts:
| # | Timestamp | Old basis | New nearby | Survives |
|---|---|---|---|---|
| 1 | 2026-01-06T18:00:00.000Z | -24.72 | -5.71 | yes |
| 2 | 2026-06-25T06:00:00.000Z | -23.94 | -20.95 | yes |
| 3 | 2026-06-29T06:00:00.000Z | -23.49 | -23.20 | yes |
| 4 | 2026-06-29T00:00:00.000Z | -23.34 | -23.20 | yes |
| 5 | 2026-06-28T00:00:00.000Z | -23.33 | -26.09 | yes |
USDe (USD)
Overlap 2025-07-20T06:00:00.000Z .. 2026-07-20T00:00:00.000Z; old rows 3715 (overlap 1460), new rows 1460 (overlap 1460), matched 1460.
Top-5 deepest old-series discounts:
| # | Timestamp | Old basis | New nearby | Survives |
|---|---|---|---|---|
| 1 | 2026-02-02T00:00:00.000Z | -210.35 | -9.54 | yes |
| 2 | 2026-01-31T18:00:00.000Z | -90.62 | -9.73 | yes |
| 3 | 2026-02-01T12:00:00.000Z | -71.98 | -6.70 | yes |
| 4 | 2026-02-01T06:00:00.000Z | -54.94 | -5.38 | yes |
| 5 | 2026-02-05T00:00:00.000Z | -40.36 | -15.72 | yes |
USDtb (USD)
Overlap 2025-07-20T06:00:00.000Z .. 2026-07-20T00:00:00.000Z; old rows 1968 (overlap 1459), new rows 1460 (overlap 1460), matched 1459.
Top-5 deepest old-series discounts:
| # | Timestamp | Old basis | New nearby | Survives |
|---|---|---|---|---|
| 1 | 2026-07-07T06:00:00.000Z | -69.81 | 3.32 | NO |
| 2 | 2025-11-16T18:00:00.000Z | -38.90 | 6.28 | NO |
| 3 | 2026-03-22T00:00:00.000Z | -32.83 | 3.14 | NO |
| 4 | 2025-11-15T00:00:00.000Z | -29.46 | -2.30 | yes |
| 5 | 2026-02-14T06:00:00.000Z | -26.74 | -4.90 | yes |
WBTC (BTC)
Overlap 2025-07-20T06:00:00.000Z .. 2026-07-20T00:00:00.000Z; old rows 3719 (overlap 1460), new rows 1460 (overlap 1460), matched 1460.
Top-5 deepest old-series discounts:
| # | Timestamp | Old basis | New nearby | Survives |
|---|---|---|---|---|
| 1 | 2026-01-31T18:00:00.000Z | -60.50 | -32.95 | yes |
| 2 | 2026-05-05T12:00:00.000Z | -59.28 | -33.97 | yes |
| 3 | 2025-12-17T18:00:00.000Z | -56.49 | -24.32 | yes |
| 4 | 2026-01-28T18:00:00.000Z | -55.45 | -24.11 | yes |
| 5 | 2026-03-07T06:00:00.000Z | -52.54 | -26.74 | yes |
cbBTC (BTC)
Overlap 2025-07-20T06:00:00.000Z .. 2026-07-20T00:00:00.000Z; old rows 2700 (overlap 1460), new rows 1460 (overlap 1460), matched 1460.
Top-5 deepest old-series discounts:
| # | Timestamp | Old basis | New nearby | Survives |
|---|---|---|---|---|
| 1 | 2025-10-13T18:00:00.000Z | -42.34 | 0.20 | NO |
| 2 | 2025-11-14T12:00:00.000Z | -35.66 | -0.04 | yes |
| 3 | 2026-02-28T18:00:00.000Z | -30.92 | -2.82 | yes |
| 4 | 2025-11-24T18:00:00.000Z | -28.01 | -1.76 | yes |
| 5 | 2026-02-23T18:00:00.000Z | -27.24 | -2.61 | yes |
USDC (USD)
Overlap 2026-06-25T18:00:00.000Z .. 2026-07-20T00:00:00.000Z; old rows 98 (overlap 98), new rows 1460 (overlap 98), matched 98.
Top-5 deepest old-series discounts:
| # | Timestamp | Old basis | New nearby | Survives |
|---|---|---|---|---|
| 1 | 2026-06-30T06:00:00.000Z | -4.48 | -2.65 | yes |
| 2 | 2026-07-01T06:00:00.000Z | -4.41 | -2.16 | yes |
| 3 | 2026-06-30T12:00:00.000Z | -4.25 | -2.65 | yes |
| 4 | 2026-06-30T00:00:00.000Z | -4.05 | -2.83 | yes |
| 5 | 2026-06-29T18:00:00.000Z | -3.76 | -2.83 | yes |
USDT (USD)
Overlap 2026-06-25T18:00:00.000Z .. 2026-07-20T00:00:00.000Z; old rows 98 (overlap 98), new rows 1460 (overlap 98), matched 98.
Top-5 deepest old-series discounts:
| # | Timestamp | Old basis | New nearby | Survives |
|---|---|---|---|---|
| 1 | 2026-06-30T12:00:00.000Z | -16.80 | -15.66 | yes |
| 2 | 2026-06-29T06:00:00.000Z | -16.59 | -15.53 | yes |
| 3 | 2026-06-30T06:00:00.000Z | -16.46 | -15.66 | yes |
| 4 | 2026-07-01T06:00:00.000Z | -15.87 | -15.07 | yes |
| 5 | 2026-07-01T00:00:00.000Z | -15.72 | -15.14 | yes |
DAI (USD)
No overlap window (old rows 0, new rows 1460).