Finding
Three files map 429 responses to typed exceptions with no Retry-After consulted and no WAIT vs STOP distinction:
packages/python-sdk/e2b/api/__init__.py
packages/python-sdk/e2b/envd/api.py
packages/js-sdk/src/envd/api.ts
Same pattern across both Python and JavaScript SDKs.
The consequence
When a provider returns Retry-After: 60, the signal is swallowed at the exception boundary. The caller receives a typed error with no timing information. Retry decisions default to local backoff inside the cooldown window.
Expected behavior
- Preserve
Retry-After across the exception boundary
- Surface retry timing to the caller
- Distinguish WAIT (transient throttle) from STOP (quota exhaustion) before retrying
Related pattern
WAIT-signal-lost-at-exception-boundary
Corpus reference: https://github.com/SirBrenton/pitstop-truth
Finding
Three files map 429 responses to typed exceptions with no
Retry-Afterconsulted and no WAIT vs STOP distinction:packages/python-sdk/e2b/api/__init__.pypackages/python-sdk/e2b/envd/api.pypackages/js-sdk/src/envd/api.tsSame pattern across both Python and JavaScript SDKs.
The consequence
When a provider returns
Retry-After: 60, the signal is swallowed at the exception boundary. The caller receives a typed error with no timing information. Retry decisions default to local backoff inside the cooldown window.Expected behavior
Retry-Afteracross the exception boundaryRelated pattern
WAIT-signal-lost-at-exception-boundaryCorpus reference: https://github.com/SirBrenton/pitstop-truth