• v3.16.0 962ec3193c

    v3.16.0 — Classic Rift item builds
    All checks were successful
    CI / build-and-test (push) Successful in 1m55s
    Stable

    joeyr released this 2026-08-07 23:11:03 -05:00 | 11 commits to main since this release

    Fixed

    • Classic Rift shows item builds again. Deleting the op.gg items scraper in
      3.15.0 took classic's item list with it: every request routed to
      champion-builds.json, which is keyed by live ids and built from queue 420
      only, so a classic lock-in asked for champion 60051, found no key, and
      rendered "No item builds for this champion and role in the latest data."

      The list now comes from champion-items-classic.json, which the sibling
      crawler has been publishing nightly since data v0.9.0 — 88 champion-roles and
      1,132 builds, already laid out in the four sections the panel renders.

    Added

    • A second item artifact, routed on the champion id block. Ranked and
      classic cannot share one file. champion-builds.json is counted from Riot's
      own match timelines and Riot's match-v5 does not cover Classic Rift, so op.gg's
      aggregation is the only measurement that exists for the mode. They cannot share
      champion ids either — op.gg keys classic pages by BASE id, so id 24 exists in
      both naming two different kits, and a classic Jax resolved against the ranked
      file would return ranked Jax's build: correctly shaped, plausibly ranged, and
      confidently wrong. ItemOptionsProvider routes on the 60xxx block and never
      merges the two lists.

      The file may legitimately 404 — the producer's classic pass is opt-in and the
      mode is limited-time — and a miss is an empty panel, since the scraper this
      replaced is gone.

    • Builds op.gg recommends are shown as recommendations, not as zeroes. op.gg
      pads every classic page with editorial item orders carrying no play, win or
      pick figures — 557 of the 1,132 published rows, and a typical champion-role has
      one measured core against two recommended ones. The old scraper dropped every
      row without statistics, which is most of what these pages contain and why the
      panel was close to empty even before it was deleted.

      ItemBuildOption is now a discriminated union on basis, with the stat fields
      absent rather than zeroed on a recommended row. A zero would sort and filter
      alongside real rows and read as "measured, nobody played it" — a stronger claim
      than op.gg is making. The card shows "Recommended by op.gg" where it shows the
      stat line, and the type is what enforces it: nothing can read winRate without
      first narrowing on basis.

    Changed

    • Classic core sequences carry their boots inside the order, unlike ranked
      ones — op.gg publishes them that way — so coreItemIds now accepts up to six
      items and an item may appear in both the Core and Boots strips. The strips
      carry no rates, so nothing is double-counted.
    • Classic item rows carry their names inline and no icons, so the panel renders
      text nameplates there. Adding icons is a producer-side follow-up.
    • Nothing about the write path changed: classic builds remain display-only, with
      the Import buttons hidden in the renderer and the write refused at the IPC
      boundary on the same 60xxx id block.
    Downloads