---
title: Close out the 8f4292e08 gamelog residue
type: task
status: completed
description: >-
  Closed out the 8f4292e08 gamelog residue: the last 40 rows restored as league 2f8a4fe52, the other
  1,232 correctly deleted from the modern pid (162 rekeyed onto the father's player row).
  Re-verified 2026-08-04 — all three headline claims hold, but 154 rows lost a real
  nflverse-weekly-rosters source stamp (recovered as dc043c4bf) and 358 of the still-deleted rows
  are reconstructible games no player currently owns.
base_uri: user:task/league/close-out-era-falsifier-gamelog-residue.md
created_at: '2026-08-04T21:15:21.879Z'
entity_id: 1495371f-b925-4b9b-a2f2-aae9fb3a43fc
finished_at: '2026-08-04T21:25:56.571Z'
observations:
  - ████████████████████████████████████████████████
  - ████████████████████████████████████████████████
  - ████████████████████████████████████████████████
  - ████████████████████████████████████████████████
  - ████████████████████████████████████████████████
  - ████████████████████████████████████████████████
  - ████████████████████████████████████████████████
  - ████████████████████████████████████████████████
  - ████████████████████████████████████████████████
owner_identity_uri: █████████████████████████
priority: Medium
public_read: true
relations:
  - succeeds [[████████████████████████-███████-████████-████-████-██████████████]]
  - addresses [[user:text/league/data-quality-and-validation.md]]
tags:
  - user:tag/league-xo-football.md
  - user:tag/software-task.md
updated_at: '2026-08-04T22:53:55.295Z'
visibility_analyzed_at: '2026-11-06T00:17:42.181Z'
---

# Close Out the 8f4292e08 Gamelog Residue

## State

League `8f4292e08` deleted 1,560 `player_gamelogs` rows on an era predicate that consulted only `nfl_draft_year`. Two restores have run since:

- `38dfc4c32` restored **450** rows across 15 players — the father/son conflations whose birth dates cleared them.
- `8911c494c` restored all **739** NULLed `nfl_play_stats.gsis_player_id` values and repaired 11 player rows. That task is Completed.

`b15fc25a6` then split `CHRI-SMIT-007265` and `DEVI-TAYL-016049` back into one person each, which changed what the predicate says about some of the remaining rows.

## What was actually left — re-derived 2026-08-04 against the current `player` rows

- **1,272 pairs were absent under their backup pid**
- **40 passed `player_could_have_played`** and were restored
- **1,232 were rejected and stay deleted**

Do not read the residue as ~1,200 rows awaiting restore. **The large majority is correctly deleted** — it is the misattribution class the original repair was right about, where a modern player's row holds an old player's `smart_player_id`/`gsis_player_id`. `SHIX-SMIT-026046` (born 1998, 261 rows spanning 2001-2016), `DANI-JONE-003986` (born 1997, 189 rows 2001-2010), `STER-WEAT-025072` (born 1999, 185 rows 2006-2015) and `JAKE-FERG-027658` (born 1999, 121 rows 2002-2009) are the four largest and every one is a player born after the games it was credited with. See the identifier-collision table in [[user:text/league/data-quality-and-validation.md]].

## Outcome — re-derived and applied 2026-08-04

The re-derivation against the current `player` rows found **40** restorable, not 41, and all 40 are `CHRI-SMIT-007265` (2014-2018). `b15fc25a6` restored its 2014 biography, so `nfl_draft_year` 2014 with `draft_round` 5 clears those seasons; the gsis serial cohort for `00-0031264` reads 2014 unanimously across 63 players and is independent of both fields.

The 41st was `CORE-TAYL-015520` at esbid `2014080300`, and it was an artifact. That esbid has no `nfl_games` row, so a measurement that reads the season by joining `nfl_games` hands the predicate a null `season_year` — and `player_could_have_played` returns true on a null season by design. It passed vacuously, not on evidence. Read against the backup's own `season_year` of 2014 it is rejected like its sibling row.

**162 of the 1,232 rejected rows are not lost data.** `38dfc4c32` restored them under the conflated pid and the duplicate-person collapse then rekeyed them onto the father's own `player` row: all 123 `BENN-SAPP-027306` rows now sit on `BENJ-SAPP-001764` and all 39 `SEAN-RYAN-027249` rows on `SEAN-RYAN-001783`. Restoring them under the backup pid would have duplicated them onto the sons.

## Plan

- [x] **Restore the 40 rows** — applied as league `2f8a4fe52` (`db/adhoc/2026-08-04-restore-final-era-falsifier-gamelog-residue.sql`). Re-running the adjudication after the apply reports 0 now-passing and 0 restored-but-rejected.
- [x] **Confirm the 1,232 rejections.** The 22 birth-dated players are each credited with games they were 18 or younger for (median 9), so none sits near the age-20 floor. The three no-birth-date rows were each decided on an independent signal, recorded as observations.
- [ ] **Retire the scratch slug** — DEFERRED, not done. The `retire-scratch-domain` Step 2.1 gate fires: [[███████████████████████-████-█████-████-████-█████████████████]] is In Progress and names the directory as its rollback snapshot, and [[██████████████████████████████-█████████████-████-█████-██████-███████-███████]] is open and owns the retention decision. Re-worked 2026-08-04 and it still does not clear — `gamelogs-residue-before.json` also turned out not to be consumed (see below). Retirement belongs to that continuation.

## Re-verified 2026-08-04 by an independent review

The three headline claims all hold. The split re-derives exactly (1,272 absent, 40 passing, 1,232 rejected), esbid `2014080300` has no `nfl_games` row, and all 162 rekeyed rows are present on the father's pid. Two things needed correcting.

**`source` was silently altered on 154 restored rows.** Both restores wrote `source` as NULL, each reasoning that the backup value was the column DEFAULT that `2026-08-04-drop-gamelog-source-default-and-delete-prenatal-rows.sql` established was never a writer stamp. The backup carries two values, not one: 1,343 rows read the column default (correctly NULLed) and 217 read `nflverse-weekly-rosters`, an explicit stamp from `scripts/import-nflverse-weekly-rosters.mjs`. Of the 40 rows here, 34 were the real stamp. Recovered as league `dc043c4bf`; on all 106 columns the 40 rows now match the backup, minus the 6 deliberate default-NULLs.

**"Correctly deleted" understates what was lost.** The rows do not belong on the modern pid, but the games are not accounted for anywhere. 358 of the 1,070 non-rekeyed rejected rows carry real counting stats, and the rightful older player frequently has no gamelog for those games — `STEV-WEAT-023907` holds 53 of `STER-WEAT-025072`'s 185, and `STEV-SMIT-011113` holds 239 of `SHIX-SMIT-026046`'s 261 but none of the 2001 rookie season. The plays survive in `nfl_play_stats` under the right identifier, so this is reconstructible work, not lost data — but it is unowned, and `gamelogs-residue-before.json` is the only inventory of it.
