Closes#115
- Add `NHLSimulator` using NHL's divisional bracket format (top 3 per
division + 2 wildcards per conference, best-of-7 series, parity
factor 800). Elo ratings and seeding probabilities sourced from
elo.harvitronix.com/nhl/2025-2026 as of March 18, 2026.
- Add `nhl_bracket` to `simulatorTypeEnum` with migration.
- Register `NHLSimulator` in the simulator registry.
- Fix simulator type dropdown in admin to auto-generate from the
registry instead of a hardcoded list, so new simulators appear
automatically without a separate UI change.
Code review fixes applied to the simulator:
- Narrow `weightedPick` key type to the five seeding probability fields
(was `keyof NhlTeamData`, allowing `"elo"` which would silently
corrupt results)
- Remove uniform-random fallback in `weightedPick` — zero-weight draws
now return `undefined` and are skipped, preventing eliminated teams
from becoming wildcards
- Exclude unrecognized participants entirely (with a console warning)
instead of silently routing them into the Eastern wildcard pool
- Replace the confusing for-of loop over both conferences (with unused
`champ` variable and `!`-suppressed unitialized vars) with two
explicit sequential East/West blocks
- Track `effectiveN` for skipped degenerate draws so probability
denominators stay accurate; throw if all iterations are skipped
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>