-
v4.8.0 — serve last patch's artifacts instead of blanking the board
StableAll checks were successfulCI / build-and-test (push) Successful in 1m36sreleased this
2026-09-10 20:28:34 -05:00 | 8 commits to main since this releaseFixed
-
The board no longer goes blank on patch-drop day. On 16.18 the whole
Summoner's Rift half of the app was empty at once: no defensive-ban
recommendations, no tier badges, no lane auto-assignment on enemy picks, and
neither Rune nor Item Import. The cause was one rule applied in five places --
every consumer compared the artifact's patch to the live patch with!==and
discarded the file whole on any mismatch.The crawler needs a night of games on a new patch before it can publish for
it, so patch-drop day is always off-patch. That rule was written while the
op.gg scrapers still sat behind it, and refusing an off-patch artifact meant
"fall through to a source that has already rolled over". The scrapers are
gone. The fall-through now lands on nothing, so a strict reject stopped
meaning "prefer the fresher source" and started meaning "show a blank board" --
for as long as the crawler stayed behind, which a failed nightly window
extends by another day.An artifact is now servable when it is the current patch, or the
immediately preceding one published within seven days. Both gates matter and
they guard different failures: the patch step bounds how far the meta can have
moved --champion-counters,-synergies,-benchmarksand-builds
already pool the current patch with its predecessor when they are built, so
serving the predecessor's file is serving data the next file would have
included anyway -- while the age cap bounds how long a dead crawler can go
unnoticed. Patch adjacency alone would serve 16.17 against 16.18 forever; a
crawler that died in October would still look like a working app in January.
Past the cap the board goes honestly empty, which is the signal that something
upstream needs fixing.Standing in is never silent. The counters adapter now stamps the assembled
ChampionStatswith the artifact's patch rather than the requested one,
which is what letsStatsProvidertell a stand-in from a current file and
returncached-fallback(reasonoff-patch) instead offresh. That maps
onto the renderer's existing'stale'freshness, so every affected
recommendation carries the warning icon it already had for cached stats. The
tier list reports'stale'for a complete roster read out of last patch's
file, kept distinct from'partial'-- partial means rows are missing and the
board will have gaps, stale means every row is there and describes last patch.Measured against the real 16.17 cache on a 16.18 client: counters for Evelynn
jungle go from a permanent miss to 52 matchups, the tier list from 0 rows to
274 across all five roles, and Rune and Item Import from nothing to 4 pages
and 4 builds.Synergies were unaffected throughout -- that provider already indexed whatever
it fetched -- which is why Pool Strength kept working while everything beside
it was blank.
Notes
- The
data/artifacts this reads are published bylol-companion-data. A
blank board past the seven-day cap means that crawler has stopped publishing,
not that this app is broken.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-