← back to logs
DAY 020

Audit Day

15-commit deep audit of the Dota 2 codebase, CS2 Pinnacle backtest showing +16% ROI at 10-20% edge, shipped profiled.lol, reskinned Stoa slides.

yoshi@mac-mini — build-log-day-020

🐉 YoshiZen Daily Build Log — Friday, March 20, 2026

Dota 2 — Full Codebase Audit & Overhaul

The bulk of today: a systematic 4-tier audit of the entire Dota 2 prediction pipeline, from critical bugs down to code health.

Tier 1 — Critical bugs (6 fixed):

  • Removed phantom +$6,799 handicap win — Nemiga vs Zero Tenacity -1.5 @ 7.50 was mislabeled as the wrong team. Bankroll corrected from $123,350 → $116,539
  • Deep-cleaned the ledger: 870 → 251 entries after retroactively applying _is_recordable_bet + best-per-map + one-per-matchup filters. 619 duplicate/junk entries removed (40,621 lines deleted)
  • BO2 detection from draw markets — matches with draw lines were incorrectly defaulting to BO3 math. Fundamentally changes probability calculations (moneyline in BO2 = P(2-0 sweep), not P(wins series))

Tier 2 — Staking & model fixes:

  • Consolidated staking logic, fixed model name references, corrected EV calculations

Tier 3+4 — Performance & code health:

  • Batch hero queries + asyncio.gather() parallelism in predict.py — replaced N+1 per-hero queries with batched SQL using window functions (ROW_NUMBER PARTITION BY hero_id). 227 insertions, 138 deletions
  • Bulk batch INSERT for odds_snapshots (was 520+ row-by-row queries)
  • Reduced OddsPAPI sleep from 3s → 1s between API calls (~30s saved per scan)
  • Extracted series math to models/series_math.py — removed 4 duplicate implementations across paper_trade, simulate_tournament, scan_match_odds, daily_scan
  • Fixed 19x deprecated datetime.utcnow() → timezone-aware
  • Added --standins flag to tournament simulator, re-ran ESL Birmingham projections
  • Added unique index + match_id index on odds_snapshots for dedup

CS2 — Pinnacle Historical Backtest

  • Built fetch_oddspapi.py (401 lines new) — fetches Pinnacle closing odds from OddsPAPI for CS2 tier 1-2 tournaments
  • 325 matches fetched with Pinnacle closing odds, 255 fuzzy-matched to DB series by team name + date
  • 429 retry with exponential backoff (10s/20s/30s/40s)

Backtest results (test set, 449 maps with Pinnacle odds):

  • 10-20% edge: 110 bets, 53% WR, +16.2% ROI ← the sweet spot
  • 5-10% edge: 83 bets, 54% WR, +13.6% ROI
  • 3-5% edge: flat at -1.2% — model doesn't beat Pinnacle on close lines

profiled.lol — Built & Launched

  • Shipped profiled.lol in a single session — paste an X/Twitter handle, get your profile roasted by AI
  • Full build from zero to live in Claude Code

Stoa Workshop Slides — Design System Reskin

  • Applied the new Stoa design system to the Leaderboard Workshop PPTX (14 slides, 310 changes)
  • Georgia → Cormorant Garamond, red/green palette → olive/teal (#5A7A2D, #1B7667)

Infrastructure

  • Added Vercel Analytics to both pickmy.ai and yoshizen.co

Key stat: 15 commits, ~10,600 lines changed. The CS2 model now has a validated edge against Pinnacle closing lines — but only when the model disagrees by 10%+. Below that, the market is right.