As mentioned in #20 (comment), there is still some loose ends from #20 in terms of propagating the error back to the other side.
I'm spinning this off to a separate ticket since #20 was approved, and I think it's an incremental improvement over the existing situation.