            (do
              (task)
              [:done (conj (:done dep-state)
-                          [key deps task])])
+                          [key deps task])
+              :history (conj (:history dep-state)
+                             {:action :processed
+                              :ts     (now)
+                              :key    key
+                              :deps   deps})])
 
            [:todo (conj (:todo dep-state)
-                        [key deps task])])))
+                        [key deps task])
+            :history (conj (:history dep-state)
+                           {:action :registered-todo
+                            :ts     (now)
+                            :key    key
+                            :deps   deps})])))
 
 (defn- replace-handler
   "Replace all occurances of handers with the given key with the new

  "Reset the dependency system. Uses an agent so it's safe to call this
   from within a transaction."
  []
  (send dep-state* (fn [& args]
                     {:satisfied #{}
                      :todo      []
                      :done      []})))

(defn unsatisfy-all-dependencies
  "Unsatisfy all deps and reset completed tasks as todo tasks. Uses an

    (process-handler dep-state key deps task)))

(defn- satisfy*
  [{:keys [satisfied todo done] :as dep-state} new-deps]
  (let [satisfied       (set/union satisfied new-deps)
        execute-tasks   (fn [[final-done final-todo new-history] [key deps task]]
                          (if (set/superset? satisfied deps)
                            (do
                              (log/info "Running dep handler: " key)
