Session H (night2): design pass — §2 locks + honest waiting sweep
- QA.20: one meaning per color, locked — STEAM amber (caution), VALUE green (edge), red only at STALE/miss; revisions render the original grade struck through on slate AND ledger. - QA.21: every new data surface (PriorReads, PlayerStreaks, ModelRecord) renders data in mono (tabular-nums via the .mono class). - QA.22: waiting copy derives from the real cron schedule on every surface (StatStrip, dashboard, Explore) — no passive mystery anywhere. - Explore empty state joined the honest-waiting lib. - Sweep result: no raw brand hexes and no sans-serif data in tonight's components (sans only on prose/captions/hero letter — sanctioned); glow confined to A-tier badges + reveal chrome; 390px containment holds (wrapping chips, scroll-contained tables from Phase 3 rules). Backend 2352 -> 2396 tests (205 suites), web build exit 0. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -773,6 +773,34 @@ phased plan in the Session-57 conversation / BUILD-STATE Next section).
|
||||
expands in place; GAME LINES <640px = `.gl-summary` best-line row +
|
||||
expander revealing `.gl-full.gl-expanded`.
|
||||
|
||||
## Night-2 Board (Session 60 — non-obvious)
|
||||
- **SNAP_TTL is 24h ON PURPOSE** (was 6h): the overnight cron gap is 11h;
|
||||
a shorter TTL silently kills the morning accuracy settle. AUTONOMY.md is
|
||||
the zero-touch trace — update it when the loop's shape changes.
|
||||
- **The snapshot pipeline FEEDS the aggregator**: `mergeRosterLogs` writes
|
||||
`rosterlogs:{sport}` (72h TTL, cap 300) from the same stats resolve that
|
||||
classifies archetypes. Streaks/hot-lists starve if you remove it — the
|
||||
external prefetch (n8n/tank01) was never armed.
|
||||
- **THE LENS RULE**: no raw streak renders alone — `streakLens.applyLens`
|
||||
attaches built-vs / tonight's matchup (+opposing SP ERA for MLB batters)
|
||||
/ difficulty / one-line read. Absent context = say less, never invent.
|
||||
Streaks are FREE for every tier; hot lists keep the free top-3 gate.
|
||||
- **Phase 2.5 lives in `intradayRefreshService`**: signed delta vs the
|
||||
GRADED side; STEAM never re-grades; ≥1.0 against re-grades THAT prop at
|
||||
the real current line; a dropped grade sets `revised_from_grade` ONCE
|
||||
(the original letter is forever). `applyRevision` only touches unsettled
|
||||
public rows. Scheduler skips full-snapshot slots; INTRADAY_REFRESH=0
|
||||
kills it. After deploy set SNAPSHOT_EXPECTED_INTERVAL=1200.
|
||||
- **/api/players/search is the canonical resolver** (nameKey fuzzy; MLB =
|
||||
statsapi list, others = cached names). The Python service is a fallback
|
||||
only. Never reintroduce raw-substring matching.
|
||||
- **Landing renders instantly for anon**: `hasStoredSession()` sync
|
||||
localStorage gate — do NOT re-block the marketing render on
|
||||
`useAuth().loading`; that was the 3–4s LOADING THE SLATE bug.
|
||||
- **QA.20–22 in vyndrParityQA** lock the night's color semantics (STEAM
|
||||
amber / VALUE green / red = STALE-or-miss only), mono data surfaces, and
|
||||
schedule-derived waiting copy. Keep them green.
|
||||
|
||||
## Active Skills
|
||||
- vyndr-voice (all user-facing output)
|
||||
- prop-analysis (grading methodology)
|
||||
|
||||
Reference in New Issue
Block a user