I think these cases should match with not nil value?
(def routes '{#{x} [:foo x]})
(matches routes {:uri "/" :query-params {"x" false}})
;;=> [:ataraxy.error/missing-params #{x}]
(def routes '{{{:keys [q]} :body-params} [:foo q]})
(matches routes {:uri "/" :body-params {:q false}})
;;=> [:ataraxy.error/missing-destruct #{q}]