Skip to content

dashboard: say where each bot came from, and unblock the research budgets - #175

Merged
50thycal merged 1 commit into
claude/confident-goldberg-83u3qfrom
claude/evolutionary-kalshi-agents-ishnrk
Aug 9, 2026
Merged

dashboard: say where each bot came from, and unblock the research budgets#175
50thycal merged 1 commit into
claude/confident-goldberg-83u3qfrom
claude/evolutionary-kalshi-agents-ishnrk

Conversation

@50thycal

@50thycal 50thycal commented Aug 9, 2026

Copy link
Copy Markdown
Owner

Two operator-visibility gaps, both found by trying to read the live roster and failing.

1. You can't tell what kind of bot you're looking at

The row showed Name · Surname · G1 · CODE and nothing else, so four materially different things were indistinguishable:

  • an original founder that's been running for weeks
  • a survivor carried over from the previous generation
  • a clone of last generation's winner
  • a bot born minutes ago

All six live bots read "G1", which looks like reproduction is broken. It was (children: 0 at the last boundary — see below), but the roster couldn't show that either way.

origin alone doesn't resolve it either: grow_to_target creates its agents as origin='wildcard', so an operator-driven fleet expansion is indistinguishable from the scheduled diversity slot. The birth slot_key does separate them (wildcard:N vs growth:<cohort>:N), so _lineage reads that.

Each row now carries a plain-language label:

kind label
founder founder — original fleet
child child of Leif Blackwood · inherits the Blackwood line
wildcard wildcard — fresh line, no parent
growth new — added to grow the fleet

Plus a new badge when the bot was born into the current generation.

2. The research ceilings weren't settable without a deploy

EVO_WEEKLY_SANDBOX_RUNS, EVO_WEEKLY_DATA_READS, EVO_WEEKLY_MARKET_SCANS (and EVO_MAX_GROWTH_PER_BOUNDARY) added to the ops env allowlist.

These bound how much evidence an agent can gather, and unlike the LLM budgets they cost CPU against our own DB rather than dollars. They need to be live-settable because exhausting them is invisible from outside — the fleet's backtest counters just stop moving and read as "the agents lost interest" when they're actually blocked.

Observed: all three agents pinned at sandbox_runs 50/50 for days while one filed a ticket saying its evidence base had been invalidated by a fix we shipped and it had no budget left to rebuild it. ensure_budgets already tops up in-cohort agents on a raise, so this reaches the running cohort rather than waiting for the next one.

Related finding, not fixed here

The 00:06Z boundary produced children: 0. At a 3-agent fleet top_fraction=0.30 gives exactly one reproduction slot, and the wildcard logic displaces it (skipped_parent = parents[-1] removes the only parent). So the winner did not reproduce at all — the wildcard replaced its child rather than adding to it. Self-corrects at 6 agents (2 top slots), but the small-fleet behaviour looks wrong and is worth a separate decision.

Verification

Full evo + dashboard suites green, ruff check clean. 6 new tests, written first.

🤖 Generated with Claude Code

https://claude.ai/code/session_01ChuFsLsUSANNzhC42fp4hW


Generated by Claude Code

…gets

Two operator-visibility gaps, found by trying to read the live roster.

1. Lineage was unreadable. The row showed `Name · Surname · G1 · CODE` and
   nothing else, so four materially different things looked identical: an
   original founder running for weeks, a survivor carried over from the previous
   generation, a clone of last generation's winner, and a bot born minutes ago.
   All six live bots read "G1", which looks like reproduction is broken — and it
   was (children=0 at the last boundary, reported separately), but the roster
   could not show that either way.

   `origin` alone does not resolve it: grow_to_target creates its agents as
   origin='wildcard' too, so an operator-driven fleet expansion is
   indistinguishable from the scheduled diversity slot. The birth slot_key does
   separate them (`wildcard:N` vs `growth:<cohort>:N`), so _lineage reads that.

   Each row now carries a plain-language label — "founder — original fleet",
   "child of Leif Blackwood · inherits the Blackwood line", "wildcard — fresh
   line, no parent", "new — added to grow the fleet" — plus a `new` badge for a
   bot born into the current generation.

2. The research ceilings were not settable without a deploy. EVO_WEEKLY_SANDBOX_RUNS,
   EVO_WEEKLY_DATA_READS and EVO_WEEKLY_MARKET_SCANS are now on the ops env
   allowlist (EVO_MAX_GROWTH_PER_BOUNDARY too). These bound how much EVIDENCE an
   agent can gather, and unlike the LLM budgets they cost CPU against our own DB
   rather than dollars. They need to be live-settable because exhausting them is
   invisible from outside: the fleet's backtest counters simply stop moving and
   read as "the agents lost interest" when they are in fact blocked. Observed:
   all three agents pinned at sandbox_runs 50/50 for days while one filed a
   ticket saying its evidence base had been invalidated by a fix we shipped and
   it had no budget left to rebuild it. ensure_budgets already tops up in-cohort
   agents on a raise, so this reaches the running cohort.

Full evo+dashboard suites green, ruff clean. Each new test was written first.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ChuFsLsUSANNzhC42fp4hW
@50thycal
50thycal merged commit 4228967 into claude/confident-goldberg-83u3q Aug 9, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants