     (loop [q (qu steps)
            ss []
            env env
-           skip-count {}]
+           skip-count {}
+           skipped #{}]
       (if-let [[k v :as item] (peek q)]
         (let [{; Ignore env from k expansion because values from k are not
                ; stored in env.  This decision may need to be revised in the

    (expand-coll x opts env ks)
    (expand-scalar x opts env ks)))

(defn resolve-tagged-literals
  [wrapped-config opts]
  (::value (expand wrapped-config opts {} [])))

(defn read-config
  "First argument is a string URL to the file. To read from the


(defmethod eval-tagged-literal 'ref
  [tl opts env ks]
  (let [{:keys [:aero.core/incomplete? :aero.core/env :aero.core/value
                :aero.core/incomplete]
         :or {env env}
         :as expansion} (expand (:form tl) opts env ks)]
    (if (or incomplete? (not (contains? env value)))
      (-> expansion
          (assoc ::incomplete? true)
          (update ::value (rewrap tl))
          (assoc ::incomplete (or incomplete
                                  {::path (pop ks)
                                   ::value tl})))
      (assoc expansion ::value (get env value)))))

(defn- expand-set-keys [m]
