Description
internal/httpretry (token bucket, jittered backoff, Retry-After parsing) has no _test.go and is exercised only through tsapi/hsapi. internal/annotations/client.go carries a near-duplicate parseRetryAfter.
Acceptance Criteria
- #1 Direct tests cover delta-seconds and HTTP-date Retry-After, the maxDelay cap, jitter bounds and token-bucket waits under testing/synctest
- #2 annotations uses the httpretry parser; its behaviour is unchanged under its existing tests
Definition of Done
- #1 just check passes (the full gate; it is what CI enforces)
- #2 just gen leaves no diff (only if a generated artifact’s inputs changed)
- #3 just –fmt –check passes and every new recipe has a # doc comment and a [group(…)]
Implementation Plan
Loop33 retry lane: direct branching tests and parser consolidation, gate and review.
Implementation Notes
loop33 landed8ccbe4c10d10d78b3ed07952a8edc57723909ce1 in composed tip1646978409c509a5eedaf1ac8f4bab1e9db75b1f. Exact composed gate run20261101T211407Z-tailscale2otel-cb40d4c5 exit0. Shared parser preserves annotation trim/immediate/cap policy and fixes overflow extremes. Direct synctest token bucket/jitter/delay/cancellation proofs, CodeRabbit complete and final dsreview PASS.
Final Summary
Consolidated Retry-After parsing with overflow-safe conversion and direct deterministic retry tests; exact composed gate passed.