Upstream republishes whole seasons. This is the decision about which of those republications create a queryable revision of history — the setting that determines both storage cost and whether backtests are honest.
A model refit opens a new version for every affected row. An as-of query returns the EPA nflverse actually published on that date.
Only real-world corrections get versions. Model output always reads latest.
Observed changes win. If a genuine league stat correction lands in the same
republication as a refit, it is recorded as a correction, never a
remodel — a real correction is the one revision class a customer
cannot reconstruct from anywhere else, so it must not be masked.
Model outputs could be versioned against the upstream model version rather than per row. A refit would then cost one row instead of ~5,979,895, and as-of would still resolve correctly. Strictly better — except nflverse does not publish a model version, so there is nothing to key on. Worth raising with them.
Implemented in
src/fbdata/store/revision.py::assess.