← All findingssource · memory/project_two_month_retro_2026_08.md
CORRECTION (2026-08-26 spec pass): the retro's "playoff" cohort was MISLABELED — all 8/20+ WNBA game ids are 102-prefixed REGULAR season; 2026 WNBA playoffs start after the 8/30 finale (game 1022600300). So "43% of profit in playoff week" = final week of REGULAR season, and the "playoff overs 55.0%/−0.8u" split needs re-derivation from a game-id-relabeled ledger (spec Gap 3 step 0) before any playoff gate flips. Also found: SDS adapters/wnba/gameid.go derives season_type from gameID[:1] (real playoff ids are 104-prefixed) → 2025 WNBA playoff rows mislabeled 'Regular Season'; fix deadline = before 2026 playoff ingest (~Sep 13).
The verified record — priced_lineedges, scope=priced, min_decimal_odds=1.70 (the exact
nightlypicks.com/ledger query): 343–232 (59.7%), +71.4u, +12.4% ROI [CI +4.8, +20.0], avg CLV +1.28¢.
Caveats that MUST travel with it: (1) formula born 2026-07-18 → 5.5 weeks, not 2 months (~1.8u/slate-day);
(2) 43% of profit (+30.7u) came in the final 7 days (late REGULAR season — see correction above); (3) measured CLV has a +1.1¢ construction
bias (best-of-books entry vs Pinnacle-first close — all four fade arms sit at +0.8–1.6¢), so the record is
ROI-validated, CLV-neutral; sustainable ROI likelier low-single-digit. (4) The three rails
(system_lineedges ⊃ disciplined_board / priced_lineedges) are ONE strategy ~+55u — never sum them.
(5) 84.1% hit / +9.96% CLV are unpriced-row artifacts (72.8% of board rows unpriced); bettable hit = 59.4%.
Bombshell: grade_v2→quarter-Kelly endorsed only 55/922 picks (+1.14u); the 867 it refused held +57.1u. The calibration layer throttles the only profitable signal to ~zero on the actionable card.
Validated signals (in order): ≥1.70 price floor (above +12.4% vs below −3.9% at HIGHER hit rate — the floor IS the edge) > within-night rank (monotone CLV 3.1¢→0.8¢, price restated) > line shopping. Nothing else: all ~40 LLM/model arms at CLV baseline; deepseek-v4__market_value (+148.8u, ROI CI>0 both windows, zero CLV) = promising-unproven, forward-test only.
Miss census (388 priced losses): 57.2% market-validated variance, 25.0% unexplained (~1/3 real projection blowups; ~11% minutes-driven, untagged — minutes_error's blocker comment is stale, RotoWire read path exists), 17.0% bad_price, 0.8% blowout. "37% bad_price" was claude_combined (died 7/18). UNDER pts+ast −14.3u structural (tree-backend fix on unmerged branch); 4 volatile guards −41u gross (Clark/Howard/Ogunbowale/Wheeler); ladder-stacking 32.3% of picks, 10-pick single games bleed −6u nights.
Ranked gaps: (1) Demotion detection −24/−28u per rail: bench overs 27–40% hit, 76% had started previous pick-night; starter-overs +56.3u and bench-unders +34.5u are ALL the profit. Fix = gate over-side on the live-but-unconsumed lineups route; backtest as new formula_id. (2) Stale-line entry −13.4u (~25% of board profit): 137 picks entered clv<0 lost 48.2%; freshness gate + tip-60 re-lock (near-tip +0.31¢, z=1.76; odds fast lane shipped 8/21 — after season). (3) Playoff blindness: isPlayoffByDate() stub=false everywhere (code gap REAL); the −0.8u "playoff" split was mislabeled (see correction) — relabel ledger by game-id prefix first; deadline = WNBA playoff game 1 (~Sep 13), then NBA April. (4) Advisory flags never gate (money formulas read only L10 z + quality; blowout threshold NBA-calibrated ≥10). (5) Silent zero-coverage: 6/26–7/06 blackout, 23 games, ~9–14u foregone; need per-league picks-emitted>0 alarm. (6) No retraction path / no post-tip guard (ON CONFLICT DO NOTHING; 19% of games tip before 22Z; +6.3u of disciplined_board is unbettable post-tip capture on 4 afternoon games).
Injury-speed question SETTLED: DNP-scratch speed ≈ $0 (all 35 voids refunded; 12 priced ≈ 0.7u EV) — board hygiene only. The money was demotion detection (gap 1). SDS injury feed noisy both ways, no status-transition timestamps; join by player_id only.
Cost/execution: in-window infra+LLM spend ~$1,000–1,500 (mostly since-fixed leaks). Net-positive at $100/u, wash at $20/u. Ledger assumes best-price-across-books; no book column → execution unproven. Parlays: 2-leg +8.4u fine; 3-leg overconfident (pred 20.1% vs real 13.3%) — stop or haircut 3-leg. MLB ran all summer UNLEDGERED (only pinn_devig, −12.8%) — enable lineedges fanout per league day one.
NBA countdown (~8 weeks): wk1 merge project_xgboost_v5_ship_path → deploy-training.sh → forced train (un-strands injury join + EB shrinkage too); wk2 retire stale pkls + retrains-blocked alarm + by-edge-bucket fix + bet_clv migration (book, created_at) + post-tip guard; Sep–Oct refit grade_v2/brier on NBA + port fast lane + NBA-tip-aware batch slots + backtest role-gated formula on WNBA ledger; opening night: both_agree NBA forward-CLV bucket (best CLV/pick +5.29¢, volume-starved in WNBA) is the named wk-1 deliverable; ZERO staked NBA bets until forward buckets earn it (NBA prior −17.44%/4,984).
EXECUTION STATE (2026-08-26 evening): SHIPPED. Spec weeks 1-3 implemented, tested, merged to main and PUSHED (user-authorized) for grading-service (f960954..5025d49), sport-data-service (..888add4), sports-broadcaster (..57b03ec), sports-scout-service (..205496f — code only, /health/models still needs cdk ApiStack deploy). data-hydrator REMAINS on gap-closure branch — light-slate deploy 1 pending.
- grading-service: 19 commits ahead of main (rebased onto f960954; duplicate 62f22e8 skipped, its Book hunk re-landed). v22 migration, post-tip guard, injury suppression (LOG mode), tip-60 relock (ANNOTATE-ONLY), book column, role_gated_lineedges+role_gated_board shadow arms (census 11), decision-provenance writer, player_id on /clv/picks, edge-bucket fix, scorecard tipped-count.
- sport-data-service: 888add4 — wnba gameid [:3] fix + migration 024 backfill (playoff-ingest deadline item).
- sports-broadcaster: coverage checks (picks watchlist / model-registry / pe-slates) at WARN burn-in.
- sports-scout-service: /health/models public route + batch lastRunAt stamps (needs cdk ApiStack deploy).
- data-hydrator: GamePhase threading + blowout league-scaling on branch — HOLD for light-slate deploy 1.
BACKTEST VERDICTS (changed the defaults): (1) ε-sweep REFUTED price retraction at every ε — retracted cohorts hit ~55%, excising +27-48u profit; the −13.4u harm class is sub-floor rows the price floor already excludes → RELOCK_RETRACT + NIGHTLY_DROP_STALE default OFF (annotate-only; forward stamped record decides). (2) Gap 1: ceiling −28u reproduces but is a LOW-MINUTES phenomenon; pregame bench card catches ~35% of it; August dropped-cohort ~break-even (54.5% = kill side). SDS role taxonomy era-dependent → predicate is role != "bench" (fail-open), NOT role=="starter". (3) Relabel: ZERO true WNBA playoff rows in ledger; the "8/20+ collapse" = noise (p≈0.2); real playoff-over evidence = NBA-June 004 cohort (42% hit, −300/−425u/rail, era-caveated). gamescript_minutes must stay OUT of DefaultAutoFormulas (no book prices WNBA minutes).