STATE.md: P0 resolved — API on 17fb981, all fingerprints confirmed live

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Kev
2026-07-12 13:44:36 -04:00
parent 17fb981f99
commit 1f5a0552ca
+17 -4
View File
@@ -22,10 +22,23 @@ the single gate. WNBA/soccer rows pend honestly until Phase 4.5.
| #2 | `219167e → 14dc9cf` | S6 display (ROW-GRAMMAR.md + slot-order fixes, line sparklines from intraday history, last-10 ●●○ dots, CLV distribution on MODEL tab, ⌘K SearchModal + mobile search, landing LCP fixes) | | #2 | `219167e → 14dc9cf` | S6 display (ROW-GRAMMAR.md + slot-order fixes, line sparklines from intraday history, last-10 ●●○ dots, CLV distribution on MODEL tab, ⌘K SearchModal + mobile search, landing LCP fixes) |
| #3 | `14dc9cf → ec5ee3d` | S11 live tracking (statsapi/ESPN live box lines → ON PACE / NEEDS N / HIT ✓ in the outcome slot, live games float up, "TRACKING — READ LOCKED PRE-GAME"; real-live acceptance: Harper 3/1.5 TB ▼8th → HIT ✓). Grades never change in-game. | | #3 | `14dc9cf → ec5ee3d` | S11 live tracking (statsapi/ESPN live box lines → ON PACE / NEEDS N / HIT ✓ in the outcome slot, live games float up, "TRACKING — READ LOCKED PRE-GAME"; real-live acceptance: Harper 3/1.5 TB ▼8th → HIT ✓). Grades never change in-game. |
**Deploy status at write time:** trains #1+#2 verified live (`/methodology` **Deploy status:** ALL LIVE as of `17fb981` (Jul 12 17:43 UTC). Fingerprints
200 on vyndr.app). Train #3 pushed; API deploy was still building — verify confirmed in prod: `/api/live/mlb` serves JSON with `hasLive:true` (S11 live
with `curl -s https://api.vyndr.app/api/live/mlb` (expect JSON `hasLive`, tracking working — a real game was tracked at confirm time), `/api/health`
not "Cannot GET"). healthy, `/api/snapshot/summary``expected_interval_s:1200` (env var now set).
**P0 postmortem (`17fb981`):** the API silently served a 14h-old image
(`4d2b27d`) from Jul 11 ~20:00 to Jul 12 17:43. Root cause: the Dockerfile
never copied `content/`, and `mediaEngine.js` read `content/stark-lines.json`
with an unguarded module-load `readFileSync` → ENOENT at require time crashed
`app.js`'s eager route chain (app → routes/desk → deskService → mediaEngine)
→ boot failed → Coolify healthcheck rolled back. Every merge from S6 onward
was merged-but-not-running for 14h. Fixed: Dockerfile COPYs content/;
mediaEngine treats the file as optional garnish (loadStark try/catch → {});
`src/preflight.js` now prints `[preflight] OK|DEGRADED` at boot so a missing
file/env is legible instead of masked by a rollback. LESSON: any module-load
file read is a boot-crash risk — keep them lazy + try/catch, and the
Dockerfile must copy every dir the runtime reads.
## LIVE INFRA MAP (verified in prod) ## LIVE INFRA MAP (verified in prod)