                         "update"
                         (update-in things [id :inputs] merge args)
                         "delete"
-                        (dissoc things id)))
+                        (dissoc things id)
+                        "delete-many"
+                        (reduce dissoc things (:ids args))))
       (dispatch [:response/command
                  ;; args in the response means update the editable thing's inputs
-                 {:args (:inputs thing)
-                  :command cmd}
+                 ;; it will be weird to see that the delete-many args have been
+                 ;; assigned an id, but oh well - it won't be used
+                 {:args args-given-id :command cmd}
                  ;; response status
                  200
                  tap])))

  (logout [client tap]
    (dispatch [:response/logout {:fake true} 200 tap]))
  (command [client cmd args tap]
    (let [thing {:inputs (update args :id (fnil identity (random-uuid)))}
          id (get-in thing [:inputs :id]) ;; used as identifier _and_ attribute
          cmdspace (or (namespace cmd) (:form-type tap))
          action (name cmd)

    result

    :ok
    (if (not (map? identifier))
      {:dispatch [:editable form-type identifier :state :pending true]
       channel result}
      ;; else identifier must be a bulk or unique request, this needs some work
      {channel result})))

(defn process-request [cofx event-vec]
  (let [result (request cofx event-vec)
