---
title: Signal that a future as-of anchor renders a blank column
type: task
status: completed
description: >-
  A KeepTradeCut column whose as_of_month_day anchor has not been reached renders blank for every
  player, because the 30-day recency floor window holds no observations yet. The value is correct
  and the blank is honest, but nothing tells the reader why the column is empty or when it will
  fill.
base_uri: user:task/league/data-views/surface-clamped-as-of-boundary.md
created_at: '2026-08-16T04:37:21.134Z'
entity_id: 27e6718b-c1a3-405a-9525-edf35c99f5e3
finished_at: '2026-08-20T02:15:07.111Z'
observations:
  - ████████████████████████████████████████████████
  - ████████████████████████████████████████████████
  - ████████████████████████████████████████████████
owner_identity_uri: █████████████████████████
priority: Medium
public_read: true
relations:
  - relates [[█████████████████████-█████████-████████████-██-██-█████-███-████████]]
tags:
  - user:tag/league-xo-football.md
updated_at: '2026-08-20T02:26:12.527Z'
visibility_analyzed_at: '2026-11-05T23:49:02.718Z'
---

## Overview

A KeepTradeCut column whose `as_of_month_day` anchor has not been reached yet renders **blank for every player**. The blank is correct — the window genuinely holds no observations — but nothing on the page says so, and the chip still reads as a normal configured date.

## What changed on 2026-08-16

This task was originally filed as "surface when a boundary was CLAMPED to now", on the premise that the outer `LEAST(..., now())` future clamp was correct and only its silence was the problem. **That premise was wrong and the clamp is gone** (league `9c20114c7`).

The clamp made an explicitly requested day inert: production view `/u/f8d929780fc3378dd7e69978153bf03c` (and `/u/0cd97b46fa4aaf78b49d9d9dd31a03f9`, the same table_state) carried `09-10` and `12-31` on year 2026 and rendered byte-identical values in **all 500 rows**. The reasoning for removing it is in the emitter comment and in the commit: opening day is a boundary the SYSTEM picks, so falling back to today is a kindness there; `as_of_month_day` is one the reader named, so substituting a different day answers a different question and makes the column drift daily while presenting as fixed.

Post-fix, that view reads 473 of 500 rows differing, `09-10` populated for 473 and `12-31` populated for 0.

## The remaining gap

A future anchor is blank until real observations enter its 30-day window — roughly 30 days before the date. That is a rule, not an edge case:

| anchor | window | observations (measured 2026-08-16) |
| --- | --- | --- |
| `09-10` | 2026-08-11 → 2026-09-10 | 2,012 across 509 players |
| `12-31` | 2026-12-01 → 2026-12-31 | 0 |

So `12-31` is not broken — it starts filling around 2026-12-01, assuming the daily scrape keeps running. `09-10` only began populating on 2026-08-12, four days before it was looked at.

Nothing communicates any of this. A reader sees an empty column and cannot tell it apart from a coverage gap, a bad param, or a broken join.

## Why the floor, not the as-of rule, causes it

Worth stating so nobody "fixes" this by removing the floor. Plain as-of ("latest observation at or before 2026-12-31") matches 1,181,337 observations and would populate — with the 2026-08-15 value. The 30-day floor is what empties it, and it exists to stop a delisted player's final rank being carried forward forever (the recorded case: Tom Brady rendering QB23 for 2025, last actually ranked 2021-12-21).

Three possible semantics, and the middle one is what ships:

1. today's value — the removed clamp; untruthful and non-deterministic
2. **blank** — current; the same blank any empty window produces
3. the stale value with no floor — resurrects the delisted-player bug

## Candidate approaches

- Signal in the control: when the chosen day is ahead of the latest observation for every year in scope, say so at configure time rather than after the query returns.
- Signal in the cell: distinguish "window not yet open" from an ordinary blank, in the same family as the deferred `participation_status` ambiguity noted on [[█████████████████████-█████████-████████████-██-██-█████-███-████████]].
- Do nothing, and accept that a future anchor reads blank until its window opens.

Not started; no approach chosen.

## Coverage that already exists

`test/data-view-queries/keeptradecut-as-of-month-day-anchor-result-equivalence.json` pins the no-clamp semantics (its `_1` column at `year_offset` 30 must read NULL, and goes red if the clamp is restored). `keeptradecut-as-of-month-day-two-days-diverge-result-equivalence.json` pins that two anchors on one row resolve different observations. Anything done here must leave both green.
