BUILD IN PUBLIC · DDN SI LAB CHANGELOG

Watch DDN SI learn, with receipts.

Every model change, experiment and learning run, dated and in plain English. Experiments are written down before they start, with the rule that ends them. Failed experiments and failed updates stay on this page. The numbers that decide whether any of it worked live on the edge scoreboard.

Updated 2026-11-01 23:29 UTC.

Pre-registered experiments

EXP-2026-01

Maker mode: do resting bids below fair beat the Kalshi close?

running

Registered 2026-10-08 · lanes MLB:spread_maker_fav, NHL:spread_maker

Hypothesis
Our model is about equal to the market, and taking the ask costs about 2 points per bet. A post-only buy resting at or below the sharp consensus fair price saves that cost; if fills are not adversely selected, filled orders should beat the Kalshi closing mid on average.
Metric
Mean closing-line value of FILLED maker orders, in probability points, measured as Kalshi closing mid minus fill price on the same contract, with a 95% CI; secondary beat rate vs the close and adverse selection at +5 min, +30 min and the close.
Sample size
30 filled orders per lane before any verdict (50 for MLB:spread_maker_fav, its
Stop rule
Harm stop: any lane at 30+ fills with mean CLV <= 0 and 95% CI-high below +0.1pp, or beat rate <= 50%, is demoted to shadow automatically (MLB:spread_maker_fav at 50+ fills also stops if beat <= 55% or mean <= +0.15pp). Hard caps throughout: $20 per day, 10 open orders, 3% of bankroll per order. Success: promotion is recommended only at 30+ fills with beat > 55% and CI-low > 0 (run line: 50+ fills, CI-low > +0.15pp, ROI >= 0); promotion is an owner decision, never automatic.
Result
Not concluded yet. The result is published here either way.
Notes, known biases

Prior evidence. A fill simulation on hourly Kalshi candles (June to October 2026) was adverse under the two strict fill assumptions (closing-line value -0.7 to -1.6pp, beat 19-30%) and positive only under the most optimistic one (run line +1.27pp). Candles cannot show queue position, so live fills at 1-3 contracts are the measurement.

Biases we know about. Fills arrive when the book moves through our price, which is exactly the adverse case; that is why adverse selection is measured at three horizons. P&L over this sample size is mostly variance: the verdict uses closing-line value, not profit.

What we will not conclude. Nothing about taker edge, other sports or larger size. A demoted lane stays off until the owner restarts its measurement.

Evidence →

Changelog

Model changes, fixes, analyses and lane promotions or demotions, newest first. Each one links to the change itself.

2026-10-09 Model change

Maker mode: stop paying the spread, start earning it

Since taking the ask costs about 2 points, two lanes now rest small post-only buy orders below fair value instead (MLB run line at 3 contracts, NHL puck line at 2) and wait to be filled. Every fill is scored for adverse selection 5 and 30 minutes later and at the close. After 30 fills, a lane drops to shadow automatically if its fills do not beat the close.

Details
  • Rule: bid = the lower of (fair - buffer) and (best bid + 1 cent), always below the ask; orders are post-only so they can never cross the spread, and are cancelled 10 minutes before the start.
  • Lanes: MLB:spread_maker_fav (live, 3 contracts), NHL:spread_maker (live, 2 contracts), MLB:moneyline_maker (shadow: the simulation showed adverse fills), NHL:moneyline_maker (shadow only: not a canon lane).
  • Honest prior: a fill simulation on hourly candles was adverse under the two strict fill assumptions (closing-line value -0.7 to -1.6pp) and positive only under the most optimistic one. The truth is in between, which is why this runs live at 1-3 contracts with caps of $20 a day and 10 open orders.
  • First night (Oct 8): 10 resting NHL puck-line bids posted, all below fair.
  • Oct 9 (#334): when the owner tightened the NHL buffer to 0.5pp, resting quotes did not move because repricing only reacted to fair-value moves. A buffer change now requotes resting orders.
  • The pre-registered experiment, with its stop rule, is on this page.

Evidence (#333, #334) →

2026-10-08 Fix

Two pricing bugs fixed after a zero-bet day

On Oct 7 the bot placed no bets. The model's per-pick probabilities were being written to a copy that was never saved, and spread and total picks could fall back to a generic confidence number that overstated their chance of covering. Both are fixed; spreads and totals now need a market-specific probability or they are not bet.

Details

What broke. 413 execution attempts were rejected because the pick had no stored probability (probability_snapshot_missing), and a segment gate pinned since May could never clear, so the one pick that survived was sized to zero.

What we found next. A backfill dry run showed NHL -1.5 puck-line picks falling back to a generic ~53% confidence while their real cover rate is about 35-40%. That is fake edge: the bot would have "seen" value that was not there.

What changed. Picked-side probabilities are now persisted; the stale pins no longer block; and execution refuses a spread or total pick that has no market-specific probability (#326). Fewer bets is the expected result.

Evidence (#325, #326) →

2026-10-08 Experiment

Price-lag lane backtested negative, shipped in shadow only

Buying Kalshi when it looks cheap against the sharp market consensus lost money at every trigger margin from 1 to 5 points (291 bets at the default 2.5pp margin, ROI -7.4%, beat the close 44%). The lane runs in shadow with no money so it can prove itself live or stay off.

Details
Margin Bets Beat the close [95% CI] ROI [95% CI]
1.0pp 483 43% [39, 48] -0.9% [-10.4, +8.6]
2.5pp 291 44% [38, 50] -7.4% [-19.7, +5.0]
5.0pp 143 48% [40, 56] -6.5% [-24.3, +11.2]

Every trigger was MLB; NHL and NFL never triggered because Kalshi sits within the fee of the consensus there. 96% of triggers fired 12-25 hours before the game, and in those disagreements Kalshi turned out to be the side that was right. The lane's live switch stays off; if it is ever turned on it demotes itself when the last 30 fired candidates beat the close less than 45% of the time.

Evidence (#331) →

2026-10-08 Analysis

Edge mining: no lane beats the market at taker prices

An out-of-sample study of 820 clean picks and 134,308 hourly Kalshi quotes found no slice that clears our bet-now bar when we pay the ask. Our model is roughly the market; paying the spread plus fee costs about 2 points per bet. One lane (MLB -1.5 run-line picks) earned a maker-only probation.

Details
  • Method: time-ordered 70/30 split, 2,768 segment tests, every rule judged on the held-out 30% only.
  • Bet now: none. The model's small early-underdog drift disappears at the Kalshi ask (-0.10pp closing-line value against the Kalshi close).
  • Probation: MLB -1.5 run-line picks beat the Kalshi close 70% of the time against a 55% market baseline (ROI +3.0%), so they go maker-only at 1 contract with written kill and promote rules.
  • Dead: every claimed-edge, star-tier and confidence-tier slice, and all 27 stored-odds "winners" (ROI +25% to +62% on paper) that showed no clean out-of-sample closing-line value.
  • Realized bets: 167 clean bets made +15.0% ROI, but with -0.19pp average closing-line value and a 49.1% beat rate. That profit is variance, not edge.

Evidence (#332) →

Learning runs (last 30 days)

Every time a learner runs it writes a receipt: what it learned from, what changed, and whether the change was verified. Runs that changed nothing are counted but not listed one by one.

2869 runs · 3 failed or rolled back · newest receipt 14 min ago (2026-11-01 23:15 UTC)

LearnerRunsChangedNo changeFailedResults learned fromLast run (UTC)
Bet sizing fraction181170672026-10-31 20:33
Closing-line edge decay171700172026-10-29 03:45
Closing-line predictor4130312026-10-27 08:50
Daily learning loop770002026-10-26 20:00
Edge rule miner670225445074992026-11-01 22:45
Fast learning loop41401002026-11-01 17:00
Model signal weights200173172026-10-29 03:45
Overconfidence haircut4400312026-10-27 08:50
Per-sport calibration171700172026-10-29 03:45
Segment registry672298374075032026-11-01 23:15
Signal blend weights4400312026-10-27 08:50
Situational factors27270074572026-11-01 14:00
Sport allocation171160172026-10-29 03:45
Team strength ratings67325741609852026-11-01 23:00
Variable importance671342329074992026-11-01 22:30
Walk-forward validation440012002026-11-01 12:00
Weekly learning loop330002026-11-01 19:00

Recent changes

21+ only. For entertainment and information; not financial advice. Past results do not predict future ones. Gambling problem? Call 1-800-GAMBLER.