builtbykev
2c9cbca7bd
Session B (night2): streaks/hot-list engine — producer + form heat + THE LENS
...
RESURRECT verdict: the Session-23 engine existed, was pure, tested, and
mounted — it starved because every producer was external and unarmed
(tank01-prefetch via n8n, offline Python flow). The snapshot pipeline is
now the producer: each run merges slate players' real game logs (already
fetched for archetypes — zero extra calls) into rosterlogs:{sport}.
- computeFormHeat: hot hitters (7d AVG), hot sluggers (SLG), hot shooters
(FG%) — correct sum/sum rate math, season baseline else prior stretch,
min-sample refusals, never extrapolated.
- streakLens: no raw streak renders alone — built-vs opponents, tonight's
matchup + opposing SP w/ ERA, step-up/step-down difficulty, one-line
read. Absent context = say less, never invent.
- /api/streaks/:sport: heat merged into the feed, lens applied from cached
schedule + pitchers (time-bounded, can never hang the route), snapshot
grade letters joined.
- ACCEPTANCE (live statsapi, real 2026 logs): 32 rows found — Turang
12-gm on-base, Reynolds 8-gm on-base, Pratt 7-gm on-base + 3-gm
multi-hit, Meidroth 5-gm on-base, Cortes 5-gm on-base.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-11 00:39:18 -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-06-13 12:37:08 -04:00
2026-06-19 13:55:39 -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-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-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-06-18 21:34:29 -04:00
2026-06-14 22:29:01 -04:00
2026-06-18 11:12:24 -04:00
2026-06-08 18:35:13 -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-06-10 19:41:37 -04:00
2026-06-10 03:37:07 -04:00
2026-06-15 18:21:32 -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-12 11:16:58 -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-03-21 11:41:18 -04:00
2026-06-18 20:15:38 -04:00
2026-07-10 22:24:47 -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-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-10 22:24:47 -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-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-10 17:00:29 -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-10 17:00:29 -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-06-19 11:25:14 -04:00
2026-06-10 09:28:30 -04:00
2026-06-13 12:37:08 -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-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-06-14 22:29:01 -04:00
2026-06-08 18:35:13 -04:00
2026-06-12 00:54:39 -04:00
2026-06-12 11:16:58 -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-06-10 13:24:11 -04:00
2026-03-21 10:58:58 -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-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-10 22:24:47 -04:00
2026-06-18 20:15:38 -04:00
2026-06-18 23:56:26 -04:00
2026-06-19 13:55:39 -04:00
2026-06-19 13:55:39 -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-06-11 18:15:25 -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-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-06-19 11:55:10 -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-06-10 22:24:40 -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-10 20:17:49 -04:00
2026-06-17 21:55:40 -04:00
2026-07-10 22:24:47 -04:00
2026-07-10 20:17:49 -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