• v3.9.1 d5aca47349

    v3.9.1 — scouting report: team damage rollup only
    All checks were successful
    CI / build-and-test (push) Successful in 2m18s
    Stable

    joeyr released this 2026-07-28 22:39:20 -05:00 | 30 commits to main since this release

    Changed

    • The scouting report shows the team damage rollup only — the per-champion bar
      is gone.
      3.9.1 reverses 3.9.0 on this point. That release dropped the bars
      from the champ-select board but deliberately kept them on the report, on the
      reasoning that "one player is the point" there. In use that turned out to be
      wrong: a champion's damage split is a property of its kit, so the bar reads the
      same on the card as it does folded into the column rollup above it, and the
      report is the surface where that costs most — it is read mid-game under time
      pressure, and ten repetitions of a fixed number were pushing apart the rows
      that genuinely differ per player (rank, mastery, on-champ form).

      Both surfaces now follow one rule: damage is a team question, answered once per
      column.

      ChampionDamageBar and splitTooltip are deleted rather than left unused —
      neither surface renders per-champion splits now, and the coverage they had
      (thin sample, previous-patch fallback, off-patch aggregate) is asserted on
      profileTooltip, which is what the rollups actually use.

      No mid-game refinement is possible here for now: Riot's Live Client Data API
      exposes no damage figures for any player (scores carries only kills, deaths,
      assists, creep score and ward score), so the rollup stays kit-derived until the
      post-game match data lands.

    Fixed

    • A test that passed on the day it was written and failed every day after.
      stats-provider-artifact.test.ts hardcoded a fixture fetchedAt while leaving
      the provider on the real clock. The provider persists the payload's own
      fetchedAt rather than a write timestamp, so once that literal aged past
      cacheTtlHours the cached entry stopped counting as fresh and a test asserting
      a cache hit began asserting against a genuine cache miss. The clock is now
      pinned to the fixture. Test-only — the provider's lookup order was never wrong.
    Downloads