3abot — Work Plan
Updated 2026-09-30 21:02 (Tehran) · refreshed daily at 21:00 from the GitHub project, prod logs and prod transactions · DB times below are UTC · tonight’s prod logs were not pulled (ssh needed approval), so this run is DB + GitHub only
🐞 Bugs
🛠 Tasks
Plan: C · quick fixes, then Ramzinex
Chosen 2026-09-28. Steps 1–3 are merged, and #5, #2, #6 from step 4 too. What’s left of step 4 is the operator-alert batch and the Tabdil P0s, all refined and waiting for your ready.
Step 1 · refine ✓
- #45, #24, #37 refined and built
Step 2 · quick fixes ✓
- #3, #4, #1, #45 merged
Step 3 · Ramzinex ✓
- #37 → PR #72 (all 6 parts)
Rest of the P0s + alerts
- #5, #2, #6 merged ✓
- Alert batch: #49, #14 refined (#48 closed as dup of #16)
- New P0 #78 stale orderbooks (Tabdil root cause), #67
Doing now
No PRs open and nothing ready, so the loop has nothing to build.
Done
Finished since the last report, newest first. Each card says what it should fix, what else changes, and how to check it after deploy. Heads-up: the DB suggests Wallex and Bitpin still run the old build (see Decisions).
- PR #84 Log how old each orderbook is when a trade startsMerged
Fixes: Diagnostics only. It’s what proved #78: 13 of 16 Tabdil signals were priced on a book over 5 s old (worst 21 min).
Side effects: One more log line per trade.
Check after deploy: book-age fields in trade-execution-out logs.
- Closed without code: #25 · #79 · #17 · #48Closed
Why: #25 Tabdil timeouts fixed by client-id recovery (the rest moved to #49). #79 manual-sell rate is fine (your call). #17 is a dup of #15/#5. #48 is a dup of #16.
- PR #72 Ramzinex exchange (#37, #56–#61)Merged
Fixes: Adds Ramzinex as a 5th exchange: REST, WebSocket, plugin, Redis DB 4, Go adapter, pm2/aliases, docs. The review round fixed 4 money-path bugs (DRY_RUN placed real orders; partial fills; cancel; not-found).
Side effects: Adds 20 marketdata + 30 arbitrage processes on a loaded server unless you lower the counts. Rate limits are guesses.
Check after deploy: Checklist on #37: live order status 4, amount/price steps, WS side of
buys, one DRY_RUN day, then a small balance. - PR #76 Re-check profit at the current dollar rate (#6)Merged
Fixes: Stops trades whose profit disappears with one USDT/IRT tick (this afternoon’s Wallex/Tabdil burst). Target: Wallex losing
closed_cleantrades under −5,000 → about 0 (was 21 in 10 days).Side effects: Fewer trades: marginal signals are skipped on purpose. Missing fee keys now skip the trade.
Check after deploy:
[Buy Blocked] … revalidation:lines in trade-execution logs; losing clean trades per day. - PR #74 Wallet poll can’t overwrite a fresh trade (#5)Merged
Fixes: Buys sized from a stale IRT/USDT balance (Wallex 1006, Tabdil 1218). Target: Wallex 1006 buys under 5/week (was 43).
Side effects: New Bun-only Redis key
balance:delta_at; a poll that raced a trade is skipped (next poll 4–12 s later corrects it).Check after deploy: Count of
[Balance mismatch]log lines per day. - PR #75 Resell: price-band 422 blocks that market 60 s (#2)Merged
Fixes: Resell no longer burns all 10 attempts in 3 s on Wallex price-band rejections (ONE). Give-ups are saved as
order-error-giveup/manual_required, not as profit-window sells.Side effects: A rejected market is skipped for 60 s, so a sell may use the other market or wait. New optional field on stored resell entries.
Check after deploy:
select count(*) from resell_entries where close_reason='order-error-giveup'matches the “giving up after” log count. - PR #80 Wallex order recovery via client_id (#34)Merged
Fixes: A Wallex order that times out or gets a 5xx but was actually placed is found again and tracked, instead of leaving coins with no sell.
Side effects: Every Wallex order now carries a
client_id. No change when Wallex answers normally.Check after deploy:
exchange_requestsrows withrecovered: trueafter a timeout. - PR #81 Unfilled buys recorded as NoFill (#7)Merged
Fixes: Missed buys (like today’s 77 on Tabdil) show as
exit_reason='NoFill', separate from real failures; no misleading “executedSum missing” warnings.Side effects: Log line changes from
[Buy Blocked]to[No Fill]for these. Dashboards grouping byexit_reasonsee a new value.Check after deploy:
select exit_reason, count(*) from transactions where status='error' group by 1. - PR #77 DB times = event time, not flush time (#11)Merged
Fixes: Transactions/orders/events get their real timestamps (was one shared time per 750 ms batch).
Side effects: None expected; persistence only.
Check after deploy: Duplicate
(symbol, created_at)groups intransactions→ about 0. - PR #71 RabbitMQ consumers come back after a reconnect (#24)Merged
Fixes: Marketdata stops silently losing orderbook publishes after a RabbitMQ drop.
Side effects: Shutdown is no longer treated as a connection drop.
Check after deploy: After a RabbitMQ restart, orderbooks keep flowing (no gap in trades).
- PR #68 Bitpin listener leak (#45)Merged
Fixes: Stops memory/CPU growth from a new listener on every re-subscribe.
Side effects: None expected.
Check after deploy: No
MaxListenersExceededWarningin Bitpin marketdata logs.
Merged 2026-09-29 (deployed 12:03)
- PR #64 Wallex price-band 422: stop retrying, auto-block (#1)Merged
Fixes: The biggest Wallex error source: same rejected order retried in a loop.
Side effects: Coins with 5 price rejections in 10 min are auto-blocked for 30 min (operator is notified).
Check after deploy: Wallex
[422 Unprocessable]lines per hour. - PR #65 Auto-block for 30 minutes on every exchangeMerged
Fixes: Same block length everywhere.
Side effects: Blocked coins stay out longer on Wallex/Bitpin/Nobitex.
Check after deploy: —
- PR #53 Never send a sell that rounds to 0 (#3)Merged
Fixes: Wallex 422 “quantity required” on dust sells.
Side effects: Dust is handed to resell instead of sent.
Check after deploy: No
quantity422 on Wallex. - PR #54 Resell respects the USDT minimum (#4)Merged
Fixes: Sub-1-USDT resell sells rejected up to 10× per coin.
Side effects: Small remainders sell on the IRT market or close as dust.
Check after deploy: No min-USDT rejections from resell.
Up next
All refined and waiting for your approval (mark ready on the review page). Tabdil’s root cause first, since it’s stopped.
- 1#78 Stale orderbooks reach the engineP0🐞 bug🔍 RefinedTabdil’s stream goes quiet for minutes; the bot prices trades on old books. Plan: age guard + REST re-check before buying.1 day
approve #78 - 2#14 Tabdil “order not found” leaves orders liveP0🐞 bug🔍 RefinedAfter 10 misses the bot walks away without cancelling; coins can end up unsold.½ day
approve #14 - 3#67 stop+start drops resell-serviceP0🐞 bug🔍 RefinedA routine restart can leave an exchange with no resell.½ day
approve #67 - 4#49 Wallex status timeouts / 502: tell the operatorP1🐞 bug🔍 RefinedAlert batch (plan step 4). Now also covers Tabdil status-poll timeouts from #25.½ day
approve #49 - 5#15 Sells rejected for balanceP1🐞 bug🔍 RefinedSell sized from a stale coin balance; now also holds #17’s Bitpin evidence.1 day
approve #15 - 6#12 Dollar rate at sell never savedP1🐞 bug🔍 RefinedStill 0 of 2,274 closed trades in 24 h have it; profit can’t be audited.≤ 2h
approve #12 - 7#13 Tabdil step sizes (10/100)P1🐞 bug🔍 Refined13 Tabdil markets need quantities in steps of 10–100,000.≤ 2h
approve #13 - 8#46 Wallex “volume too small” pre-trade rejectionsP2🐞 bug🔍 RefinedWorse: ~170 Wallex signals/day die because rounding 0.003996 → 0.003 drops them under 1.05 USDT.½ day
approve #46 - 9#16 Tabdil FILLED logged as errorP2🐞 bug🔍 RefinedLog/DB noise; now also covers #48’s expired-cancel case.≤ 2h
approve #16 - 10Next to refine: #50 · #51 · then tasks #31 · #63 · #69 · #70The loop refines bugs automatically; tasks wait until you ask by number.
/refine
Decisions for you
New: Tabdil records NoFill since 10:38 (so its build is new), but Wallex/Bitpin have 0 NoFill rows and 391 “matchedAmountForSell is 0” BuyErrors today. So #76’s profit re-check is probably not live there: 18 losing trades under −5,000 in 24 h, incl. two Wallex SOL at −57k each (17:42).
The 10:35 test proved Tabdeal’s WS stream goes silent for minutes. #78’s REST re-check before buying is what makes Tabdil safe again. Also: report the stream to Tabdeal support?
New volume: ~170 Wallex signals a day are dropped after rounding pushes them under the 1.05 USDT minimum. No money lost, but missed trades.
New, no issue covers it. The bot keeps sending orders to a market Bitpin has paused.
PR #72 is merged but not running. The counts are shared: it would add 20 marketdata + 30 arbitrage processes. Go-live checklist is on #37.
Tabdil is stopped; only matters once it’s back.
How to move a task
1Decide
Answer above in plain words, e.g. “restart Tabdil after #76”.
2Refine 🔍
The loop writes a plan and an estimate and marks it refined. You approve it (→ ready) on the review page.
python3 .claude/skills/refine/review.py3Build ✅
Ready issues get a PR on the next run. You review, merge and deploy.
implement #14Everything, by track
Estimates only exist once an issue is refined. Nothing is ready; everything refined is waiting for you.
🐞 Bugs track
Keeps trading safe and correct.
- 1#78 Stale orderbooks reach the engineP0🔍 Refinedre-scopedWas “MinimumProfit 200”; now the Tabdil root cause.1 day
- 2#14 Tabdil not-found orders left liveP0🔍 RefinedStatus poll races order creation.½ day
- 3#67 stop+start drops resellP0🔍 RefinedOps CLI fix.½ day
- 4#49 alerts (½ day) · #15 balance (1 day) · #12 sell rate (≤ 2h) · #13 Tabdil steps (≤ 2h)All refined, waiting for you.
- 5Refined: #46 volume too small (½ day) · #16 FILLED as error (≤ 2h) · #21 crash-guard cascade (½ day) · #22 resell re-subscribe (½ day) · #23 WS churn (1 day)Waiting for you.
- 6#50 resell min-trade notify · #51 Bitpin 406 reasonNext in the refine queue.
/refine
+ P3 bugs
- P3: #19 Nobitex storm · #26–#30 log noise and size
🛠 Tasks track
New features and planned improvements.
- 1#31 Wallex rate limit · #63 CI/CD · #69 balances to Telegram · #70 LBankTasks stay in refine until you ask for them by number.
/refine #31
- 2#33 Wallex WS rules · #36 Bitpin .ir-only · #39 Postgres name · #47 notifications table · #52 monitoring dashboard · #73 Wallex credit account newNot refined.
+ P3 tasks
- #40 Nobitex timeout · #32 · #35 · #38 Abantether · #41 · #42–#44 resell tuning