   (reset! prog-hover nil)
   (.remove gdom/classes (gdom/getElement "prog-container") "hover"))
 
-(defn on-prog-frame-restore [ss-ts prog-frame]
+(defn on-prog-frame-restore [ts prog-frame]
   ; Time-travel to the past if snapshot is available.
-  (when-let [ago-ss (get @prog-ss ss-ts)]
+  (when-let [ago-ss (get @prog-ss ts)]
     (ago-restore (actx-agw (:world @prog-base)) ago-ss)
     ; TODO: This prog-frame deref is strange, as it turned into a
     ; om.core/MapCursor somehow during the event handler rather than
     ; an expected prog-frame dict.
     (reset! prog-curr @prog-frame)
     (reset! prog-hover nil)
-    (swap! prog-history #(vec (filter (fn [[s & _]] (<= s ss-ts)) %)))
-    (swap! prog-ss #(into {} (filter (fn [[s _]] (<= s ss-ts)) %)))
+    (swap! prog-history #(vec (filter (fn [[s & _]] (<= s ts)) %)))
+    (swap! prog-ss #(into {} (filter (fn [[s _]] (<= s ts)) %)))
     (cbfg.world.base/render-client-hist (:reqs @prog-curr))))
 
 ; -------------------------------------------------------------------

(def prog-base    (atom {}))  ; Stable parts of prog, even during time-travel.
(def prog-curr    (atom {}))  ; The current prog-frame.
(def prog-hover   (atom nil)) ; A past prog-frame while hovering over prog-history.
(def prog-history (atom []))  ; Each event is [ss-ts label prog-frame].
(def prog-ss      (atom {}))  ; ss-ts => agw-snapshot.

(defn prog-init [world]
  (reset! prog-base {:world world


(defn render-events [app owner]
  (apply dom/ul nil
         (map (fn [[ts label prog-frame]]
                (dom/li #js {:className (str "evt evt-" ts)
                             :onMouseEnter #(on-prog-frame-focus prog-frame)
                             :onMouseLeave #(on-prog-frame-blur)}
                        (dom/button
                         #js {:onClick #(on-prog-frame-restore ts prog-frame)}
                         "rollback")
                        (str ts (apply str label))))
              app)))

(defn render-clients [app owner]
