← All findingssource · memory/project_wnba_debate_chain_blind.md
FIXED 2026-06-03 (code change in core/hydrator_client.py, NOT yet committed/
deployed). Root cause was ODDS, not prop_diagnostic. In extract_player_bundles:
odds_data = _resolve_typed_or_raw(snapshot,"odds")returned{}for WNBA — typedoddsis null; real data israw_sections.odds, a LIST of per-game odds objects (whole slate: 4 WNBA + 8 MLB). The resolver only unwraps dicts → the list fell through to{}→ zero props read.- Props carry
player_id: null(correlation_status:"pending") so the id-keyed lookup dropped every one → must join by player_name. - Raw feed is the full alt-line firehose (~300 quotes/player) → added
_condense_player_odds()(consensus main line per prop_type per book). Verified at data layer: NBA path untouched (pb.propsshort-circuits before condense). prop_diagnostic actually flowed fine for the players who had one; with 0 odds the agent SKIPs regardless, so that was secondary noise.
MERGED TO MAIN + PUSHED 2026-06-03 as 5029278 (fast-forward; rode along with
3985bae matchup-defender-context, which is safe — graceful .get() defaults + dead-code
removal). Also added the audit's B5 follow-up — odds-aware player selection (extract_player_bundles
now ranks the lineup by (has_odds, is_starter, projected_minutes, season_mpg)), because the
WNBA lineup is a roster fallback and the old starters-first sort dropped priced stars
(Ionescu, Jones) for alphabetical bench. Re-verified: NYL 6/8, TOR 4/8 players now carry
odds_lines; NBA confirmed-starter selection unchanged; 16/16 tests pass.
Remaining: push, deploy to sport-agents cron image, and a full LLM chain run
(-m core.blog_generator --league wnba --model haiku) to confirm non-empty best_bets.
ORIGINAL DIAGNOSIS BELOW —
Ran the real production pick chain python3.13 -m core.blog_generator --league wnba --date 2026-06-02 --model haiku (see reference_sport_agents_run_python). All 4
games completed every phase (team→coach→matchup→player→synthesizer + multi-persona
debate) but returned SKIP / empty best_bets / empty parlay_of_day on every game.
Root cause (verified): player agents get no data to bet on. Uniform per-player
skip reasons in output/blog/2026-06-02/wnba/haiku/*.json:
"No odds_lines provided — cannot price any prop""No prop_diagnostic field — cannot run lockdown gates""Coach projected minutes: 0 with 0% confidence"
The chain sources odds_lines + prop_diagnostic ONLY from the snapshot via
hydrator_client.extract_player_bundles (:277 odds_lines = pb.props or
odds_by_player[pid]; :286 prop_diagnostic = pb.prop_diagnostic). Two breaks:
- [internal detail removed]
- prop_diagnostic comes through empty for WNBA even though
daily_props.pyreads it from the SAME hydrator snapshots fine. Exact reason (snapshot shape vs fetch params vs player_id key mismatch) NOT yet confirmed — verify during the fix.
NBA/NCAAB/NFL/MLB adapters all explicitly attach odds_lines/prop_diagnostic in
summarize_player_data; WNBA subclasses NBAAdapter so it inherits the SAME code — the
gap is in the DATA reaching the snapshot/bundle for WNBA, not the adapter code.
Significance: answers "what's the point of all this if we're not using it" — the lockdown (project_methodology_lockdown, feedback_active_tonight_gate) and the personas (project_debate_persona_lockdown) both WORK, but for WNBA this chain runs blind to the odds + diagnostic that project_daily_props_tool joins correctly. Two consumers of the same data; only one is wired. Chain also emits no tagged picks for WNBA → never enters project_multi_formula_clv_harness measurement.
Fix (not yet done): thread odds-service props into per-player odds_lines for WNBA (build odds_by_player from OddsClient and pass into extract_player_bundles, or merge into snapshot.odds_data.player_props before extract), and confirm prop_diagnostic survives the WNBA snapshot→bundle path. Then rerun + verify non-empty best_bets.