Session 46: Grade card intel + name normalization + pitchers (2122 tests)
Three focused P1 fixes on the Session-45 snapshot model.
- Grade card intel ROOT CAUSE: gameLogService is NBA/WNBA-only (offline Python),
so MLB props never got l5_avg/l20_avg and buildIntelFields returned {}. Wired
MLB game logs into featureCache.gameLogFeatures via mlbStatsAdapter.getPlayerStats
(pure mlbGameLogFeatures + MLB stat_type->field map). buildIntelFields gained
playerStats/projection fallbacks for partial intel.
- Player name normalization: src/utils/playerName.js (+ web/src/lib copy):
normalizeName -> {display,key}. Strips periods, de-dots suffix, accent-folds
the key. Applied in snapshotService grouping, slateAdapter grade index +
player-strip merge (variants collapse, longest name shown), and
playerIntelService. "A.J. Ewing"/"AJ Ewing" + "Jazz Chisholm"/"Jr." now merge.
- MLB starting pitchers: new GET /api/schedule/:sport/pitchers (probablePitchers
service wrapping mlbStatsAdapter.getScheduleWithPitchers + best-effort ERA).
Slate fetches it, builds a team->pitcher map (full name + mascot match),
attaches pitchers to MLB GameCardData. + Next proxy.
Backend 2100 -> 2122 tests (+22), 176 suites. Web build clean (exit 0).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -15,9 +15,9 @@ describe('snapshot overlay adapter', () => {
|
||||
|
||||
it('indexes grades + deltas for lookup', () => {
|
||||
const gi = a.indexGrades(grades);
|
||||
expect(gi['aaronjudge|total_bases'].grade).toBe('A+');
|
||||
expect(gi['aaron judge|total_bases'].grade).toBe('A+');
|
||||
const di = a.indexDeltas(deltas);
|
||||
expect(di['aaronjudge|total_bases|O'].direction).toBe('toward');
|
||||
expect(di['aaron judge|total_bases|O'].direction).toBe('toward');
|
||||
});
|
||||
|
||||
it('overlays grades onto game props → playerStrips (name once, archetype, gradedAt, delta)', () => {
|
||||
|
||||
Reference in New Issue
Block a user