- Self-learning: trade_log.json + model.json track winrate/PnL per city/bucket
- Adaptive Kelly: lowers fraction if winrate < 45% or PnL negative
- Adaptive EV floor: raises threshold when performance poor
- Timeout wrapper (_timeout_call): 10s limit on CLOB auth + order calls
- Timeout on get_condition_id: 8s limit per market
- Fix: DATA_DIR referenced before assignment (moved LEARNING_DIR to BOT_DIR)
- Add debug timing logs per city and per D+N fetch
- [LIVE] output format for successful orders
- Fix print flow: 'ok' + newline after each city regardless of signal
- record_trade() called on every successful order (outcome=pending)
- start_bot_v3.sh: unset ALL_PROXY/all_proxy so TUN VPN handles all traffic
- Revert _direct_session and _tg_session proxy config
- All requests now use standard requests module (goes through TUN)
- Keep Telegram notification functions (tg_signal, tg_scan_summary)
- Keep config.json with bot token and chat ID
- Remove duplicate import requests
- Add _direct_session (trust_env=False) for gamma-api.polymarket.com and open-meteo.com
- Replace all requests.get/post calls with _direct_session
- _tg_session still uses SOCKS5h proxy for Telegram API
- Closes gamma-api timeout issue caused by ALL_PROXY routing it through SOCKS
- Add requests + logging imports
- Add TELEGRAM_BOT_TOKEN and TELEGRAM_CHAT_ID to config
- Add send_telegram(), tg_signal(), tg_scan_summary() functions
- Configure SOCKS5h proxy (socks5h://127.0.0.1:6922) for Telegram API
- Send tg_signal() on order filled/failed in scan_and_trade()
- Send tg_scan_summary() after each scan cycle
- Update config.json with bot token and chat ID