the call outcome now rides the frame as Result<Response, WireError>, so
a rejection reaches the caller with its message and the pooled
connection stays up. only a real transport failure closes it now; a
malformed request comes back as a rejection too.