Session 56: Full audit — PropLine + boxscore + pipeline + sport coverage (2289 tests)
Research (verified against live MLB Stats / ESPN / The Odds APIs): - specs/propline-audit.md — every stat_type mapped against our 4-layer pipeline; real MLB boxscore fields; sport coverage status; pipeline gap analysis. - specs/vyndr-roadmap.md — priority-ordered Sessions 57–64 + coverage targets. - scripts/propline-audit.js + specs/audit-data/ (raw capture). Headline bug: oddsNormalizer mapped batter_rbis → 'rbis' while the whole grade/feature/outcome chain keys on 'rbi' — every PropLine RBI prop silently failed to grade AND settle. Fixed (+ regression test). Phase 4 — wired missing MLB stats end-to-end: - PropLine MLB markets 6 → 12 (+runs, walks, doubles, earned_runs, hits_allowed, outs — same request, no extra quota). - doubles/outs/triples added to featureCache + outcomeService MLB_LOG_FIELD and all three grade whitelists (analyze/scan/validation.py). Phase 6 — pipeline resilience: - opsNotify.js: ntfy alerts (never throws, test-disabled). Snapshot success/ stale/failure alerts; retry-once on hard odds error (not on empty slate). - Missed-cron watchdog (mostRecentExpectedSlot/isSnapshotOverdue); status probe now returns `overdue`. Coverage truth: MLB is the only end-to-end-live sport; outcome settlement is MLB-only (WNBA/NBA/soccer never settle) — documented as the #1 roadmap gap. Backend 2276 → 2289 tests (+13). Web build exit 0. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
+46
-3
@@ -4,9 +4,52 @@
|
||||
2026-07-10
|
||||
|
||||
## Current Phase
|
||||
SHIP BUILD v55.0 — Product overhaul: the self-learning loop (outcome tracking +
|
||||
accuracy) + the real-time layer (auto-refresh, freshness, live signals) + landing
|
||||
top-signals preview. Founder-pricing expiry restored.
|
||||
SHIP BUILD v56.0 — The full data audit: PropLine/boxscore/pipeline inventory,
|
||||
rbis→rbi fix, +6 MLB markets, doubles/outs wired end-to-end, ntfy alerting +
|
||||
retry + missed-cron detection, master roadmap.
|
||||
|
||||
## Session 56 (2026-07-10) — SHIPPED ✅ THE FULL AUDIT
|
||||
|
||||
Backend 2276 → **2289 tests** (+13), 197 suites. Web build clean (exit 0).
|
||||
Docs: `specs/propline-audit.md`, `specs/vyndr-roadmap.md`,
|
||||
`specs/audit-data/propline-audit-raw.json`, `scripts/propline-audit.js`.
|
||||
|
||||
### Research (Phases 1–3, 5) — verified against LIVE APIs
|
||||
- Fetched real data: The Odds API `/v4/sports` (in-season now: MLB, WNBA, NFL
|
||||
preseason, NBA summer league, 40+ soccer leagues; NHL dark), a real MLB boxscore
|
||||
(Braves@Pirates 2026-07-09 — every settle field confirmed), ESPN WNBA/soccer
|
||||
scoreboards. PropLine inventory derived from code (no dev keys).
|
||||
- **Headline bug found:** `oddsNormalizer` mapped `batter_rbis → 'rbis'` but the
|
||||
entire grade/feature/outcome chain keys on `'rbi'` → **every PropLine RBI prop
|
||||
silently failed to grade AND settle.** Fixed.
|
||||
- Coverage truth: **MLB is the only end-to-end-live sport.** Outcome settlement is
|
||||
MLB-only (WNBA/NBA/soccer never settle → accuracy is MLB-only). Documented as
|
||||
the #1 roadmap gap.
|
||||
|
||||
### Phase 4 — wired missing MLB stat types (a full vertical slice)
|
||||
- `batter_rbis → rbi` (unblocks a market already requested).
|
||||
- PropLine MLB MARKETS 6 → 12: +batter_runs, +batter_walks, +batter_doubles,
|
||||
+pitcher_earned_runs, +pitcher_hits_allowed, +pitcher_outs (same request, no
|
||||
extra quota; runs/walks/earned_runs/hits_allowed were already supported
|
||||
downstream — just never asked for).
|
||||
- `doubles` + `outs` (+`triples`) added to featureCache + outcomeService
|
||||
MLB_LOG_FIELD AND all three grade whitelists (analyze/scan/validation.py).
|
||||
|
||||
### Phase 6 — pipeline alerting + resilience
|
||||
- **`src/utils/opsNotify.js`** — ntfy.sh push (`vyndr-pipeline-kev2026`), never
|
||||
throws, auto-disabled under test / `PIPELINE_ALERTS=0`. Injectable `fetchImpl`.
|
||||
- `snapshotService.runSnapshot`: success alert ("✅ MLB snapshot: N graded, D
|
||||
deltas, X% accuracy"), stale alert (empty slate), failure alert; **retry-once**
|
||||
on a hard odds error/null (NOT on a legit empty slate — that's off-hours, not a
|
||||
failure).
|
||||
- **Missed-cron watchdog:** `snapshotScheduler.mostRecentExpectedSlot` +
|
||||
`isSnapshotOverdue` (pure, tested); the tick alerts once per missed slot; the
|
||||
status probe (`GET /api/internal/snapshot/status`) now returns `overdue`.
|
||||
|
||||
### Phase 7 — the master roadmap
|
||||
`specs/vyndr-roadmap.md` — priority-ordered Sessions 57–64 (WNBA/NBA settlement →
|
||||
ESPN features → soccer e2e → live calibration → NFL/NBA readiness), stat-type +
|
||||
sport coverage targets, operating invariants.
|
||||
|
||||
## Session 55 (2026-07-10) — SHIPPED ✅ SELF-LEARNING LOOP + REAL-TIME LAYER
|
||||
|
||||
|
||||
Reference in New Issue
Block a user