           (expected-str2 [problem] opts)))))))
 
 (defmethod problem-group-str :problem/alt-group [_type spec-name val path problems opts]
-  ;; TODO - assert singleton problems
+  (s/assert ::singleton problems)
   (printer/format
    "%s\n\n%s"
    (header-label "Spec failed")

     "\n\nor\n\n"
     (map #(expected-str2 % opts) grouped-subproblems))))

(defmethod value-str :problem/value-group [type spec-name val path problems opts]
  ;; TODO - assert singleton
  (let [problem (first problems)
        subproblems (:problems problem)
        {:keys [form in type]} (problem-parts (first subproblems) opts)]

(def ^:private format-str "%s\n\n%s\n\n%s")

(defn ^:private format-err [header type spec-name form in problems opts expected]
  (printer/format
   format-str
   (header-label header)
   (value-str type spec-name form in problems opts)
   expected))

(defmethod expected-str :problem/value-group [_type spec-name val path problems opts]
  (let [problem (first problems)
        subproblems (:problems problem)
