---
title: Fix weekly kicker projections
type: task
status: completed
description: >-
  Weekly kicker projections put the median startable kicker at 2.8 points against realistic 7-9, so
  /lineups shades every kicker poor; diagnose the source (projection sources, aggregation, or K
  points calculation) and fix it.
base_uri: user:task/league/fix-weekly-kicker-projections.md
created_at: '2026-09-28T22:15:44.154Z'
entity_id: 5dc57101-dfa1-4958-927f-dea51270f6b9
finished_at: '2026-09-29T00:43:15.312Z'
observations:
  - ████████████████████████████████████████████████
  - ████████████████████████████████████████████████
  - ████████████████████████████████████████████████
owner_identity_uri: █████████████████████████
priority: Medium
public_read: true
relations:
  - relates [[█████████████████████████-███████-████-███-█████-███-████████████]]
started_at: '2026-09-28T22:19:42.327Z'
tags:
  - user:tag/league-xo-football.md
updated_at: '2026-09-29T00:43:16.360Z'
visibility_analyzed_at: '2026-11-05T23:49:30.656Z'
---

# Fix Weekly Kicker Projections

## Problem

Weekly kicker (K) projections are far too low for the league platform. In league 1's scoring format the median projected-startable kicker projects 2.8 points (p25 2.4), against realistic kicker scoring of roughly 7-9 points. Every kicker cell on /lineups therefore shades poor against the startable-player reference in `libs-server/get-lineup-context-references.mjs`. The page is correct; the projections are wrong. Found during [[█████████████████████████-███████-████-███-█████-███-████████████]].

## Scope

Diagnose where weekly K projections come from and why they are low, then fix at the source.

## Diagnosis

- No projection source supplies `field_goal_yards`. Sources give the five distance bands, or only `field_goals_made`.
- League 1 scores 0.1 per FG yard with every band at 0, so a projected kicker scored extra points only.
- The registry rewrite of `calculate-points` (league 7a958fdb0) dropped the hardcoded fallback that had scored the bands at 3/3/3/4/5 when yards were absent.
- Season projections run through the same weighting core, so they were affected too.

## Plan

- [x] Derive expected scored FG yards per source line before averaging — `libs-shared/complete-kicking-projection.mjs`, wired into `libs-shared/weight-projections.mjs` (league 8d6d88729).
- [x] Score projected kicking and DST in the data-view projected-points SQL from the format rather than hardcoded weights, pinned by an executed parity spec against `calculatePoints` (league 87f82084f).
- [x] Fix the production break the first fix caused: the averaged `field_goal_yards` was fractional and the integer column rejected it, failing `process-projections` at 23:30Z. The consensus now rounds to whole yards, and a storage spec reproduces the error without it (league 300bb9dcf).
- [x] Deployed: 3e9e54b93, then 70d205694, then a two-file host patch at 00:15Z, then the full deploy at f5d2ec94e (2026-09-29 00:42Z).
- [x] Verified: the 00:31Z `process-projections` run succeeded, and in league 1's format (`genesis`) the median top-10 kicker projects 9.40 for weeks 4-6 (was 2.8).

## Done When

- The median projected-startable kicker's weekly projection lands in a realistic range for league 1's format, and /lineups kicker cells shade sensibly.
