← All findingssource · memory/project_wnba_snapshot_depth_gap.md
What's missing on WNBA snapshots (per Stewart 1627668 in game 1022600083, 2026-06-08)
NBA per-player block has 14 rich keys. WNBA only populates 4:
PRESENT on WNBA:
season_averages(player_id/name/pts/reb/ast/min/games_played + shooting %)rolling_averages(last_3/5/10 for points/rebounds/assists —last_3_*keys are 0, only L5/L10 useful)recent_games(per-game log — present)prop_diagnostic.stats(per-stat: line_edges/flags/momentum — but adjusted_projection=0/baseline_q50=0 because projections-engine WNBA port hasn't shipped, so line_edges.quality buckets are degenerate)
MISSING on WNBA (all None):
vs_opponent— H2H summary (avg pts/reb/ast vs this opponent over career)vs_opponent_games— per-game H2H log (enables H2H median reconstruction)prop_metrics— per-stat home_mean / away_mean / b2b_mean / recent_mean / season_mean / playoff_mean / stdadvanced— player advanced statsprojection— projections-engine outputrotation_pattern,clutch_stats,series_history,memory,props
MISSING at game/team level: snapshot.stats is {} (entirely empty dict). No home_defense / away_defense / home_advanced / away_advanced / head_to_head.
Also missing: injuries.home_team_name / away_team_name are empty strings (but home_team_id / away_team_id ARE populated — 1611661323 / 1611661313 for NYL/CON).
Why it matters
The MCP server's get_player_depth / enrich_pick tools (shipped 2026-06-08 commit 2cf27e1) return prop_metrics=None, vs_opponent=None, matchup_dvp=None for every WNBA player. This is CORRECT behavior on the MCP side — the source data isn't there. So WNBA pick generation through the MCP is limited to:
verify_pickline_edges (degenerate due to missing projection)verify_pickrecent_vs_baseline_flag (mostly "stable" since no baseline)verify_pickmatchup_h2h (READS fromprop_diagnostic.stats.<stat>.matchup_h2h— need to verify whether THAT sub-block is populated on WNBA)depth.rolling_averages(L5/L10 only — L3 is zeros)depth.recency(recent_games log)depth.flags(active_status — FIX 5 IS working on WNBA via boxscore-derived roster, per project_wnba_lockdown_live)
Where the gap lives (file:line targets for the fix)
data-hydrator assembler. Compare NBA player-builder to WNBA player-builder.
Repo paths to grep starting points:
data-hydrator/internal/snapshot/*.go— per-league snapshot assemblersdata-hydrator/internal/insights/player_insights.go— likely owner of prop_metrics + vs_opponent (hadpropMetricsKeyfor NBA at lines 1169-1183 per project_multi_formula_clv_harness)- The roster-fallback path for WNBA pre-tip (commit 87befcc on data-hydrator) populates
season_averagesfrom boxscore but skips the rich blocks
Workaround for tonight (and any WNBA day until this is fixed)
When producing picks via MCP:
- IGNORE
enrich_pick.depth.prop_metrics/vs_opponent/matchup_dvpfor WNBA (will be None) - USE
enrich_pick.depth.rolling_averages(L5/L10) +recency+ active_status flags - USE
verify_pick.system.matchup_h2hIF populated (TBD on WNBA — check) - Cross-check Pinnacle de-vig via odds-service WNBA route (per reference_odds_service_wnba_route)
Cross-references
- project_wnba_lockdown_live — FIX 5 (active_status gating) IS live on WNBA via boxscore-derived roster
- project_wnba_projections_playbook — proj-engine WNBA port (Bayesian shrinkage for cold-start) explains the adj_proj=0 / baseline_q50=0
- reference_odds_service_wnba_route — sharp de-vig path that doesn't require snapshot
- project_disciplined_slate_card_prototype — WNBA blocked on proj-engine port (same root cause)
- project_sds_cutover_plan — adjacent (SDS as data layer)