diff --git a/outputs/VYNDR-COMPLETION-MATRIX.md b/outputs/VYNDR-COMPLETION-MATRIX.md index 370326c..b3d5ad9 100644 --- a/outputs/VYNDR-COMPLETION-MATRIX.md +++ b/outputs/VYNDR-COMPLETION-MATRIX.md @@ -139,6 +139,6 @@ scorer, pipeline, or real feature touched. Updated HONEST cells: ## KNOWN HONESTY GAPS (not fixed this order — logged, not fabrication) - **Hit rate 59% (n=763) shown without ROI/CLV** — thin, not false. ROI/CLV surfacing is a later build. -- **CLV starved** — 88,290 priced captures → only 59 usable closing_prob, 0 MLB fair_prob_lock. The CLV funnel is a separate order. +- **CLV instrument REPAIRED 2026-07-28** (commit 6552281). Was: 59 usable closing_prob. Now: **406** (MLB 248, WNBA 158) — the collapse was `attachClosingProb`'s `.limit(50000)`/no-ORDER-BY read + write-once `market_unavailable`, NOT capture (95% per-prop coverage) or the join (0 key mismatches). **CLV finding, straight: MLB unders lag the close (mean −9.1 prob-pts, 74% lose); MLB overs +2.0; WNBA flat.** → the +4.57% MLB-C and over/under asymmetry are substantially stale-line artifacts. This UNBLOCKS the proof order (proj-v1.1), which gates promoting p_win/ev to served grades. **Honest state after this order: "no KNOWN live fabrications" — not "provably none."** The audit was thorough (repo + prod), but absence of a claim of falsehood is not a proof of universal truth. diff --git a/specs/STATE.md b/specs/STATE.md index 3cf7179..9e0b659 100644 --- a/specs/STATE.md +++ b/specs/STATE.md @@ -21,6 +21,21 @@ --- # 🎯 CLV REDIRECT — investigated 2026-07-26. FINDING: it was ALREADY BUILT. *The premise "CLV is dead, redirect it to closing_captures" is STALE. Nothing needed building.* + +> ## 🔧 CLV INSTRUMENT REPAIRED 2026-07-28 (commit 6552281, deployed) +> The starvation was NOT capture (per-prop coverage is 94.9% MLB / 95.8% WNBA) and NOT +> the join (key `player_key|stat|side|game_date` is PERFECT, 0 mismatches in-range). It +> was `attachClosingProb`: `.limit(50000)` with no ORDER BY on a 730k-row table (86% +> refusal rows) saw ~7% for MLB, and `market_unavailable_reason` was write-once/terminal +> so wrongly-declared rows never recovered. FIX: read only PRICED captures scoped to the +> candidate dates (complete, small); make market-unavailable a re-checkable absence that +> a real close UPGRADES; closing_prob stays write-once. **`closing_prob` 59 → 406** +> (MLB 30→248, WNBA 29→158; all with provenance; 0 fabricated; grade/locked_odds/outcome +> untouched). **CLV finding, reported straight: MLB UNDERS LAG THE CLOSE — mean −9.1 +> prob-pts, 74% lose. MLB overs +2.0. WNBA flat both sides.** So the +4.57% MLB-C and the +> over/under asymmetry ARE substantially stale-line artifacts on the unders (line 38-39 +> below is now RESOLVED → confirmed, not "cannot determine"). Held: proj-v1.1 promotion + +> p_win/ev on served grades = the PROOF order, gated on this. - **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,