anchor.diff:  	  :values
   	  (handler-case
   	      (list
  -	       (alist 
  +	       (alist
   		:type "string"
  -		:value (eval 
  -			`(with-html-output-to-string (s) 
  +		:value (eval
  +			`(with-html-output-to-string (s)
   			   ,@(read-all contents)))))
   	    (error (e)
   	      (list (alist :type 'error :value (front-end-error nil e))))))))
  +
  +;; (defun front-end-eval-formats ()
  +;;   (let ((h (make-hash-table)))
  +;;     (loop for m in (sb-mop:generic-function-methods #'front-end-eval)
  +;;        for (a b _) = (sb-mop:method-specializers m)
  +;;        when (and (typep a 'sb-mop:eql-specializer) (typep b 'sb-mop:eql-specializer))
  +;;        do (push (sb-mop:eql-specializer-object b)
  +;;                 (gethash (sb-mop:eql-specializer-object a) h nil)))
  +;;     h))
   
   (defmethod eval-notebook ((book notebook) &optional (cell-type :code))
     (let ((ids (notebook-cell-order book)))
  
positive.code: 
  (define-json-handler (cl-notebook/notebook/rename) ((book :notebook) (new-name :string))
    (multiple-value-bind (book renamed?) (rename-notebook! book new-name)
      (when renamed? 
        (unless (or (lookup book :b :package-edited?) (lookup book :b :package-error))
  	(repackage-notebook! book (default-package book))
  	(publish-update! book 'finished-package-eval :contents (notebook-package-spec-string book)))
  
negative.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))))
  