• v0.19.0 8ebf39aa17

    0.19.0
    All checks were successful
    CI / gate (push) Successful in 41s
    CI / image (push) Successful in 15s
    Stable

    joeyr released this 2026-08-04 16:30:32 -05:00 | 186 commits to main since this release

    Added

    • data/champion-synergies.json — a new published artifact, and a new URL.
      How a champion's record at one role varies with who they were on a team with,
      modelled on op.gg's /lol/champions/<champion>/synergies/<role> page.

      It is the counters self-join with the predicate inverted: a different role on
      the same side of the win partition is an ally. Every participant has four
      of them, so the same crawl yields 40 rows per match here against counters' 10.
      No additional Riot requests, no op.gg pages, no new column.

      Nothing consumes this yet, and nothing has to. A new URL nobody fetches
      strands nobody, so it publishes now and lol-companion can mirror the schema on
      its own schedule. The usual mirror-first ordering binds from the moment a
      consumer ships.

      Two things a reader must get right:

      • Entry totals are not the sum over allies. Each game contributes four
        ally rows, so the sum is four times the champion-role's real record. The
        entry's games/wins/winRate are measured separately and are the
        champion-role's actual record — genuinely useful in their own right, and
        not the truncated-sum convention CounterEntrySchema documents.
      • Every symmetric pair is stored twice. (Evelynn JUNGLE, Lux UTILITY) and
        (Lux UTILITY, Evelynn JUNGLE) carry identical numbers by construction. The
        duplication matches how the file is read at champ select; halving it under a
        canonical ordering is a lever held in reserve.

      Size, measured at ~93 bytes per cell under the compact printer: ~3 MB at
      half occupancy, ~5.3 MB saturated
      , over a cell space of ~274 champion-roles
      x ~220 reachable ally champion-roles. Larger than the plan's 2 MB guess, and
      shipped as designed anyway — the same call, and the same standing compaction
      lever, as champion-runes.json going 532 KB → 2.56 MB across a patch.

    • SYNERGIES_ENABLED (default on), SYNERGIES_PATH, SYNERGIES_OUT, and a
      synergies row in publish_state so it gets the same staleness alarm as
      every other artifact. No coverage floor and no wall-clock budget: like the
      ranked rune and counters builds this is a database query, not a page crawl.

    Notes

    • No consumer change is required. lol-companion does not fetch this URL and
      is unaffected until it opts in.
    • The file grows across a patch as cells fill, in the same way runes does. Set
      SYNERGIES_ENABLED=false if the size becomes a problem before the dedup lever
      is taken.
    Downloads