If service A calls service B with compose, and service B uses halt!, the errors from B are not passed to A.
I think this may be because the catch for the strict error exception doesn't handle anything. Perhaps it would work to use the ActiveInteraction Interrupt exception instead, since this is properly handled?