Skip to content
- cache: `CleanupInterval <= 0` disables `ExpireLoop` ticker (no panic); `Set` with `expiration <= 0` stores entries without TTL; add `HasLive`
- rabbitmq: `DialConfig` uses ctx deadline for dial timeout; late dial closed after ctx cancel; `Close` nil-safe (channel before connection); `IsClosed`
- retries: fix `rand.Int63n(0)` panic on zero rate-limit interval; export `ErrRateLimitExceeded`; rate-limit waits do not consume `MaxAttempts` by default (`WithRateLimitWaitsCountAsAttempts(true)` restores prior behavior)
- ratelimiting: `NewRateLimiterValidated`, `NewSlidingWindowValidated`, `Allow` on fixed window
- deps: `RedisContext`, `PostgresContext`, `RabbitMQContext`; optional `PingTimeout` on Redis/Postgres configs
- circuit: fix `Execute` TOCTOU (trip under lock); single debounced `AutoClose` timer; `State`, `Reset`
- logto: httptest JWKS coverage; one-shot JWKS refresh on unknown key id; `ValidateAdminTokenFromAuthorization`; `NewUserValidatorStrict`; `SignTestToken` test helper