claude/probability-config-review-1tdolw #119

Merged
chrisp merged 2 commits from claude/probability-config-review-1tdolw into main 2026-06-30 23:24:49 +00:00
Owner
No description provided.
chrisp added 2 commits 2026-06-30 23:19:30 +00:00
Two problems addressed:

1. Favorites' P(1st) was too sharp (e.g. NHL top teams ~20% vs ~12% implied).
   - The NHL simulator hardcoded its parity factor (1000) and ignored the
     season config's parityFactor, so the knob meant to flatten the
     distribution did nothing. It also re-blended raw futures odds into every
     game on top of the odds->Elo conversion, double-counting the same signal.
   - NHL now reads parityFactor/iterations/seasonGames/overtimeRate from config
     and no longer re-blends odds per game (odds enter once, via the central
     odds->Elo resolver). Honoring parity 2500 flattens a top team from ~29% to
     ~13% title odds.

2. "Season Config" and "Input Policy" were two forms over the same stored
   object that didn't reflect each other, and the engine-knob half was inert
   for many simulators.
   - Every simulator now reads its engine knobs (iterations everywhere;
     parityFactor for all Elo-based sims) from the merged config, passed in by
     the runner via the Simulator interface. Defaults equal the former
     hardcoded constants, so behavior is unchanged unless a season overrides.
   - The admin simulator page is now a single "Simulator Configuration" card
     with structured Engine and Input-derivation sections (profile-driven, so
     each sport shows only the knobs it honors) plus an Advanced raw-JSON
     escape hatch — all writing the same config.

Also: centralized the duplicated configNumber helpers into config-access.ts;
the central odds->Elo resolver now maps onto the configured Elo floor/ceiling
so those bounds set the odds-derived spread (a real flattening dial).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PAFMogMkFJf52YpHyCDvuf
Address code-review findings: odds band + inert UI knobs
All checks were successful
🚀 Deploy / 🧪 Test (pull_request) Successful in 2m55s
🚀 Deploy / ʦ🔍 Typecheck & Lint (pull_request) Successful in 1m18s
🚀 Deploy / 🐳 Build (pull_request) Has been skipped
🚀 Deploy / 🚀 Deploy (pull_request) Has been skipped
84b789db9b
- input-policy: revert the odds->Elo change that passed the policy's
  eloMin/eloMax into convertFuturesToElo. That widened the default odds-derived
  spread (1100/1900 vs the calibrated 1250/1750) — sharpening favorites for
  default-policy odds sims (UCL, World Cup, NCAA-FB, MLB) — and clamped the
  blend of a high directly-entered base Elo down to the ceiling. Odds now use
  the calibrated band; the policy's eloMin/eloMax still clamp the result
  (clampDerived), so a season's floor/ceiling narrows the spread without
  widening it or capping high base Elos.

- admin simulator UI: restrict the structured Engine fields to a
  HONORED_ENGINE_KNOBS allowlist of keys actually read from config (by a
  simulator or the input-policy resolver). Bespoke per-sim constants present in
  a profile but not read from config (homeFieldElo, eloDivisor, srsEloScale,
  raceNoise, plBeta, fieldSize, bracketSize, ...) no longer render as editable
  controls that silently do nothing; the raw-JSON escape hatch still edits them.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PAFMogMkFJf52YpHyCDvuf
chrisp merged commit 3e50619629 into main 2026-06-30 23:24:49 +00:00
chrisp deleted branch claude/probability-config-review-1tdolw 2026-06-30 23:24:49 +00:00
Sign in to join this conversation.
No description provided.