docs: hero ranking fix verified (new code serving — max-p_win takeable, chalk excluded)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VsztNChZ7vEvSR61AuMhD1
This commit is contained in:
@@ -185,3 +185,9 @@ Gates the champion's over-CLV signal (partial r=0.375, p≈0.003, n=62 takeable
|
||||
**What would strengthen it:** retain multi-book at lock (enables the sharp/consensus lock-staleness check), and accrue more settled takeable MLB-over rows. Held: no promotion, no served p_win/ev, no capture fix — diagnosis only.
|
||||
|
||||
**UPDATE 2026-07-29 (commit c7067c8): the lock-multi-book gap is now CLOSED.** New `lock_lines` table (migration 033, applied+tracked) persists each graded prop's per-book lines at the lock moment (`lockLineCapture` in `snapshotService`, fenced RLS-service-role-only, grade byte-identical proven). This unblocks the staleness audit for FUTURE rows — it does NOT retroactively fix the existing 62. Confirmation still needs weeks of accrued lock+close+outcome. Populates from the next snapshot tick.
|
||||
|
||||
---
|
||||
|
||||
# HERO RANKING FIX — 2026-07-29 (commit 41b86e3, deployed)
|
||||
|
||||
The landing/hero (matrix row 1) selection was silently broken: it ranked on `ev_pct`, which is NULL on served grades, and **`Number(null) === 0`** made every prop tie at EV 0 → the "top read" was the FIRST takeable A/B prop in cache order — **arbitrary, dressed as ranked** (prod served Kelsey Mitchell, the #6 read by p_win). FIXED: rank by the **champion's p_win** (the only promising edge signal) among A/B **takeable-priced** reads (`isTakeable` −160..+200, same band as the proof/audit); strict-null guard; takeable filter excludes chalk; **no backfill** → honest empty state when nothing qualifies. p_win is ranking-only (never exposed; the route strips it). Display-only — reads caches, writes to nothing. No proven-edge/+EV/best-bet claim, no CLV/ROI/edge number. This makes the champion's p_win a real (display) consumer for the first time. Fingerprint VERIFIED: hero is the max-p_win read across sports (WNBA A), not old code's first-in-order MLB pick (Schanuel −135); untakeable chalk excluded. Visual auth-gated → data fingerprint.
|
||||
|
||||
@@ -92,6 +92,24 @@
|
||||
> multi-book, honest-absent (`books:null`→NULL), crown OFF (`bestLines:0`) — plus the
|
||||
> component/panel/wiring unit tests + the type-checked build. Fingerprint: no unauthenticated
|
||||
> card surface (frontend-behind-auth); the consumed feed is live + unchanged.
|
||||
|
||||
> ## 🎯 HERO RANKING FIX 2026-07-29 (commit 41b86e3): p_win among takeable, no arbitrary pick
|
||||
> Review Zero found the hero's REAL behavior was worse than "unknown": it ranked on ev_pct
|
||||
> (v2), but ev_pct is NULL on served grades and **`Number(null) === 0`** made every prop tie
|
||||
> at EV 0 → the "top read" was the FIRST takeable A/B prop in cache order (ARBITRARY, dressed
|
||||
> as ranked; prod was serving Kelsey Mitchell A p_win 0.755 = the #6 read). 0.2/0.3 PASS:
|
||||
> champion p_win is on 100% of recent ledger rows (same graded source as the snapshot cache;
|
||||
> `/api/snapshot` null is just the `stripModelPrice` tier strip), book_odds present. v3:
|
||||
> rank by champion **p_win** among A/B TAKEABLE reads (`isTakeable` −160..+200, same as the
|
||||
> proof/audit), strict-null guard kills `Number(null)=0`, takeable filter excludes chalk, NO
|
||||
> backfill → honest empty state (`available:false, reason:'no_qualifying_read'`). p_win is
|
||||
> RANKING-ONLY (never exposed; route strips it). Display-only: reads caches, writes nothing.
|
||||
> Framing = model-vs-book number + grade (no proven-edge/+EV/best-bet/CLV/ROI claim).
|
||||
> FINGERPRINT (VERIFIED): the current MLB snapshot has 1 takeable A/B grade (Schanuel −135)
|
||||
> which OLD code (mlb-first iteration + `Number(null)=0` first-wins) would pick — but the live
|
||||
> hero is Kelsey Mitchell (WNBA A), the max-p_win read ACROSS sports, and untakeable chalk
|
||||
> (Yainer Diaz −200, Altuve C) is excluded → new code confirmed serving. Visual is auth-gated
|
||||
> (landing hero public, dashboard not) — data fingerprint used, `cf-cache-status: DYNAMIC`.
|
||||
- **Redirect EXISTS + WIRED:** `closingCapture.buildCaptureRows`→`closing_captures` (append-only,
|
||||
provenance: captured_at/book/line_type/both-prices/missed_reason) via `intradayRefreshService:221`
|
||||
+ internal endpoint; `ledgerService.attachClosingProb`→`closing_prob` (de-vigs both raw sides,
|
||||
|
||||
Reference in New Issue
Block a user