Wave 1: wire /intelligence, /slip, /parlay + /marketplace honesty pass

Wiring + one copy pass. No grade, ledger, model or scoring change (diff empty
across intelligence/, ledgerService, outcomeService, gradeSlateService).

REVIEW ZERO — each surface proven with real data BEFORE wiring:
  0.1 /intelligence vs /system are NOT duplicates. System.dc.html is a
      multi-surface artboard (TERMINAL + INTELLIGENCE + WIRE sections), not the
      design for a distinct /system route; its INTELLIGENCE section is already
      realised as the live app/intelligence/page.tsx. No /system page exists and
      none should be built as a second copy — the prod 404 is correct.
  0.2 /intelligence renders live and gates SERVER-side, not by blur: the proxy
      requires auth and limits by tier (desk 50 signals / non-desk 8), and
      returns 401 to an anonymous caller (verified live). No leak.
  0.3 /slip parses a real DraftKings slip end to end: 3/3 legs,
      needs_review false, Aaron Judge total_bases over 1.5 @ -115. Honest limit
      recorded: parsers are layout-rigid, an unsupported layout yields ZERO legs
      rather than wrong ones (never-guess), so real-world OCR hit-rate across
      layouts is CANNOT DETERMINE until user slips arrive.
  0.4 /parlay direct route hits the real correlation builder on the same
      ParlayContext the drawer uses.
  0.5 /marketplace advertised four unbuilt things but made NO performance or
      profit claim, and its capture was already real (/api/waitlist upserts to a
      waitlist table). The gap was tense, not fabrication.

WIRED: Nav MORE gains Intelligence, Slip Reader and Marketplace; Parlay Lab
re-pointed from the drawer hash to /parlay (the drawer is unaffected —
ParlayPanel stays mounted with its floating badge).

GATING: /intelligence added to GATED_ROUTES because its feed 401s signed-out, so
an ungated link would land visitors on a permanently empty page. /parlay stays
OPEN deliberately — it is the free parlay funnel and gating it would be a
monetization regression.

/marketplace honesty pass: every item body now opens "Not built yet." /
"Not written yet." / "Not produced yet." with what is planned; the subhead states
it is not a purchase, not a pre-order and not a promise of a ship date; the
playbook item carries "No profit claim, no promised return". The capture stays
real — no fake button. Unit-locked.

Floor: 315 suites / 3920 tests green (12 new), web 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:
Kev
2026-07-31 04:51:42 -04:00
parent 6328a5ce92
commit ff7f5d8d2d
6 changed files with 174 additions and 8 deletions
+60
View File
@@ -0,0 +1,60 @@
# SPEC — WAVE 1: WIRE THE WORKING SURFACES + /marketplace HONESTY (shipped)
2026-07-31. Wiring + one copy pass. No grade, ledger, model, or scoring change.
## REVIEW ZERO — each surface proven BEFORE wiring
- **0.1 `/intelligence` vs `/system` — NOT duplicates; nothing to resolve away.** `System.dc.html`
is a MULTI-surface artboard (it contains TERMINAL, INTELLIGENCE and WIRE sections), not the design
for a distinct `/system` route. Its INTELLIGENCE section is **already realised** as the live
`app/intelligence/page.tsx`. **No `/system` page exists and none should be built as a second copy**
the prod 404 is correct. Only `/intelligence` was wired. ✅
- **0.2 `/intelligence` renders live + gates correctly.** Real feed (`/api/intelligence/feed`), 160
lines, zero placeholders. **Entitlement is enforced SERVER-side, not by blur**: the proxy requires
auth and limits by tier — **desk 50 signals / non-desk 8** — and returns `401 Not signed in` to an
anonymous caller (**verified live in prod**). So making it nav-reachable leaks nothing. ✅
- **0.3 `/slip` functions END TO END on a real slip.** Parsed the real DraftKings fixture:
**3/3 legs, `needs_review: false`**, leg 1 = `Aaron Judge · total_bases · over 1.5 @ -115`. ✅
**Honest limit recorded:** the parsers are layout-rigid. A slip in an unsupported layout yields
**zero legs rather than wrong ones** — correct per the NEVER-GUESS contract, but it means real-world
OCR hit-rate across layouts is **CANNOT DETERMINE** until real user slips arrive.
- **0.4 `/parlay` direct route hits the working surface.** `app/parlay/page.tsx` is the real
correlation builder on the **same `ParlayContext`** the drawer uses — not a separate unbuilt page. ✅
- **0.5 `/marketplace`** advertises four unbuilt things (API access · custom alerts · "The Edge"
playbook · merch capsule). **No performance/edge/profit claim was present** (the worse category —
clean). The capture was already REAL: `fetch('/api/waitlist')``src/routes/waitlist.js` upserts to
a `waitlist` table. The gap was tense: bodies read as present-tense descriptions.
## PHASE 1 — WIRED (all three passed)
`Nav.tsx MORE`: **Intelligence**, **Slip Reader**, **Marketplace** added; **Parlay Lab re-pointed from
`#parlay` (drawer-only) to `/parlay`** (the real page). The drawer is unaffected — `ParlayPanel` stays
mounted in the layout with its floating badge, its natural in-context use from a prop row.
**Gating change (one line, principled):** `/intelligence` added to `GATED_ROUTES`. Its feed 401s
signed-out, so an ungated nav link would land visitors on a permanently empty page. `/slip` was already
gated (personal surface). **`/parlay` deliberately stays OPEN** — it is the free parlay funnel and
gating it would be a monetization regression (same rule as dashboard/scan).
## PHASE 2 — /marketplace HONESTY PASS
Every item body now opens **"Not built yet."** / "Not written yet." / "Not produced yet." followed by
what is *planned*. The subhead is explicit: *"None of the below is built yet… joining a list records
your interest, nothing more. It is not a purchase, not a pre-order, and not a promise of a ship date."*
The playbook item carries **"No profit claim, no promised return."** The capture stays REAL (no fake
button). Unit-locked: every body must contain a not-yet marker, and the page must carry no
guaranteed/win-rate/ROI/beat-the-book language.
## PHASE 3 — VERIFY
Grade, ledger, model, scoring **untouched** (diff empty across `intelligence/`, `ledgerService`,
`outcomeService`, `gradeSlateService`). **315 suites / 3,920 tests green** (12 new), **web build exit 0**.
**Chrome audit manifest — Wave 1 additions:**
| surface | state | check |
|---|---|---|
| `/intelligence` | **signed-out** → should redirect to `/login` (now gated) | no empty-feed page |
| `/intelligence` | **free** vs **ENTITLED (Desk)** | free sees 8 signals + lock overlay; **Desk sees 50***entitled path needs Kev* |
| `/slip` | **free (signed-in)** | upload/paste → editable legs; unsupported layout → empty, not wrong |
| `/parlay` | **logged-out** | direct nav entry loads the full lab; free 2-leg cap + payout blur |
| `/marketplace` | logged-out | "Not built yet" on every item; Join waitlist records and confirms |
## TAGS
VERIFIED: 0.10.5, all wiring, gating, copy. **CANNOT DETERMINE: real-world slip OCR hit-rate across
book layouts** (no user slips yet). BLOCKED: none.