fetchRelayTransport now acquires response bytes through the stream
reader and cancels it the moment the 256 KB cap is exceeded or the
stream fails, so a chunked body with no usable Content-Length is
rejected while it is still arriving instead of after response.text()
has already buffered it all. The injected host signer is an async
boundary like the transport: its await is raced against the same
per-request timeout and caller cancellation, so a signer that never
settles cannot hold a claim or evidence run open. Redirect refusal,
error redaction and abort semantics are unchanged.
Signed-off-by: Logan Johnson <loganj@squareup.com>