ARISA Trading Bots

Bugs found. Bugs fixed.

Every automated system has failure modes. Most trading sites don't show you theirs. Here are the real ones โ€” what broke, how it was found, and what the fix actually was.

2026-08-04

A missing browser silently took down the whole publishing pipeline

~5 hours ยท 6 bots affected

The pipeline that renders every trade card and updates this site runs a headless browser to draw the image. At some point its browser installation went missing from disk. Every run after that crashed.

What made it worse: the crash handler's own error-printing line choked on a Unicode character inside the error message, on Windows' console encoding. That second failure happened inside the except block, which meant it wasn't caught โ€” it killed the entire script, every single run, before it could reach any bot after the first failure, or update this site at all.

Fix: reinstalled the browser, and reconfigured the script's output to tolerate any character so a future bad error message can never again take the whole pipeline down โ€” worst case now, one card fails and everything else still runs.

2026-08-04

One unlogged trade quietly froze a bot's cards for three weeks

Aurika ยท 68 trades queued silently

On 2026-07-15, a partial exit left 2 units logged as still open, with no matching close event ever recorded for them. The card-generation logic tracked a running position balance across the whole trade log, and once that balance stopped returning to zero, it never completed another trade โ€” for any position opened afterward, for three straight weeks โ€” even though the pipeline ran every 30 minutes without a single error.

Fix: every new position open now always starts a fresh lifecycle instead of assuming it might be continuing a prior one, which matches how these bots actually trade and makes the tracker self-healing against this exact class of gap.

2026-07-30

Real-money orders were silently failing on a clock drift no one was compensating for

12,677 real error occurrences

The Binance API requires every signed request's timestamp to be within a tight window of the exchange's own clock. The trading library exposes a timestamp_offset for exactly this โ€” and never sets it. Local clock drift measured as high as 6.7 seconds in a single session, non-monotonically, not a slow steady creep.

Fix: sync the offset against Binance's public time endpoint on startup, plus a background resync every 30 minutes for the long-running process.

2026-07-28

A trade-log display bug made one real trade look like several

All 9 bots' dashboards

Every dashboard's trade table picked the row label from whichever field happened to be set first โ€” and the field that was actually set (the specific action: open, partial exit, cover, stop) came second in that check, behind a generic field that's the same for every row on one side of a trade. The result: a single position's real lifecycle rendered as what looked like duplicate entries.

Fix: reordered the field priority so the specific action is read first.

2026-07-28

A defensive fallback was fabricating closed trades that never happened

All 9 bots ยท 5 fabricated log entries found & removed

The function checking whether a position was still open had a final fallback: if both of its lookups failed for any reason โ€” including a transient network blip โ€” it returned 0 units. That return value was indistinguishable from "confirmed flat," so a genuine API hiccup got logged as a real broker-side close, complete with a fabricated result.

Caught by cross-checking logged closes against OANDA's real transaction history โ€” several had no matching fill at all.

Fix: the fallback now re-raises instead of guessing, so a real lookup failure is treated as "skip this check," not "the position is flat."