Kalshi runs daily event contracts on each day's HIGH and LOW temperature in about 20 US cities — for example, "Will today's high in NYC be 84–85°F?" Each contract pays $1 if it happens, $0 if it doesn't, so a price between $0 and $1 reads as a probability.
A market maker continuously offers to both buy and sell those contracts, trying to earn the gap between the two prices. Whether that is actually profitable here — after fees, after being picked off by better-informed traders — is an open question. This project answers it with data before risking a dollar.
Every price change and trade in those markets, around the clock — the "tape." And the official weather record for each city's measuring station: METAR observations, National Weather Service forecasts, and the official daily climate reports that settle each day's contracts.
Real money moves only if BOTH pass. GATE 1 — LIQUIDITY & TOXICITY: replay the recorded tape and simulate honest market-making; under the most conservative reading of four quoting styles, would it have cleared $15/day after fees? GATE 2 — FORECAST CALIBRATION: does our weather model predict settlement temperatures better than the market's own prices do, measured across at least 300 city-days?
Collecting and measuring. Gate 1 has failed its first window; Gate 2 has not yet accumulated enough data to decide. No trading. No positions. No capital at risk.
The Glance — Telemetry HUD
Live Telemetry HUD
Collector vitals, planet-orb status, disk and replication alerts, and the tape-event odometer on one screen.
The Gate Contract, In-App
The MISSION sheet scrolled to THE TWO GATES and STATUS — ending on "No capital at risk."
Gate Telemetry & Archive
Gate 1 / Gate 2 progress meters with verdict numbers, plus per-period trade, weather, and settlement counters.
Pre-Committed Gates — The Verdicts
The pass/fail thresholds below were fixed before the data existed. The repository contains zero order-placement code; nothing unlocks until both gates pass on archived point-in-time tape.
Replayed the archived tape under four mechanical quote rules with a pinned, pre-committed fill model (price-penetration fills, participation cap, inventory bands). The bar: the most conservative rule/horizon combination must clear >$15/day net of fees.
| Slice | Conservative $/day | Bar |
|---|---|---|
| Forecast (morning) | −$2.73 | >$15 |
| Observation (afternoon) | −$34.27 | >$15 |
| Combined | −$35.80 | >$15 |
Aggressive quoting styles showed positive P&L, but the gate binds on the conservative end. Adverse drift after fills (informed flow) eats the captured spread. Verdict: FAIL.
Scores our forecast distribution against the market's implied distribution by CRPS (Brier is banned: on an ordered temperature ladder it scores a 1°F miss the same as a 10°F miss). Binding threshold: ≥300 resolved city-days, pooled and per-city.
At 77 of 300 city-days the gate cannot decide. The early read is adverse: oracle CRPS 1.0389 vs market 0.8105 (lower is better). The bootstrap interval on the difference sits entirely on the market's side. The oracle wins 6 of 28 city cells, all overnight lows.
Zero trading code was written; zero capital was at risk. A failed gate is the system working as designed. The response is Oracle v2: an EMOS post-processing track built on NBM's XND percentile spread, targeting the calibration deficit Gate 2 measured. Planning is public on the GitHub issue tracker. Gate 1 re-evaluates on future windows; the thresholds do not move.
Figures above are from the pinned evaluator-2.0.0 report run; current evaluator code is 2.1.0 (version coordination only — no fill-model change).
Infrastructure & Security Controls
Zero-Balance Key Provisioning
Kalshi API keys grant full account access. The collector's VPS holds keys for a dedicated, zero-balance account. A compromised server exposes zero trading capital.
Point-in-Time Data Honesty
fetch_timestamp (when our machine received the packet) is the only legal join key for backtests. Model cycle times are metadata; assuming zero cycle lag fabricates illegal edge.
Litestream Replication & Rotation
SQLite database files rotate on period boundaries with continuous streaming replication off-site via Litestream and zero-downtime container restarts. 2-day archive rotation adopted after the 2026-07-27 disk-full post-mortem.
Collector Execution Architecture
WebSocket & REST Ingestion
24/7 WebSocket connection tracking sequence gaps. Auto-triggers REST resnapshots on gap detection and batches SQLite writes every 100ms.
NWS Bulletin & METAR Ingestion
Fetches NWS NBM text bulletins (NBS/NBE) and METAR station observations with explicit gap rows when NWS endpoints 500.
Tape Replay & Gate Testing
Pure reader evaluators replay archived SQLite tapes at full temperature ladder level to produce the Gate 1 and Gate 2 verdicts above.
High-Reliability Data Pipelines & Real-Time Telemetry
We build deterministic data ingestion pipelines, real-time Flutter telemetry HUDs, and fault-tolerant system architectures.