---
title: Extend the distributional draw pass beyond week 0
type: task
status: completed
description: >-
  Measured 2026-08-05 and closed without implementing: the weekly draw pass costs 49 min per run
  against an hourly cron, and the dispersion constants it depends on are season-grain and
  inadmissible at weekly grain. The board does move substantially, but the weekly grain feeds
  display and rest-of-season aggregates rather than league rules, so no follow-up was minted.
base_uri: user:task/league/extend-distributional-draw-pass-beyond-week-zero.md
created_at: '2026-08-05T00:01:17.703Z'
entity_id: 2049b7a5-d97f-4c57-b74e-448c3576bb41
finished_at: '2026-08-05T02:10:20.260Z'
observations:
  - ████████████████████████████████████████████████
  - ████████████████████████████████████████████████
  - ████████████████████████████████████████████████
  - ████████████████████████████████████████████████
  - ████████████████████████████████████████████████
  - ████████████████████████████████████████████████
owner_identity_uri: █████████████████████████
priority: Low
public_read: true
relations:
  - relates [[user:task/league/surface-projected-points-added-net.md]]
  - relates [[████████████████████████████████-█████-████████████]]
  - relates [[███████████████████████-█████-█████████-████████]]
  - relates [[████████████████████-█████-███████████-████████-██████-████████]]
tags:
  - user:tag/league-xo-football.md
updated_at: '2026-10-26T05:00:23.894Z'
visibility_analyzed_at: '2026-11-06T00:17:51.615Z'
---

# Extend the distributional draw pass beyond week 0

## Problem

`libs-shared/calculate-distributional-baselines.mjs` runs the draw-based replacement-level and surplus estimate for the SEASON grain only (week 0). Every weekly board — and therefore both rest-of-season aggregates, which are sums over weekly values — uses the point-estimate path in `calculate-baselines.mjs` instead.

That asymmetry is a measured cost decision, not an oversight: one 1000-draw pass over the real 2026 board costs about 9 seconds, and applying it to every week across 23 league formats would be roughly 70 minutes per run against an hourly cron.

It is worth revisiting because the point-estimate path is convexity-blind in the same way the season path was before it was rebuilt. `E[max(X - b, 0)]` exceeds `max(E[X] - b, 0)`, so every weekly positive value is understated by the same amount the season board was understating before 2026. Neither rest-of-season variant benefits from the draw pass today.

## Scope

Establish whether a weekly draw pass is affordable and whether it changes the board enough to matter, then implement it if both answers hold.

Out of scope: any change to the season path, and any change to which variant `market_salary` derives from.

## Ordering

Not blocked by anything. It follows [[user:task/league/surface-projected-points-added-net.md]] only in the sense that the net variant made the weekly grain's honesty more visible.

## Outcome — measured 2026-08-05, not implemented

Full write-up and scripts: `scratch/league/dynasty-value/weekly-draw-pass-findings.md`.

- **Cost does not hold.** 49 min added per run across the 22 live league formats against an hourly cron, versus 3.4 min for the season-only pass today. The ~70-minute estimate was the right order of magnitude and slightly pessimistic. Weekly grain costs ~14x the season-only pass, which is the machine-independent form of the claim.
- **The board does move**, structurally and in the predicted direction: priced population 84 → 376 of 623, top-24 share 61.5% → 39.8%, QB share 23.2% → 44.0% even on the like-for-like signed swap whose within-position Spearman is 0.99.
- **A third gate the plan did not anticipate blocks it on its own.** The draw pass draws from `calculate-projection-dispersion.mjs`, whose constants are measured at SEASON grain. Against realized weekly outcomes they under-predict weekly dispersion in 6/6 seasons at every position, monotonically in the projection — top-quartile realized/predicted of 1.30 (QB), 1.46 (RB), 1.77 (WR), 1.97 (TE). That is a position-dependent shape error, so no rescale absorbs it, and shipping it would put an unmeasured parameter into the weekly and `ros` `market_salary` columns.

**The stakes are lower than this task's Problem section assumed: the weekly board does not feed league rules.** `scripts/generate-tag-board.mjs:114` reads `week: '0'` — the season board, which already runs the draw pass — so the franchise, rookie and restricted free agency screens would not be repriced by any change here. What the weekly grain does feed is `ros` / `ros_net`, the weekly display values, and the data-view columns over them. The pre-deploy gate was never reached in any case, because nothing was implemented and there is no board to show.

**Not being carried forward, and no follow-up was minted.** The prerequisite (re-fit dispersion at weekly grain) is a measurement project standing in front of a display improvement, and no consumer needs it today. The finding that would otherwise be lost is wired rather than parked: [[████████████████████████████████-█████-████████████]] carries it and surfaces on `calculate-projection-dispersion.mjs` and on `task/league/*points-added*.md`, which matches [[████████████████████-█████-███████████-████████-██████-████████]] — the one task that would need weekly draws. That task reopening is the right trigger, not a follow-up sitting open.

**If it does reopen:** settle what the weekly board is FOR first. The convexity premium is the value of the option to bench, which is arguably the wrong quantity for a start/sit signal and the right one for `ros`. Then re-fit dispersion at weekly grain, then revisit cost — the draw count has never been swept for weekly grain and the pass parallelizes across formats and weeks.

## Plan

- [x] **Measure the cost honestly at the real board size**
  - Description: time a draw pass at weekly grain across the live format population, not a synthetic board.
  - Purpose: the 70-minute figure is derived from the season-grain timing and may not hold.
  - Verify: a wall-clock number per format per week against the production board, with the draw count stated.

- [x] **Measure whether the weekly board actually moves**
  - Description: compare point-estimate against draw-based weekly values on one season, reporting positional shares, concentration and priced population per ███████████████████████████████████████████████████.
  - Purpose: a within-position rank correlation is not evidence about a board-level change.
  - Verify: the report names the allocation that changed, not just the correlation.

- [x] **Implement only if both hold, behind the valuation gate** — resolved NOT to implement; see Outcome above.
  - Description: extend the draw pass to weekly grain in `calculate-projection-values.mjs`.
  - Purpose: this repriced `market_salary`, so the full pre-deploy gate applies. (Overstated — see Outcome: league rules read week 0, not the weekly grain.)
  - Verify: backtest across every available season on the point-in-time board, board shown to the operator, three goal questions addressed.
