a) the main reason for sharing buffers was the existence of silent mode, otherwise we would have to copy errors in a non-trivial way. Does b433bdba5aa7d89470 help in understanding why we introduced it?
b) I don't see any example where class or module typing is done in silent mode, fails and doesn't fail in a non-silent one, so yes unit.error at this point would be fine.