Real Polymarket bot mistakes and postmortems: phantom fills, sticky-fail dedup, lol-ctg-ccg whipsaw, NegRisk flag bug, premature go-live - with the commits and dates that fixed each.
Real Polymarket bot mistakes and postmortems: phantom fills, sticky-fail dedup, lol-ctg-ccg whipsaw, NegRisk flag bug, premature go-live - with the commits and dates that fixed each.
By Harley Young, lead writer at Polymarkets.co.il. Last reviewed: May 2026.
What this chapter covers
This is chapter 32 of our 32-part series on building a Polymarket trading bot. We cover the topic in depth across the sections below. Body content for each section is being written and rolled out chapter-by-chapter; FAQ answers and references are already complete and reflect production experience from running our own trader.
Phantom fills (commits e68a087, 8bb7761)
NegRisk flag bug (commit 06deaef)
Sticky-fail dedup (commit 4c0bef1)
Whipsaw incident: lol-ctg-ccg
Premature go-live: 2025 wipe
Sleep-through-bug: kill switch worked
Lessons that generalize
Phantom fills (commits e68a087, 8bb7761)
This section is in active development. Want to be notified when it goes live? Contact us or watch the authors page.
NegRisk flag bug (commit 06deaef)
This section is in active development. Want to be notified when it goes live? Contact us or watch the authors page.
Sticky-fail dedup (commit 4c0bef1)
This section is in active development. Want to be notified when it goes live? Contact us or watch the authors page.
Whipsaw incident: lol-ctg-ccg
This section is in active development. Want to be notified when it goes live? Contact us or watch the authors page.
Premature go-live: 2025 wipe
This section is in active development. Want to be notified when it goes live? Contact us or watch the authors page.
Sleep-through-bug: kill switch worked
This section is in active development. Want to be notified when it goes live? Contact us or watch the authors page.
Lessons that generalize
This section is in active development. Want to be notified when it goes live? Contact us or watch the authors page.
Frequently asked questions
What is the most expensive Polymarket bot mistake?
Going live before paper-trading meets the 30-trade gate. We have done it. The mistake is not just losing money - it is losing the chance to learn from the strategy in a controlled environment. Bots that go live too early either get nuked and abandoned, or waste months recovering before re-paper-trading.
What is a phantom fill bug?
When the bot believes an order filled but the exchange recorded it as not yet filled. Symptoms: position appears in your bots state but not on-chain, leading to double-orders on retry. Fixed in our trader via three commits (e68a087, 8bb7761, 06deaef): use FOK for buys, poll status until matched, never trust status=delayed as filled.
What is the lol-ctg-ccg whipsaw incident?
An esports market on a thin order book where our trader fired a -$2.55 stop-loss at 0.14, then watched the price recover to 0.325 within 2 minutes. We had configured stop-loss at -4 percentage points which is too tight for thin esports books. Fix: widened SL to -8pp for low-liquidity markets, kept tighter SL only for thick books (NBA, high-liquidity soccer). See memory/trader-sl-wider.md.
How did the NegRisk flag bug manifest?
Bot placed orders without setting neg_risk=true on multi-outcome markets. Orders rejected with confusing error messages, leading to multi-second delays before retry, leading to missed fills. Fix in commit 06deaef: always set neg_risk per market metadata, never assume.
What was the sleep-through-bug incident?
Wallet got wedged with a stuck order at 4am. Owner instructed bot to halt; touched data/halt_autobuy file. Bot detected the file before next trade attempt and refused to place orders. Owner woke up to a clean state instead of a worse one. Validated the halt-sentinel pattern; we now ship it default in every bot.
What is the single most generalizable lesson from these postmortems?
Never trust the happy path. Every bug we have shipped came from assuming a request succeeded, a fill was real, or a price would not move. Code defensively: assume orders fail, assume reconciliations diverge, assume one market is about to do something weird. The paranoia tax is small; the cost of skipping it is the postmortem you write later.
คำถามที่พบบ่อย
What is the most expensive Polymarket bot mistake?
Going live before paper-trading meets the 30-trade gate. We have done it. The mistake is not just losing money - it is losing the chance to learn from the strategy in a controlled environment. Bots that go live too early either get nuked and abandoned, or waste months recovering before re-paper-trading.
What is a phantom fill bug?
When the bot believes an order filled but the exchange recorded it as not yet filled. Symptoms: position appears in your bots state but not on-chain, leading to double-orders on retry. Fixed in our trader via three commits (e68a087, 8bb7761, 06deaef): use FOK for buys, poll status until matched, never trust status=delayed as filled.
What is the lol-ctg-ccg whipsaw incident?
An esports market on a thin order book where our trader fired a -$2.55 stop-loss at 0.14, then watched the price recover to 0.325 within 2 minutes. We had configured stop-loss at -4 percentage points which is too tight for thin esports books. Fix: widened SL to -8pp for low-liquidity markets, kept tighter SL only for thick books (NBA, high-liquidity soccer). See memory/trader-sl-wider.md.
How did the NegRisk flag bug manifest?
Bot placed orders without setting neg_risk=true on multi-outcome markets. Orders rejected with confusing error messages, leading to multi-second delays before retry, leading to missed fills. Fix in commit 06deaef: always set neg_risk per market metadata, never assume.
What was the sleep-through-bug incident?
Wallet got wedged with a stuck order at 4am. Owner instructed bot to halt; touched data/halt_autobuy file. Bot detected the file before next trade attempt and refused to place orders. Owner woke up to a clean state instead of a worse one. Validated the halt-sentinel pattern; we now ship it default in every bot.
What is the single most generalizable lesson from these postmortems?
Never trust the happy path. Every bug we have shipped came from assuming a request succeeded, a fill was real, or a price would not move. Code defensively: assume orders fail, assume reconciliations diverge, assume one market is about to do something weird. The paranoia tax is small; the cost of skipping it is the postmortem you write later.