                  ::f/score-collect-fn (score-collect-min-signal-vals 3)})
           [s p o] pattern
           this (assoc _ :acc acc :result res)]
+      ;; TODO add index selection vertices, use existing if possible
       (f/add-edge! g subj acc signal-index-select [0 s])
       (f/add-edge! g pred acc signal-index-select [1 p])
       (f/add-edge! g obj  acc signal-index-select [2 o])

      (register-query! g this)))
  (remove-from-graph!
    [_ g]
    (f/remove-vertex! g result)
    (f/remove-vertex! g acc)
    (assoc _ :acc nil :result nil)))

  (add-triple! [_ t])
  (remove-triple! [_ t])
  (register-query! [_ q])
  (unregister-query! [_ q])
  (query-for-pattern [_ pattern]))

(defprotocol ITripleQuery
