   (fn [[active sigs colls] v]
     (let [active (conj active v)]
       (if (< (rand) 0.5)
-        (if (should-signal? v s-thresh)
+        (if (> (score-signal v) s-thresh)
           (let [vsigs (signal! v sync-vertex-signal)]
             [(into active vsigs) (+ sigs (count vsigs)) colls])
           [active sigs colls])
-        (if (should-collect? v c-thresh)
+        (if (> (score-collect v) c-thresh)
           (do (collect! v)
-              (if (should-signal? v s-thresh)
+              (if (> (score-signal v) s-thresh)
                 (let [vsigs (signal! v sync-vertex-signal)]
                   [(into active vsigs) (+ sigs (count vsigs)) (inc colls)])
                 [active sigs (inc colls)]))

    (loop [sigs 0, verts vertices]
      (if verts
        (let [v (first verts)]
          (if (should-signal? v thresh)
            (do (debug (:id v) "signaling")
                (recur (long (+ sigs (count (signal! v sync-vertex-signal)))) (next verts)))
            (recur sigs (next verts))))

        res-chan    (or (:result ctx) (async/chan))
        notify-chan (async/chan (async/dropping-buffer 1))
        watch-id    (keyword (gensym))
        v-filter    (filter #(or (> (score-signal %) s-thresh) (> (score-collect %) c-thresh)))
        ->result    (fn [type sigs colls t0] (go (>! res-chan (execution-result type sigs colls t0))))]
    (reify
      #?@(:clj
