Product identity + widen books for DISPLAY, model input byte-identical
IDENTITY (CLAUDE.md top + MASTER-PLAN header). VYNDR is a PREDICTIVE MODEL: it projects what a player will DO and picks accurately. Market edge is a BYPRODUCT of a good prediction, never the success criterion. Success = the forecast is honest about its own confidence AND still ranks -- calibration and resolution, both. No edge/CLV term belongs in a pass/fail gate; they are diagnostics we report, not thresholds a model must clear. A model tuned to beat a closing line has been fitted to the market instead of to the game. Per-sport doctrine (Phillips 2022, classify by what players DO not by position): each sport is its own model -- own variables, archetypes, conditions, calibration, honest ceiling. Shared across sports: ONLY the Bayesian inference math. Truth Law: no fabricated data; honest-absent over invented; label limitations in-band; provisional stays provisional until re-run; documented is not verified. PHASE 2 -- AGGREGATOR WIDENING (live). normalizeProps now emits every DISPLAY book instead of 5 of 18. Before this we discarded 13 books of our own accord and 64.8% of the MLB slate was invisible to users. Every prop carries book_role (both/takeable/reference/dfs/offshore) so the display layer can say WHAT a price is -- a fixed-payout DFS number and a two-way sportsbook price are not interchangeable objects. Unknown books are still dropped. PHASE 3 -- MODEL GATE (the model does not move). bookRoles splits MODEL_BOOKS (the legacy allow-list, character for character) from DISPLAY_BOOKS. Both model paths re-filter before they pick a line: gradeSlateService.dedupeProps (before first-row-wins AND before the limit) and intradayRefreshService.indexOddsProps (which RE-GRADES at the current line -- without the gate, widening would have silently moved locked lines onto books the model has never been calibrated against). A test asserts the graded set is byte-identical through the widening. CURRENT_RULER_VERSION stays v1_first_book. The gate lifts only when the MLB calibration is re-run on the consensus ruler and v2 is promoted. HONEST FRAMING, recorded in the plan: this is an AGGREGATOR win and it does NOT fix the model. WNBA still abstains -- a model problem, not a coverage problem; it is better covered than MLB. MLB isotonic still provisional. The consensus is MARKET, not SHARP: pinnacle, matchbook and polymarket are 0% on both sports, so no sharp anchor exists in our feed. Two superseded tests updated to stronger properties rather than deleted: roleOf now names the KIND of book, and the normalizer test asserts the display set widens WHILE the model set does not. Gates: 4,027 tests / 322 suites green; next build exit 0. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QJs13VsyiSKYQP6rj3NNmc
This commit is contained in:
+59
-1
@@ -1,6 +1,64 @@
|
||||
# VYNDR — MASTER PLAN
|
||||
**Single source of truth. Sessions EXECUTE against this and UPDATE it in place.**
|
||||
Created 2026-07-31 by consolidation. Nothing built in this pass.
|
||||
Created 2026-07-31 by consolidation. Last updated 2026-08-01.
|
||||
|
||||
---
|
||||
|
||||
## 🔷 PRODUCT IDENTITY — the thing being built
|
||||
|
||||
**VYNDR IS A PREDICTIVE MODEL.** It projects what a player will **DO** and picks
|
||||
accurately — reading and pulling the market apart. Student of the game, and an
|
||||
aggregator.
|
||||
|
||||
**Market edge is a BYPRODUCT of a good prediction, NEVER the success criterion.**
|
||||
|
||||
> **SUCCESS = the forecast is honest about its own confidence AND still ranks.**
|
||||
> Calibration *and* resolution. **No edge/CLV term belongs in a pass/fail gate** —
|
||||
> they are diagnostics we report, not thresholds a model must clear to ship.
|
||||
|
||||
**PER-SPORT DOCTRINE** (Rashad Phillips, *Basketball Position Metric*, 2022 —
|
||||
classify players by **what they do**, not position labels): each sport is its OWN
|
||||
model, with its own variables, archetypes, conditions, calibration and honest
|
||||
ceiling. Shared across sports: **only the Bayesian inference math.**
|
||||
|
||||
**TRUTH LAW:** no fabricated data anywhere · honest-absent over invented · label
|
||||
limitations in-band ("market consensus, **not sharp**") · **provisional results
|
||||
stay provisional until re-run** · documented ≠ verified.
|
||||
|
||||
---
|
||||
|
||||
## ▶ NEXT EXECUTABLE ORDER
|
||||
|
||||
**The MLB calibration RE-RUN against the consensus ruler.** Everything
|
||||
model-shaped is downstream of it:
|
||||
|
||||
- MLB isotonic `p_win` cannot promote until re-run (it was calibrated against
|
||||
`v1_first_book`).
|
||||
- The newly-visible props cannot feed the model until it promotes.
|
||||
- Every edge/CLV number resets to `ruler_version = v2_consensus` at that boundary
|
||||
and **must not be pooled** with what came before.
|
||||
|
||||
*Blocked on nothing. This is the next build.*
|
||||
|
||||
---
|
||||
|
||||
## 📍 STATE AS OF 2026-08-01 (Order Zero, measured on prod with the real key)
|
||||
|
||||
| finding | number | what it means |
|
||||
|---|---|---|
|
||||
| **MLB slate invisible to us** | **64.8%** | our own allow-list, not the feed — now widened for DISPLAY |
|
||||
| **books/prop, MLB** | 3.61 feed → 0.57 after filter | the filter cost, quantified |
|
||||
| **books/prop, WNBA** | **4.21** feed → 1.20 | **WNBA is BETTER covered than MLB** |
|
||||
| **consensus ruler** | **MARKET, not SHARP** | `pinnacle`/`matchbook`/`polymarket` = **0%** on both sports. No sharp anchor exists in our feed. Permanent limitation, not a milestone |
|
||||
| **ruler delta** (consensus − incumbent) | MLB mean +1.50 pts, median 0, **17% of props move ≥5 pts** | rulers genuinely differ; "better" is unproven |
|
||||
| **MLB isotonic `p_win`** | **PROVISIONAL** | calibrated on the bent ruler; does not promote until re-run |
|
||||
| **WNBA** | **still abstains** | a MODEL problem, not a coverage problem — coverage was never its constraint |
|
||||
| **soccer** | **settles** — ~15 competitions, 30d | "grades into a void" is a **$19/mo Pro-tier** problem, not a data problem |
|
||||
| **CLV + results feeds** | `/odds/closing` + `/movement` **redacted**; `/results` + `/exports/resolved-props` **403** | free tier behaving exactly as its contract says |
|
||||
| **accrual clock** | **sequential, post-completion** | see §11. Pre-completion data does not count and is never pooled |
|
||||
|
||||
**The honest framing:** widening books is an **AGGREGATOR** win. **It does not fix
|
||||
the model.** Do not let the free-side win read as model progress.
|
||||
|
||||
> **HOW TO USE:** this supersedes ad-hoc re-derivation. Before any order, read the
|
||||
> phase you're in. After any order, tick the item and add one line. **Do not
|
||||
|
||||
Reference in New Issue
Block a user