Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

chore(live): small follow-ups from the Live roster PR (#692)

Open Beginner friendly
#699 0 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
2/5
Estimated time
1-3 hours
Newbie friendliness
85/100
Issue type
Refactor
Clarity
Clearly specified
Activity status
Active
Tech stack
python
Domain
backend, cli

Research direction

The issue lists tasks in dashboard/backend/domain/leaderboard/live.py and dashboard/scripts/deploy_leaderboard_model.py with exact line refs. Read the named lines and PR #692, then apply each suggestion and run the cited test (e.g., tests/test_live_roster.py). Done means each checklist item's warning, CLI message, or test guard is implemented as specified.

Written by the indexing model from the issue text.

Description

Review minors deferred from #692 (Live roster: Qwen and Haiku via live_from / live_overrides), re-checked against origin/main @ 7f9ce0f3. Each item is small and independent; the list is about 1.5 hours without the optional canary at the end. Nothing here changes what the board publishes.

Config handling (dashboard/backend/domain/leaderboard/live.py)
  • A baseline entry's live_from / live_overrides is ignored without a word. live_board_strategies applies _live_from_month and _with_live_overrides only inside the strategy == "llm_agent" branch (live.py:432-440). On a baseline both keys pass through untouched and unwarned, and the committed-config guard (test_live_roster_config.py:77-82) only walks LLM roster entries. Suggested: report once through _warn_live_config when a baseline carries either key, and extend the guard to the baselines. About 30 min.
  • Comment wording. "...backfilling sessions it never saw forward" (live.py:95-99) does not parse. Say what happens: an entry added without live_from trades every session since the 1st, including ones from before it joined. About 5 min.
Deploy CLI (dashboard/scripts/deploy_leaderboard_model.py)
  • The refusal names both causes instead of the one that applies. _deploy_live always prints "not in LIVE_MODEL_IDS, or its live_from month has not opened" (deploy_leaderboard_model.py:252-257), including for a typo'd id that is in neither state. Pick the cause: id not in LIVE_MODEL_IDS; no llm_agent entry with that id in leaderboard.json; or live_from is after the board month (print both months). test_the_deploy_cli_says_why_it_refuses_a_not_yet_live_entry (tests/test_live_roster.py:151-169) pins only the live_from half, so add a case per cause. About 15 min.
Tests
  • Nothing pins that a Live call leaves the shared config alone. _with_live_overrides builds a new dict (live.py:385) and that line is the only protection; every test reads the returned entry. test_a_malformed_override_warns_once_and_runs_the_shared_values reuses one cfg for two calls (tests/test_live_roster.py:245-246) but asserts only the output, and test_the_live_haiku_pin_leaves_its_competition_median_alone (tests/test_leaderboard_samples.py:1125) re-reads the file through get_leaderboard(), so it cannot see in-memory aliasing. Add before = copy.deepcopy(cfg) and assert cfg == before after live_board_strategies(cfg, ...). About 10 min.
  • test_a_not_yet_live_entry_is_neither_rendered_nor_deployed builds its config through a hidden chain. It calls _use_config twice (tests/test_live_roster.py:93-96); the second _config_with reads the loader the first one patched, so the two edits compose, but the first call reads as dead code. Let _config_with take several entries' keys, or build the config once. Found while re-checking; not in the original ledger. About 10 min.
  • The roster-mention guard misses number words. assert not re.search(r"\b\d+ models\b", text) (tests/domain/leaderboard/test_live_roster_config.py:99) catches "3 models" but not "three models". Widen it to (\d+|one|two|three|four|five|six) or drop the line. About 5 min.
  • COMMONSTACK_SERVED is a 2026-10-14 snapshot, not a probe (test_live_roster_config.py:20-28). The guard proves the roster agrees with a copy of the listing, not with what the gateway serves today; the file's own comment says to re-list before adding an id. A retired id is found only when a night's calls fail, and H6 then reports it as model_coverage (live_budget.py:78-84). Optional, low priority: a free GET /v1/models pre-flight in refresh_live_leaderboard before the first billable attempt, or a manually dispatched workflow that diffs the listing against the roster. This is the "only a canary against the live endpoint can" case in CLAUDE.md. About 2-3 hours and needs the prod key (read-only call, no spend).
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

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from Open-Finance-Lab/AgenticTrading

All issues in Open-Finance-Lab/AgenticTrading

Similar issues

More Python issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.