builtbykev
4cd933d83e
Job 1: per-sport snapshot cadence (config, not baseball's rhythm for all)
...
Every ACTIVE sport was graded at all five MLB slots (14/19/22/1/3 UTC). Sports
post lines on different clocks, so that inheritance was wasteful both ways:
WNBA props aren't posted at 14:00 UTC (10am ET) → that slot always graded 0
(the audit's "wnba:0"); soccer odds come from the 500/MONTH odds-api key, so
five slots/day is a third of the budget for 1-2 matches.
New src/config/sportCadence.js is the single source of truth (config-over-
constants). Mapped from reality + quota headroom (PropLine 9k/day abundant,
odds-api 500/mo scarce):
mlb 14/19/22/1/3 intraday (full grid — games+props all day)
nba 14/19/22/1/3 intraday (in-season fits; off-season self-skips empty)
wnba 19/22/1 intraday (afternoon→evening ET; drops the 14/3 waste)
soccer 14/19 NO intraday (WC live; 2 lean odds-api reads, key-protected)
The scheduler still fires at HOURS_UTC and the missed-cron watchdog still
references MLB (which runs every grid hour) — each slot now grades only
sportsForHour(h), and only intradaySports() get the 20-min refresh. Every
sport's hours are kept a subset of the firing grid (a boot-time guard + a test
warn if that's ever violated). Retune a sport by editing one table row.
Adaptive, not constant: near-zero when a sport is quiet, protecting the scarce
odds-api quota from being drained by noon.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-15 16:17:55 -04:00
..
2026-06-08 18:35:13 -04:00
2026-06-11 03:48:07 -04:00
2026-03-21 14:21:34 -04:00
2026-06-10 13:24:11 -04:00
2026-07-10 21:34:26 -04:00
2026-07-10 21:34:26 -04:00
2026-06-10 19:41:37 -04:00
2026-06-18 20:15:38 -04:00
2026-06-18 20:15:38 -04:00
2026-07-12 23:41:13 -04:00
2026-07-13 03:48:58 -04:00
2026-06-13 12:37:08 -04:00
2026-07-11 14:28:18 -04:00
2026-07-11 14:28:18 -04:00
2026-07-13 13:22:49 -04:00
2026-07-12 13:42:18 -04:00
2026-03-21 14:21:34 -04:00
2026-06-08 18:35:13 -04:00
2026-06-08 18:35:13 -04:00
2026-07-12 19:34:12 -04:00
2026-07-13 16:58:22 -04:00
2026-07-13 16:58:22 -04:00
2026-07-13 16:58:22 -04:00
2026-07-11 14:29:31 -04:00
2026-06-11 16:21:18 -04:00
2026-06-10 14:50:13 -04:00
2026-06-08 18:35:13 -04:00
2026-06-13 21:30:57 -04:00
2026-06-13 21:30:57 -04:00
2026-06-08 18:35:13 -04:00
2026-06-08 18:35:13 -04:00
2026-03-21 12:45:15 -04:00
2026-06-18 20:15:38 -04:00
2026-06-18 20:15:38 -04:00
2026-07-12 19:25:32 -04:00
2026-07-13 00:07:06 -04:00
2026-07-12 19:45:07 -04:00
2026-07-13 03:48:58 -04:00
2026-07-10 20:17:49 -04:00
2026-06-08 18:35:13 -04:00
2026-06-08 18:35:13 -04:00
2026-06-18 15:38:06 -04:00
2026-07-13 11:44:15 -04:00
2026-07-13 18:44:57 -04:00
2026-07-13 18:12:31 -04:00
2026-07-14 00:21:59 -04:00
2026-07-13 13:18:59 -04:00
2026-07-13 18:12:31 -04:00
2026-07-11 00:47:01 -04:00
2026-06-08 18:35:13 -04:00
2026-07-13 18:44:57 -04:00
2026-06-10 19:41:37 -04:00
2026-06-10 14:50:13 -04:00
2026-06-08 18:35:13 -04:00
2026-07-13 23:27:19 -04:00
2026-07-13 23:33:26 -04:00
2026-06-10 19:41:37 -04:00
2026-06-10 03:37:07 -04:00
2026-07-13 14:36:28 -04:00
2026-06-15 18:21:32 -04:00
2026-06-08 18:35:13 -04:00
2026-07-13 13:18:59 -04:00
2026-06-08 18:35:13 -04:00
2026-06-08 18:35:13 -04:00
2026-06-12 11:16:58 -04:00
2026-07-13 15:26:48 -04:00
2026-06-10 22:24:40 -04:00
2026-06-08 18:35:13 -04:00
2026-06-08 18:35:13 -04:00
2026-06-10 20:45:05 -04:00
2026-07-11 20:08:24 -04:00
2026-03-21 11:41:18 -04:00
2026-06-18 20:15:38 -04:00
2026-07-11 20:08:24 -04:00
2026-07-11 19:32:22 -04:00
2026-07-13 13:58:01 -04:00
2026-03-21 14:21:34 -04:00
2026-06-08 18:35:13 -04:00
2026-06-13 12:37:08 -04:00
2026-07-12 00:45:29 -04:00
2026-07-12 00:45:29 -04:00
2026-07-13 14:59:44 -04:00
2026-07-11 14:31:35 -04:00
2026-03-21 14:21:34 -04:00
2026-06-08 18:35:13 -04:00
2026-06-11 16:21:18 -04:00
2026-06-08 18:35:13 -04:00
2026-06-19 01:45:36 -04:00
2026-06-18 23:56:26 -04:00
2026-07-13 03:48:58 -04:00
2026-07-11 00:59:17 -04:00
2026-06-19 15:45:07 -04:00
2026-06-19 10:20:55 -04:00
2026-06-19 02:42:13 -04:00
2026-06-18 15:38:06 -04:00
2026-07-13 22:30:50 -04:00
2026-07-11 14:29:22 -04:00
2026-07-13 23:33:26 -04:00
2026-07-13 23:27:19 -04:00
2026-06-15 18:21:32 -04:00
2026-06-10 03:37:07 -04:00
2026-03-22 05:11:42 -04:00
2026-06-08 18:35:13 -04:00
2026-07-13 16:58:22 -04:00
2026-07-13 23:33:26 -04:00
2026-06-08 18:35:13 -04:00
2026-06-12 02:41:51 -04:00
2026-06-14 22:29:01 -04:00
2026-06-12 02:41:51 -04:00
2026-06-19 10:20:55 -04:00
2026-06-08 18:35:13 -04:00
2026-07-11 14:34:45 -04:00
2026-07-13 22:30:50 -04:00
2026-07-10 17:00:29 -04:00
2026-07-13 14:59:44 -04:00
2026-06-11 16:21:18 -04:00
2026-06-11 16:21:18 -04:00
2026-06-12 02:06:22 -04:00
2026-06-19 15:45:07 -04:00
2026-03-21 12:45:15 -04:00
2026-07-13 14:36:28 -04:00
2026-06-19 11:25:14 -04:00
2026-06-10 09:28:30 -04:00
2026-06-13 12:37:08 -04:00
2026-07-11 14:28:18 -04:00
2026-07-11 14:28:18 -04:00
2026-06-08 18:35:13 -04:00
2026-03-22 05:11:42 -04:00
2026-03-22 05:11:42 -04:00
2026-07-10 17:00:29 -04:00
2026-07-10 22:24:47 -04:00
2026-07-13 16:02:16 -04:00
2026-06-18 20:15:38 -04:00
2026-06-18 23:56:26 -04:00
2026-06-18 20:15:38 -04:00
2026-06-19 01:45:36 -04:00
2026-06-18 23:56:26 -04:00
2026-06-18 20:15:38 -04:00
2026-06-08 18:35:13 -04:00
2026-06-08 18:35:13 -04:00
2026-06-08 18:35:13 -04:00
2026-06-18 23:56:26 -04:00
2026-06-19 02:42:13 -04:00
2026-07-11 14:24:41 -04:00
2026-06-14 22:29:01 -04:00
2026-06-08 18:35:13 -04:00
2026-07-11 19:38:37 -04:00
2026-06-12 00:54:39 -04:00
2026-06-12 11:16:58 -04:00
2026-07-11 19:32:22 -04:00
2026-06-13 10:57:49 -04:00
2026-06-12 02:06:22 -04:00
2026-06-08 18:35:13 -04:00
2026-06-10 03:12:20 -04:00
2026-06-10 01:22:55 -04:00
2026-06-11 21:22:59 -04:00
2026-06-08 18:35:13 -04:00
2026-06-12 17:58:55 -04:00
2026-07-12 00:45:29 -04:00
2026-07-13 16:02:16 -04:00
2026-07-12 19:25:32 -04:00
2026-07-11 14:24:41 -04:00
2026-03-21 10:58:58 -04:00
2026-06-08 18:35:13 -04:00
2026-07-11 20:08:24 -04:00
2026-06-08 18:35:13 -04:00
2026-06-10 20:45:05 -04:00
2026-06-18 11:12:24 -04:00
2026-06-18 15:38:06 -04:00
2026-06-18 20:15:38 -04:00
2026-06-18 11:12:24 -04:00
2026-06-08 18:35:13 -04:00
2026-06-08 18:35:13 -04:00
2026-06-08 18:35:13 -04:00
2026-06-08 18:35:13 -04:00
2026-06-08 18:35:13 -04:00
2026-06-08 18:35:13 -04:00
2026-03-21 11:41:18 -04:00
2026-06-08 18:35:13 -04:00
2026-07-11 14:28:18 -04:00
2026-07-10 22:24:47 -04:00
2026-06-18 20:15:38 -04:00
2026-07-11 19:32:17 -04:00
2026-06-18 23:56:26 -04:00
2026-06-19 13:55:39 -04:00
2026-07-13 13:18:59 -04:00
2026-06-10 14:50:13 -04:00
2026-06-10 20:45:05 -04:00
2026-06-10 14:50:13 -04:00
2026-06-16 14:37:07 -04:00
2026-06-10 14:50:13 -04:00
2026-06-11 18:15:25 -04:00
2026-06-19 14:25:05 -04:00
2026-07-15 16:17:55 -04:00
2026-07-13 16:58:22 -04:00
2026-06-08 18:35:13 -04:00
2026-06-12 15:45:19 -04:00
2026-06-12 11:16:58 -04:00
2026-06-08 18:35:13 -04:00
2026-06-18 11:12:24 -04:00
2026-07-11 00:39:18 -04:00
2026-06-12 11:16:58 -04:00
2026-06-11 16:21:18 -04:00
2026-06-08 18:35:13 -04:00
2026-07-11 14:34:45 -04:00
2026-06-11 10:06:49 -04:00
2026-06-12 11:16:58 -04:00
2026-06-10 19:41:37 -04:00
2026-06-11 16:21:18 -04:00
2026-07-13 00:31:35 -04:00
2026-06-19 15:45:07 -04:00
2026-06-08 18:35:13 -04:00
2026-06-19 01:45:36 -04:00
2026-06-18 21:34:29 -04:00
2026-06-10 13:24:11 -04:00
2026-07-13 13:58:01 -04:00
2026-07-11 14:24:41 -04:00
2026-06-08 18:35:13 -04:00
2026-06-10 14:50:13 -04:00
2026-03-21 12:45:15 -04:00
2026-07-10 20:17:49 -04:00
2026-07-11 14:31:53 -04:00
2026-07-13 00:31:35 -04:00
2026-07-10 22:24:47 -04:00
2026-07-12 19:28:17 -04:00
2026-06-16 01:04:37 -04:00
2026-07-10 20:17:49 -04:00
2026-06-11 16:21:18 -04:00
2026-06-08 18:35:13 -04:00
2026-06-08 18:35:13 -04:00
2026-06-10 14:50:13 -04:00