Skip to content

v0.5.1

Choose a tag to compare

@abe238 abe238 released this 29 Jul 02:51
· 71 commits to main since this release

Fixes a regression shipped in 0.5.0.

Production returned 618 of 793 roster members rate-limited while GitHub still reported remaining=4983 -- nearly the entire quota intact. Those 403s were the secondary limiter reacting to 32 heavy queries fired back to back, not exhaustion.

The REST path always paced its requests and never hit this. The GraphQL transport in 0.5.0 shipped with no pacing at all, and local runs passed (786/793 ok), so nothing caught it before CI.

  • Pace every batch with the same throttle REST uses. Batching made each request cheaper in points and heavier in server work, so pacing matters more here, not less.
  • Retry 403/429 honouring Retry-After, bounded. A secondary limit is transient; condemning it outright turned a recoverable pause into 618 lost accounts.
  • Never fall through to REST while rate-limited. Writing the test for the retry exposed that once retries were exhausted, the batch dropped to the REST floor and fired 25 more requests at a server that had just asked us to slow down.

The safety machinery behaved correctly throughout: the poll refused to publish a partial cohort, the adapter reported error, the board served cached insider rows, and the validator passed the degraded result rather than a fabricated one. It degraded honestly. It just did so because of this bug.

Preflight green at 60 insiders. 429 tests.