The Book Was Lying
There's a position on your screen that says 100 contracts.
The real number is 1.
This is not a story about a bug. It's a story about the foundation that everything else in prediction market trading sits on — and what happens when you skip it.
The Setup
Houston Open, Thursday morning. R1 tee shots going out at Memorial Park. The edge scanner says we have five positions: Ryan Gerard TOP20, Wyndham Clark TOP20, Tom Kim TOP10, John VanDerLaan TOP10, and Patton Kizzire TOP20.
Five bets. $17 deployed. Clean slate.
Except the database shows Kizzire at 100 contracts and $3.00 exposure. The actual live Kalshi portfolio shows 1 contract and $0.03.
That's a 99-contract difference. A $2.97 discrepancy. Small numbers in dollar terms. A serious problem in infrastructure terms.
Why It Happened
When an order goes out, two things need to be true for the database to be correct:
1. The order was filled
2. The fill was logged accurately
Kizzire's order got submitted. But it didn't fill at 100 contracts — it only got 1 contract through before the market dried up. The logging code was recording the intended position, not the executed one.
The book was optimistic. The book was wrong.
Why This Matters More Than It Sounds
In prediction market trading, everything downstream of position truth is built on what you think you own.
Edge calculations compare DG model probability to Kalshi ask price. If you think you own a position when you don't, you might not buy more when the thesis is still correct. If you think you don't own something when you do, you might double up without meaning to.
Both-sides buying is one of the fastest ways to guarantee a loss in a binary market. You'll win on one side and lose on the other, and the spread eats you alive in between.
Book truth is the foundational layer. Not a nice-to-have. The literal substrate that every other decision stands on.
The Fix
The reconcile path is simple in theory: compare what the database says against what Kalshi actually says, and trust Kalshi.
In practice, it requires:
We built a two-step system: sync_kalshi_fills followed by auto_repair_positions. The first backfills any fills that weren't logged. The second compares live portfolio state against the database and repairs divergence.
After running it: 0 reconcile issues. The book matched reality.
Then we ran the edge scanner.
The Sequence That Actually Works
Most people think the trading loop is:
Check edges → place bets → track results
The real loop is:
Reconcile book to live truth → check edges → place bets → reconcile again → track results
The reconcile step isn't overhead. It's the gating condition for everything else. If the book is lying, the edge scanner is lying too — it's just lying more politely, using your fabricated position as a baseline.
What This Tells You About Prediction Markets
Sportsbooks and traditional markets have clearing infrastructure. Your fills get confirmed, your account balance updates in real time, your position is always accurate.
Prediction markets are newer. The APIs are younger. The tooling is thinner. The responsibility for maintaining position truth falls on you.
That's not a complaint — it's an opportunity. The traders who build the cleanest infrastructure have a permanent edge over the ones who don't. Not because they have better models. Because their models are operating on accurate data.
The edge scanner can only be as good as the book it's reading.
Where We Are Now
After Thursday:
- Book is live-reconciled against Kalshi before every scan
- Warehouse ingests fills, positions, market snapshots, DG predictions in the right order
- Edge board only fires against clean position truth
- The Kizzire issue can't happen again
The real count was 1. Now we know that. And knowing that is worth more than any specific position.
Wolf's Watch is a field log. Real positions, real infrastructure, real losses when we get it wrong.