S63 fingerprint: probability layer verified live (p_win/ev_pct/model_odds)

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) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SmNjJAwEnqHPtXbvSZR8kA
This commit is contained in:
Kev
2026-07-19 18:58:12 -04:00
parent 1a94ef5fcf
commit a80868c4eb
2 changed files with 57 additions and 0 deletions
+22
View File
@@ -1,6 +1,28 @@
# VYNDR — STATE OF THE WORLD # 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. ### 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) ## 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 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. train: make "real opportunities at takeable prices" the ENGINE, not a display filter.
+35
View File
@@ -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 *Diagnosed + resolved 2026-07-19 (Session 63). Verified on real props; production
A-emission fingerprint outstanding.* A-emission fingerprint outstanding.*