cbb·system

The store, table by table

What the canonical database holds, in the order the pipeline fills it: who the teams are, what was played, what the model fitted, and what is joined to the market. Every count is a live query — a table that is empty here is empty in the store, and the page says why rather than hiding it. These are row counts, not coverage: per-season coverage lives on the season index.

140,804games
2,134teams
4,638model runs
2026-04-07 00:50newest cutoff

Identity & registry — one row per school, vendors as aliases

TableRowsWhat one row is
teams 2,134 One canonical school in one competition, keyed (gender, slug).
team_aliases 2,154 A vendor's id and spelling for a team — the join key the ingest matches on.
name_registry_teams 2,136 The persisted canonical registry, derived from the retained captures and replaced wholesale.
name_registry_entries 5,723 One name form — canonical, display, or a vendor alias — pointing at exactly one team.
name_registry_decisions 1 A tier-2 judgment a human recorded. The one registry-side table a rebuild does not replace.

702 of the 2,134 teams are provisional: no roster lists them, so they are known only from a game — a non-D1 buy-game opponent, marked in the tables rather than hidden.

Games & results — what was played

TableRowsWhat one row is
games 140,804 One matchup at one tip time. It carries no gender column — the competition is the home team's, which is why every game-scoped read joins teams.
team_box_scores 276,028 One team's statistics in one game — the shape the training loader requires.

137,303 of 140,804 games are final; the rest are scheduled, postponed or canceled. A game's counts_for_ratings flag excludes exhibition and non-D1 games from training while they still count for the record.

Model output — one fit per cutoff, per competition

TableRowsWhat one row is
model_runs 4,638 One training execution at one cutoff. The cutoff — not created_at — is a run's time anchor.
team_ratings 818,789 One team-season's fitted ratings for one run. Points per possession, with a sigma per factor.
team_rating_smoothing 818,789 The same key, holding the causal exponentially-weighted series the pages read by default.
season_model_params 2,319 A run's home edge and pooled sigma head — everything the run fitted that is not per team.
predictions 73,589 A priced game, written by the re-prediction from the smoothed series. The walk itself writes none.

The newest stored cutoff is 2026-04-07 00:50 UTC — the tip of the latest game any fit trained on. Every number a ratings page shows is a walk-forward replay at a stored cutoff, never a live feed.

Ratings are reported raw: shrinkage to the mean was removed because it destroyed separation. Smoothing is a separate, stored series — it never re-enters a fit.

Odds & edges — the market half, read pregame only

TableRowsWhat one row is
lines 0 One book's price for one market side, stamped at a fetch time.
edges 0 A model probability against a de-vigged market probability — the one table spanning both halves.

0 of 0 line rows are pregame — stamped before tip, which is the only kind a backtest or an edge may read. The odds feed has no history, so lines accumulate forward from the November tip.

No edge has been priced yet, so the EV and bet-performance views are deliberately not built: an unbuilt view beats one that renders "no data" and reads as a defect. An edge needs a line joined to a prediction, and nothing has been joined.

Bookkeeping — the pipeline's own record

TableRowsWhat one row is
quality_log 28,107 An in-pipeline data-quality finding, scoped to the season and gender it came from.
resolutions 0 The Pacific-day partition key the backtest is specified to use.

No resolution day has been written: the backtest computes its cutoff from the day it is running rather than storing a partition row. The table is a state, not a fault — and it is the reason a count belongs here instead of a claim in a doc.

Where to read next

Seasons
One row per season and competition, with its champion and the path into its top 25.
Ratings
One run's snapshot at a time — points per possession, with sigmas and a status column.
Games
Filterable results, with a flag for whether each game was predicted.
Calibration
When a rating is worth trusting, read off the stored predictions themselves.
Settings
Which walk, which series, which book, and how many teams a season chart traces.