           (let [out-facts #js []]
             (.call (aget node->update! node) nil node node->state in-facts out-facts)
             (aset node->facts node #js [])
+            (when trace? (.push trace #js [node in-facts out-facts]))
             (if (> (alength out-facts) 0)
               (let [out-nodes (aget node->out-nodes node)
                     min-out-node (areduce out-nodes i min-out-node (+ node 1)

  (get x 1)
  (get x :b)


  (= eg (fact-shape ::eg "[a] has a [b] with a [c]"))

  (fact (fact-shape ::eg "[a] has a [b] with a [c]") #js ["a" "b" "c"])


;; FLOW STATE

(defrecord FlowState [node->state node->out-nodes node->facts node->update! trace])

(def trace? true)

(defn fixpoint! [{:keys [node->state node->out-nodes node->facts node->update! trace] :as flow-state}]
  (loop [node 0]
    (when (< node (alength node->facts))
      (let [in-facts (aget node->facts node)]
