---
title: Make the league-format projection recompute write history unconditionally
type: task
status: planned
description: >-
  Five (league_format_id, season) blocks of league-format projection values exist in the index with
  no history rows at all, across five seasons and three formats — so the recompute path has skipped
  its history append repeatedly rather than once.
base_uri: user:task/league/write-league-format-projection-history-unconditionally.md
created_at: '2026-09-03T01:08:08.716Z'
entity_id: 5084e689-645d-48f6-bc96-6662fb01b21f
owner_identity_uri: █████████████████████████
priority: Medium
public_read: true
relations:
  - succeeds [[████████████████████████████-██████████-█████-███████████]]
tags:
  - user:tag/league-xo-football.md
  - user:tag/software-task.md
updated_at: '2026-10-03T03:09:38.525Z'
visibility_analyzed_at: '2026-11-05T23:50:39.941Z'
---

# Make the league-format projection recompute write history unconditionally

## What this owns

The four baselined `population-index-rebuild-parity` entries on `league_format_player_projection_values` and `league_format_player_rest_of_season_projection_values`.

## The measurement (2026-09-03, production)

Five complete `(league_format_id, season_year)` blocks with zero history rows, each covering every week and every pid:

| league_format_id | seasons | rows |
| --- | --- | --- |
| 07db3422-c456-4402-9468-273a5d122514 | 2021, 2022, 2025 | 45,485 |
| f663e70c-8232-4881-8af6-8ca38379c068 | 2023 | 12,223 |
| 776e3d91-122c-4204-b15e-3f48ddf346f8 | 2026 | 11,556 |

Plus 642 rows for 776e3d91 in 2026 on the rest-of-season feed. All three are long-tail auction superflex formats carrying generated uuids rather than catalog slugs.

**The recurrence is the valuable half.** Five blocks across five seasons and three formats is a write path that skips history routinely, not an incident.

Re-measure before acting on any figure here: this feed is under active write, and its index total moved 409,869 to 407,889 within minutes on 2026-09-02.

## Plan

- [ ] Find the recompute path and establish the condition under which it appends history — the blocks are format-scoped and season-scoped, so the skip is probably a branch that runs for catalog formats and not for the generated-id long tail, or one that runs on a value change and not on a first write.
- [ ] Make the history append unconditional, with a test that fails on the old branch.
- [ ] Decide the past blocks separately. The values are derived and recomputable in principle, but the observation instant would be synthetic, so backfilling history is fabricating a measurement. Adjudicating the five blocks with that reasoning may be the honest end state rather than a repair.
