        right-sib-zips
        (filter #(not (= % z)))))
 
+(defn parent-zips
+  [z]
+  (->> z
+       (iter-while-identity z/up)
+       rest))
+
 (defn children-zips [z]
   (->> z
        z/down

   node
   pred-map))

(defn insert-tags-into-parent-tag-summary
  [& [tags summary]]
  {:path (if tags
           (-<> summary

                                                                         :id
                                                                         even?)}))

(defn seq->tag-summary ;; memoize?
  [zips pred-map]
  (let [[fst & rest] (or zips [])]
    (insert-tags-into-summary
     (when fst
       (get-tags' (z/node fst)
                  pred-map))
     (when rest
       (seq->tag-summary rest
                         pred-map)))))

(defn tag*
  [zipr pred-map]
  (let [get-tag-summary #(-> zipr
                             %
                             (seq->tag-summary pred-map))]
    (z/edit zipr (fn [z] (with-meta z
                           {::? {:tags  (get-tags' (z/node zipr) pred-map)
                                 :parents (get-tag-summary parent-zips) ; (get-parents-tag-summary zipr pred-map)
                                 :children (get-children-tag-summary zipr
                                                                     pred-map)
                                 :old-sibs (get-tag-summary left-sib-zips)
                                 :young-sibs (get-tag-summary right-sib-zips)}})))))

(defn tag
  [zipr pred-map]
