Files
vyndr/specs/design-vs-build-gap-audit.md
builtbykev e257474cc8 report: design-vs-build gap audit — 61 items enumerated, 18 absent
Package specs/design-reference (Jul 22) audited against the CURRENT repo
(bf7c0a3, ~9 days later). No ~/vyndr_design exists; the in-repo copy is the
package. Every claim is a direct file/grep/count check, not the harness that
returned a silent false in Wave 3.

61 implementable items enumerated: BUILT-TO-SPEC 20, BUILT-BUT-DRIFTED 7,
PARTIAL 16, ABSENT 18 (+1 CANNOT DETERMINE: 19-screen mobile parity needs a
visual pass).

Largest single gap: the glyph library — 38 of 83 designed SVGs are wired (46%),
and the design implies 74 display archetypes against a 41-entry backend
registry, so the archetype system is roughly half the designed scope.

Drift found on surfaces built recently: the book comparison wired 07-29 renders
per-book lines but has NO crown, NO disagreement axis, NO SPLIT chip and NO
movement strip — a simpler version than the S2 design. The mobile tab bar has 5
tabs but not the designed READ-FAB. Calibration gating disagrees with the design
(our n>=20 vs designed N30).

Wave-2 reclassification: Newsletter DESIGN EXISTS (S5 The Report is fully
designed) — the earlier status pull was wrong to call it a design gap. Live
tracking and Slip reader remain genuinely design-missing.

Model linkages named: Price Triplet waits on the EV layer producing
p_win/ev_pct/model_odds; the S4 calibration curve waits on the n-threshold
decision plus accrued buckets, while the CLV chips can build on the repaired
instrument now.

Ordered build list in six dependency waves: self-contained first (glyphs,
primitives, boundary-channel blue), then scanner-nudge-gated, model-gated,
resolution-pipeline-gated (share-card masters cannot ship — the tail has no
generation step and no trigger), licensing-gated (book logos, push-to-book),
then the large surface builds.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QJs13VsyiSKYQP6rj3NNmc
2026-07-31 05:45:56 -04:00

12 KiB
Raw Permalink Blame History

VYNDR — DESIGN-vs-BUILD GAP AUDIT (report-only, 2026-07-31)

Package: specs/design-reference/ (Jul 22 — the in-repo copy; there is no ~/vyndr_design, CANNOT DETERMINE if a separate extract exists outside the repo). Audited against the CURRENT repo (bf7c0a3), which is ~9 days AFTER the package. Nothing built, wired, or fixed.

Harness note: every "built" claim below is a direct file/grep/count check, not the {found:False}-on-except harness that produced a silent false in Wave 3. Live probes used curl.


ENUMERATION — 61 IMPLEMENTABLE ITEMS

(Excluded as explicitly NOT product code by the handoff: image-slot.js, .image-slots.state.json, ios-frame.jsx. Excluded as design-time only: dashed safe zones.)

A. TOKEN SYSTEM — 6 items

# item state
A1 Surfaces #06060B void / #0E0E14 card / #14141E elevated / #101018 hairline / #0A0A10 deep BUILT-BUT-DRIFTED — void in 18 files, elevated in 7, but #0E0E14 card in only 1 file
A2 Signal green #00D4A0, ONE meaning BUILT-TO-SPEC (34 files)
A3 Amber #FFB347 caution-only / Red #FF4757 miss-only BUILT-TO-SPEC (24 / 4 files)
A4 Text ramp #F0F0F0/#B8BCC8/#707080/#4a4a58 + borders BUILT-TO-SPEC (15 / 7 files)
A5 Inter + JetBrains Mono, tabular-nums BUILT-TO-SPEC (self-hosted via next/font, S41)
A6 Grade colors + glow-A-tier-ONLY law BUILT-TO-SPEC (gradeGlows, locked by colorContract tests)

B. BOUNDARY CHANNEL — 1 item

| B1 | Blue #8FB2DE boundary channel (edge-priced-out / no-market / line-not-priced), distinct from red REFUSAL + amber QUARANTINE | PARTIAL — the hex appears in only 2 files; NO MARKET (8) and PRICED OUT (4) copy exists, but the channel is not applied as a system-wide third colour law |

C. BRAND — 2 items

| C1 | Wordmark VYND + green R + vy-glitch keyframes + cursor | BUILT-BUT-DRIFTED — Wordmark exists; vy-glitch = 0 files (our glitch keyframes are named differently) | | C2 | Logo mark, 32-grid signal V | BUILT-TO-SPEC |

D. GLYPH LIBRARY — 1 item (the largest single gap)

| D1 | 83 archetype SVGs (74 display + 9 classifier-legacy) + MANIFEST → archetypes.js | PARTIAL — 38 of 83 wired (46%). 45 designed glyphs are unwired. Compounding: the design implies 74 display archetypes; the backend registry has 41. So the archetype system is ~half the designed scope. MANIFEST.md present and unused. |

E. NAMED PRIMITIVES — 28 items

