You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A narrowed game_log or player_stat question over a season whose box
scores ESPN served empty no longer says the games do not exist. Both read _no_narrowed_games when their guard leaves nothing, and it used to check
only for a recorded (or rebuilt) box score - so a stat outside REBUILT_STATS (turnovers, fouls, 3PM, plusMinus) sent the read back to
the fetched lines, which are empty for every 2013-2018 Chicago or New
Orleans game, and the answer became "No 2015 regular season games found for
Anthony Davis" of a man who played 68. It now checks whether the games exist
with an empty box score before saying they do not exist at all - "Anthony
Davis played 68 games in the 2015 regular season, but the box score is empty
for all of them" - the mirror-image bug AGENTS.md describes, in single_game_high's own shape.
player_stat narrowed by opponent, venue or without now reads a line
rebuilt from play-by-play in place of an empty ESPN box score, for a stat the
rebuild gets right. It never did before, even for points - the one stat
measured most accurate - so "Anthony Davis points vs the Lakers in 2015"
answered the same wrong-cause refusal as a stat the rebuild does not trust. game_log already read rebuilt lines for its own narrowed span; this brings player_stat in line with it. A shooting percentage still never widens to a
rebuilt line - its attempts are outside what the rebuild was measured for.
A power-index answer whose snapshot carries no rating now says so, rather
than dropping the line. The power index is that answer's headline, so the old
behavior left a reader with a record, a projection and chances and no sign
that the number they asked for was missing. ESPN's 2026 regular-season
snapshot is the live case - all 30 teams NULL in bpi, bpioffense and bpidefense while their records and projections are populated, and the only
one of the table's 21 season/season-type groups with any NULL rating - and it
is the snapshot a 2026 regular-season question now reads.
A regular-season BPI question now reads the regular-season power-index
snapshot outright, instead of whichever pre-playoff snapshot ESPN stamped
last. Once the paging fix gave every snapshot all 30 teams, the play-in
snapshot (season type 5) started postdating the regular-season one in 2023,
2025 and 2026, so the same question named a different snapshot depending on
the season - "how good were the Knicks in the 2026 regular season" answered
from the play-in view. team_outlook (query/templates/teams.py) now finds
the season_type == 2 snapshot directly and only falls back to the latest
other pre-playoff snapshot, then the postseason one, where no
regular-season snapshot holds the team - true of no season the warehouse
holds today (2017-2026), measured read-only. See ISSUES.md, "A
regular-season BPI question answers from the play-in snapshot in 2023, 2025
and 2026" (#88).
ESPNClient.get_collection now warns when the first page of a collection
cannot be read at all, instead of quietly returning []. _request_json
returns None for a 400 or 404, which used to hit if not isinstance(data, dict): break with expected still None, so the
existing declared-vs-fetched warning had no count to compare against and
never fired - an endpoint that started rejecting limit=1000 with a 400
would have reproduced the original 25-row power-index bug with nothing in
the log. A 200 whose body is not the paged-collection shape (no items
list) is the same failure and now warns the same way. A later page failing
is unaffected: page one's count is already on record by then, so the
declared-vs-fetched warning already covers it, and a genuinely empty
collection (count: 0, one page, no items) still logs nothing.
The web page's games count no longer counts rows that are not games. games carries 151 of its 43,504 rows that were never played - placeholders,
team-slots naming an id no franchise has, phantoms and a duplicate - so the
health line said 43,504 where 43,353 were played. It reads real_games now,
falling back to games for a warehouse loaded before that view existed,
which is the same check conditions.box_source makes for the filled box.