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:
@@ -1,5 +1,49 @@
|
||||
# VYNDR — Claude Code Project Context
|
||||
|
||||
---
|
||||
|
||||
# 🔷 PRODUCT IDENTITY — READ FIRST, EVERY SESSION
|
||||
|
||||
**VYNDR IS A PREDICTIVE MODEL.** It projects what a player will **DO**, and picks
|
||||
accurately. It reads and pulls the market apart — a student of the game that is
|
||||
also an aggregator.
|
||||
|
||||
**Market edge is a BYPRODUCT of a good prediction. It is NEVER the success
|
||||
criterion.**
|
||||
|
||||
> **SUCCESS = the forecast is honest about its own confidence AND still ranks.**
|
||||
> Calibration (does 60% mean 60%?) *and* resolution (do higher forecasts actually
|
||||
> hit more often?). Both, or it isn't working.
|
||||
|
||||
**No edge or CLV term belongs in a pass/fail gate.** CLV and market-relative edge
|
||||
are *diagnostics we report*, never thresholds a model must clear to ship. A model
|
||||
that forecasts honestly and ranks correctly is working even in a week the market
|
||||
moved against it; a model tuned to beat a closing line has been fitted to the
|
||||
market instead of to the game.
|
||||
|
||||
## PER-SPORT DOCTRINE
|
||||
*(Rashad Phillips, "Basketball Position Metric," 2022 — classify players by **what
|
||||
they do**, not by position labels.)*
|
||||
|
||||
**Each sport is its OWN model** — its own variables, archetypes, conditions,
|
||||
calibration and honest ceiling. The **only** thing shared across sports is the
|
||||
**Bayesian inference math**. Never one model fit to all sports; never a sport
|
||||
stubbed in on another sport's template and counted as covered.
|
||||
|
||||
## TRUTH LAW
|
||||
- **No fabricated data anywhere.** If it renders a number, it comes from the
|
||||
database or it doesn't render. `Number(null) === 0` is the classic breach.
|
||||
- **Honest-absent beats invented.** An empty state is a valid answer.
|
||||
- **Label limitations in-band** — e.g. "market consensus, **not sharp**",
|
||||
"RECORD BUILDING", "MODEL · LEARNING".
|
||||
- **Provisional results stay provisional until re-run.** A measurement taken
|
||||
against an instrument that has since changed is not a result; it is a result
|
||||
*pending*.
|
||||
- **Verify by inducing the real code path on demand** — never wait on a cron slot
|
||||
to find out whether something works. Documented ≠ verified.
|
||||
|
||||
---
|
||||
|
||||
## What This Is
|
||||
Sports betting intelligence SaaS. Real software product.
|
||||
Three tiers: Free (5 scans), Analyst ($19.99 / $14.99 founder), Desk ($49.99 / $34.99 founder).
|
||||
|
||||
Reference in New Issue
Block a user