Slice 1 PR 2 of the net-http resilience layers (spec: docs/superpowers/specs/2026-07-04-net-http-timeout-layer-design.md; ADR-0031 §1). Builds on the RateLimit layer (#76).
Timeout<S, T> + TimeoutLayer<T> (impl net-api::Layer): bounds the send (inner call -> response), not the pacing-permit wait — a response-future race against Timer::sleep, HttpError::Timeout on the deadline (inner future dropped)
RequestTimeout(Duration) per-request override extension; absent -> layer default (not fail-closed — the global deadline still applies)
- Body-transparent (
Response<B> untouched); a streaming-body TimeoutBody is deferred (inert on IBKR's buffered traffic). No new dependency.
Slice 1 PR 2 of the net-http resilience layers (spec: docs/superpowers/specs/2026-07-04-net-http-timeout-layer-design.md; ADR-0031 §1). Builds on the RateLimit layer (#76).
Timeout<S, T>+TimeoutLayer<T>(implnet-api::Layer): bounds the send (inner call -> response), not the pacing-permit wait — a response-future race againstTimer::sleep,HttpError::Timeouton the deadline (inner future dropped)RequestTimeout(Duration)per-request override extension; absent -> layer default (not fail-closed — the global deadline still applies)Response<B>untouched); a streaming-bodyTimeoutBodyis deferred (inert on IBKR's buffered traffic). No new dependency.