Yeah, per @didibus, Phrase is good for getting nicer messages based on your predicates. You could get more info about the specific missing subject, and gen a message based on that if the test fails.
You might also check out malli as an alternative to spec, which has support for custom messages built in, and addresses some of the difficulties with getting at the error data of interest.