anchor.diff:  
   (define-json-handler (cl-notebook/notebook/change-cell-language) ((book :notebook) (cell-id :integer) (new-language :keyword))
     (let ((cont-fact (first (lookup book :a cell-id :b :contents)))
  -	(val-fact (first (lookup book :a cell-id :b :result)))	
  +	(val-fact (first (lookup book :a cell-id :b :result)))
   	(cell-type (caddar (lookup book :a cell-id :b :cell-type)))
   	(lang-fact (first (lookup book :a cell-id :b :cell-language))))
       (unless (eq (third lang-fact) new-language)
  
positive.code:        do (let ((stale? (first (lookup book :a cell-id :b :stale :c t)))
  		(res-fact (first (lookup book :a cell-id :b :result)))
  		(*package* (namespace book)))
  	    (let ((res 
  		   (handler-case
  		       (bt:with-timeout (.1)
  			 (front-end-eval 
  			  :common-lisp cell-type 
  			  (caddar (lookup book :a cell-id :b :contents))))
  		     #-sbcl (bordeaux-threads:timeout () :timed-out)
  		     #+sbcl (sb-ext:timeout () :timed-out))))
  
negative.code: 		(when stale? (delete! book stale?))
  		(unless (equalp (third res-fact) res)
  		  (let ((new (list cell-id :result res)))
  		    (if res-fact
  			(change! book res-fact new)
  			(insert! book new))))))))
      (write! book)))
  