From 2394fb04a117e74541cdf2ef82ac64996e289915 Mon Sep 17 00:00:00 2001 From: Kev Date: Sun, 2 Aug 2026 19:07:58 -0400 Subject: [PATCH] Record the hits-v1 fingerprint as PENDING, and why The prod-write fingerprint did not land: the odds provider is returning 429 (quota exhausted), so the snapshot refuses with gradeCount 0 and the MLB board has been frozen since 07:30 UTC. The 14/19/22 UTC cron slots failed the same way, all before this change deployed -- hits-v1 sits inside the snapshot's existing try/catch, is purely additive, and had zero grades to attach to. Firing is already verified against the real production snapshot through the real attachProjection path (158/159). What is pending is only confirmation that the deployed process writes the columns, which needs a slate the pipeline can fetch. The exact fingerprint query is recorded in the spec. The odds quota exhaustion is a live outage of the whole grading pipeline and is flagged for its own order, not folded into this one. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01W1sivYNqY2TS5ftykmHBU9 --- specs/hits-v1-binomial.md | 45 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/specs/hits-v1-binomial.md b/specs/hits-v1-binomial.md index e56e6d1..f7ffdaf 100644 --- a/specs/hits-v1-binomial.md +++ b/specs/hits-v1-binomial.md @@ -293,3 +293,48 @@ Supabase project ref (`zmdnczhtdxcddszxttub`; the real ref is unaffected — the deployed API and the MCP connection both use the correct ref. The holdout was run with an explicit `SUPABASE_URL` override rather than editing your credentials file. + +## 11. POST-DEPLOY FINGERPRINT — armed, PENDING (blocked upstream, not by this change) + +Deployed 2026-08-02 ~23:05 UTC (the API 502'd and returned at 23:05:35, right +after the push). The **prod-write fingerprint has NOT landed yet**, and the +reason is upstream of this work: + +``` +POST /api/internal/snapshot/mlb -> {"status":"error","gradeCount":0, + "reason":"Odds data temporarily unavailable"} +GET /api/odds/mlb -> HTTP 429 +GET /api/internal/snapshot/status -> overdue: true, mlb last 2026-08-02T07:30:46Z +``` + +**The odds provider is quota-exhausted (429), so the pipeline cannot grade a +slate at all.** The MLB board has been frozen since 07:30 UTC and the 14/19/22 +UTC cron slots all failed the same way — every one of them before this change was +deployed. hits-v1 is inside the snapshot's existing try/catch and is purely +additive; it cannot be the cause, and there were zero grades for it to attach to. + +If PropLine's quota resets at 00:00 UTC, the 01:00 UTC cron slot should be the +first successful run. The fingerprint to confirm hits-v1 is writing in prod: + +```sql +select count(*) rows_today, + count(proj_hits_p_over) hits_v1_written, + round(avg(proj_hits_p_over)::numeric, 3) mean_p, + count(*) filter (where proj_hits_meta->'market'->>'market_takeable' = 'true') takeable, + count(*) filter (where proj_hits_meta->'market'->>'within_promotion_band' = 'false') outside_band +from public.ledger_entries +where sport = 'mlb' and user_id is null and stat = 'hits' + and graded_at > now() - interval '6 hours'; +``` + +Expected on a healthy run, from the live-board verification in §7: `hits_v1_written` +at roughly 99% of `rows_today`, and a substantial `outside_band` count that was +modelled anyway. + +**Firing itself is already verified** — §7 ran the production `attachProjection` +over the real production snapshot payload and got 158/159. What is pending is +only the confirmation that the deployed process writes the columns, which needs a +slate the pipeline can actually fetch. + +**Flagged for its own order, out of scope here:** the odds quota exhaustion is a +live production outage of the whole grading pipeline, not a hits problem.