SIGN IN SIGN UP

Fix unrostered players outranking real value picks

Found live: Tyreek Hill (no longer on any team) still projected as a
WR34-caliber starter (158 pts) off last year's box score, surfacing as
a huge false "value" pick in best_available's value sort since his real
market ADP had already crashed to reflect his roster status but his
model projection hadn't.

The existing stale-season check (4a20af8) only fires when last_season
lags the board's freshest players, which doesn't catch someone who
played a full slate as recently as anyone else but has since been cut
or retired mid-cycle. apply_current_team now flags off_roster: True for
a player absent from a populated depth chart (every team has filed one,
he's on none of them. project() applies the same 0.4x discount used for
one stale season, and attach_adp's synthetic-ADP fallback treats it as
one stale-season-equivalent too, so a player without real market ADP
gets buried the same way.

Verified: Hill's projection drops 158->63 pts, rank 70->217, VOR flips
positive to -78.7 -- no longer surfaces as a value pick. Top-10 overall
board is byte-identical before/after, so rostered players are untouched.
Full suite (91 tests) passes.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
EOF
)
Z
zacharytran26 committed
1753e385ee169b4b4106161887790a1a9495650e
Parent: 4f62358