Scoreboard every challenger; diagnose the 429 as odds-api, not PropLine

PROMOTE-THE-EARNED. Nothing was promoted, because nothing earned it -- not
because the bar was held high. Measured on the same bar that refuted hits-v1:
own rows only, direction-aligned, paired bootstrap, promote only on a CI
excluding zero.

  arch-v1        n=1741  delta 0.0000  CI[-0.0050,+0.0054]  inconclusive
  contact-v1     n=1055  delta +0.0008 CI[-0.0052,+0.0069]  inconclusive
  proj-v1.1      n=1664  delta -0.0301 CI[-0.0543,-0.0060]  reliably WORSE
  matchup/tb-v1/hits-v1  n=0  genuinely pending (rows dated 08-02+)

arch-v1 is the interesting one: it MOVED 76% of rows by 2.5 points on average
and resolution is identical to the champion to four decimals, on the moved
rows too. That is active movement carrying no information -- a finding, not a
pending verdict.

These are true prospective holdouts: arch-v1 and contact-v1 wrote p_win at
grade time into their own columns before the game. Nothing recomputed.

THE 429, read-only. The premise was that we re-pull the full picture every
slot and blow the quota. Measured: PropLine is at 5 calls of 3,000/day --
0.17%. One snapshot is ONE PropLine call per sport, all markets comma-joined.
There is no request-pattern problem, so a change-based pull cannot fix it and
no tier upgrade is needed.

The 429 is odds-api: 478/500 MONTHLY, blocked at 95%. oddsService falls
through silently when PropLine returns empty, and the backup's quota gate
throws the error -- so an empty slate is indistinguishable from an outage and
the message names the wrong provider. Flagged for its own order.

Could NOT verify PropLine movement endpoints: docs are auth-gated and the keys
are production-only. Not asserted either way. The movement-as-data argument
stands on its own merits and should be justified that way, not as a quota fix
it isn't.

Book-breadth invariant written down: we never discard books. All are kept and
shown (DISPLAY_BOOKS = MODEL + REFERENCE + DFS); DFS pick'em is excluded from
PRICING only, because a fixed-payout shaded number is not a market price.
Verified this is already what bookRoles.js does.

Champion byte-identical; every challenger stays wired.
4,159 tests green (332 suites); web build exit 0.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W1sivYNqY2TS5ftykmHBU9
This commit is contained in:
Kev
2026-08-02 22:07:43 -04:00
parent b06a84af80
commit 3ba3dd28f3
5 changed files with 527 additions and 1 deletions
+31 -1
View File
@@ -1,7 +1,37 @@
# VYNDR — Build State
## Last Updated
2026-08-02
2026-08-03
## Session 77 (2026-08-03) — Settlement was dead for two days; scoreboard now readable ✅
Specs: `specs/challenger-scoreboard.md`, `specs/odds-429-diagnosis.md`.
4,159 tests / 332 suites green, web build exit 0.
- **THE FIND.** Three challenger axes read exactly ZERO settled rows. Not low —
zero, on games played days earlier, with `settle_attempts = 0`. `settleLedger`
refetched rows via `.in('id', ids)`; 500 UUIDs = an 18,499-char URL the fetch
layer rejects, and the result was destructured with no error binding, so it
returned all-zeros indistinguishable from a clean "nothing to settle".
Volume-triggered: 2026-08-01 was the first day past the 500-row limit.
The zero-settle ops alarm reads those same return values and was blind to it.
- **FIXED + DRAINED.** One query, all columns, no id list; failed fetches surface.
`captureClosing` chunked at 100 (same defect family). 1,444 rows from 08-01
settled (1,376 hit/miss + 68 void, 0 remaining). Settled n **493 → 1,741**.
- **SCOREBOARD — nothing promoted, nothing earned it.** arch-v1 n=1,741 Δ0.0000
CI[0.0050,+0.0054] (moves 76% of rows by 2.5pp mean = active movement carrying
no information); contact-v1 n=1,055 +0.0008 inconclusive; proj-v1.1 ladder
n=1,664 **0.0301 CI[0.0543,0.0060] = reliably WORSE**. matchup/tb-v1/hits-v1
STILL PENDING (rows dated 08-02+, settle after ET midnight). Champion
byte-identical; all challengers stay wired.
- **429 DIAGNOSED (read-only) — premise refuted with numbers.** PropLine 5/3,000
daily (0.17%); the 429 is **odds-api at 478/500 monthly, blocked at 95%**,
surfacing whenever PropLine returns empty. One snapshot = ONE PropLine call per
sport. Change-based pull is NOT the fix and no tier upgrade is needed. Could
NOT verify PropLine movement endpoints (auth-gated docs, prod-only keys) — not
asserted. Book-breadth invariant recorded: we never discard books; DFS is
excluded from PRICING only.
- **Next:** the silent PropLine fall-through (empty slate must not report the
backup's 429); diagnose the projection family's INPUTS (two independent
measurements now say it trails the champion).
## Session 76 (2026-08-02) — hits-v1: a challenger built, measured, and REFUTED ✅
Spec: `specs/hits-v1-binomial.md`. 4,156 tests / 332 suites green, web build exit 0.