 (defmethod error-message ::bad-value-comb-pred [e] (bad-value-message e))
 
 (defmethod error-message ::should-not-be-empty [{:keys [path pred val reason via in] :as e}]
-  (str "The value " (color (pr-str val) :bad-value)
+  (str "  The value " (color (pr-str val) :bad-value)
        " at key " (color (last in) :focus-key)
        " should not be empty.\n  "
        (format-predicate-str (update-in e [:pred] (fn [x] (list '+ x))))))
 
 (defmethod error-message ::unknown-key [{:keys [path pred val reason via in] :as e}]
-  (str "Found unrecognized key " (color (::unknown-key e) :error-key)
+  (str "  Found unrecognized key " (color (::unknown-key e) :error-key)
        " at path " (color (pr-str in) :focus-path) "\n"
        "  Must be one of: " (format-seq-with-or pred)))
 
 (defmethod error-message ::missing-required-keys [{:keys [path pred val reason via in] :as e}]
   (when-let [kys (not-empty (::missing-keys e))]
     (if (< 1 (count kys))
-      (str "Missing required keys " (format-seq-with-and kys) " at path " (color (pr-str in) :focus-path))
-      (str "Missing required key "  (format-seq-with-and kys) " at path " (color (pr-str in) :focus-path)))))
+      (str "  Missing required keys " (format-seq-with-and kys) " at path " (color (pr-str in) :focus-path))
+      (str "  Missing required key "  (format-seq-with-and kys) " at path " (color (pr-str in) :focus-path)))))
 
 ;; *** TODO ::wrong-key
 ;; upon reflection misspelling and wrong keys should have multiple options for correction

        path        (conj (vec base-path) k)]
    (when-let [{:keys [line column value path loc]}
               (edn-string-nav/get-path-in-clj-file path file)]
      (cp/print-message-in-context-of-file file line column message))))

#_(edn-string-nav/get-path-in-clj-file [0] "tester.edn")


  (let [k (last in)]
    (cond
      (parent-map? e)
      (str "  The key " (color (pr-str k) :focus-key)
           " has the wrong value "
           (color (format-summarized-value val) :bad-value)
           ".\n  " (format-predicate-str e))
      (parent-coll? e)
      (str "  The " (parent-type-str e)
           " at " (color (pr-str (vec (butlast in))) :focus-path)
           " contains bad value "
           (color (format-summarized-value val) :bad-value)
           ".\n  " (format-predicate-str e))
      :else
      (str "  The key " (color (pr-str k) :focus-key)
           " has the wrong value "
           (color (format-summarized-value val) :bad-value)
           ".\n  " (format-predicate-str e)))))
