BUILD-STATE: under-querying vs out-of-data session

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W1sivYNqY2TS5ftykmHBU9
This commit is contained in:
Kev
2026-08-05 19:30:56 -04:00
parent 7b85934dc3
commit b818626870
+37
View File
@@ -5133,3 +5133,40 @@ Complete frontend overhaul. 18 pages, 22 API routes. `npm run build` passes with
- Timestamped records in evolution_detections table, Evolution Watch content formatter - Timestamped records in evolution_detections table, Evolution Watch content formatter
- **Migration 008:** coaching_tendencies, player_out_history, evolution_detections, unconventional_validations (all with indexes + RLS) - **Migration 008:** coaching_tendencies, player_out_history, evolution_detections, unconventional_validations (all with indexes + RLS)
- **Integration:** 3 new blueprints registered in app.py (coaching_bp, redistribution_bp, unconventional_bp), evolution + odds_scanner extended with new endpoints - **Integration:** 3 new blueprints registered in app.py (coaching_bp, redistribution_bp, unconventional_bp), evolution + odds_scanner extended with new endpoints
---
## Session — Under-querying vs out of data (2026-08-05)
**Shipped**
- `scripts/backfill-context.js` — platoon splits backfilled to all 380 settled
hitters (was 298; ingest had only ever seen tonight's lineups).
- `scripts/reconstruct-game-environment.js` — joins the ledger's game slug to
statsapi, writes `game_context` on the LEDGER's key, pulls actual archived
Open-Meteo weather. 96/101 settled games now carry real weather; park
dimensions 15 -> 30 venues.
- `src/services/model/parkWeather.js` (+ tests) — park geometry + air read onto
HIT TYPE, not P(hit). Wind refused (no park orientation).
- `factorGate` — cluster-aware bootstrap + `effective_n`. Unclustered rows keep
the original path byte-for-byte.
- `specs/under-querying-vs-out-of-data.md` — the full record.
**Decided**
- `pitcher_contact_profile` DEMOTED: point estimate halved on 2x sample, interval
now spans zero.
- `platoon` / `platoon_severity` clear the bar but are NOT promoted — 4.5% median
contamination (season-to-date splits contain the games they predict) on a
-0.0001 bound.
- Park+weather on total_bases: 47 clusters < 500, point estimate WORSE (+0.0011).
**Next**
- Weather is reachable: ~57 days at 7 games/settled-day.
- Park geometry is NOT — 30 ballparks exist, so a venue-constant factor can never
reach 500 independent units. Needs a hierarchical fixed-effect treatment or it
stays unvalidatable.
- Point-in-time platoon splits would settle the two held passes.
- Park orientation is the one column that would unlock wind.
**Blocker**
- `git push` has no credentials in this environment; commit `7b85934` is local.