# item state
E1 Movement strip (steps-not-curves, green-only-when-favouring, FLAT hairline) ABSENT
E2 BookChips — 7 books, brand-colour mono wordmarks BUILT-BUT-DRIFTEDBookChip.tsx + lib/books.js exist; not verified as the 7-book brand-colour tile set
E3 Best-number crown (green inset bar + BEST NUMBER chip + row tint) ABSENTCrownBadge not found; BOOK_CROWN_ENABLED=false and measured flat
E4 Disagreement axis (dots around the VYNDR reference line) ABSENT
E5 SPLIT chip (amber when spread wide) ABSENT
E6 Push-to-book (geo-gated, buttons never render disabled, affiliate microcopy verbatim) PARTIALbookLinks.js/affiliateConfig.js exist, all books enabled:false; the designed geo-gating + microcopy not built. TEASER only today
E7 CLV chip BEAT CLOSE +2.0 — colour by SIGN, never result PARTIALlib/clvBadge.js exists, "BEAT CLOSE" in 3 files
E8 CLV aggregate on the record line (BEAT CLOSE 61% + AVG CLV) PARTIALbeat_close_pct computed behind the n≥20 gate
E9 Calibration curve (dots vs dashed perfect line, dot size = sample) ABSENT — no CalibrationCurve component
E10 The Report email — dark billboard header + light paper body PARTIALnewsletterService builds an email; the designed hybrid dark/light template not built
E11 Report signup module BUILT (NewsletterCapture)
E12 /report archive (每 issue shows its own day record) ABSENT/report redirects to /blog, no archive
E13 Scanner S6 marketless (blue void box, NO MARKET chip, priced-count CTA) PARTIALNoMarketState ships; the designed blue-channel void box + player-specific CTA not verified
E14 Scanner S7 priced-line nudge (3 cases + typed-line mismatch) BUILT (S79/S80 — pricedLines, per-selection + freshness)
E15 Price Triplet BUILT-BUT-DRIFTED — renders, but the MODEL leg is NO_MODEL (see Phase 2)
E16 Share-card masters ×5 (settle 1080×1350, story, square, X 1200×675, record 1080×1350, article OG) ABSENT as product — PNG masters exist in exports/; ShareCard.tsx has 0 importers
E17 nudge(cell, up) reaction primitive (rx-up/rx-down flash, data-events only) ABSENTrx-up = 0 files
E18 Boot stagger vy-rowin 60ms + vy-arrive hero-last ABSENT — 0 files
E19 THE WIRE (timestamped entry, ~6s hold, tag coloured by meaning) BUILT (vyndr/Ticker, real /api/ticker exhaust)
E20 ⌘K palette BUILT (SearchModal + GlobalHosts)
E21 Parlay math (decimal→American, same-game amber, grade 1 tier, stake 1.0/0.75/0.4u) BUILT-BUT-DRIFTEDparlayMath.js/parlayService exist; stake-sizing ladder not verified
E22 Correlation builder BUILT (/parlay, wired Wave 1)
E23 Streaks BUILT (/api/streaks, lens-applied)
E24 Combat PARTIAL (15 files reference it; no /combat route)
E25 Pitcher BUILT (62 files; probable-pitcher pipeline live)
E26 Team-gradient matchup chips (10-12px, inside rows so the opacity ramp dims them) PARTIALlinear-gradient(135deg in 4 files, not the row-chip pattern
E27 Row-hover rationale ABSENT — 0 files
E28 IntersectionObserver reveal + rail highlight ABSENT — 0 files

F. ARTBOARD SURFACES — 13 items

F1 Landing BUILT F2 System terminal (desktop) ABSENT as a route (/system 404; its INTELLIGENCE section = live /intelligence)
F3 Mobile 19 screens PARTIAL — most screens exist; not audited screen-by-screen (CANNOT DETERMINE without a 19-way visual pass → Chrome audit)
F4 S2 line shopping PARTIALBookComparisonPanel wired 07-29 but DRIFTED: renders per-book lines with no crown, no disagreement axis, no SPLIT chip, no movement strip — a simpler version than designed
F5 S3 article media (hero template + 4 archetypes + inline figures + article card + OG) ABSENT except live opengraph-image.tsx
F6 S4 CLV / calibration PARTIAL — CLV instrument repaired + clv_distribution behind n≥20; the curve visual is ABSENT
F7 S5 The Report PARTIAL (see E10-E12)
F8 M2 crops ×5 ABSENT as product (masters exist in exports/)
F9 Offseason hub ABSENT (/offseason 404)
F10 Season board (open→NOW→VYNDR triplet, ladder grouping) ABSENT
F11 Kickoff countdown (computed live, ambient) ABSENT (2 files mention "kickoff", no countdown)
F12 News / outlook feed + quiet-wire empty state PARTIAL (NewsWire on Explore)
F13 Mobile tab bar SLATE·EXPLORE·READ-FAB·LEDGER·MORE BUILT-BUT-DRIFTEDBottomTabBar has 5 tabs, but READ-FAB = 0 files: the raised 50px green circle with void V + 6px ring is not the designed FAB

G. HONESTY BEHAVIOURS (first-class items) — 10

| G1 Boundary-channel blue states | PARTIAL (B1) | | G2 Honest empty states | BUILT (emptyState.js, month-aware, unit-tested) | | G3 Visible timestamps | BUILT (gradedAt, "UPDATED Xs ago") | | G4 No "tonight" off-slate | BUILT (S57 date-pinned ESPN + isRelevantGame) | | G5 CLV colour by SIGN, never result | BUILT (clvBadge, ROW-GRAMMAR colour law) | | G6 Calibration hollow under N30 | DRIFTED — we gate at n≥20, the design says N 30 hollow. Two different thresholds; neither wrong, but they disagree | | G7 C-tier honestly under .500 | BUILT (TierRecord renders real per-tier rates) | | G8 Geo-empty honest state | ABSENT (push-to-book unbuilt) | | G9 No trial — free tier IS the trial | BUILT (pricing) | | G10 "Premium is produced, never claimed" | BUILT (honesty passes; A-RATED hold) |

COUNT

61 items — BUILT-TO-SPEC 20 · BUILT-BUT-DRIFTED 7 · PARTIAL 16 · ABSENT 18. (Plus 1 CANNOT DETERMINE: F3's 19-screen parity needs a visual pass.)


PHASE 2 — WAVE-2 RECLASSIFICATION + MODEL LINKAGES

The Wave-2 "design gap" three, corrected:

  1. Newsletter → DESIGN EXISTS. S5 "The Report" is fully designed (hybrid email, signup, archive). Reclassify design-missing → design-exists-needs-build. My earlier status pull was wrong on this.
  2. Live tracking → DESIGN STILL MISSING. No artboard in the package. design-missing-needs-design stands.
  3. Slip reader → DESIGN STILL MISSING. Not in the package. design-missing-needs-design stands.

Model linkages (connect, don't isolate):

  • Price Triplet (E15/F-Price-Triplet artboard) waits on the EV layer producing p_win/ev_pct/ model_odds on served grades. We retired edge_pct from it 07-31; it renders honest NO_MODEL until the model fills the MODEL leg. Gated on model work, not design.
  • S4 CLV chip + calibration curve (E7/E8/E9/F6) are the designed home for the CLV instrument repaired 07-28 (closing_prob 59→406). The chips can build on today's data; the calibration curve needs the n-threshold decision resolved (G6: our n≥20 vs designed N30) and enough settled buckets to render non-hollow.

PHASE 3 — DEPENDENCIES + ORDERED BUILD LIST

WAVE D1 — self-contained, no dependency (build first):

  1. D1 glyph library — lift the remaining 45 SVGs into archetypes.js (+ decide the 41-vs-74 archetype scope question). Pure asset work, MANIFEST provided.
  2. A1 card token #0E0E14 (1 file → system-wide) · C1 vy-glitch naming reconciliation.
  3. E17 nudge() · E18 boot stagger · E27 row-hover · E28 IntersectionObserver — pure CSS/JS primitives, all four ABSENT, all self-contained.
  4. B1 boundary-channel blue as a real third colour law (touches S6/S7/PriceTriplet copy).
  5. E26 team-gradient chips · F13 READ-FAB.

WAVE D2 — gated on ANOTHER BUILD ORDER (the scanner-nudge order the package references): 6. E13 Scanner S6 full treatment (blue void box + priced-count CTA + player-specific path).

WAVE D3 — gated on MODEL work: 7. E15 Price Triplet MODEL leg ← EV layer producing p_win/ev_pct/model_odds. 8. E9 calibration curve ← resolve n≥20 vs N30, accrue buckets. E7/E8 CLV chips can go earlier (instrument is repaired).

WAVE D4 — gated on the RESOLUTION PIPELINE (Wave 3 found it unreachable): 9. E16 share-card masters ×5 + F8 M2 crops ← the resolve fanout has no share-card generation step and no trigger. Masters exist in exports/; they cannot ship as product until the tail fires.

WAVE D5 — gated on ASSETS / LICENSING: 10. E2 BookChip brand tiles (licensed book logos — image-slot overlay designed for exactly this) · headshot slots · E6 push-to-book (also gated on affiliate approval — every book enabled:false).

WAVE D6 — large surface builds (design complete, no blocker but big): 11. F9/F10/F11 Offseason hub + season board + kickoff countdown (also sport-boundary adjacent). 12. F5 S3 article media · E10/E12 The Report email + archive · E1/E3/E4/E5 the S2 line-shopping primitive set (movement strip, crown, disagreement axis, SPLIT) — note E3 crown is additionally held by measurement (crown OFF, measured flat).


TAGS

VERIFIED: all counts (83 SVGs vs 38 wired; 41 registry archetypes; token file counts; every ABSENT confirmed by 0-file grep). CANNOT DETERMINE: F3 (19-screen mobile parity) — needs the Chrome visual pass; whether a separate ~/vyndr_design extract exists. BLOCKED: E16/F8 (resolution tail), E15 (model), E2/E6 (licensing/affiliate).