Repro:
(require '[clojure.spec.alpha :as s])
(s/def :fspec-test/plus (s/fspec
:args (s/cat :x int? :y pos-int?)
:ret pos-int?))
(defn my-plus [x y]
(+ x y))
(s/explain-data :fspec-test/plus my-plus)
Actual:
;; #:clojure.spec.alpha{:problems [{:path [:ret], :pred clojure.core/pos-int?, :val 0, :via [:fspec-test/plus], :in []}], :spec :fspec-test/plus, :value #function[expound.alpha-test/my-plus]}
Expected: I would expect the explain-data to contain the args that produced the invalid return value, so I can reproduce. Note that if my function throws an exception, the explain data will contain the args e.g.
(s/def :fspec-test/plus (s/fspec
:args (s/cat :x int? :y pos-int?)))
(defn my-plus [x y]
(assert (pos? (+ x y))))
(s/explain-data :fspec-test/plus my-plus)
;; #:clojure.spec.alpha{:problems [{:path [], :pred (apply fn), :val (-1 1), :reason "Assert failed: (pos? (+ x y))", :via [:fspec-test/plus], :in []}], :spec :fspec-test/plus, :value #function[expound.alpha-test/my-plus]}