From a80868c4eba6655974f9f783a830e12fed0011de Mon Sep 17 00:00:00 2001 From: Kev Date: Sun, 19 Jul 2026 18:58:12 -0400 Subject: [PATCH] S63 fingerprint: probability layer verified live (p_win/ev_pct/model_odds) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit POST /api/analyze/prop on prod returns p_win 0.523, ev_pct -10.4, model_odds -109, confidence_basis grade_band, value false — every one of which was absent on 100% of grades before this change. The value triplet is whole (book -140 / fair -125 / model -109) and correctly refuses to call a -140 price value when the model gives it 52.3%. A-emission still pending the 01:00 UTC snapshot (opp_rank_stat populates only when refreshTeamStats runs in a snapshot). MARKETING HOLD on A-RATED copy stays until that passes. edge_pct scale remains broken (U-deg pt 2). Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_01SmNjJAwEnqHPtXbvSZR8kA --- specs/STATE.md | 22 +++++++++++++++++++ specs/audit-data/grade-collapse.md | 35 ++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/specs/STATE.md b/specs/STATE.md index 954e8c1..477fe27 100644 --- a/specs/STATE.md +++ b/specs/STATE.md @@ -1,6 +1,28 @@ # VYNDR — STATE OF THE WORLD ### As of `7a925f4` (main, pushed to gitea; NOT yet fingerprinted live), 2026-07-19. This file opens every future session. Update it when a train ships. +## MODEL TRAIN — ARC 2 PREP: DEAD PROBABILITY LAYER REVIVED (2026-07-19, on main, DEPLOYED + fingerprinted) +Re-sequenced ahead of the gate work after the audit found the ranking signal did +not exist. Reports: `specs/audit-data/gate-simulation.md` (G-b/C-cal) + +`specs/audit-data/grade-collapse.md` (the big one). +- **p_win/ev_pct/kelly/model_odds/value were absent on 100% of live grades** — + `gameLogService` returns null for MLB by construction + the Python service is + offline, so `meta.gameLogs` was `[]` everywhere. EV, the Model Train's whole + ranking signal, had never been computed on a live prop; hero v2 always fell + through to its fallback; quarter-Kelly (sold on /pricing) never ran. + FIX: `featureCache.getStatRows`. **Fingerprinted live: p_win 0.523, ev_pct + -10.4, model_odds -109 — the value triplet is whole.** +- **Grade range restored ON MERIT** (rescaling permanently rejected): + `refreshTeamStats` wired into `runSnapshot` (it had ZERO callers), L20 made + symmetric (no negative branch existed), `game_count_in_7d` derived. D now emits + (WNBA 1/25, earned at p_win 0.365). **A-emission awaits the 01 UTC snapshot** — + `opp_rank_stat` needs that run. MARKETING HOLD on "A-RATED" copy until then. +- **Calibration guard:** consistency CV is NBA-tuned; `cv ~ 1/sqrt(mean)` made + every MLB stat `boom_bust`. Floored at `CONSISTENCY_MIN_MEAN=4`. +- Ledger truth (576 rows): only B/C ever emitted, 9 confidence values, ceiling 63; + past -400 was -7.7% ROI (the -400 floor was the whole win); flex -161..-250 is + our BEST band (+2.2%) so its EV gate ships DISABLED. Suite 276/3286, build 0. + ## MODEL TRAIN — ARC 1 (ENGINE) SHIPPED (2026-07-19, on main `7a925f4`, pushed, NOT yet deploy-fingerprinted) Spec written retroactively: `specs/model-train.md` (arc list + what's open). Goal of the train: make "real opportunities at takeable prices" the ENGINE, not a display filter. diff --git a/specs/audit-data/grade-collapse.md b/specs/audit-data/grade-collapse.md index a491990..31e3556 100644 --- a/specs/audit-data/grade-collapse.md +++ b/specs/audit-data/grade-collapse.md @@ -376,5 +376,40 @@ this hold only against live data. --- +## ✅ PRODUCTION FINGERPRINT — 2026-07-19 ~22:50 UTC + +`POST /api/analyze/prop` (grades on demand, so it exercises the repaired path +immediately rather than waiting for the snapshot cron): + +``` +Gunnar Henderson hits o0.5 @ -140 (fanduel) + grade : B + confidence : 57 + confidence_basis : grade_band <- NEW (truth label) + p_win : 0.523 <- WAS ABSENT on 100% of grades + ev_pct : -10.4 <- WAS ABSENT + model_odds : -109 <- WAS ABSENT (triplet was a duet) + value : false <- WAS ABSENT + takeable : true + book_odds : -140 + fair_odds : -125 +``` + +**The value triplet is finally whole: book −140 · vig-free −125 · model −109.** +And it tells the truth — the model gives 52.3 % where the de-vigged market says +55.6 %, so EV is −10.4 % and `value` is correctly FALSE. The engine now refuses to +call a bad price good, which is the entire point of the train. + +Still broken, unchanged by this work: `edge_pct: 100` on that same response — the +edge scale remains on a bad scale (open item, `U-deg` part 2). + +### Outstanding: A-emission in production +`opp_rank_stat` only populates when `refreshTeamStats` runs inside a snapshot, and +the next cron slot is 01:00 UTC. Until then the live ceiling is still +3.0, so **A +cannot yet emit in prod**. Re-measure the ledger grade distribution after that slot +— that is the remaining proof, and the MARKETING HOLD stays until it passes. + +--- + *Diagnosed + resolved 2026-07-19 (Session 63). Verified on real props; production A-emission fingerprint outstanding.*