Honesty pass: remove every live fabrication (REMOVE/HIDE only, no feature cut)

Six live untruths corrected — no grade/snapshot/scorer/pipeline touched:
1. /compare — hardcoded Jokic A+/Wembanyama A + fake VERDICT replaced with an
   honest in-development state; removed from Nav + BottomTabBar (route still
   resolves, never the sample). Real two-player build is later.
2. Pricing — founder Desk $34.99→$44.99 (matches lib/checkout.js), Analyst
   $14.99; removed the struck $19.99/$44.99 "regular" numbers and DeskShowcase's
   stale $34.99. First-100 counter is real (ClaimMeter → Stripe countFounderSeats);
   no fake "first 50" desk claim added (no such counter exists).
3. FAQ "NexaPay" → Stripe (verified: live checkout is Next→Express→checkout.stripe.com).
4. FAQ + Features "Brier/CLV published from day one" removed (not surfaced yet) —
   returns when real. Backend Brier compute untouched.
5. MobileEdgeBoard removed from the Slate — its edge% feed was a miscalibrated
   placeholder (masked >40% as "—"); phones now show the real game cards.
6. Price triplet — never-computed model/EV now derives NO_MODEL (honest absent,
   MODEL "—" / "NOT PRICED", no verdict) instead of QUARANTINE's false "we
   suppressed our price / a leg is poisoned" copy. Fixes grade card + LiveHeroProp.

Full suite 3833 green, web build exit 0. Tests updated to the new honest contracts.

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:
Kev
2026-07-27 06:04:00 -04:00
parent be6b4a2849
commit 6bc18d823c
16 changed files with 100 additions and 132 deletions
+13 -20
View File
@@ -182,23 +182,14 @@ describe('M1 — mobile foundation is wired (structural, not visual)', () => {
describe('M4 — mobile structural rules locked (source, not visual)', () => {
const css = read('app/globals.css');
it('the flat EDGE BOARD is the mobile board; game cards are desktop-only', () => {
// Design screen 01: <768px shows the flat edge-ranked board, ≥768px keeps
// the game-grouped cards.
expect(css).toMatch(/\.edge-board-mobile\s*\{\s*display:\s*none/);
expect(css).toMatch(/@media\s*\(max-width:\s*767px\)[^]*?\.edge-board-mobile\s*\{\s*display:\s*block/);
expect(css).toMatch(/\.edge-board-desktop\s*\{\s*display:\s*none\s*!important/);
it('the fabricated mobile edge board is REMOVED — phones show the real game cards', () => {
// Honesty pass: MobileEdgeBoard's edge% feed was a miscalibrated placeholder
// (it masked any value >40% to "—"). It renders nowhere until a real edge
// feed exists. The Slate no longer imports or renders it; mobile now shows
// the same real game cards as desktop.
const slate = read('components/Slate.tsx');
expect(slate).toMatch(/MobileEdgeBoard/);
expect(slate).toMatch(/flattenToEdgeBoard/);
});
it('the mobile edge board renders matchup chips + tier grade + one hero edge%', () => {
const b = read('components/vyndr/MobileEdgeBoard.tsx');
expect(b).toMatch(/TeamChip/); // Rev 3 matchup chips
expect(b).toMatch(/GradeBadge/); // tier-colored grade
expect(b).toMatch(/var\(--miss\)/); // negative edge = red by sign
expect(b).toMatch(/rampOpacity/); // Design's ranked opacity ramp
expect(slate).not.toMatch(/MobileEdgeBoard/);
expect(slate).not.toMatch(/flattenToEdgeBoard/);
});
it('document still never scrolls sideways on phones (overflow contained)', () => {
@@ -290,12 +281,14 @@ describe('P1-7 — edge board guards the broken edge placeholder', () => {
});
});
// ── P1-8 lock — Compare verdict makes no unverifiable "tonight" claim ────────
describe('P1-8 — Compare verdict is time-honest (form, not a phantom game)', () => {
// ── P1-8 lock — Compare ships NO fabrication (honest in-development state) ────
describe('P1-8 — Compare carries no hardcoded grades or phantom verdict', () => {
const compare = read('app/compare/page.tsx');
it('the sample verdict never claims "tonight" (NBA has 0 games in July)', () => {
it('no sample players, no fake verdict, no "tonight" claim — honest in-dev', () => {
expect(compare).not.toMatch(/edge tonight/i);
expect(compare).toMatch(/on current form/i);
expect(compare).not.toMatch(/Joki|Wembanyama/);
expect(compare).not.toContain('VYNDR VERDICT');
expect(compare).toMatch(/IN DEVELOPMENT/i);
});
});