Files
vyndr/specs/BOARD-2026-08-07.md
T
builtbykev 08791520fc Board: mechanical inventory of every outstanding item, read from the repo
Inventory only, no build. Every line cites a file or a query; unverifiable
items are marked UNKNOWN rather than asserted.

Corrections to the assumed board:
- Scanner is DONE on the blue-boundary format (scan/page.tsx:715-717), not
  still amber.
- Screen conversion is DONE except ONE file -- RouteStub survives only in
  app/notifications/page.tsx across 47 route dirs.
- Terminal is deliberately retired (S57 redirect), not debt.
- ev_pct DOES render, in 5 frontend files. That flag was stale.
- edge_pct is NOT a scale bug: (model-line)/line is correct arithmetic that
  explodes on small lines (a 5.5 projection on a 0.5 line is a legitimate
  1000%). Live top values 900/860/700 on 68,364 rows. It is a display
  defect, not a broken computation, and it reaches a user only via
  alt_lines typing -- the grade card computes edge independently.
- All FOUR sports have real archetype registries (nba 15, mlb 15, soccer 6,
  wnba 5) and ACTIVE_SPORTS runs all four. Only MLB BATTERS is MODELED;
  everything else is scaffolding with a sound base rate and no proven
  factors. MLB pitchers: pitcherEngine.js exists at 261 lines and is read
  by ZERO serving code.
- Book comparison is built and mounted NOWHERE -- the same built-but-unread
  class the reachability guard exists for, and NOT covered by it, since
  that contract is grade fields only.

UNKNOWN and marked as such: opp_rank_stat prod population, internal-key
rotation, the ~9% void/DNP rate, and whether MovementStrip is a distinct
spec item or satisfied by GradeShift/MarketBreadth.

The ordered board puts five PARTIAL items first and flags accrual
sensitivity: seven items are isolated design/guard work buildable today
with zero clock impact; five touch the serving path and would muddy the
accruing repaired-champion dates. edge_pct is the sharpest tension -- a
real honesty defect a user can see, whose fix touches serving mid-accrual.

Clock today: 0 eligible dates, all four re-audit items WAITING.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W1sivYNqY2TS5ftykmHBU9
2026-08-07 15:13:02 -04:00

7.1 KiB
Raw Blame History

The real board — read from the repo, 2026-08-07

Inventory only. Every line cites a file or a query. Anything unverifiable is marked UNKNOWN rather than asserted.


PHASE 0 — Design / terminal

item state evidence
Scanner blue-boundary format DONE scan/page.tsx:715-717"the blue boundary channel (--priced-out): line · BK odds · ◆ fair" and "renders NEUTRAL, not amber (blue-boundary law)". Amber survives only as an unrelated CTA (:983) and a status line (:846).
MovementStrip NOT-STARTED (as named) No component by that name. Movement renders via GradeShift.tsx, GameCard.tsx, MarketBreadth.tsx, FuturesBoard.tsx. UNKNOWN whether the spec wants a distinct strip or is satisfied by these.
THE WIRE PARTIAL components/vyndr/NewsWire.tsx exists and is mounted — but only inside ExploreHub.tsx. No standalone wire surface.
Book comparison PARTIAL — built, unmounted vyndr/BookComparisonPanel.tsx + components/BookComparison.tsx both exist; grep of web/src/app returns zero mounting pages. Same built-but-unread class the reachability guard was written for; not covered by that guard (contract is grade fields only).
Article media NOT-STARTED No component. /blog exists.
Offseason hub NOT-STARTED No component, no route.
Terminal DONE — deliberately retired app/terminal/page.tsx redirects to /dashboard; layouts preserved unrouted in components/intel/TerminalTemplates.tsx (S57). Not debt.
Screen conversion (S3639 arc) DONE except one 47 route dirs under app/. RouteStub survives in exactly one file: app/notifications/page.tsx. Every other screen has a real page.

Sports surfaces that exist as pages: soccer (414 lines), desk (160), intelligence (160), marketplace (123). No fight route.


PHASE 1 — Sports × role

Archetype registry (archetypeService.ARCHETYPES): nba 15, mlb 15, soccer 6, wnba 5 — all four sports have real archetype registries, not names only.

snapshotService.ACTIVE_SPORTS = ['mlb','nba','wnba','soccer'] — the pipeline runs all four.

