annex.stalldetection lets remotes be configured with a minimum throughput to detect and retry stalls. But most users are not going to configure this. Could something be done to dynamically detect a stall, without configuration?
Eg, wait until data starts to flow, and then check if there's at least some data being sent each half minute. If so, the progress display is being updated at least every minute. So then if 1 minute goes by without more data flowing, it's almost certainly stalled. And if the progress display is updated less frequently, see if it's updated every 2 minutes, etc. Although realistically, progress displays are updated every chunk, and there's typically more than 1 chunk per minute. So longer durations than 1 minute may be an unnecessary complication. And a minute to detect a stall is fine.
Implemented this, annex.stalldetection = true enables automatic.
It may still need a config to turn it on, because running transfers in separate processes can lead to more resource use, or even password prompting, which could be annoying to existing users. Also, if it gets it wrong and the remote does not support resuming transfers, defaulting to on could lead to bad waste of resources. It could detect stalls even when not turned on, but only display a message suggesting enabling the config. --Joey