The two client SDKs now disagree on whether a 429 Too Many Requests is retryable:
// clients/go/errors.go:56
retryable := res.StatusCode >= 500 || res.StatusCode == http.StatusTooManyRequests
// clients/ts/src/errors.ts:19
const retryable = res.status === 503 || res.status >= 500;
So a rate-limited request auto-retries (honoring Retry-After, capped at 30s) in Go and fails immediately in TypeScript. The Go behavior was added during PR #434's review rounds; the TS client was never updated to match.
Go is the better behavior here — 429 is the canonical "back off and try again" response, and Retry-After is most often set on exactly that status. Bringing TS in line keeps the cross-SDK parity claim honest.
Fix: add res.status === 429 to the TS retryable predicate, confirm the TS retry path honors Retry-After with the same 30s clamp the Go client uses (clients/go/http.go:20), and add a wire-conformance case (clients/go/testdata/wire_cases.json) so the two clients can't drift again.
Found during the PR #434 pre-push docs review. docs/src/content/docs/sdk/go/reference.md documents the Go 429 row as retryable; the TS reference table should stay as-is until the code changes.
The two client SDKs now disagree on whether a
429 Too Many Requestsis retryable:So a rate-limited request auto-retries (honoring
Retry-After, capped at 30s) in Go and fails immediately in TypeScript. The Go behavior was added during PR #434's review rounds; the TS client was never updated to match.Go is the better behavior here —
429is the canonical "back off and try again" response, andRetry-Afteris most often set on exactly that status. Bringing TS in line keeps the cross-SDK parity claim honest.Fix: add
res.status === 429to the TSretryablepredicate, confirm the TS retry path honorsRetry-Afterwith the same 30s clamp the Go client uses (clients/go/http.go:20), and add a wire-conformance case (clients/go/testdata/wire_cases.json) so the two clients can't drift again.Found during the PR #434 pre-push docs review.
docs/src/content/docs/sdk/go/reference.mddocuments the Go429row as retryable; the TS reference table should stay as-is until the code changes.