> Thus if you have a map without the key, the value won't be validated. But if the key is present, then it will validate its value.
Exactly. Which is something I did not expect. I expected '(s/valid? ::my-spec x)' to tell me if x is valid according to ::my-spec, checking only those keys that ::my-spec lists in :req and :opt (if present).
For maps, you might as well think of s/valid? as ignoring the first parameter. It validates anything it can.