My first delta run modelled the incumbent as first-row-wins over the RAW
feed and reported that an EXCLUDED book was "the market" on 69% of MLB
prop-lines, with prizepicks alone at 47%. That is WRONG and I caught it
before it went anywhere.
normalizeProps applies ALLOWED_BOOKS BEFORE gradeSlateService.dedupeProps
runs, so DFS books never reach the incumbent. The allow-list, for all the
coverage it costs, does keep DFS out of the ruler.
incumbentFairProb now takes the allow-list (defaulting to the live
ALLOWED_BOOKS) and reproduces the real chain. Two tests lock it, including
that a prop with no admitted book has NO incumbent -- it is never graded
at all, which is the real loss and is already measured as invisible_props.
Overstating the incumbent's badness would have been as dishonest as
understating it, and more persuasive.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QJs13VsyiSKYQP6rj3NNmc
CHALLENGER-FIRST. The live ruler is byte-identical: CURRENT_RULER_VERSION
is still v1_first_book, nothing here writes a cache, a grade or a ledger
row, and no live code path calls consensusRuler yet.
bookRoles.js splits one allow-list into three, because it was answering
two different questions -- "can we show this?" and "can we price against
this?" -- with the same list, which is what bent the ruler.
TAKEABLE the user can actually bet here (drives best price / shopping)
REFERENCE may price the fair-prob ruler; never surfaced as a place to bet
EXCLUDED DFS pick'em + offshore, permanently barred from all pricing
Two deliberate calls, both evidence-based:
- The six PropLine-phantom books (caesars/fanatics/bet365/hardrockbet/
pointsbet/thescore) are KEPT despite the order saying remove. They
returned zero PropLine quotes, but PropLine is not our only provider and
the odds-api backup path may carry them. A book that never appears is
never matched, which costs nothing; deleting them risks silently
dropping real books on the backup with no upside. Recorded in
PHANTOM_ON_PROPLINE rather than enacted as a deletion.
- REFERENCE = exchanges + pinnacle + bovada + the four US majors, chosen
off the measured coverage curve rather than theory. exchange_only is
cleanest (order-book, ~zero vig) but covers 14.3% of MLB and 5.6% of
WNBA; adding the US majors gives 28.1% / 46.3%. pinnacle, matchbook and
polymarket measured 0% on both sports and add nothing. The honest
limitation is recorded in the config: this is a MARKET consensus, not a
SHARP one.
consensusRuler.js: median de-vigged fair_prob across >=2 reference books
posting BOTH sides at the SAME line. Median so one stale exchange cannot
drag it. Different lines are never averaged, one-sided quotes never rule,
and n<2 falls back to single-book LABELLED as such with the v1 stamp --
never silently mixed, because a column holding both is two rulers wearing
one name.
The challenger delta runs over the live feed and reports incumbent_book_
roles, which is the real headline: the incumbent is literally first-row-
wins, so it reports what KIND of book has been acting as "the market".
DFS pick'em has the highest coverage in the feed, so a DFS book can be it.
18 ruler tests + 37 total in the two new suites. Full suite 4021 passed.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QJs13VsyiSKYQP6rj3NNmc