anchor.diff:  
   (define-json-obj rpc-call
     "A single method invocation."
  -  (service :initial "" :type string :read-only t)
  -  (method :initial "" :type string :read-only t)
  -  (args :initial '() :type list :read-only t :marshall-type arg-list)
  -  (id :initial nil :optional :read :read-only t))
  +  (service "service" :initial "" :type string :read-only t)
  +  (method "method" :initial "" :type string :read-only t)
  +  (args "args" :initial '() :type list :read-only t :marshall-type arg-list)
  +  (id "id" :initial nil :optional :read :read-only t))
   
   (define-json-obj rpc-error
     "Error object contained in a failed rpc-result."
  -  (message :initial "" :type string :read-only t)
  -  (code :initial 0 :read-only t)
  -  (data :initial nil :read-only t :optional :read-write))
  +  (message "message" :initial "" :type string :read-only t)
  +  (code "code" :initial 0 :read-only t)
  +  (data "data" :initial nil :read-only t :optional :read-write))
   
   (define-json-obj rpc-result
     "The result of an RPC method invocation."
  -  (data :initial nil :optional :read-write :read-only t)
  -  (error :initial nil :optional :read-write :read-only t :marshall-type rpc-error)
  -  (warnings :initial '() :optional :read-write :read-only t :marshall-type rpc-warning-list)
  -  (id :intitial nil :optional :read-write :read-only t))
  +  (data "data" :initial nil :optional :read-write :read-only t)
  +  (error "error" :initial nil :optional :read-write :read-only t :marshall-type rpc-error)
  +  (warnings "warnings" :initial '() :optional :read-write :read-only t :marshall-type rpc-warning-list)
  +  (id "id" :intitial nil :optional :read-write :read-only t))
   
   (defmacro define-object-array (name type)
     (let* ((predicate-name (cat-symbol name '#:-p))
  
positive.code:          (mapcar #',(cat-symbol '#:build- type) obj))
         (defun ,(cat-symbol '#:unmarshall- name) (str)
           (check-type str string)
           (let ((obj (json:decode-json-from-string str)))
             (,(cat-symbol '#:build- name) obj))))))
  
  (define-object-array rpc-request rpc-call)
  
negative.code:                                         `(cdr cell))))))
             (apply #',make-func arglist)))
         (defun ,unmarshall-func (json-string)
           (let ((json-obj (let ((json:*json-identifier-name-to-lisp* #'identity)
                                 (json:*identifier-name-to-key* #'identity))
                             (json:decode-json-from-string json-string))))
             (,build-func json-obj)))
         (defun ,marshall-func (obj)
           (json:with-object ()
             ,@(flet ((accessor (field) (cat-symbol name '#:- field)))
                     (loop for s in serialized-slots
                        collect (let ((encode-form `(encode-field ,(slot-key s)
                                                                  (,(accessor (slot-symbol s)) obj)
                                                                  ,@(if (slot-marshall-type s)
                                                                        (list `#',(cat-symbol '#:marshall-
                                                                                              (slot-marshall-type s)))
                                                                        '()))))
                                  (if (slot-optional-p s :write)
                                      `(when (,(accessor (slot-symbol s)) obj)
                                         ,encode-form)
                                      encode-form)))))))))
  
  ;; TODO: deal with the whole encoder thing (might want have
  ;; marshalling types set for args rather than decoders so we can
  