{"slate_id":"nhl-turbo-draftkings-2026-10-29","sport":"nhl","site":"draftkings","slate_date":"2026-10-29","slate_type":"turbo","slate_subtype":null,"tour":null,"competition":null,"league_label":null,"is_draft":false,"config":{"$comment":"DK NHL Classic — 9 players, $50,000 cap: C, C, W, W, W, D, D, G, UTIL. Authored 2026-07-30 to close the gap documented in SPORT_COVERAGE_REMEDIATION_PLAN.md §A1: the registry matrix advertised nhl/main (plus 8 time-window variants) but NO config file existed, so every NHL DraftKings import failed with 'No slate config registered' and NHL was unplayable for Basic and Pro (DK is Basic's only site). Position vocabulary accepts C/W/LW/RW/F because DK NHL exports are not internally consistent: the sport signature in services/sport_signatures.py anchors NHL detection on LW+RW, while the shipped nhl/draftkings/snake_draft.json uses LW/RW/C/F and nhl/yahoo/main.json uses W/LW/RW. Accepting the union means a slate resolves regardless of which form the export carries. UTIL is SKATERS ONLY — DK does not allow a goalie in the UTIL slot. min_teams=3 encodes DK's stated 'players from at least 3 different teams' rule; max_per_team=7 is the arithmetic bound that rule implies on a 9-slot roster (9 - 2 other teams), so min_teams is the binding constraint rather than an invented per-team cap. OPERATOR VERIFICATION REQUIRED: confirm the roster shape, the $50k cap, the 3-team rule and the scoring table below against the live DK NHL rulebook page and one real DKSalaries NHL export before relying on lineup exports. || SCORING COMPLETED 2026-07-30 against DraftKings' published NHL scoring: the roster shape verified correct (2 C, 3 W, 2 D, UTIL, G at $50,000 with a 3-team minimum), but four bonus categories were missing entirely — 5+ Shots +3, 3+ Blocked Shots +3, 3+ Points +3 and goalie 35+ Saves +3. Added. Note these tables are currently METADATA ONLY: `config.scoring` has no consumer in either sim engine (players arrive with projections already computed), so the omission had no runtime effect today — but it would the moment a scoring-driven feature such as backtesting or actuals reconciliation reads them.","site":"draftkings","sport":"nhl","slate_type":"main","salary_cap":50000,"roster_slots":[{"name":"C1","eligible":["C"]},{"name":"C2","eligible":["C"]},{"name":"W1","eligible":["W","LW","RW","F"]},{"name":"W2","eligible":["W","LW","RW","F"]},{"name":"W3","eligible":["W","LW","RW","F"]},{"name":"D1","eligible":["D"]},{"name":"D2","eligible":["D"]},{"name":"G","eligible":["G"]},{"name":"UTIL","eligible":["C","W","LW","RW","F","D"]}],"max_per_team":7,"min_teams":3,"min_games":2,"scoring":{"goal":8.5,"assist":5.0,"shot_on_goal":1.5,"blocked_shot":1.3,"short_handed_pt":2.0,"shootout_goal":1.5,"hat_trick":3.0,"goalie_win":6.0,"goalie_save":0.7,"goalie_goal_allowed":-3.5,"goalie_shutout":4.0,"goalie_ot_loss":2.0,"shots_5plus_bonus":3.0,"blocks_3plus_bonus":3.0,"points_3plus_bonus":3.0,"goalie_saves_35plus_bonus":3.0},"export_format":{"header":["C","C","W","W","W","D","D","G","UTIL"],"id_format":"{name} ({site_player_id})"}},"locked_at":null,"first_game_start":"2026-10-30T00:00:00Z","last_game_start":"2026-10-30T00:00:00Z","late_swap_enabled":true,"display_name":null,"is_free":false,"group_key":"9e492e26aeb985c9","group_slate_type":"main","projection_window":null}