fix(live): a night lost to a total market-data failure reads "an internal error" on the board
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 2/5
- Estimated time
- Under an hour
- Newbie friendliness
- 85/100
- Issue type
- Bug
- Clarity
- Clearly specified
- Activity status
- Active
- Tech stack
- javascript, python
Research direction
Start at dashboard/backend/domain/leaderboard/live.py:1153 where the bare RuntimeError is raised; add LiveNoBarsError subclass and raise it. Then add a parametrized case to dashboard/backend/tests/test_live_budget.py:163 and a deploy-level test asserting last_attempt.kind == "market_data_gap". Done when the board shows the existing gap copy for empty-bar live segments and tests pass.
Written by the indexing model from the issue text.
Description
Deferred from #693 (live attempt ledger); docs/superpowers/plans/2026-10-14-live-board-fixes.md ("Out of scope") named it a follow-up. Re-verified against origin/main @ 7f9ce0f3.
What. When fetch_hourly_bars returns nothing for a live segment, _trade_live_segment raises a bare RuntimeError("No market data returned for live increment …") (dashboard/backend/domain/leaderboard/live.py:1153-1156). classify_attempt matches by class name along the exception's MRO (live_budget.py:236-252); a plain RuntimeError matches nothing and falls through to KIND_ERROR, which the board renders as "failed: an internal error" (dashboard/frontend/js/live-leaderboard.js:134).
The neighbouring case is already typed: a trading day with no bars raises LiveSessionGapError (live.py:631), maps to market_data_gap (live_budget.py:74) and reads "market data was missing for a session" (live-leaderboard.js:127).
Impact (cosmetic). Public board copy only. No spend is lost: the attempt fails before any model call (the strategy is built at live.py:1086, bars are fetched at 1150), and deploy_live_model_increment still records the attempt through attempt.finish(exc) (live.py:1037-1048).
Suggested fix.
- Add
class LiveNoBarsError(LiveSessionGapError)next toLiveSessionGapErrorand raise it atlive.py:1154.classify_attemptwalks the MRO, so it maps tomarket_data_gapwith no change tolive_budget.py. (Noexcept LiveSessionGapErrorexists in the backend, so nothing else changes behaviour.) - If a separate meaning is wanted, subclass
RuntimeErrorand add its name to_KIND_BY_TYPE_NAME(live_budget.py:72-77). - Wording needs an owner call: "market data was missing for a session" is slightly off for "no bars for the whole segment". A new kind must be added to
KINDS(live_budget.py:58-66; an unknown kind is coerced toerrorbyclean_last_attempt) and toLIVE_ATTEMPT_KIND_COPYin the JS. - The same message shape exists on the contest/daily path (
service.py:2387-2390); it is outside the live attempt ledger and needs no change.
Tests. Add a case to test_an_attempt_is_classified_without_its_message (dashboard/backend/tests/test_live_budget.py, the parametrize list at 163-184), plus one deploy-level case: an empty fetch_hourly_bars leaves last_attempt.kind == "market_data_gap" on the ledger row.
Estimate. About 1 hour.
- Dominant language
- Python
- Stars
- 767
- Forks
- 156
- Avg merge
- 1d 19h
- Merged PRs (30d)
- 71
Getting set up
- Ships a Dockerfile or Docker Compose file
- No pull request template
- No contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from Open-Finance-Lab/AgenticTrading
-
Difficulty 2/5 1-3 hours Newbie friendliness 85/100
Open-Finance-Lab/AgenticTrading#699 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 85/100
Open-Finance-Lab/AgenticTrading#696 ·
Maintainers usually reply within 1 day
-
fix(llm): Gemini adapter drops thinking tokens from the output countPossibly taken @subidhkhanal claimed this 8 days ago. Open
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
Open-Finance-Lab/AgenticTrading#657 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 67/100
Open-Finance-Lab/AgenticTrading#591 ·
Maintainers usually reply within 1 day
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
Open-Finance-Lab/AgenticTrading#586 ·
Maintainers usually reply within 1 day
All issues in Open-Finance-Lab/AgenticTrading
Similar issues
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
BCDA-APS/polar-bits#93 ·
-
infer_audio_type only recognises one MPEG Layer III frame header, so most MP3 files are rejectedPossibly taken @Steve-20-ai claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
Maintainers usually reply within 1 day
-
[BUG] - ssh_config `Match tagged` statement always appliesPossibly taken @AtharvRG claimed this today. OpenBug
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
paramiko/paramiko#2715 · 1 comment ·
Maintainers usually reply within 9 days
-
auto-rejected intake mcp-intake needs-salvage priority:high type:feature
Difficulty 2/5 1-3 hours Newbie friendliness 65/100
Ikalus1988/MisakaNet#4221 · 2 comments ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
Maintainers usually reply within 1 day