• v0.6.0 c154a17ced

    v0.6.0
    All checks were successful
    CI / gate (push) Successful in 35s
    CI / image (push) Successful in 25s
    Stable

    joeyr released this 2026-07-30 21:35:39 -05:00 | 242 commits to main since this release

    Added

    • Classic Rift is crawled as its own pass, publishing
      champion-counters-classic.json.
      op.gg serves the mode under
      type=classic, and the pass reuses everything except that parameter and the
      output paths — same region, tier, coverage floors, pacing and time budgets —
      so the classic file describes the same population as its ranked counterpart.

      It is a separate file rather than extra rows, and that is forced. op.gg
      keys classic pages by BASE champion id: champion_id: 24 is Jax in both
      queues, measured on two different kits. Merged into one map they would collide
      on the key and one would silently win.

      Classic is the cheaper half by a wide margin — 81 (champion, role) pairs
      against ranked's ~272 — so it runs second, where a short budget costs the
      ranked artifacts nothing. Its outcomes get their own publish streaks, because
      its file goes stale independently of theirs.

    • A classic rune extractor (opgg/classic-runes-page.ts), not yet wired to
      an artifact. Classic Rift restores the pre-2017 rune system, which is a
      different data model rather than a variant: no paths, no keystone, no shards,
      just a flat multiset of Marks, Seals, Glyphs and Quintessences held in
      quantities. op.gg serves it from the same runes page under classic_runes,
      with 775xxx ids and a win COUNT rather than a rate, normalised to a percent
      on the way out to match the other artifacts. Verified against live pages.

    Fixed

    • buildTierListUrl omitted type, which would have made the classic crawl
      describe ranked champions.
      The tier lists are the index both op.gg crawls
      run off, and op.gg defaults the parameter to ranked when it is absent — so
      the ranked pass was correct by luck. A classic pass would have discovered the
      RANKED universe and then gone looking for those champions on classic pages,
      producing a classic-labelled artifact full of the wrong roster. That is a
      wrong file rather than an empty one, which is the failure this codebase is
      built to avoid. Found before the classic pass ever ran.

    Notes

    Two things op.gg does not publish for this mode, established by sampling every
    role: masteries (legacy_masteries is an empty array on every page) and
    synergies (play: 0, and the page itself says the sample is too small).
    Neither is crawlable, and neither is a gap on this side.

    Classic data is also not segmented by rank: the tier parameter is accepted
    and discarded, with iron_plus, challenger and a deliberately invalid value
    all returning byte-identical rows. The published file therefore describes all
    ranks, and a later release should stop labelling it gold_plus.

    Downloads