Follow-up to evaluate after the object-client DX change merges. Part of v1.0.0.
Observed failure
The SDK dispatches fetch(request), carrying the caller's signal in request.signal. The CLI adapter's executeAttempt reads only init?.signal for timeout composition and abort classification. Since init is absent on this path, the native fetch receives a replacement signal that has lost the caller's cancellation.
A mocked transport probe with an already-aborted caller signal reproduced this for both standalone and bound SDK operations. The SDK preserved the original signal; the consumer adapter dropped it. This is not introduced by the object-client change.
SDK scope and ownership
Track the SDK's fetch-adapter contract here and determine what can be shared. The concrete adapter fix belongs in getsentry/cli; an SDK-only change cannot guarantee cancellation if a consumer replaces the signal.
Consider documentation and contract tests first. Add a reusable SDK utility only if it provides useful composition across consumers, keeping credential refresh, consumer timeouts, and application error policy with their owners.
Acceptance criteria
Related: opt-in retries #92. Any shared retry helper must satisfy this cancellation contract; this issue does not require adding retries.
Follow-up to evaluate after the object-client DX change merges. Part of v1.0.0.
Observed failure
The SDK dispatches
fetch(request), carrying the caller's signal inrequest.signal. The CLI adapter's executeAttempt reads onlyinit?.signalfor timeout composition and abort classification. Sinceinitis absent on this path, the native fetch receives a replacement signal that has lost the caller's cancellation.A mocked transport probe with an already-aborted caller signal reproduced this for both standalone and bound SDK operations. The SDK preserved the original signal; the consumer adapter dropped it. This is not introduced by the object-client change.
SDK scope and ownership
Track the SDK's fetch-adapter contract here and determine what can be shared. The concrete adapter fix belongs in
getsentry/cli; an SDK-only change cannot guarantee cancellation if a consumer replaces the signal.Consider documentation and contract tests first. Add a reusable SDK utility only if it provides useful composition across consumers, keeping credential refresh, consumer timeouts, and application error policy with their owners.
Acceptance criteria
Requestand must preserve its signal, body, method, and headers while respecting explicitRequestInitoverrides.fetch(Request)andfetch(url, init)paths.Related: opt-in retries #92. Any shared retry helper must satisfy this cancellation contract; this issue does not require adding retries.