08791520fc
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
133 lines
7.1 KiB
Markdown
133 lines
7.1 KiB
Markdown
# 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 (S36–39 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.**
|