        Greedy means we forget about reserving preconditions when free and we can fire right now (less branching).
        Sloppy means we ignore if preconditions are free, but require no action on them.
        Extra-sloppy means anything goes -- if you can execute ignoring commitments, go for it."
-  ([sas-problem & {:keys [directed? greedy? deadlock? dead-vars? components?] :as m
-                   :or   {directed? true greedy? true deadlock? true dead-vars? true components? false}}]
-     (assert (every? #{:directed? :greedy? :deadlock? :dead-vars? :components?} (keys m)))
+  ([sas-problem & {:keys [directed? greedy? deadlock? dead-vars? components? teleport?] :as m
+                   :or   {directed? true greedy? true deadlock? true dead-vars? true components? false teleport? true}}]
+     (assert (every? #{:directed? :greedy? :deadlock? :dead-vars? :components? :teleport?} (keys m)))
      (let [edge-rule     (if greedy? :greedy :naive)
            cluster-cg    (remove #(apply = %) (sas-analysis/effect-clustered-causal-graph sas-problem))
            clusters      (graphs/ancestor-set cluster-cg [#{sas/goal-var-name}])

;; (TODO).  if leaves are clustered, need multiple goal states -- see if
;; worth supporthing this case or not.  

;; TODO: cluster successor generators?
;; TODO: state abstraction.

;; meta-vars are defined on clusters.

(ns angelic.search.action-set.asplan-c
  (:require [angelic.util :as util]
            [angelic.util.graphs :as graphs]
            [angelic.util.queues :as queues]            
            [angelic.env :as env]
            [angelic.env.util :as env-util]
            [angelic.env.state :as state]            
