Consensus Edge Methodology [DATA THAT THINKS]

The math + empirical anchors behind every signal in the production pipeline. Sharp users should be able to verify what we do; this page is the source of truth across NFL + UFC + cricket + tennis + NHL.

New to Consensus Edge? Start with the plain-language walkthrough →

Sign convention

Magnitudes are expressed as signed pp shifts applied to the relevant win-probability or EV expression. +x.x pp means the signal pushes the model's home or favored-side prob UP by that amount; -x.x pp means it pushes DOWN. When a signal applies asymmetrically (e.g., dog-only, favorite-only, or conditional on a key-number bucket), the magnitude annotates the condition.
Notation: +1.5pp dog = adds 1.5pp to the underdog prob · -4pp at -3 = subtracts 4pp from favorite prob when spread sits on key number 3 · ±X pp = bidirectional, sign depends on input state.

NFL signal pipeline

Phase 1

Key-number push tax ACTIVE Phase 1

When a spread sits on an integer key number (3, 7, 6, 10, 4, 14), shrink the model's win prob by the half-push tax to capture the EV cliff.
Magnitude: -4pp at integer-3 spread; -2pp at -7 (favorite EV)
Source: Empirical 18-year margin-of-victory distribution from nflverse/nfldata (5,164 games 2007-2024). Margin=3 lands 14.5% of games; margin=7 lands 8.87%.
Feature flag: NFL_KEY_NUMBER_ADJ_ENABLED

Phase 2

OL aggregate flag (count-scaled) ACTIVE Phase 2

