 
 (defmethod predicate-error-msg 'keyword-namespaced?
   [entry error-data]
-  (let [chain (->> (:predicates error-data)
-                   (select-keys predicate-phrases)
-                   (vals)
-                   (chain-phrases))]
-    [(str "^-- Value " (pr-str (get entry (:error-key error-data))) " must be " chain)]))
+  (if (seq (:predicates error-data))
+    (let [chain (->> (:predicates error-data)
+                     (select-keys predicate-phrases)
+                     (vals)
+                     (chain-phrases))]
+      [(str "^-- Value " (pr-str (get entry (:error-key error-data))) " must be " chain)])
+    [(str "^-- Value " (pr-str (get entry (:error-key error-data))) " must be " (get predicate-phrases (:predicate error-data)))]))
 
 (defmethod predicate-error-msg 'edge-two-nodes?
   [entry {:keys [error-value]}]

(def structure-names
  {:workflow :workflow
   :catalog :catalog-entry
   :lifecycles :lifecycles-entry})

(defn matches-faulty-key? [k v elements faulty-key]
  (some #{k v} #{faulty-key}))

    (show-map context faulty-key error-f)
    (show-docs entry faulty-key)
    (show-footer)))

(defmethod print-helpful-job-error [:catalog :missing-required-key]
  [job error-data catalog structure-type]
  (let [context (get-in job (butlast (:path error-data)))
        faulty-key (:missing-key error-data)
        entry (get-in model [(structure-names structure-type) :model faulty-key])]
    (let [error-f (constantly nil)]
      (show-header structure-type faulty-key)
      (show-map context faulty-key error-f)
      (println (a/magenta (str "^-- Missing required key " (a/bold faulty-key))))
      (println)
      (show-docs entry faulty-key)
      (show-footer))))

(defmethod print-helpful-job-error [:catalog :conditional-failed]
  [job error-data catalog structure-type]
