     pings)))
 
 (defn save* [{:keys [db user] :as ctx} ps]
+  (trace [:save* (:id user) ps])
   (let [new (update-pings ps)]
     (try (do (save-pings ctx new)
              {:saved new})

       (remove nil?)))

(defn save-pings [{:keys [db user thread-ts]} pings]
  (db/update-tags! db pings)
  (slack/send-messages
   user

  (flatten (map (partial evaluate ctx) tags)))

(defmethod evaluate :SLEEP [{:keys [db user] :as ctx} _]
  (let [sleepy-pings (db/sleepy-pings db user)]
    (trace [:sleepy-pings (:id user) (vec sleepy-pings)])
    [:SAVE*
     (map
      (fn [ping]
        [ping ["sleep"]])
      sleepy-pings)]))

(defn update-pings [pings]
  (->> pings
