     [_ handler]
     (reset! prev-val @value)
     (swap! state assoc ::new-edges 0)
-    (handler _)
-    _)
+    (handler _))
   (receive-signal
     [_ src sig]
     (if-not (= sig ((::signal-map @state) src))

        sig-fn    (:signal-fn ctx)
        max-iter  (:max-iter ctx)
        watch-id  (keyword (gensym))
        ->result  (fn [type iter colls sigs t0]
                    (remove-watch! g :remove-vertex watch-id)
                    (execution-result type colls sigs t0 {:iterations iter}))]
    (reify
      #?@(:clj
           [clojure.lang.IDeref

  [vertex]
  (let [id   (:id vertex)
        outs @(:outs vertex)]
    (loop [active (transient []), outs outs]
      (let [[v [f opts]] (first outs)]
        (if v
          (let [signal (f vertex opts)]
            (if-not (nil? signal)
              (do (receive-signal v id signal)
                  (recur (conj! active v) (next outs)))
              (do (debug "signal fn for" (:id v) "returned nil, skipping...")
                  (recur active (next outs)))))
          (persistent! active))))))

(def default-vertex-state
  {::uncollected      []
