async/sliding_window_rate_limiter_utils library

Sliding-window-log rate limiter — roadmap #685.

Enforces "no more than limit events in any trailing window" exactly, by keeping the timestamps of recent events and counting those still inside the window. This is the precise counterpart to the token-bucket limiter (#670): the bucket smooths to an average rate with O(1) memory and allows bursts up to its capacity; this gives an exact rolling-window count with O(limit) memory and no burst beyond the limit. Time is read through an injectable now closure so behavior is deterministic under test.

The event log is in-memory; a distributed limiter would swap it for shared storage, but that abstraction is intentionally not built here (single process is the common case).

Classes

SlidingWindowRateLimiter
Allows at most limit events per trailing window (a half-open (now - window, now] interval).