Answering the question in the title - s/valid? is for checking if a value matches a spec. s/conform tells you how a value matches a spec (by showing you which alternative was taken and labeling parts of specs with components.
Re s/and, this was a point of long debate about whether to include flowing s/and or nonflowing. There are good use cases for both (and the generative side plays into this too). In the wip spec2, we have included a nonflowing and, currently called s/and- (but that name is tentative - might end up being called s/union or something else).
Re s/every, sounds like you want s/coll-of which conforms all elements. Again, both cases are useful (don’t want to exhaustively check an infinite seq!).
Regarding the specific case of ensuring a vector with a particular syntax (via cat), this is a somewhat common case in macros and is basically impossible to get out the current pieces and make the combination of conform, gen, explain, and unform do the right thing. As you found, you want nonflowing and! But we have provided this composite in spec2 as s/catv (like cat, but constrain to vectors).
https://github.com/clojure/spec-alpha2/wiki/Differences-from-spec.alpha#nonflowing-sand--new