diff --git a/outputs/VYNDR-COMPLETION-MATRIX.md b/outputs/VYNDR-COMPLETION-MATRIX.md index eac7af1..5bb725d 100644 --- a/outputs/VYNDR-COMPLETION-MATRIX.md +++ b/outputs/VYNDR-COMPLETION-MATRIX.md @@ -8,6 +8,9 @@ prod (`api.vyndr.app` / `vyndr.app`, checked 2026-07-27), and the design bundle can reach it) · LIVE (serving in prod now) · HONEST (real data, not fabricated/inflated/ placeholder). A built-but-unrouted component is **WIRED: NO** regardless of code quality. +> **HONESTY PASS applied 2026-07-27 (6bc18d8):** every KNOWN live fabrication removed/hidden +> — see the "HONESTY PASS" section at the end. HONEST cells for rows 19/20/24 updated (✓). + ## SURFACE MATRIX — 15 of ~26 fully done | # | Surface | DESIGNED | BUILT | WIRED | LIVE | HONEST | DONE | Evidence / what's missing | @@ -30,12 +33,12 @@ placeholder). A built-but-unrouted component is **WIRED: NO** regardless of code | 16 | Parlay lab | PARTIAL | YES | YES | YES | YES | ⚠️ | `System.dc.html` PARLAY BUILDER (not named "Lab"); `parlay/page.tsx`+`ParlayPanel`; `#parlay` drawer; prod `/api/parlay/grade`→real A- | | 17 | Alt-line ladder | PARTIAL | YES | PARTIAL | YES | YES | ❌ | Champion `alt_lines` real (prod: 5 rungs w/ edge_pct) but **Desk-tier only** (`tierGating.js:55`); proj-v1 `proj_ladder` ledger-only. DESIGNED: only Offseason grouping, no prop alt-stack | | 18 | **Book comparison (S2)** | YES | YES | **NO** | PARTIAL | YES | ❌ | `Intelligence.dc.html` line-shopping; `BookComparison.tsx` **0 importers = DEAD**; `/api/books` LIVE+honest (crown gated off) but **no UI renders it** | -| 19 | Price triplet | YES | YES | YES | YES | PARTIAL | ❌ | `Price Triplet.dc.html`; `PriceTriplet.tsx` in card; book·fair present in prod but **model_odds NULL** on live grades → model leg absent | -| 20 | **Compare (H2H)** | PARTIAL | YES | YES | YES | **NO** | ❌ | `compare/page.tsx:10` hardcoded `SAMPLE` Jokić/Wembanyama A+/A + fake "VERDICT"; **nav-linked + public**; no API call. Live fabrication | +| 19 | Price triplet | YES | YES | YES | YES | YES✓ | ❌ | ✓HONESTY PASS: null model/EV now NO_MODEL (honest-absent), no false "poisoned" copy. Still ❌: EV layer doesn't *produce* model_odds/ev (separate build) | +| 20 | **Compare (H2H)** | PARTIAL | in-dev | NO | YES | YES✓ | ❌ | ✓HONESTY PASS: fabrication removed → honest in-development state, pulled from Nav+BottomTabBar. Real two-player build pending (awaiting real build) | | 21 | Newsletter | YES | YES | YES | PARTIAL | YES | ❌ | `NewsletterCapture.tsx` on `/`,`/welcome`; subscribe validates live; send internal-only. LIVE: Listmonk env config `CANNOT DETERMINE` from prod | | 22 | Slip reader | PARTIAL | YES | PARTIAL | YES | YES | ❌ | `slip/page.tsx`; prod 200; **0 nav links → orphan** (deep-link only). DESIGNED: `a1-s9` spec, not the design bundle | | 23 | Article media / share (S3) | YES | PARTIAL | NO | PARTIAL | YES | ❌ | `Intelligence.dc.html` ARTICLE MEDIA; `ShareCard.tsx` **0 real importers = DEAD**; OG `opengraph-image.tsx` IS live. In-article archetype figures not built | -| 24 | Calibration / edge board | YES | YES | YES | YES | **NO** | ❌ | `Intelligence.dc.html` calibration; `MobileEdgeBoard.tsx:44` **miscalibrated placeholder edge%**, masks >40%→"—" ("backend fix pending"). Live on mobile Slate | +| 24 | Calibration / edge board | YES | YES | NO | NO | YES✓ | ❌ | ✓HONESTY PASS: placeholder-edge% `MobileEdgeBoard` REMOVED from the Slate (phones show real cards). Component kept as dead code until a real edge feed exists | | 25 | System / Intelligence terminal | YES | YES | **NO** | PARTIAL | YES | ❌ | `System.dc.html`/`Intelligence.dc.html`; `/terminal`→redirect to `/dashboard`; `/intelligence` REAL but **orphan (0 nav links)**; `/system` no page (prod 404) | | 26 | Offseason hub (S-2) | YES | PARTIAL | NO | NO | — | ❌ | `Offseason.dc.html` full spec; **no `/offseason` page** (prod 404); logic only inline in `FuturesBoard`/`NewsWire` on Explore | @@ -110,3 +113,32 @@ probability ladder), **System/Intelligence terminal** (wire the orphan `/intelli *Tags: all cells VERIFIED against repo/prod/bundle except — Newsletter LIVE (Listmonk env) and a live Brier surface = CANNOT DETERMINE (none found). Nothing BLOCKED.* + +--- + +# HONESTY PASS — applied 2026-07-27 (commit 6bc18d8, deployed) + +Removed/hid every KNOWN live fabrication. REMOVE/HIDE only — no grade, snapshot, +scorer, pipeline, or real feature touched. Updated HONEST cells: + +| Item | Was | Now | +|---|---|---| +| /compare (row 20) | HONEST: NO — hardcoded Jokić A+/Wembanyama A + fake VERDICT, nav-linked | Honest **in-development** state; removed from Nav + BottomTabBar. Real two-player build **pulled, awaiting real build**. | +| Pricing (founder copy) | $34.99 desk / struck $19.99 / FAQ $24.99 — wrong | Founder **Desk $44.99** (matches lib/checkout.js), **Analyst $14.99**; struck "regular" numbers removed; DeskShowcase $34.99→$44.99. First-100 counter is REAL (ClaimMeter→Stripe). No "first 50" desk claim (no such counter). | +| FAQ processor | "NexaPay" | **Stripe** (verified live: Next→Express→checkout.stripe.com). `web/src/services/nexapay.ts` is dead legacy code (webhook-only) — cleanup logged, not user-facing. | +| FAQ + Features "Brier/CLV published from day one" | INFLATED (not surfaced) | Removed. Returns when Brier/CLV are actually surfaced. Backend Brier compute untouched. | +| Calibration / edge board (row 24) | HONEST: NO — MobileEdgeBoard placeholder edge% (masked >40%) | **Removed** from the Slate; phones show the real game cards. Component kept as dead code (hidden, not deleted) until a real edge feed exists. | +| Price triplet (row 19) | HONEST: PARTIAL — null model/EV rendered "MODEL READ WITHHELD · poisoned" (false quarantine) | New **NO_MODEL** honest-absent state: MODEL "—" / "NOT PRICED", no verdict. Fixes grade card + LiveHeroProp. EV layer still doesn't *produce* values (separate build). | + +## KEPT ON THE BOARD (real work to finish — NOT cut) +- **Article media / S3 (row 23)** — real feature + free SEO/distribution. Finish, don't delete. Only the false "Brier/CLV" claim about it was corrected. +- **Newsletter / THE WIRE (row 21, 13)** — real. Capture live, honest. + +## FUTURE MODEL INPUT (logged only — not built this order) +- **News / line-movement signal** — injuries, scratches, lineups, weather move props before books reprice. Wire later as a model input. This is **ADDITIVE** to the media surfaces, not a replacement for them. + +## 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. + +**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 a43fe92..4a7ed3b 100644 --- a/specs/STATE.md +++ b/specs/STATE.md @@ -6,6 +6,15 @@ > model component **supersedes this file's narrative board** for "what's done" (built > 2026-07-27 from repo `b0a51c8` + prod, not from this file's claims). 15/26 surfaces > fully done. Read the matrix first; this narrative is the history behind it. +> +> **HONESTY PASS shipped 2026-07-27 (6bc18d8, deployed):** every KNOWN live +> fabrication removed/hidden — /compare (was hardcoded Jokić/Wembanyama grades) +> → honest in-dev + pulled from nav; founder pricing corrected (Desk $44.99, +> Analyst $14.99, struck/unwired numbers removed); FAQ NexaPay→Stripe; FAQ+Features +> "Brier/CLV published" claim removed; MobileEdgeBoard placeholder-edge% removed; +> price-triplet null model/EV → honest NO_MODEL (no false "poisoned" copy). No +> feature cut (media/newsletter/WIRE kept). Honest state = "no KNOWN live +> fabrications," not "provably none." See the matrix's HONESTY PASS section. --- # 🎯 CLV REDIRECT — investigated 2026-07-26. FINDING: it was ALREADY BUILT.