Reconciles the counts across panels. Clean = the 9am board freeze is a genuine same-instant capture (obs_time == board date) — these are the only days the rolling field races and the only days appended to the backtest. Wiring-test = a board exists but its freeze is look-ahead-contaminated (parsed hours/days late), so it's excluded from the rolling field + dataset — kept only for plumbing verification. Settled = days with TWC truth on file (the 3-way scorecard scores every settled city-day regardless of freeze cleanliness, so its contract count is higher). If two panels show different totals, this is why.
Top row: how our corrected model actually did each settled day vs the market, scored against the TWC settlement (the number Kalshi pays on). our MAE / mkt MAE = avg °F off the settlement across that day's settled cities · win = we were closer on average that day · running = cumulative MAE since tracking began. The benchmark card is the frozen 2yr out-of-sample corr MAE (vs ASOS) — the target the running line is chasing; per-city detail lives on History. Small n early — a single day is noise; watch the running line.
TWC = official settlement high · win = winning 2°F bucket · ourC/mktEV = our center vs market expected temp · off = °F from truth · ★ = we disagreed with the market's favored bucket (edge lives here) · P&L¢ = profit if we'd bought 1 Yes of our pick at the market price (win +[100−price], lose −price) — already charges the vig, so net > 0 means we beat the market AND the cost. Paper only.
Running total if we'd bought 1 Yes contract of our top-pick bucket each day at the market's price. P&L already charges the market's vig-inflated entry price, so the line above 0 = beating the market AND the vig on paper; below 0 = not yet. Paper only — no money, no trades. One point per settled day; early points are noise, watch the slope as days accumulate.
What this is vs the panel above: the Rolling field (above) scores only the handful of clean live days we've logged since going live (tiny n, noisy). THIS panel is the full-history archive bake-off — every strategy scored across the entire backfill (~90 days × 12 cities), re-run on every collector cycle so its numbers + row count never go stale. Same walk-forward discipline (each city-day trained only on that city's earlier days — leak-checked), same target (Kalshi settlement bucket, not Open-Meteo's ~1.6°F-cold high). Because it has hundreds of days, its ranking is the statistically meaningful one; the rolling field is what those same strategies are doing on the clean live sample so far. MAE = °F off settlement · hit% = top-pick bucket won · P&L = buy 1 Yes at 9am yes-ask (charges the vig). Market favourite = the bar. Numbers differ from the rolling field because this is hundreds of days vs a few — that's expected, not a contradiction. Paper research only.
Unlike the frozen backtest (a one-time bake-off on the ~90-day archive), this grows: each clean settled day is appended into the backtest dataset, and the whole strategy field is re-raced across the full history + every new day — walk-forward, each day trained only on rows strictly before it (leak-free). Contenders include the two new live layers: corrector+calib (Layer 3 recalibration) and corrector+nowcast (Layer 1 constraint). A day is only counted if its 9am forecast freeze is a genuine same-instant capture (look-ahead-contaminated boards are refused). MAE = °F off TWC settlement · hit% = top bucket won · P&L = buy our pick at the 9am yes-ask (charges the vig). The market favourite is the bar. Why the model-alone rows (GFS/ECMWF/ICON/HRRR/ensemble) are identical here: the live 9am freeze currently stores only our blended corrected center, not each model's individual high — so on live days every "model-alone" strategy collapses to the same number. That's a data-capture limitation, not a real tie; it resolves once the freeze logs per-model highs. The archive bake-off above (which has per-model data) is where those strategies genuinely differ. Early n is noise; watch the field's slope as Temp Tick's daily boards accumulate.
Once part of the day's high is already observed, any bucket below it is impossible — we fade it to 0 and renormalise. This is a hard constraint on the day-ahead distribution, not a new model. The table is a ceiling simulation: it assumes a fraction f of the day's climb is observed at read time (using the settled temp to place it → this is look-ahead, an optimistic upper bound, NOT a live result). It answers "is it even worth wiring the live obs pull?" — the answer is yes only if the edge shows up as f→1 (late in the day). The live constraint path is unit-tested (status below) and runs forward on real morning obs once the harness logs them. $dead/bkt = market money still sitting on buckets we can prove dead.
Every settled day logs where Kalshi resolved vs the TWC number we observed. This classifies each mismatch — C→F rounding (TWC computes in °C; whole/half-°C images land on odd °F tenths near bucket edges), half-degree edge (±0.5 off-by-one boundary risk), large divergence (genuine feed disagreement, e.g. the Sep-16 Houston 93 vs 95-96), or station-suspect (persistent same-direction gap = wrong station map). A consistent signed gap per city is a correction we add to that city's center. Honest rule: no conclusion is drawn on n<10 — it fills in as Temp Tick's daily Kalshi backfill accumulates.
On bucket contracts you lose by being confident in the wrong bucket, not by being slightly off-center. This bins our stated probabilities and compares them to how often they actually hit (reliability), then fits a monotonic recalibration map (isotonic / Platt) — walk-forward, fit on the earlier 70%, judged on the untouched later 30%. ECE = average gap between what we say and what happens; Brier = overall probabilistic accuracy (both lower = better). A recalibrator only ships if it beats raw on the test half. This is the "don't be badly wrong" guardrail that has to hold before any real money.
—