 
 
 (defn run-flow-program
-  "Takes a data flow graph, as produced by a 'make-pipeline',
-   activates the nodes and runs the graph to completion
-  "
+  "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+

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


(defn init-pgms

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




(comment
