                     (str/split #"\n") first (str/split #": ") rest
                     (->> (str/join ": ")))})
        (catch clojure.lang.ExceptionInfo e#
-         {:error (type e#) :msg (str (.getMessage e#) ": " (.getData e#))})
+         {:error (type e#)
+          :msg (str (.getMessage e#) ": " (.getData e#))})
        (catch Exception e#
-         {:error (type e#), :msg ((Throwable->map e#) :cause)}))))
+         {:error (type e#), :cause ((Throwable->map e#) :cause)
+          :msg (-> e# Throwable->map :via first :message)}))))
 
 
 (defn init-pgms

                                 msg))
                       (format "Done, node %s" (-> node first :id)))]
             (infof "%s" msg)
             {:request {:name (-> node first :name)
                        :args (-> node first :args)
                        :msg msg}
              :result jnres})))
        dfg))


(comment



(defn run-flow-program
  "Takes a data flow graph, as produced by a 'make-pipeline', activates
  the nodes and runs the graph to completion. Wraps each node body in
  exception protection and ensures errors are propagated to driver for
  status report."
  [dfg]
  (mapv (fn[node]
          (future+
