 
 (def example-a
   {"example_a" {:type :notebook
+                :id "example_a"
                 :pages ["root"]}
    "root" {:type :page
+           :id "root"
            :args ["a" "b" "c"]
            :steps ["b_squared" "four" "four_a_c" "result"]}
    "b_squared" {:type :call
+                :id "b_squared"
                 :ref {:type :ref/js
                       :js "cljs.core._STAR_"}
                 :args [{:type :ref/id :id "b"} {:type :ref/id :id "b"}]}
    "four" {:type :constant
+           :id "four"
            :data 4}
    "four_a_c" {:type :call
+               :id "four_a_c"
                :ref {:type :ref/js
                      :js "cljs.core._STAR_"}
                :args [{:type :ref/id :id "four"} {:type :ref/id :id "a"} {:type :ref/id :id "c"}]}
    "result" {:type :call
+             :id "result"
              :ref {:type :ref/js
                    :js "cljs.core._"}
              :args [{:type :ref/id :id "b_squared"} {:type :ref/id :id "four_a_c"}]}})


(deftraced notebook! [index x] [x]
  (check (= :notebook (:type x))
         (sequential? (:pages x))
         (every? #(page! index (get index %)) (:pages x))))



(deftraced page! [index x] [x]
  (check (= :page (:type x))
         (id! index (:id x))
         (sequential? (:args x))
         (every? #(page-arg! index (get index %)) (:args x))
         (sequential? (:steps x))
