---
title: Backfill the 2024 sportradar role columns from the play cache
type: task
status: planned
description: >-
  Run the 2024 sportradar punter and returner role-column backfill from cached play-by-play, at no
  vendor cost. Gives the existing continuation brief a live owner.
base_uri: user:task/league/backfill-2024-sportradar-role-columns.md
created_at: '2026-09-23T05:27:37.847Z'
entity_id: 0cd478dd-2697-48aa-949a-8926123dd182
owner_identity_uri: █████████████████████████
priority: Medium
public_read: true
tags:
  - user:tag/league-xo-football.md
  - user:tag/software-task.md
updated_at: '2026-09-23T05:27:37.847Z'
visibility_analyzed_at: '2026-11-05T23:48:25.100Z'
---

# Implementation Plan: Backfill the 2024 sportradar role columns from the play cache

## Overview

- 2024 `punter_pid` and `returner_pid` read exactly 0 against 2,572 punts, while 2025 reads 2,036 and 3,647 after the same repair. The gap is unrun backfill, not a live defect.
- **It costs no vendor calls.** Every play-by-play response for 2024 is already cached.

## Background

This work has a complete brief already written: [[████████████████████████-██-█████████████████-████-██████████-████-██████████]] carries the full account — what landed in league `7bd222468` and `59ab25a9b`, the exact commands, the runtime budget, and the verification table. Read it rather than re-deriving any of it.

This task exists to give that continuation a live owner. It was addressing [[██████████████████████-████-███████████-████-████████-███████]], which completed on 2026-09-23 without this work — that lane explicitly scoped the 2024 remainder out — and [[███████████████████████-██████████-████-███████████]] is Completed too, so the continuation had no live task and the auto-cancel sweep would have retired a real lane.

### What the oracle says today

`play-participant-slot-coverage-sportradar` reads 9 findings, measured 2026-09-23, and they are exactly this population. The play-stats arm beside it reads 0.

## Plan

- [ ] **Run the 2024 backfill per the continuation brief**
  - Purpose: the brief is current and carries the commands; this task adds nothing to it.
  - Verify: `punter_pid` and `returner_pid` move off 0 against 2,572 punts in 2024, and the accounting guard's `Plays UNACCOUNTED for` line reads zero. Confirm no request reaches the vendor API — the 2026 trial quota is shared.

- [ ] **Re-read the sportradar coverage arm**
  - Verify: its 9 findings fall. A run that moves the columns without moving the oracle means the check is not grading what this repair writes.

## Verification

- No vendor API request is made; the run is cache-only.
- `role-pid-gsis-disagreement` holds at 0 findings across the backfill, the control the participant-slot lane used throughout.
