#30

feat(aig-161): in-arcade model leaderboard (prototype, dummy data)

Draftbrian-w-zhangwants to merge intofrom

Prototype of the in-arcade model leaderboard (AIG-161), built on the telemetry data layer. Draft: data is dummy for the full model catalog; the proxy GET read route that wires the Tinybird pipes to real data is deferred.

What's here

  • Win rate — ranked list filling to the bottom, a searchable creator filter in the panel's top-right, scrollbar flush to the edge, and the #1 model's wisp in the scene.
  • Head-to-head — two searchable model dropdowns; click a wisp directly to change its model (like the poker/chess games), side-by-side.
  • Activity — stacked chess/poker bars + totals.
  • Shared top-right ☰ menu for nav (home / controls / account / telemetry / quit); no bottom bar.
  • A dedicated LeaderboardScene renders creator wisp(s) in the transparent right region behind the opaque data panels, with shared orbit-camera mouse handling.
  • Reuses existing TUI components (ScrollBox + new setHeight, searchable Dropdown, Button) — everything is mouse-clickable.

Home-menu entry is dev-gated (shows in pnpm dev, hidden in the shipped build) until real data lands.

Test plan

  • pnpm type-check — clean
  • pnpm test — 249/249
  • pnpm snapshot leaderboard 130 44 [chess|poker] [winrate|headtohead|activity] — renders each view

Follow-ups

  • Proxy GET /v1/leaderboard read route → replace dummy data with the Tinybird pipes.
  • Un-gate the home-menu entry once real data flows.

Closes part of AIG-161.