anchor.diff:                    (messages-in (continuation process))
                     (kells-in (continuation process))
                     (triggers-in (continuation process))))
  -    (setf (process process) (replace-variables (process process) process mapping ignored-vars)
  -          (continuation process) (replace-variables (continuation process) process mapping ignored-vars))
  +    (setf (process process) (replace-variables (process process) mapping ignored-vars)
  +          (continuation process) (replace-variables (continuation process) mapping ignored-vars))
       (printk "new process: ~a~%" process))
     (:method (mapping (process trigger) &optional ignored-vars)
       (setf ignored-vars (append (bound-variables (pattern process)) ignored-vars))
  
positive.code:       (reduce #'compose-processes (cons process substituted-processes))))
  
  ;;; FIXME: this is crying out for some simplification
  (defgeneric substitute-variables (mapping process &optional ignored-vars)
    (:method (mapping (process message) &optional ignored-vars)
      (mapc (lambda (proc) (substitute-variables mapping proc ignored-vars))
  
negative.code:                     (delete process (gethash (name proc) (kell-patterns kell)))))
              (kell-message-pattern (pattern process))))))
  
  (defun replace-variables (process mapping &optional ignored-vars)
    (let ((substituted-processes (mapcar (lambda (process-variable)
                                             (when (not (find (name process-variable) ignored-vars
                                             :key #'name))
  