---
title: Match the rbsdm live box score on the ███ ████ ████
type: task
status: completed
description: >-
  Make the public ███ ████ ████'s live view cover everything rbsdm's live box score shows, starting
  with a live EP and win-probability model distilled from nflfastR history.
base_uri: user:task/league/match-rbsdm-live-box-score-on-nfl-game-page.md
created_at: '2026-11-06T02:29:40.788Z'
entity_id: 2331f7f2-f570-471d-a73a-da1c98de63eb
finished_at: '2026-11-06T03:44:01.956Z'
observations:
  - ████████████████████████████████████████████████
  - ████████████████████████████████████████████████
owner_identity_uri: █████████████████████████
priority: High
public_read: true
tags:
  - user:tag/league-xo-football.md
updated_at: '2026-11-06T03:59:43.860Z'
visibility_analyzed_at: '2026-11-06T10:31:47.289Z'
---

# Match the rbsdm live box score on the ███ ████ ████

The operator asked (2026-11-05, during JAX at BAL) that the game page's live view cover everything the rbsdm live box score (https://rbsdm.com/box_scores/) shows. rbsdm runs nflfastR's EP and WP models on the live feed; our live `nfl_plays` rows carry no EP, EPA, WP, air yards, pass location or timeouts (all land with the post-game import), so the model layer comes first.

## rbsdm content inventory (from `games/<id>.json`, 2026_09_JAX_BAL)

- Status line: ball, down and distance, spot, clock, win probability.
- Team game stats, each with a percentile: EPA/play, success rate, yards/play, EPA/dropback, EPA/rush, yards/dropback, explosive play rate, 3rd down success rate, red zone TD rate, defensive run stuff rate, havoc rate.
- Offensive splits per team: all / rush / pass, early downs (rush, pass), late downs (rush, pass): EPA/play, success rate, first-down rate, plays, each percentiled.
- Quarterbacks: dropbacks, EPA/play, total EPA, aDoT, completion %, expected completion %, CPOE, xQBR.
- Series: all series, started with rush, started with pass: count, series success rate, percentile.
- Players: dropbacks, rush attempts, pass targets: EPA/play, total EPA, success rate, first-down rate, plays.
- Defense: scrimmage plays faced, drives faced, points allowed per drive, three-and-outs forced, havoc plays (pass, rush), TFLs (pass, rush), sacks, QB hits, runs stuffed, pass breakups, interceptions, fumbles forced and recovered, each percentiled.
- Turnovers: count and turnover EPA by phase.
- Drive report: drive, team, quarter, time, score, start, plays, result, win probability.
- Biggest plays by EPA and by WPA.
- Play by play with EP, EPA and WP; CSV download.
- Passing chart: each pass by side and depth with its result.
- Fantasy: PPR against expected PPR (ffopportunity).
- Win probability chart and an excitement index.
- Drive summary chart.
- Fourth-down decisions (nfl4th): the call, and the win probability of go, kick and punt.

## Plan

- [x] **Live EP and WP model.** Distill nflfastR's pre-play `expected_points` and `vegas_home_win_probability` (history on every row) into XGBoost models over state live rows carry (down, distance, yard line, clock, half, score difference from scoring plays, timeouts from timeout markers, spread, home, roof). Evaluate in JS through `libs-shared/xgboost-artifact.mjs`. One enrichment function returns per-play EP, EPA, WP and WPA, taking imported nflfastR values where present, so live and final read the same way. Validate against final games' nflfastR EPA and WP.
- [x] **Live content from plays** (needs only step 1 for EPA): the team stats, splits, series, players, defense, turnovers, drive report, biggest plays, play by play with CSV, passing chart parsed from descriptions, status line, win probability chart. Every figure percentiled against history at the same point of the game, as So far does.
- [x] **Models beyond EP/WP:** completion probability (xCMP, CPOE), expected fantasy points, fourth-down decisions. Check `libs-shared/expected-stats-model.mjs` before building one.
- [x] Verify on a live game at 1440 and 390, deploy on approval.