When ≥2 starting offensive linemen (OT/G/C) are out for a team, fire an additional impact bump on top of per-position weights. Scales non-linearly — line cohesion collapses when multiple starters miss.
Magnitude: -4pp at 2 OL out; -8pp at 3; -13pp at 4; -18pp at 5+ (on affected team's prob)
Source: nfl-betting-expert verdict 2026-05-10: 'Two starting OL out matters more than 2× one. Every retail product handles this poorly.'
Feature flag: (always on)

Phase 3

12-cell game-prop methods-tree ACTIVE Phase 3

12 game-prop cells with EV per cell: full-game ML (home/away), spread cover (home/away), total over/under, 1H ML (home/away), home/away team total over/under. Pinnacle anchor + best-price-across-books per cell.
Magnitude: EV-grade thresholds: ≥+2.5pp LEAN, ≥+4pp B-grade (no A-grade in v1)
Source: Cell correlations derived from observed Pinnacle/Circa parlay pricing. Push tax integration ensures spread cells use adjusted_implied_prob from key_numbers.py.
Feature flag: (always on)

Win-and-cover parlay correlation propagation ACTIVE Phase 3

When a parlay cart contains 2+ same-game NFL methods-tree cells, applies pairwise correlation discount to combined prob. Catches the win-and-cover SGP duplicate-payoff trap (home ML + home spread cover ~0.88 correlated).
Magnitude: ρ=0.88 → -44pp discount on naïve combined prob (effective halving)
Source: NFL_CELL_CORRELATION matrix, market-revealed priors
Feature flag: (always on)

Phase 4

Weather wind-total adjustment ACTIVE Phase 4

For outdoor NFL games, fetch wind-speed forecast from open-meteo and adjust over/under prob via game-total shift. Indoor stadiums (11 NFL teams) skip weather entirely.
Magnitude: Wind 15+ mph: -6pp over-prob (-2pt totals line); 20+ mph: -12pp (-4pt)
Source: nfl-betting-expert: 'Wind is by far the most underpriced weather factor for totals. 15+ mph sustained reduces scoring meaningfully.'
Feature flag: (always on)

Early-regular confidence dampener ACTIVE Phase 4

In Weeks 1-4 of NFL regular season (Sept + first week of Oct), pull model probs 15% toward 50%. Books overweight prior-season form, players are still rounding into shape, public bias is at its peak — model uncertainty is materially higher.
Magnitude: Regress favorite -2.25pp toward 0.5 in Weeks 1-4 (no shift Week 5+)
Source: nfl-betting-expert: 'First 4 weeks of every NFL season are statistically distinct.'
Feature flag: NFL_EARLY_REGULAR_DAMPEN_ENABLED

Phase 5

Divisional dog boost ACTIVE Phase 5

When both teams share an NFL division, boost the dog's win prob by 1.5pp. Modest signal — the edge has compressed as books wise up. 32-team alignment matched to 8 divisions × 4 teams.
Magnitude: +1.5pp on dog prob in divisional games (asymmetric — favorite gets 0pp)
Source: nfl-betting-expert: 'Division underdogs cover at a slightly elevated rate historically, but the edge has compressed. Don't oversell this.'
Feature flag: NFL_DIVISIONAL_ADJ_ENABLED

Rest differential (TNF / bye / MNF→Sun) ACTIVE Phase 5

Adjusts win prob based on each team's rest situation: bye week off (+2pp), short-week Thursday Night Football (-2.5pp), MNF→Sun short rest (-1pp). Inputs derived from predictions table prev-game-date lookup.
Magnitude: +2pp off bye; -2.5pp on TNF short week; -1pp on MNF→Sun turnaround
Source: nfl-betting-expert: 'Rest differential is real but overfit-prone. Calibrate on 15+ years of data.'
Feature flag: NFL_REST_ADJ_ENABLED

Look-ahead spot detection ACTIVE Phase 5

Trap-game heuristic: 65%+ favorite this week + ≥10pp stronger next-week opponent → shrink favorite's win prob by 2.5pp. Schedule-strength helper (sports/nfl/schedule_strength.py) derives opp strength from rolling 8-game implied-prob avg.
Magnitude: -2.5pp on favorite prob when trap criteria fire (65%+ favorite + ≥10pp tougher next-week opp)
Source: nfl-betting-expert: 'Teams looking forward to bigger game next week underperform — measurable but subtle.'
Feature flag: (always on)

Player-props EV scanner ACTIVE Phase 5

5 prop types (pass yds, rush yds, rec yds, receptions, anytime TD). Per-player baselines from nflverse + best-price OddsAPI + heuristic projections. Per-prop EV with grade thresholds 3% LEAN / 5% B (no A-grade).
Magnitude: Per-prop EV typically +2 to +8pp on outlier picks (graded 3% LEAN / 5% B)
Source: nfl-betting-expert: 'Props are where the real edges live in NFL because they're less liquid and less efficient.'
Feature flag: (always on)

Phase 6

Post-Q1 win-prob re-estimation ACTIVE Phase 6

Operator-entered Q1 state (score diff, turnovers, red-zone trips, first downs) drives an additive Bayesian-style update to the pre-game home win prob. Decomposed driver breakdown surfaced in UI.
Magnitude: ±1.2pp per point of score diff; ±3pp per net turnover; ±1.5pp per net red-zone trip; ±0.4pp per first-down diff. Sign follows whichever team is up; clamped to [0.01, 0.99]
Source: nfl-betting-expert: 'Live in-game re-pricing — quarter-by-quarter substitute pattern (UFC post-R1 v2 template adapted to football).'
Feature flag: NFL_POST_Q1_OVERRIDE_ENABLED

Sharp-book steam detection ACTIVE Phase 6

Detects coordinated sharp-book line moves: ≥2 of {Pinnacle, Circa, BetOnline, Bookmaker, 5Dimes} moving the same market in the same direction within a 5-min window. Filters micro-jitter (sub-2pp moves) and excludes single-book corrections.
Magnitude: Detected when ≥2 sharp books move same direction ±2pp+ within 5-min window. Typical alert magnitude: ±2-5pp on implied prob.
Source: nfl-betting-expert: 'Simultaneous moves across multiple sharp books within a short window. Distinguish steam from a single book correcting an error.'
Feature flag: (always on)

Steam-alert Slack/webhook dispatch ACTIVE Phase 6

Real-time webhook dispatch of detected steam moves to a Slack-compatible endpoint. No-op when STEAM_ALERT_SLACK_WEBHOOK_URL is unset; admin board (/admin/nfl/steam-alerts) remains authoritative.
Magnitude: Surfacing latency: ≤1 polling tick (~60s) from sharp-book movement to operator notification
Source: Sharp users want push-style alerts — passive admin-board polling is not viable during NFL Sunday rush windows.
Feature flag: STEAM_ALERT_SLACK_WEBHOOK_URL

UFC signal pipeline

Phase 2A

Method base rates by weight class ACTIVE Phase 2A

Baseline P(method | fight resolved) per weight class — KO/TKO, submission, decision. 8113-fight historical corpus segmented by men's/women's weight class.
Magnitude: KO/TKO ranges from ~50% (HW) to ~30% (FLY/115)
Source: ufcstats.com 1993-2024 corpus + mma-ufc-betting-expert lock 2026-04-29
Feature flag: (always on)

Phase 2B

Style-archetype matchup multipliers ACTIVE Phase 2B

16-cell matchup matrix: each fighter's archetype × opponent's archetype gives a method-distribution multiplier on top of weight-class base rates. Wrestler vs striker, grappler vs wrestler, counter-striker vs pressure fighter.
Magnitude: Wrestler vs striker: KO/TKO P↓ 30%; sub P↑ 40%
Source: mma-ufc-betting-expert verdict 2026-04-29 (Q3-Q5)
Feature flag: (always on)

Fighter-specific method differential (Bayesian-shrunk) ACTIVE Phase 2B

Per-fighter posterior method distribution: prior = base × style multiplier; updated via fighter's career method history with k=10 shrinkage to handle small samples.
Magnitude: Career-end finishers shift method dist ~5-15% from priors
Source: Bayesian shrinkage k=10 per expert verdict
Feature flag: (always on)

Methods-of-victory tree (6-cell) ACTIVE Phase 2B

Joint distribution: P(method × fighter) for KO/TKO/sub/dec × fighter A/B. EV per cell against books' method odds. Positive-EV cells highlighted on /ufc/fight/{id}.
Magnitude: Persistent edges 4-5% on method markets where books are lazy
Source: Composition: P(method) × P(fighter wins) per expert
Feature flag: (always on)

Phase 2A.b

Weigh-in tracker (missed weight + dehydration) ACTIVE Phase 2A.b

Pulls weigh-in results from MMAJunkie + sportradar + manual entry. Source-priority resolution. Surfaces missed-weight flags + extreme-cut concerns on fight permalinks.
Magnitude: Missed-weight typically -3 to -7pp on the misser's win prob
Source: MMAJunkie article scraper 2026-04-29
Feature flag: (always on)

Phase 3

Round-betting tree ACTIVE Phase 3

Per-round outcome tree: 5 cells per fighter (R1/R2/R3/R4/R5 win OR distance) with P(round | fighter wins) × p_winner joint probability. EV per cell against per-round odds.
Magnitude: Round-1 finish probabilities: 12-18% for striker matchups
Source: Per-round historical data + 24h/6h capture pair
Feature flag: (always on)

Phase 5 #1

Post-Round-1 method re-estimate (Phase 5 #1) ACTIVE Phase 5 #1

Between R1 and R2, operator-entered observations (sig strikes, TDs, ctrl seconds, visible damage 0-2) drive a Bayesian update to the methods tree. Single biggest live-edge move under the $50k/mo handle threshold.
Magnitude: Posterior method probs shift 5-15% from pre-fight tree
Source: mma-ufc-betting-expert verdict 2026-05-03
Feature flag: UFC_USE_POST_R1_TREE

Phase 5 #1 Phase 2

post_r1_v2 empirical likelihood fit ACTIVE Phase 5 #1 Phase 2

3-of-4 empirical likelihood dimensions fit on 5,822 round-stats fights: ctrl, sig_strike, td_diff. Damage_opponent stays uniform-fallback (operator-entered observations only) per expert lock.
Magnitude: Replaces uniform priors with empirical method-conditional probs
Source: scripts/ufc_post_r1_likelihood_fit.py over ufc_fight_round_stats
Feature flag: (always on)

Phase 4

Fighter scout card (reach/age/stance/recent W-L) ACTIVE Phase 4

Per-fight permalink scout card with reach differential, age diff, southpaw/orthodox stance pair classifier, recent W-L with damage-absorbed war-count over last 18 months.
Magnitude: Reach: ~3% striking-diff per 2 inches; war-count predicts decline
Source: mma-ufc-betting-expert verdict 2026-05-02
Feature flag: (always on)

Short-notice fight flag ACTIVE Phase 4

Fights where one fighter accepted on ≤14 days notice — short-camp fighter underperforms historically due to compressed weight cut + lack of opponent prep.
Magnitude: Short-notice fighter -4 to -8pp on win prob
Source: is_short_notice helper + feature_flags backing for announcement_at
Feature flag: (always on)

Cricket (IPL + CPL) signal pipeline

Phase 1

Venue + pitch character ACTIVE Phase 1

30+ venue lookup with par-score, chase win rate, pitch type (FLAT/DUSTY/GREEN/BALANCED), boundary dimensions, altitude. First-class T20 venue intelligence — no US retail product exposes this.
Magnitude: Par-score deltas of 30+ runs across venues
Source: Venue corpus seeded from cricket-betting-expert + observed history
Feature flag: (always on)

Phase 2.6a

Toss-reactivity (pre/post toss) ACTIVE Phase 2.6a

Pre-toss vs post-toss probability surfacing. 4-scenario projection on toss winner + decision (bat/bowl). Toss matters in T20 due to dew + pitch deterioration.
Magnitude: Toss decision can swing chase win rate by 8-15pp
Source: cricket-betting-expert verdict 2026-04-29
Feature flag: (always on)

Phase 3

Playing XI impact (xi_impact) ACTIVE Phase 3

Per-team Playing XI ingest at toss time; computes xi_delta based on star/regular drops. Star drop = -1.5pp, regular = -0.5pp, capped at ±4pp.
Magnitude: ±4pp cap on xi_impact
Source: cricket-betting-expert + Cricbuzz auto-scrape
Feature flag: (always on)

Phase 2.5d

Phase odds (powerplay × middle × death) ACTIVE Phase 2.5d

Per-phase team-side odds × per-book entry (DK/FD/Caesars/BetMGM × 4 phase-team cells). EV cells render with 3% display threshold and best-book-by-vig surfacing.
Magnitude: Phase-EV display threshold: 3% per cricket-expert lock
Source: cricket Phase 2.5d operator-entered phase odds
Feature flag: (always on)

Phase 2

Dew factor projection ACTIVE Phase 2

Subcontinental venue + floodlit-evening + humidity gates → projected dew factor. Bowling team disadvantaged when wet ball; chasing team advantaged.
Magnitude: ±3pp cap on dew factor
Source: open-meteo backfill cron + cricket-expert verdict
Feature flag: (always on)

DLS rain-projection scenario ACTIVE Phase 2

T20 simplified resources table + project_par_score + project_chase_advantage_pp. ±4pp cap on chase advantage.
Magnitude: DLS chase-advantage cap ±4pp
Source: Simplified DLS resources table + cricket-expert lock
Feature flag: (always on)

Phase 2.7 #1.6

Player career-stats lookup (cricsheet_id-keyed) ACTIVE Phase 2.7 #1.6

Canonical cricsheet_id keying. resolve_name_to_id + lookup_career_stats_by_id. 1050/1052 IPL+CPL coverage; _NAME: quarantine for unresolved players.
Magnitude: Career stats fuel innings-1 + top-batter/bowler prop projections
Source: Cricsheet cricsheet_id PK swap + aggregator re-keyed
Feature flag: (always on)

Phase 2.7 #1

Innings-1 + top-batter/bowler props ACTIVE Phase 2.7 #1

T20 player-prop EV: innings-1 runs (DLS settle rule), top batter, top bowler. Per-side props only in v1; per-book DK+FD+BetMGM. League priors hard-coded (38, 1.0).
Magnitude: 5% EV display threshold per cricket-expert lock
Source: cricket-betting-expert Q1-Q7 verdicts 2026-05-03
Feature flag: (always on)

Sub-Spec #3

Multi-league plumbing (IPL + CPL) ACTIVE Sub-Spec #3

LEAGUE_REGISTRY with per-league config (start time UTC, venue par defaults, season months, format). All 5 cricket signals generalized to accept league= parameter.
Magnitude: IPL active, CPL active, BBL/PSL inactive
Source: cricket-betting-expert Sub-Spec #3 verdict
Feature flag: (always on)

Tennis (ATP + WTA) signal pipeline

Foundation

Surface-specific ELO ratings ACTIVE Foundation

Per-surface Elo ratings (hard / clay / grass / indoor). Tennis ELO is more predictive than overall ELO because surface specialization is enormous in this sport.
Magnitude: Hard vs clay ELO can differ by 150+ points (~12pp win prob)
Source: tennis-betting-expert: surface specialization is foundational
Feature flag: (always on)

Tournament + match-level fatigue ACTIVE Foundation

Cumulative match-load over last 14 days, weighted by sets played and intensity. Essential for Slam second weeks + tournament hot streaks. Sigmoidal decay with set-weight 0.4.
Magnitude: 5-set Slam exhaust: -3 to -7pp on next-round win prob
Source: tennis-betting-expert: 'real degradation, especially Slams'
Feature flag: (always on)

WTA Sackmann corpus (68k matches) ACTIVE Foundation

Full WTA historical corpus from Sackmann dataset — 68,621 matches with surface, tourney_name, score, ranks. Powers WTA-specific Elo + backtest harness.
Magnitude: WTA tour-parity audit panel uses this corpus
Source: Sackmann tennis_wta repo + WTA Sackmann ingest 2026-05-08
Feature flag: (always on)

Tournament draw path analysis ACTIVE Foundation

Per-round survival probability + p_champion. Compares to futures-implied via BACK / LAY / NEUTRAL classifier. Identifies futures-market mispricings at draw release.
Magnitude: Path-difficulty deltas of 5-15pp on futures markets
Source: Sub-Spec #2 draw analysis foundation 2026-05-03
Feature flag: (always on)

Sub-Spec #4

Style matchup classifier (archetype_v3) ACTIVE Sub-Spec #4

4-archetype classifier: big_server, aggressive_baseliner, counterpuncher, all_court. Per-surface matchup matrix gives ±3pp clamp on composite win prob; low-data gate at confidence < 0.40.
Magnitude: ±3pp matchup adjustment, capped to prevent overweighting
Source: tennis-betting-expert verdict 2026-05-01
Feature flag: TENNIS_MATCHUP_DISABLED

Sub-Spec #1

Live point-by-point Markov simulator ACTIVE Sub-Spec #1

State-conditional point-by-point Markov simulator for in-match win probability. Tennis is the best sport for in-play modeling because state is perfectly observable (score, server).
Magnitude: Updates win prob ±5-15% on a single service break
Source: tennis-betting-expert Sub-Spec #1 verdict
Feature flag: (always on)

Sub-Spec #1 v2

FlashScore tournament-listing scrape (Approach B) ACTIVE Sub-Spec #1 v2

Daily tournament-listing scrape with rate-limiting + UA rotation + 1h Redis cache + Tennis24 fallback after 3 failures. Replaced the per-match player-name slug URL construction (silently broken for 3 weeks).
Magnitude: Day-1 production verification gate: ≥5 successful row writes
Source: Sub-Spec #1 postmortem 2026-04-28
Feature flag: (always on)

Sub-Spec #2

Pinnacle anchor (post silent-failure fix) ACTIVE Sub-Spec #2

Pinnacle anchor card on every tennis match permalink, post-FlashScore-id vs OddsAPI-game-id mismatch fix (was silently None for 4+ days). UPSERT hardened from DO NOTHING to conditional DO UPDATE to prevent NULL masking.
Magnitude: Pinnacle anchor present on 70%+ of tennis matches today
Source: Tennis Pinnacle anchor fix 2026-05-02 (9d2ee42 + 506eabf)
Feature flag: (always on)

NHL signal pipeline

Foundation

Confirmed starter pipeline (NHL Web API) ACTIVE Foundation

Official NHL Web API gamecenter/landing endpoint is the confirmed-starter source. Eliminates DailyFaceoff scraping dependency. Goalie announcement is the single biggest line-moving event of an NHL day.
Magnitude: Backup-quality starter swap ≈ 5-7pp moneyline shift
Source: api-web.nhle.com/v1/gamecenter/{id}/landing 2026-05-03
Feature flag: (always on)

Goaltender snapshot (PDO/ST/fatigue/goaltender quartet) ACTIVE Foundation

Daily-writer goaltender snapshot — refuses-in-backtest path swapped for real snapshot read. Pairs with PDO, special teams, and back-to-back fatigue signals as the 4-prong NHL input quartet.
Magnitude: Hot goalie can shift ML prob 3-5pp; B2B starter degrades 2-4pp
Source: Migration m20260508nhlgoalieagg + lookup_goaltender 2026-05-08
Feature flag: (always on)

MoneyPuck expected goals (xG) ACTIVE Foundation

MoneyPuck xG-per-60 + shot-quality metrics for ~600 active skaters via $500/yr commercial license + IP whitelist. The gold-standard public xG model. Adjusted for shot quality against per-game.
Magnitude: GSAx (goals saved above expected) is more predictive than raw save%
Source: MoneyPuck commercial license signed 2026-05-04 (prtanner@gmail.com)
Feature flag: (always on)

Empty-net-goal (ENG) empirical rate pipeline ACTIVE Foundation

1,421 games / 4,264 obs / 633 ENGs ingested with score_diff_at_pull_start tracking. Empirically-calibrated ENG probability for puck-line cover modeling. Trail-by-1 last-2-min P3 hit rate measured at 22.6%.
Magnitude: ENG-aware puck-line modeling shifts +1.5 cover prob ~3-5pp
Source: NHL Web API event-extractor pipeline 2026-05-04
Feature flag: (always on)

Schedule fatigue (B2B + travel + altitude) ACTIVE Foundation

Cumulative B2B / 3-in-4 / 4-in-6 tracking with travel direction + time zones + Denver/Calgary altitude. NHL B2B matters more than NBA B2B because rosters are smaller + minutes more physically demanding.
Magnitude: B2B 2nd-night degradation: 2-4pp moneyline impact
Source: nhl-betting-expert verdict 2026-04-29
Feature flag: (always on)

NHL historical games corpus (4,481 rows) ACTIVE Foundation

Multi-season ingest of NHL Stats API (2022-2024) into nhl_games_historical table. Powers TheOddsAPI v2 historical closing-line ingest (7,752 NHL rows with 95% matcher hit rate).
Magnitude: 95% closing-line coverage — sharpest of any CE sport
Source: scripts/ingest_nhl_historical_games.py 2026-05-08
Feature flag: (always on)

Period-by-period markets (1P/2P/3P) ACTIVE Foundation

1st-period unders have historical value due to slow starts league-wide. 2nd-period totals respond to game-script. 3rd-period markets account for ENG dynamics.
Magnitude: 1st-period under historical edge ~2-3% at sharp books
Source: nhl-betting-expert verdict + period-odds entry forms
Feature flag: (always on)

Day 10

3-way regulation/OT/SO methods-tree ACTIVE Day 10

6-cell tree: each side × {regulation, OT, SO}. Sum-to-ML constraint. EV per outcome cell against 3-way book odds. Peer to UFC's methods-tree, NHL-adapted.
Magnitude: Regulation P typically 0.55-0.65; OT P 0.18-0.25; SO P 0.10-0.20
Source: nhl-betting-expert lock 2026-05-02
Feature flag: (always on)
→ NFL JSON: /api/nfl/signals
→ UFC JSON: /api/ufc/signals
→ Cricket (IPL + CPL) JSON: /api/cricket/signals
→ Tennis (ATP + WTA) JSON: /api/tennis/signals
→ NHL JSON: /api/nhl/signals

Platform capabilities

Per-user CLV audit ACTIVE Trust

Log your real bets at /me/log-bet and see your real closing-line-value over time at /me/clv. Settler cron grades each bet against the captured closing line and computes your CLV in pp. Per-sport breakdown and cumulative-mean trajectory. Anonymous cookie identity bridges to JWT auth when an OIDC provider is configured — your bet history migrates automatically.
Settle latency: ≤30 min after game completion (cron tick + clv_results join)
JSON API: GET /api/me (combined snapshot), POST /api/user-bets (log), GET /api/user-bets/summary (aggregate), GET /api/user-bets/by-sport (per-sport breakdown), GET /api/user-bets/trajectory (cumulative CLV series), POST /api/user-bets/merge (anonymous → JWT identity migration)
Sign-in: /me/sign-in — passwordless via Stytch (email magic link + Google OAuth + passkeys). RS256/JWKS session JWTs verified server-side against the configured provider's JWKS. Anonymous cookie identity auto-migrates to authenticated user on first sign-in.
Source: consensus-edge-expert-reviewer 2026-05-10: "Honest CLV reporting for user bets. Enormously sticky."

Aggregate model CLV ACTIVE Trust

Per-sport, per-bet-type CLV audit of the platform's own picks at /trust/clv. Pinnacle-anchored closing line (with fallback to best-priced sharp book). N≥30 display gate prevents premature publication of noisy buckets.
Capture rate: 84.3% post-2026-05-10 fix (was 40.5%)

NFL post-Q1 in-play re-estimation ACTIVE Phase 6

Operator-entered Q1 state at /admin/nfl/post-q1-entry feeds back into the main consensus blend (gated by NFL_POST_Q1_OVERRIDE_ENABLED). Slate drilldown surfaces the pre→post probs + driver breakdown. SLO: ≤60s from end-of-Q1 to posted update.

NFL sharp-book steam detection ACTIVE Phase 6

60-second polling cron against Pinnacle / Circa / BetOnline / Bookmaker / 5Dimes. Alerts at /admin/nfl/steam-alerts when ≥2 sharp books move the same direction by ≥2pp within 5 min. Slack/webhook push via STEAM_ALERT_SLACK_WEBHOOK_URL.