     :else
     :problem/unknown))
 
-;; TODO - rename, dupe of below
-(defn group-and-sort-problems [failure problems]
+(defn grouped-and-sorted-problems [failure problems]
   (->> problems
        (group-by (juxt :expound/in (partial problem-type failure)))
        ;; We attempt to sort the problems by path, but it's not feasible to sort in

       "")
     (let [failure nil
           non-matching-value [:expound/value-that-should-never-match]
           new-problems (group-and-sort-problems failure (map #(dissoc % :reason) problems))]
       (string/join "\n\nor "
                    (for [[[in type] problems'] new-problems]
                      (expected-str type :expound/no-spec-name non-matching-value in problems' opts)))))))

       ;; If there is an error, we just give up on sorting.
       (safe-sort-by first paths/compare-paths)))

(defmethod expected-str :problem/insufficient-input [_type spec-name val path problems opts]
  (let [problem (first problems)]
    (printer/format
