 
 ; region reader3
 
+(defn reader3-node-log! [{::keys [run-plan*] :as env} {::pcp/keys [node-id]} event]
+  (if run-plan*
+    (swap! run-plan* pcp/update-node node-id ::run-trace #(p.misc/vconj % (assoc event ::pt/timestamp (pt/now)))))
+  env)
+
 (defn reader3-run-next-node [env plan {::pcp/keys [run-next]}]
   (if run-next
     (reader3-run-node env plan (pcp/get-node plan run-next))))

            process-start  (pt/trace-enter env {::pt/event ::reader3-execute})
            plan           (reader3-compute-run-graph
                             (merge env indexes {:edn-query-language.ast/node ast
                                                 ::pcp/available-data         available-data}))]
        (if-let [root (pcp/get-root-node plan)]
          (let []
            (if async-parser?
              (go-promise
                (<?maybe (reader3-run-node env plan root))
                (pt/trace-leave env process-start {::pt/event ::reader3-execute
                                                   ::plan     plan
                                                   ::pt/style {:fill "#6ac5ec"}})
                (<?maybe (p/reader (update env ::reader3-computed-plans p.misc/sconj path))))
              (do
                (reader3-run-node env plan root)
                (pt/trace-leave env process-start {::pt/event ::reader3-execute})
                (p/reader (update env ::reader3-computed-plans p.misc/sconj path)))))
          ::p/continue)))))


    ::pcp/keys [input params]
    :as        node}]
  (if (reader3-all-requires-ready? env node)
    (do
      (reader3-node-log! env node {::pt/event ::skip-node-requires-ready})
      (reader3-run-next-node env plan node))
    (let [input'     (into #{} (keys input))
          {::keys [cache?] :or {cache? true} :as resolver}
          (cond-> (get-in indexes [::index-resolvers sym])
