• v4.8.1 e4f7956ac2

    v4.8.1
    Some checks failed
    CI / build-and-test (push) Failing after 54s
    Stable

    joeyr released this 2026-09-30 14:37:21 -05:00 | 7 commits to main since this release

    Fixed

    • Last patch's data now stands in when the fetch fails too. 4.8.0 loosened
      the patch rule in the consumers but left the old strict check in the artifact
      provider's fetch-failure fallback, so with no API key, the API down, or a
      timeout, a one-patch-old copy on disk was still thrown away before any
      consumer saw it. Item Import was blank for the whole session on that path,
      because builds and classic items refresh only once the patch is known. The
      fallback now applies the same stand-in rule (patch-fallback.ts): current
      patch, or the previous one published within seven days.
    • The seven-day cap now holds for defensive bans. The stats cache stores a
      stood-in answer under the live patch, and its own fallback served any such
      entry once the adapter refused the aged file — so every champion looked up
      during the window kept last patch's matchups, labelled as a source outage,
      while the tier badges beside them went empty. The fallback now re-applies the
      stand-in rule and labels a stand-in off-patch. A stood-in entry is also no
      longer a fresh cache hit, so the current file replaces it as soon as it lands.
    • Standing in is visible everywhere, not only on defensive bans. Rune and
      Item Import showed last patch's pages and builds exactly like current ones,
      and the tier list's 'stale' was sent to the renderer and dropped. Both
      sections now say when they are showing last patch's data (Import still works),
      and the board says when its tier badges are last patch's. A last-patch roster
      missing a role now reports 'stale' rather than 'partial', which the board
      does not surface.
    • A stand-in rune page or item build is no longer pinned for the session.
      Both option caches kept the first answer per champion and role for the life of
      the process, so a page read from last patch's file survived the current file
      landing and the age cap passing. Only current-patch answers are cached now.
      Builds and classic items also refresh on every LCU connect, like runes; before,
      they were fetched once per process.
    • Pool Strength is held to the same rule. The synergies file was indexed
      whatever its patch or age. It is now dropped once the stand-in rule refuses it,
      so a dead crawler empties the section instead of ranking on old win rates.
    • No more rewriting the stats cache on every lookup. A stood-in or thin entry
      is not fresh, so each lookup reached the adapter and rewrote the whole cache
      file with identical bytes — up to a few seconds of main-process work per champ
      select. An answer the cache already holds is no longer written.

    Changed

    • Comments, the repo CLAUDE.md artifact table, and property test 5 now
      describe the stand-in rule rather than the refuse-off-patch rule it replaced.
    Downloads