At the moment, there are some operations which are safe to retry, but the client does not. Examples are get operations (always idempotent) or operations which receive error when being written to the network but haven't been fully written.
In he latter case, for example, we find out that the connection was dropped after we try to write to it It is accurate to say, in this case, that we know we've not written the whole operation to the network so it couldn't have been completed by the server. At the moment, we don't retry these kinds of operations.
In any event, the application error handling code needs to be the same. The reason for this is that we could have written the whole thing in one shot or we could write a bunch of data and end up later getting a timeout. The operations in there at the moment are considered "partially completed". There's no distinction on partially completed and not fully written (which would be safely retryable) from partially completed, fully written, waiting for a response (not safely retryable).