I/O errors are temporary in most cases (in opposite to, for instance, HTTP errors like 403 or 404). This is why they are considered as soft errors. If a sync fails too often, it will be marked as “sync problems” in the Android account settings by the Android content resolver, but you’re right, there’s no notification, which would be useful in some cases. The reason is that it’s hard to decide when errors should be shown – in some use cases, this would mean too many error messages, in other cases, there are too little. Also, we would have to keep a history of the last syncs and its errors, and then decide whether an I/O error is considered a hard error.
But of course, ideas and patches are welcome