v0.2.11 — loop back-pressure (Phase 3 PR-B)
Robustness for the unattended durable loop (Phase 3, back-pressure track) — completes the pattern-audit roadmap.
- Per-step retry with backoff: transient read/preview errors (rate-limit, HubSpot 5xx, network/transport, retryable handler errors) retry up to 3 attempts with exponential backoff, honoring
Retry-After(cap 60s), instead of killing the loop on the first blip. - Proactive pacing: the loop reads HubSpot's
X-HubSpot-RateLimit-*headers, persists rate state, and paces before the next step when remaining is low. - Writes are never auto-retried — retry wraps read/preview only; the write pauses at
awaiting_approvalas before.
Full suite green on Python 3.12 (1168 passed). See #23.