---
title: Stamp nfl_games FINAL within minutes of the final whistle
type: task
status: planned
description: >-
  nfl_games.status reaches FINAL hours after a game ends, so live lineup analysis simulates finished
  games as unplayed on Sunday night; find the writer, measure the lag, and stamp FINAL from the live
  feed.
base_uri: user:task/league/stamp-nfl-games-final-promptly.md
created_at: '2026-09-28T04:33:39.273Z'
entity_id: 68d12b29-0011-4aa2-8745-8785c26dd43c
observations:
  - ████████████████████████████████████████████████
  - ████████████████████████████████████████████████
  - ████████████████████████████████████████████████
  - ████████████████████████████████████████████████
owner_identity_uri: █████████████████████████
priority: Medium
public_read: true
relations:
  - relates [[█████████████████████████-███████-████-███-█████-███-████████████]]
  - relates [[user:task/league/stamp-straggler-unstamped-nfl-games.md]]
tags:
  - user:tag/league-xo-football.md
updated_at: '2026-10-19T02:05:48.659Z'
visibility_analyzed_at: '2026-11-05T23:50:29.464Z'
---

# Stamp nfl_games FINAL within minutes of the final whistle

## Overview

- `nfl_games.status` reaches `FINAL` hours after a game ends. Near 22:05Z on 2026-09-27, nine games that ended near 20:15Z still read NULL (recorded in [[███████████████████████████████-█████████-████████]]).
- Impact: on a Sunday night and Monday, the live lineup analysis treats a finished game as unplayed. The lineups page then simulates a whole range for a player whose points are final, where it should hold his actual points. On 2026-09-28 near 03:40Z Josh Allen still showed a 14 to 37 point range after BUF v LAC had ended.
- Raised during [[█████████████████████████-███████-████-███-█████-███-████████████]]; the operator ruled it a separate importer task on 2026-09-28.

## Background

- Two readers decide "finished" by `status like 'FINAL%'`: `libs-server/simulation/load-nfl-schedule.mjs` (is_final, which picks actual points over a simulated range), and `libs-server/get-contest-lineup-analysis.mjs` (the finished-game set in the analysis cache key). Both are correct to trust FINAL. The defect is the writer's cadence.
- The lag is conservative: a late stamp never marks a game final early, so nothing is double-counted. The cost is stale analysis for the hours between the whistle and the stamp.
- Not the same as [[user:task/league/stamp-straggler-unstamped-nfl-games.md]], which covers old games that never got a status at all.

## Plan

- [ ] **Find the writer and measure the lag**
  - Identify which importer writes `nfl_games.status` and on what schedule, from the scripts and `server/crontab-main`.
  - Measure the lag over the last three game days: the final-play timestamp from `nfl_plays` against the time `status` first read FINAL. The source may be a changelog, the importer's `jobs` rows, or the log.
  - Verify: the writer is named and the lag distribution is stated, with the collection health of that window.
- [ ] **Stamp FINAL from the live feed**
  - Stamp FINAL within minutes of the end of the game, preferably from the live plays or scoreboard worker already polling during games, rather than widening the batch importer's cadence.
  - Verify: on the next game day, every game reads FINAL within 15 minutes of its last play, measured the same way as the first item.
- [ ] **Confirm the lineups analysis moves**
  - Verify: a lineup analysis requested after a game's stamp holds that game's players at actual points, and its cache key changes at the stamp.