sport · role state evidence
MLB · batters MODELED The whole session. hitsFactors (3 proven factors, transmitting), servedGrade, repaired champion, settled ledger.
MLB · pitchers SCAFFOLDED model/pitcherEngine.js (261 lines, own FLAME/SCALPEL/SINKER archetypes) — read by no serving code (grep: zero non-test consumers). Strikeouts n=57 settled vs a 500 gate. Base rate repaired by the shared getStatRows MLB fix.
WNBA SCAFFOLDED Archetypes exist; settles via ESPN box scores (376 rows historically); no factor model. Base-rate path fixed this session.
NBA SCAFFOLDED, dormant Archetypes exist; offline (Python service down, off-season). Base-rate paths fixed dormant at 55b210c.
Soccer SCAFFOLDED 6 archetypes, a real /soccer page, feature extractor exists. No factor model, no settled outcomes.

Nothing but MLB batters is MODELED. Everything else is scaffolding with a sound base rate and no proven factors.


PHASE 2 — Wiring / data-integrity debt

edge_pct — the flag is half right, and the diagnosis was wrong

Not a scale bug. analyzeViaEngine1.edgePctFor computes (model line) / line, signed by direction — arithmetically correct. It explodes on small lines: a 5.5 projection against a 0.5 line is a legitimate 1000%. Live top values: 900, 860, 700, 700, 660 on 68,364 rows.

Consuming surfaces: 15 backend files + 10 frontend files. But edge_pct itself reaches a user only through alt_lines typing in scan/page.tsx:64 — the grade card's edge is computed independently in gradeAdapter via computeEdge. So the blast radius is smaller than the file count implies.

ev_pct DOES render — 5 frontend files (PriceTriplet, GradeResultCard, LiveHeroProp, scan page + route). The "ev_pct renders nowhere" flag is stale. 45,125 rows carry it.

Classification: PARTIAL — a real display defect (a 900% edge is not a sentence we can defend), not a broken computation.

opp_rank_stat

refreshTeamStats is wired into snapshotService:361. UNKNOWN whether it populates in production — not verifiable from the repo, needs a live probe.

A-emit

Resolved. servedGrade.UNISSUABLE = ['A+','A','A-']; post-cutover serving cannot emit one. Historical snapshot rows still carry engine1 A's — that is retired data, not live behaviour.

Other

item state
VYNDR_INTERNAL_KEY present in app.js, preflight.js. Rotation status UNKNOWN from the repo.
void / DNP handling handled in ledgerService (:64, :698) — absence means DNP/postponed/not-final. The ~9% rate is UNVERIFIED here.
Guard coverage gap reachability contract covers grade fields only — 0 references to edge_pct/ev_pct. Book comparison and other unmounted components are not guarded.

PHASE 3 — THE BOARD, ordered (half-done first)

# item lane state serving-path?
1 Book comparison — built, unmounted design PARTIAL N
2 edge_pct display defect (900%) integrity PARTIAL Y
3 THE WIRE — only inside ExploreHub design PARTIAL N
4 MLB pitchers — engine unwired sports PARTIAL Y
5 /notifications RouteStub design PARTIAL N
6 Guard coverage → non-grade surfaces integrity NOT-STARTED N
7 Article media design NOT-STARTED N
8 Offseason hub design NOT-STARTED N
9 MovementStrip (if distinct from GradeShift) design UNKNOWN N
10 WNBA / NBA / Soccer factor models sports NOT-STARTED Y
11 opp_rank_stat prod population integrity UNKNOWN Y
12 Internal-key rotation ops UNKNOWN N

Accrual sensitivity

Isolated — buildable now without touching the re-audit clock (7 items): 1, 3, 5, 6, 7, 8, 9 — all design/guard work, zero serving-path contact.

Serving-path — will muddy the accruing repaired-champion dates (5 items): 2, 4, 10, 11, and any model work. Every one changes what a snapshot writes, so rows produced after the change are not comparable to rows before it. If any of these ship, the eligible-date clock arguably restarts — the same reasoning that voided the shadow duel.

#2 (edge_pct) is the sharpest tension on the board: it is a real honesty defect a user can see, and fixing it touches the serving path mid-accrual.

The clock, today

eligible dates: 0 — no settled rows carry engine1@2026-08-07-fullwindow
  calibration_refit      0/10  WAITING   (~2 weeks)
  hits_factor_lift       0/10  WAITING   (~2 weeks)
  prior_verdict_reaudit  0/14  WAITING   (3+ weeks)
  rbi_lineup_slot_gate   0/14  WAITING   (3+ weeks)

Two tracks are now visible: modeling is date-blocked; seven design/guard items are buildable today with no clock impact.