Session 32: Grades pipeline + NFL/NHL wiring + rate limiting + audit cleanup (1718 tests)

- gradeSlateService writes grades:{sport} cache (closes content pipeline →
  dataLevel full); fire-and-forget from oddsService.recordDownstream, gated
  by shouldGradeSlate (off in test, GRADE_SLATE_ON_FETCH override)
- NFL/NHL wired: oddsService SPORT_KEYS/SPORT_MARKETS (correct the-odds-api
  keys americanfootball_nfl/icehockey_nhl), proplineAdapter MARKETS, NHL
  MARKET_MAP keys to avoid silent-zero
- rate limiting mounted on 8 public cached routers (odds/parlay 30/min,
  rest 60/min)
- jsonlLogger writes to temp under test (no more dirtied tracked artifact);
  5MB pipeline test given 20s timeout

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Kev
2026-06-15 18:21:32 -04:00
parent 2ba3958c7a
commit f0c8b4f29b
20 changed files with 667 additions and 9 deletions
+3 -1
View File
@@ -141,7 +141,9 @@ describe('pipeline body-parser regression (Session 7b)', () => {
// void: true path returns 200 with the empty resolution summary.
expect(res.status).toBe(200);
expect(res.body).toHaveProperty('resolved');
});
// Parsing a 5MB body is CPU-bound; under full-suite parallel load it can
// exceed Jest's 5s default. Give it headroom so the gate stays reliable.
}, 20000);
test('rejects payloads larger than the 10MB limit with 413 (sanity check)', async () => {
// Use a tiny app limit so the test doesn't allocate 11MB just to