anchor.diff:        (destructuring-bind (transport-id session-id)
             pathinfo
           (declare (ignore transport-id)) ; support for websocket only
  -        (cond ((assoc "disconnect" (get-parameters*) :test #'string=)
  +        (cond ((assoc "disconnect" (get-parameters*) :test #'string=) ; FIXME more cases or remove cond
                  (prog1 nil (handle-disconnect *reply* session-id)))))
         (handle-handshake scanner message-handler)))
   
  
positive.code: 
  (defun send-message (message)
    (let ((message-id (incf (getf-session *session* :message-id))))
      (apply #'websocket-send-message "~d:~d::~a"
             (if (consp message)
                 (list 4 message-id (encode-json message))
                 (list 3 message-id message)))))
  
  (defun send-ack (id &rest data)
    (websocket-send-message (apply #'concatenate 'string "6:::" id (if data (list "+" (encode-json-to-string data)) (list "")))))
  
negative.code:                (handle-ack id (funcall message-handler (decode-json-from-string data) t) data-ack))
                (:ack
                 (destructuring-bind (id data)
                     (coerce (nth-value 1 (scan-to-strings message-splitter data)) 'list)
                   (log-message :debug "Client acknowledged ~d~%Data: ~a" id data)
                   (alexandria:when-let ((callback (cdr (assoc (parse-integer id :junk-allowed nil)
                                                               (getf-session *session* :callbacks) :test #'=))))
                     (apply callback (decode-json-from-string (or data "[]"))))))
                (:error
                 (destructuring-bind (reason advice)
                     (coerce (nth-value 1 (scan-to-strings message-splitter message)) 'list)
  