Record the lineup-context ingest: prod-verified, 153 lineups / 149 opportunity

Verified in production via the new on-demand endpoint: 153 batting-order rows
across 10 games (orders 1-9), and 149 hitter-opportunity rows with RISP shares
ranging 0.170 to 0.528.

The data passes its own coherence check on arrival: the highest RISP-share
hitters all bat fourth and fifth, which is exactly where the mechanism says the
RBI opportunity lives. Nothing was fitted to produce that -- it is the two
tables joining and agreeing.

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-04 16:19:18 -04:00
parent 7f69fef14c
commit a80a775fa0
2 changed files with 44 additions and 0 deletions
+15
View File
@@ -3,6 +3,21 @@
## Last Updated
2026-08-03
## Session 89 (2026-08-04) — Lineup + baserunner context ingested ✅
Spec: commit history + `src/services/lineupContextService.js`. 4,250 tests / 338
suites green, build exit 0. Counter + frozen clusters byte-identical.
- **THE INPUT RBI/RUNS ALWAYS NEEDED, ingested free from statsapi.**
`lineup_context` (batting order, 153 rows / 10 games) + `hitter_opportunity`
(RISP share, 149 rows, range 0.1700.528). Both DATED in the PK.
- **Rung 2 was cheap:** situational splits give the RISP aggregate in ONE call
per player, not play-by-play reconstruction.
- **Prod-verified** via the new `POST /api/internal/lineup-context/refresh`
(added because the first run wrote 0 while the parser worked locally — a 0 is
a wiring bug until proven otherwise).
- **Coherence check passes:** top RISP-share hitters all bat 4th/5th.
- DRIVER/CATALYST theories now INPUT-READY, sample-blocked. Proofs run later
under native cumulative correction — ingesting is not proving.
## Session 88 (2026-08-04) — Re-adjudication: nothing to demote, hole closed ✅
Spec: `specs/re-adjudication.md`. 4,238 tests / 337 suites green, build exit 0.
Counter byte-identical. Nothing recalibrated — nothing needed to be.