Session 47: Name normalization + grade intel + ticker polish (2149 tests)
- Name normalization completed: NICKNAMES table (Matt↔Matthew, Mike↔Michael...)
resolved in nameKey, parenthetical team-tag strip "(STL)", verified accent-fold
(Iván/Ivan, José/Jose). Slate strip now DISPLAYS the normalized de-dotted name
("AJ Ewing" not "A.J. Ewing") via buildPlayerStripsFromProps.
- Complete MLB VYNDR INTELLIGENCE: mlbGameLogFeatures derives rest_days (days off
between latest games; 0=B2B) + ab_per_game (usage). buildIntelFields renders
usage as "X AB/G", rest as B2B/Xd, matchup from bvp_advantage fallback.
- Ticker SCAN dedup: pushTickerItems keeps one SCAN per sport (sport field or
text-prefix parse for legacy); MOVE/GRADE preserved; cap 50.
- BOMBER threshold prorated for mid-season (hr>=15 strong / >=10 mod) so June
sluggers classify BOMBER not FLEX/DRIVER.
Backend 2122 -> 2149 tests (+27), 179 suites. Web build clean (exit 0).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
+35
-2
@@ -4,8 +4,41 @@
|
||||
2026-06-18
|
||||
|
||||
## Current Phase
|
||||
SHIP BUILD v46.0 — Grade-card intel (MLB game logs) + player-name normalization
|
||||
+ MLB starting pitchers. Three focused P1 fixes on the Session-45 snapshot model.
|
||||
SHIP BUILD v47.0 — Name normalization completed (nicknames/accents/parens),
|
||||
full MLB VYNDR INTELLIGENCE (rest/usage), ticker SCAN dedup, BOMBER threshold.
|
||||
|
||||
## Session 47 (2026-06-19) — SHIPPED ✅ NAME NORM + INTEL + TICKER POLISH
|
||||
|
||||
Backend 2122 → **2149 tests** (+27), 179 suites. Web build clean (exit 0).
|
||||
|
||||
### Phase 1 — complete name normalization
|
||||
`playerName.js` (both copies) gained: parenthetical-tag strip ("Jose Fermin (STL)"
|
||||
→ "Jose Fermin"), a ~50-entry NICKNAMES table resolved in `nameKey` ("Matt"↔
|
||||
"Matthew", "Mike"↔"Michael"), and the existing accent-fold now verified for
|
||||
Iván/Ivan, José/Jose. The slate strip now DISPLAYS the normalized de-dotted name
|
||||
(`buildPlayerStripsFromProps` uses `normalizeName().display`) — "A.J. Ewing" shows
|
||||
as "AJ Ewing", not the raw PropLine string.
|
||||
|
||||
### Phase 2 — complete VYNDR INTELLIGENCE for MLB
|
||||
The audit showed only Form. `mlbGameLogFeatures` now also derives `rest_days`
|
||||
(days off between the two most recent game-log dates; 0 = B2B, matching the NBA
|
||||
convention) and `ab_per_game` (the MLB "usage" equivalent). `buildIntelFields`
|
||||
renders `usage` as "X AB/G", `rest` as "B2B"/"Xd rest", and a matchup grade from
|
||||
`bvp_advantage` when no opp rank. So MLB grade cards now show Form + Usage + Rest
|
||||
(+ Matchup when available).
|
||||
|
||||
### Phase 3 — ticker SCAN dedup
|
||||
`pushTickerItems` keeps only the LATEST SCAN per sport (drops prior SCAN events
|
||||
for any sport with a fresh scan; parses the sport from a `sport` field or the
|
||||
text prefix for legacy items). MOVE/GRADE events preserved; cap stays 50.
|
||||
|
||||
### Phase 4 — archetype threshold
|
||||
BOMBER's HR thresholds prorated for mid-season (`hr>=15` strong / `hr>=10`
|
||||
moderate, was `>=20`/`>=15`), so June sluggers (Schwarber/Harper ~17-18 HR)
|
||||
classify as BOMBER instead of FLEX/DRIVER. `computeLineDeltas` re-verified
|
||||
structurally sound (deltas populate on the 2nd+ snapshot).
|
||||
|
||||
## Session 46 (2026-06-18) — SHIPPED ✅ P1 FIXES
|
||||
|
||||
## Session 46 (2026-06-18) — SHIPPED ✅ P1 FIXES
|
||||
|
||||
|
||||
Reference in New Issue
Block a user