• v1.13.5 ba5b945b71

    v1.13.5 — name which side a 429 came from
    All checks were successful
    CI / build-and-test (push) Successful in 1m55s
    CI / docker-build (push) Successful in 23s
    Stable

    joeyr released this 2026-08-26 10:47:02 -05:00 | 62 commits to main since this release

    Changed

    • A 429 now names which side refused it. An idle poll rotation was logging a
      steady drip of Riot API rate limited, retrying in 12s warnings with nobody in
      a game — which reads as our own pacing misbehaving, when the header on every
      one of them said otherwise. Riot's X-Rate-Limit-Type distinguishes our key's
      quota (application / method — actionable, pace down) from Riot's own
      backend shedding load (service, and server is observed in the wild), which
      no pacing on our side prevents: spectator-v5 refuses the question before it can
      answer "not in a game", so an idle rotation draws as many of these as a busy
      one.

      Each 429 line now carries a blame field (ours / riot / unknown) and
      says the same in prose, so the two incidents wearing one status code are
      tellable apart at a glance instead of by reconstructing the raw header. A 429
      Riot omits the header from is unknown, never riot — quietly blaming Riot
      for what might be our own quota is the misread the field exists to prevent.

      Riot-side retries that succeed dropped to debug: the wait is the whole cost,
      and the drip was burying real warnings. The lines that mean a poll actually
      lost its answer — the too-long-to-wait skip and exhausted retries — stay at
      warn regardless of blame.

    Downloads