v1.3.0
Additive API only — no behavior change for existing code; construction
allocation grows one size class (ROADMAP §5).
- Added
(*Error).WithRetryDelay(d)andLookupRetryDelay(err)— the
fourth client-visible channel, carrying a per-error dynamic retry
delay (a rate limiter's actual time to the next token) that
grpcerr.ToStatusemits as theRetryInfodetail, beating the static
registry delay (RetryAfter). Outermost delay wins; blocked below a
WithoutPublicbarrier; excluded fromLogValue; shown as%+v's new
public.retry:line. A non-positive delay is a no-op — the input is a
computed value and "retry after zero" carries no recommendation
(deliberately not a panic, unlike registration-timeRetryAfter). The
"exactly three channels" contract wording moves to four across the docs.
problemdeliberately still emits noRetry-Afterheader — the README
shows the two-line handler pattern viaLookupRetryDelay. - Changed The
Errorstruct grew by the delay field: construction is
now 160 B (was 144 B), still ~200ns / 1 alloc. README benchmarks updated.