S6 (a1): display — the full picture under the grammar
- specs/ROW-GRAMMAR.md: the row grammar law (slot order, color law, mark
law, mobile stacking, no-truncation), locked by tests/unit/rowGrammar.
StatStrip violations fixed: MovementChip before the grade (market
context before model output); ViabilityChips after the archetype
(identity is one contiguous run).
- Line-movement sparklines: intradayRefreshService.trackHistory captures
real {t,line} points per grade (seeded with the lock, deduped when
flat, capped 24) inside the snapshot write-back; StatStrip.LineSparkline
renders at >=3 points (green toward / amber against / dim flat).
- Last-10 dot strips: services/last10Dots (streaksService accessors) ->
/api/snapshot/:sport attaches last10_dots from rosterlogs:{sport};
StatStrip.DotStrip renders vs the LOCKED line, newest first.
- CLV distribution: getModelAggregate emits clv_distribution (7 signed
buckets, outliers clamped) only past the centralized n>=20 gate;
ledger MODEL header renders the bar strip.
- Global search: SearchModal (cmd-K via GlobalHosts + window.__search),
players via /api/players/search per sport + static lib/teams.js
(soccer deliberately absent); Nav search icon + Search first in the
mobile More sheet. Explore tab untouched.
- Landing LCP: fade-up floored at opacity .6 (hero h1 contentful on
first frame, S33 visible-floor rule) + IBM Plex Mono preload:false
(4 decorative font files off the slow-4G critical path).
2654 -> 2698 tests (226 suites) green; web build exit 0.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -934,6 +934,39 @@ phased plan in the Session-57 conversation / BUILD-STATE Next section).
|
||||
`npx jest --testPathIgnorePatterns "/node_modules/"` from a worktree
|
||||
(CLI replaces the config array).
|
||||
|
||||
## Row Grammar + Display Layer (Session S6, A1 board — non-obvious)
|
||||
- **`specs/ROW-GRAMMAR.md` is LAW**, locked by `tests/unit/rowGrammar.test.js`
|
||||
(source-order assertions on StatStrip). Prop-row slot order: identity →
|
||||
viability → stat+line → market context (best dot, movement chip) → model
|
||||
output (revision strike, grade) → outcome → actions → provenance. If you
|
||||
reorder a StatStrip element, amend the spec + test in the same commit or
|
||||
the suite fails. Red = settled-negative ONLY (miss/dead/stale/faded); the
|
||||
line sparkline is green(toward)/amber(against)/dim(flat), never red.
|
||||
- **Sparkline history is captured by `intradayRefreshService.trackHistory`**
|
||||
— {t, line} on each grade, seeded with the LOCKED line, deduped when flat
|
||||
(a point means the line MOVED), capped 24, persisted inside the snapshot
|
||||
write-back (no new Redis keys). `StatStrip.LineSparkline` needs ≥3 points.
|
||||
`Number(null) === 0` struck again here — all three S6 numeric paths
|
||||
(trackHistory, last10Dots line, clvBucketIndex) use strict null guards.
|
||||
- **`last10_dots` is attached at READ time** in `routes/snapshot.js` from
|
||||
`rosterlogs:{sport}` via `services/last10Dots` (reuses streaksService
|
||||
accessors — new MLB accessors runs/doubles/triples/outs live THERE, one
|
||||
source of truth). Dots score vs the LOCKED line (gradedAt.line), not the
|
||||
current line.
|
||||
- **`clv_distribution` lives in `getModelAggregate`** behind the SAME n≥20
|
||||
gate as hit_pct (null below) — never re-derive the gate in a consumer.
|
||||
Buckets clamp outliers into the edges ([-2,-1) … (1,2]).
|
||||
- **Global search** — `window.__search` + ⌘K registered in GlobalHosts;
|
||||
SearchModal fans out to `/api/players/search` per sport (MLB/NBA/WNBA) +
|
||||
static `web/src/lib/teams.js` (soccer deliberately ABSENT — no canonical
|
||||
registry; add it with the soccer team hub, not before). BottomTabBar keeps
|
||||
the Explore tab; Search is the first More-sheet item.
|
||||
- **LCP mechanics:** `fade-up` now floors at opacity .6 — a 0-start entrance
|
||||
animation makes the hero h1 a LATE LCP candidate (invisible content isn't
|
||||
contentful). IBM Plex Mono is `preload:false` (decorative face; its 4
|
||||
weight files competed with Inter + CSS on slow 4G). Measure before/after
|
||||
via PageSpeed post-deploy — not runnable from the box.
|
||||
|
||||
## Active Skills
|
||||
- vyndr-voice (all user-facing output)
|
||||
- prop-analysis (grading methodology)
|
||||
|
||||
Reference in New Issue
Block a user