Roll a and b down by the fraction of anchored time remaining, matching the chain's
roll_down_svi (variance decays toward expiry). remainingMs = expiry − now;
anchorTteMs = expiry − the SVI observation's provider svi_timestamp (its per-update
source timestamp) — the same clock the freshness gate accepts, and what the chain anchors on
(pricing.move: "One clock serves every job"). Anchoring on the batch's ingestion time
instead rolls by the wrong fraction. read.pricer avoids the question entirely (the chain
has already rolled). rho, m, sigma are unchanged. Feed an UNrolled provider surface;
the result is what upProbability expects.
Roll
aandbdown by the fraction of anchored time remaining, matching the chain'sroll_down_svi(variance decays toward expiry).remainingMs= expiry − now;anchorTteMs= expiry − the SVI observation's providersvi_timestamp(its per-update source timestamp) — the same clock the freshness gate accepts, and what the chain anchors on (pricing.move: "One clock serves every job"). Anchoring on the batch's ingestion time instead rolls by the wrong fraction.read.priceravoids the question entirely (the chain has already rolled).rho,m,sigmaare unchanged. Feed an UNrolled provider surface; the result is what upProbability expects.