After chatting with Martin, I think a small improvement would be to add a new method to BzrError called something like "can_be_remoted". The default implementation could be just "return self.internal_error", but this gives us a clear way to allow or disallow specific exceptions on the wire, rather than just assuming all user errors can be sent.
I'm tempted to say that all errors that can be sent should be explicitly listed somewhere, so that a third-party implementation of the protocol can know what is possible, but I think a "can_be_remoted" method is close enough.
I like this plan.
After chatting with Martin, I think a small improvement would be to add a new method to BzrError called something like "can_be_remoted". The default implementation could be just "return self.internal_ error", but this gives us a clear way to allow or disallow specific exceptions on the wire, rather than just assuming all user errors can be sent.
I'm tempted to say that all errors that can be sent should be explicitly listed somewhere, so that a third-party implementation of the protocol can know what is possible, but I think a "can_be_remoted" method is close enough.