user> (defmulti op-type :op)multi-spec currently goes out of its way to prevent :default methods from providing specs:
#'user/op-type
user> (s/def ::slot integer?)
:user/slot
user> (defmethod op-type :default [_]
(s/keys :req [::slot]))
#object[clojure.lang.MultiFn 0x68573531 "clojure.lang.MultiFn@68573531"]
user> (s/explain (s/multi-spec op-type :op) {:op "foo" ::slot 5})
val: {:op "foo", :user/slot 5} fails at: [foo] predicate: user/op-type, no method
nil
user> (op-type "foo")
#object[clojure.spec$map_spec_impl$reify__12744 0x5ac0955f "clojure.spec$map_spec_impl$reify__12744@5ac0955f"]
user> (s/explain (s/multi-spec op-type :op) {:op :default ::slot 5})
Success!
nil