           (unify
            (merge
             (copy parent)
-            ;; TODO: don't merge this in: surface-calculation should happen on-demand, not in this
+            ;; TODO: don't merge :surface in here: surface-calculation should happen on-demand, not in this
             ;; time-critical code. i.e. build surface of tree by doing a depth-first traversal, not
             ;; storing stuff within tree in case someone is interested.
             {:surface (str

                                    ":'" (morph result) "'"))
              debug (log/debug (str "moreover-head: pass:     " (strip-refs (get-in parent [:rule])) " -> "
                                    "[" (get-in child [:surface]) "]"))
              debug (log/trace (str " resulting sem: " (strip-refs (get-in result '(:synsem :sem)))))]
          result)


   [clojure.string :as string]
   #?(:clj [clojure.tools.logging :as log])
   #?(:cljs [babel.logjs :as log]) 
   [dag_unify.core :refer [copy fail? fail-path fail-path-between get-in merge strip-refs unify unifyc]]
   [babel.lexiconfn :refer [get-fail-path sem-impl]]))

(defn exception [error-string]
