   "Removes all child nodes of a node (by default, the current node), and
   returns a modified game with the current node set to the node whose
   children we just removed."
-  [game & {:keys [node-id] :or {node-id (current-node-id game)}}]
-  (let [z (-> (game-zip game node-id) zip-remove-children)]
+  [game & {:keys [node-id]}]
+  (let [node-id (or node-id (current-node-id game))
+        z (-> (game-zip game node-id) zip-remove-children)]
     (assoc game
       :root-node (zip/root z)
       :current-node (zip/node z))))

  id is supplied, the current node is used) is moved one place to the left
  among its siblings. If the node is already the leftmost (oldest) child of
  its parent node, the game is returned unchanged."
  [game & {:keys [node-id] :or {node-id (current-node-id game)}}]
  (let [z (-> (game-zip game node-id) zip-promote-node)]
    (assoc game :root-node (zip/root z)
                :current-node (zip/node z))))


  have to unzip and zip the tree for each added move. If
  remove-existing-moves? is true, any previously existing moves at the point
  of insertion are removed."
  [game san-moves & {:keys [node-id remove-existing-moves?]}]
  (let [node-id (or node-id (current-node-id game))]
    (add-move-sequence game board/move-from-san san-moves
                       node-id
                       remove-existing-moves?)))


(defn add-uci-move-sequence
