---
title: Populate league_format_draft_pick_value to unblock composite ADP/rankings calibration
type: task
status: completed
description: >-
  Completed task populating league_format_draft_pick_value for every mapped league format, the
  binding prerequisite for composite ADP and rankings calibration.
base_uri: user:task/league/populate-league-format-draft-pick-value.md
created_at: '2026-05-21T14:33:22.694Z'
entity_id: 68f25441-ddcc-49b4-9fdd-9a4089d1ea2d
finished_at: '2026-05-21T18:11:52.204Z'
observations:
  - ████████████████████████████████████████████████
  - ████████████████████████████████████████████████
  - ████████████████████████████████████████████████
  - ████████████████████████████████████████████████
  - ████████████████████████████████████████████████
owner_identity_uri: █████████████████████████
priority: High
public_read: true
relations:
  - unblocks [[████████████████████-█████████-██████-█████-████████]]
  - >-
    unblocks
    [[user:task/league/extend-fantasypros-importer-to-cover-half-ppr-and-standard-dynasty.md]]
  - unblocks [[███████████████████████-████-█████████-███-██████-████-██████████]]
  - relates [[███████████████████████-█████-█████████-████████]]
tags:
  - user:tag/league-xo-football.md
  - user:tag/home-dynasty-league.md
updated_at: '2026-10-26T05:00:33.062Z'
visibility_analyzed_at: '2026-11-05T23:49:49.451Z'
---

## Background

`league_format_draft_pick_value` has zero rows for every `league_format_hash` referenced by `format_category_signal_mapping` (verified 2026-05-21 across fc 1..6). This table is the format-aware pick-value curve consumed by `libs-server/composite-market-value/extract-adp-per-asset.mjs` (and the rankings extractor) as the empirical rank -> pts-added-per-game pre-transform. When the curve is empty, both extractors return an empty Map for every (pid, date_iso) tuple, calibration's overlap_sample_size is 0, and the daily composite collapses to KTC-only.

Diagnostic chain (2026-05-21):

- `composite_market_value_calibration` for sources 2 (ADP) and 3 (rankings) shows avg_overlap_sample_size=0.0 across all 6 fcs and the entire 2020-04-01 -> 2026-05-21 backfill window.
- `player_adp_history` HALF_PPR_SUPERFLEX_DYNASTY (fc=5) contains 553,956 rows spanning 2024-08-28 -> 2025-08-31. The raw data exists.
- `player_rankings_history` PPR_REDRAFT has 146,330 rows spanning 2020-01 -> 2026-01. The raw data exists.
- The empty curve is the binding constraint: `extract_adp_per_asset.mjs:42` only sets `result.set(key, v)` when `v != null`, and `pv_curve.get(median_rank)` returns null for every rank when the curve has no rows.

## Scope

- [ ] Identify the upstream pipeline that should populate `league_format_draft_pick_value`. Likely candidates: a one-shot script consuming `league_format_player_seasonlogs`/`league_format_player_careerlogs` and `player_adp_history` to compute rank -> median_best_season_points_added_per_game per league_format_hash. If no such script exists, author one.
- [ ] Populate the table for every league_format_hash listed in `format_category_signal_mapping` (currently 6 hashes covering fc 1..6).
- [ ] Verify post-population: re-run `calibrate-composite-market-value-sources.mjs --all-history --rebuild` for fc=5; expect `overlap_sample_size > 30` for source=2 (ADP) starting from 2024-09 (the first date where ADP raw data covers a 30-day window), with non-trivial r_squared and `fallback_reason = NULL`.
- [ ] Re-run `generate-composite-market-value.mjs --all-history --rebuild`; expect `composite_coverage_score` for fc=5 to exceed 0.470 (KTC-only weight) during in-season windows.

## Notes

- This task is the binding prerequisite for the three triage-bumped composite improvement tasks. Without the pv_curve, `extend-fantasypros-importer-to-cover-half-ppr-and-standard-dynasty.md` and `extend-prop-importers-for-season-long-markets.md` cannot improve calibration even if they ship.
- Props (source=4) calibration uses a different path (`extract-props-per-asset.mjs`) that does NOT depend on `load_pick_value_curve`; its 6.3 avg overlap and 0.01-0.10 r² floor is an unrelated symptom (props extraction itself yields very sparse overlap with KTC).
- Capture pv_curve construction methodology as a `[design-decision]` on this task before shipping; it's a load-bearing piece of the composite system.

## References

- `libs-server/composite-market-value/utils.mjs:13-24` (`load_pick_value_curve`)
- `libs-server/composite-market-value/extract-adp-per-asset.mjs:37-43`
- `███████████████████████████████████████████████` observation `[bug-confirmed]` from 2026-05-21
