Skip to content

P3 registry consumption plus discovery and catalog-builder skills#8

Open
xymeow wants to merge 7 commits into
codex/multi-venue-p1-p2from
codex/registry-p3
Open

P3 registry consumption plus discovery and catalog-builder skills#8
xymeow wants to merge 7 commits into
codex/multi-venue-p1-p2from
codex/registry-p3

Conversation

@xymeow

@xymeow xymeow commented Jul 20, 2026

Copy link
Copy Markdown
Owner

Stacked on #7 (multi-venue P1+P2). Lands P3 of the roadmap plus the two agent-tooling follow-ups.

P3 — Pairing-registry consumption

  • active_canonical_event in the watchlist points at one confirmed registry entry; the watcher derives both markets (alerts + suspected-score signal on the primary side, silent mirror on the other), the aggregated probability bar (team colors/flags, Polymarket mapping), goal-signal team names, and the adaptive-polling start time. A 4-line watchlist now replaces the previous hand-written market blocks.
  • Soccer event sources wire up ESPN commentary automatically; other categories stay market-only until P4.
  • Registry entries gain optional outcome_labels and display hints (all three seeded MLB entries updated).
  • Startup validation via adapter metadata(): missing/settled Kalshi markets warn; an inconsistent Polymarket market drops that mapping and degrades the bar to single venue; unconfirmed entries are rejected — confirmation stays human. Hot reload keeps the previous config when a bad edit fails to load instead of killing a running watch.

Agent tooling

  • market-pairing skill: discovery mode — open-ended "what's on this week?" requests rank fixtures by Polymarket 24h volume, cross-check Kalshi availability, then flow into pairing proposals; entry-format docs updated.
  • New player-catalog-builder skill + roster fetcher: diffs ESPN rosters against the player catalog by athlete id and drafts skeleton entries; Chinese names/nicknames stay human-confirmed. Live-verified against the EPL (20 teams; Arsenal: 26 new candidates, 4 already cataloged).

Testing

  • 241 tests pass (225 from the base branch + 16 new registry tests covering derivation, rejection paths, display fallbacks, and venue-validation degradation).
  • Live smoke: a sandboxed confirmed copy of the Dodgers–Phillies entry derived the full setup and rendered pkbar us 44 005A9C us 56 E81828 from live Kalshi+Polymarket quotes; validate_registry_venues returned no warnings against both live venues.

🤖 Generated with Claude Code

xymeow and others added 7 commits July 19, 2026 20:42
Pointing the watchlist at a confirmed registry entry via
active_canonical_event now derives everything that was hand-written
before: both markets (alerts and the suspected-score signal on the
primary side, silent mirror on the other), the aggregated probability
bar with per-outcome colors/flags and the Polymarket mapping, goal
signal team names, and the start time that drives adaptive polling.
Soccer event sources wire up ESPN commentary automatically; other
categories stay market-only until their category adapter lands (P4).

Registry entries gain optional outcome_labels and display hints.
Startup validation checks the entry against both venues through
adapter metadata(): missing or settled Kalshi markets warn, an
inconsistent Polymarket market drops that mapping and the bar
degrades to single venue, and unconfirmed entries are rejected —
confirmation stays human. Hot reload keeps the previous config when a
bad edit fails to load instead of killing a running watch.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
market-pairing gains a discovery workflow: open-ended "what's on this
week?" requests rank fixtures by Polymarket 24h volume as the heat
signal, cross-check that Kalshi carries the same winner market, and
flow straight into pairing proposals. The registry entry format now
documents outcome_labels/display and the post-confirmation step of
pointing the watchlist at the entry.

New player-catalog-builder skill fetches ESPN team rosters, diffs
them against config/espn_player_catalog.json by athlete id, and
drafts skeleton entries with context for proposing Chinese names.
Translated names and nicknames stay human-confirmed; the skill also
flags the espn:<id> key question to settle before non-soccer
categories join the catalog (P4).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
No command-surface changes. The bump packages the post-1.6.0
reliability fixes (XS heap instruments, TTS stall watchdog,
per-connection HTTP close) under a version a device can report.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
User-approved; the watchlist now points at it via
active_canonical_event and the live watcher derived the full setup
from this entry.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Team logos ride the existing flag mechanism as flag-<code>.png, so the
bar renders club marks with no new device pathway: the flag-code check
widens from country shapes (fr, gb-eng) to short dashed codes
(mlb-lad), and a new generator rasterizes 22x18 alpha logos from the
ESPN CDN (all 30 MLB clubs ship, ~43KB in the archive). pkbar gains an
optional seventh token choosing the center icon (football default,
baseball); unknown names clamp to the football and pre-1.8.0 mods
ignore the extra token, so the watcher omits it for football watches
and older devices never see a change.

The watcher derives the icon from the registry category (mlb ->
baseball) and the seeded MLB entries now point display.flag at logo
codes. Assets stay compiled into the mod deliberately: the 2MB xs
partition sits at ~15% after this change and resources render
memory-mapped from flash, so an SD-card path (host reflash + runtime
PNG decode that does cost RAM) buys nothing at this scale.

Verified on device: bar shows mlb-lad 44 / mlb-phi 56 with club
colors and the baseball icon on mod 1.8.0.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The flag skin samples FLAG_WIDTH x FLAG_HEIGHT (24x20) from its
texture; the logo pack rendered 22x18, so the out-of-bounds columns
drew as black bars on the device. The country flags are 22x18 content
plus a 1px border for the same reason. Generate logos on a 24x20
canvas and pin the layout test to the state.js constants so a future
size drift fails in CI instead of on the screen.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Isolated on device: the baseball icon (8-bit palette + alpha) renders,
country flags (4-bit palette, opaque) render, but club logos render
blank because their 3-4 color art compiles into 2-bit palette bitmaps
and palette-plus-alpha textures draw nothing on the CoreS3. Flatten
logos onto white PNG24 tiles — the exact country-flag format — and pin
the layout test to opaque RGB so a transparent regression fails in CI.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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.

1 participant