v3.0.12
What's Fixed (Critical — API Hang)
🔥 App Gets Stuck Calling API (ROOT CAUSE FOUND)
The BOT API returns 429 Too Many Requests on nearly every request when fetching large date ranges (fresh installs with no cache).
Old behavior: 429 consumed tenacity retry attempts → exhausted after 5 retries → app crashed on chunk 2 of 15. No progress shown to user.
New behavior: 429 handled internally with escalating waits (5s→6s→7s→8s...) that do NOT consume retry attempts. Every chunk eventually succeeds.
✅ Changes
| Component | Fix |
|---|---|
_fetch_json |
Internal 429 loop (up to 10 waits) with escalating delay |
tenacity |
Only retries real errors (timeout, connection failure) |
httpx.AsyncClient |
Added Timeout(30s, connect=10s) to prevent infinite hangs |
get_exchange_rates |
Per-chunk logging (chunk X/Y: date → date) |
| Inter-chunk jitter | Increased to 1-3s cooldown |
🧪 Verified
- 608 records fetched (304 USD + 304 EUR) in ~213s
- Frequent 429s handled gracefully — zero crashes
- Previous version crashed on chunk 2 of 15
📝 ExRate Start Date
compute_year_start_date correctly starts from Dec 30 (not Dec 31). Dec 31 appears in the ExRate sheet as a calendar row marked as holiday with no rate data — this is expected behavior.
Full Changelog: v3.0.11...v3.0.12