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:
+31
-1
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user