anchor.diff:  
   (defun (setf event-value) (value event key)
     "Set the value of KEY to VALUE in EVENT, running any conversion functions that exist."
  -  (let* ((key (make-keyword key))
  -         (cases (getf *event-special-keys* key)))
  +  (let ((cases (getf *event-special-keys* key)))
       (when (cadr cases) ;; remove keys that are different "units" of the same concept
         (dolist (k (remove-if (lambda (c) (eql c t)) (keys (car cases))))
           (remove-event-value event k)))
  
positive.code: ;; this was really confusing me when working on the piano-roll.
  ;; delta of course remains the same if specified...
  
  (define-event-special-key sustain ((t (* (event-value event :legato)
                                           (event-value event :dur))))
    :remove-keys (:legato)
    :define-methods t
    :documentation "How long the note should be held, in beats.
  
  See also: `legato', `delta'")
  
  (define-event-special-key legato ((:sustain (* (raw-event-value event :sustain)
                                                 (event-value event :dur)))
                                    (t 0.8))
    :remove-keys (:sustain)
    :define-methods t
    :documentation "How long the note should be held, in beats, as a factor of its total duration (`dur').
  
negative.code:   "Get the value of KEY in EVENT without running any conversion functions.
  
  See also: `event-value'"
    (getf (slot-value event 'event-plist) key))
  
  (defun (setf raw-event-value) (value event key)
    "Set the value of KEY to VALUE in EVENT without running any conversion functions.
  
  See also: `raw-event-value', `event-value'"
    (with-slots (event-plist) event
      (setf event-plist (plist-set event-plist key value)))
    value)
  
  (uiop:with-deprecation (:warning)
  