---
title: Add Draft Picks to Team Value
type: task
status: completed
description: >-
  Wire draft picks into the per-team daily KTC value calculation so Article XXII deposit shares
  price pick-rich rebuilding teams correctly instead of underpricing them.
base_uri: user:task/league/add-draft-picks-to-team-value.md
created_at: '2026-08-14T23:23:44.732Z'
entity_id: 58688262-6e33-42d7-b50e-378fb2679b2c
finished_at: '2026-08-15T01:29:03.035Z'
observations:
  - ████████████████████████████████████████████████
  - ████████████████████████████████████████████████
  - ████████████████████████████████████████████████
  - ████████████████████████████████████████████████
  - ████████████████████████████████████████████████
owner_identity_uri: █████████████████████████
public_read: true
relations:
  - relates [[user:orchestrator/manager-recruiting-2026/manager-recruiting-2026.md]]
started_at: '2026-08-15T01:09:34.970Z'
tags:
  - user:tag/league-xo-football.md
updated_at: '2026-09-12T17:42:07.933Z'
visibility_analyzed_at: '2026-11-05T23:48:10.953Z'
---

# Add Draft Picks to Team Value

## Overview

Include draft picks in the per-team value calculation so Article XXII deposits price rebuilding teams correctly.

## Background

`scripts/calculate-team-daily-ktc-value.mjs` recorded only the value of a team's players, so a rebuilding team holding three first-rounders read as poor. That series is about to become the Article XXII deposit divisor, which would have underpriced every pick-rich roster's entry.

`libs-server/composite-market-value/ktc-pick-value-at.mjs` is a complete point-in-time pick valuer, tested, defaulting an unassigned future pick to the mid slot — which matters because all 60 of league 1's 2027 and 2028 open pick holdings have a null overall position.

## Plan

- [x] Source pick ownership from `roster_asset_holding` rather than the transaction replay. The plan originally called for iterating `team.picks`; that index was populated only by trade legs, so it held every pick a team ever acquired and none it was endowed with, and nothing removed a pick on draft conversion or expiry. It is removed. The lineage walker already resolves all four events and its open pick holdings are the same 121 the `draft` table reports.
- [x] Price rounds 5 and beyond at zero. `keeptradecut_pick` constrains round to 1-4, so those picks carry no series at all; 25 of league 1's open holdings are in that group.
- [x] Add `pick_value`, `total_value` and `total_share` to `league_team_daily_values`. `ktc_value` and `ktc_share` keep their player-only meaning, which the SPA's team-value chart reads; `total_share` is the deposit divisor.
- [x] Read league size off the `seasons` row for the pick's own year. League 1 ran 12 teams through 2022 and 10 since.
- [x] Backfill all 1143 days of league 1 and verify shares.
- [x] Confirm the roster set matches the constitution's "all team players" — the script applies no slot filter, so bench, practice squad and reserve are all included.

## Outcome

Shipped in league `4278f08af`, backfilled, and live on both hosts. Picks are 17.5 percent of league 1's total value today, moving a team's deposit share by up to 1.14 points and reordering two teams. `test/scripts.calculate-team-daily-ktc-value-picks.spec.mjs` covers the path and was proven red under two mutations.

The deploy needed no `yarn deploy` of its own — a sibling's push carried the commit to both hosts, and the change adds no dependency and touches no pm2-resident code, since the script runs from cron. Confirmed by executing the deployed script on the league host: 804 lineage pick holdings, a pick held on all 1141 days, 12,474 rows written, exit 0.

Two pre-existing defects surfaced during verification and are left for [[█████████████████████████-████-█████████-█████████]] — both affect `ktc_share` identically, so neither was introduced here. They are recorded as `[finding]` observations.

## Notes

Switching the basis from raw KTC to composite market value is a separate, larger piece and was not in scope. Shipped on raw KTC.
