anchor.diff:  (in-package "CHAINS.TESTS")
  -
  -(define-task execution-task-1 ()
  -  ((sigma
  -    :initarg :sigma
  -    :reader sigma)))
  -
  -(define-operation (task execution-task-1) ()
  -  (with-open-file (out "data.sexp" :direction :output)
  -    (write "hello-world" :stream out))
  -  :task-1)
  -
  -(define-task execution-task-2 ()
  -  ((rho
  -    :initarg :rho
  -    :reader rho)))
  -
  -(define-task-input input-2)
  -(define-task-input-function input-2 execution-task-2 ((task execution-task-1))
  -  (with-open-file (in (merge-pathnames "data.sexp" (task-data-directory task)))
  -    (read in)))
  -
  -(define-operation (task execution-task-2) ((input-task input-2))
  -  input-task)
  -
  -(define-task execution-task-3 ()
  -  ((gamma
  -    :initarg :gamma
  -    :reader gamma)))
  -
  -(define-operation (task execution-task-3) ()
  -  (format nil "laughing-~A" (or (getf (operation-plist) :text)
  -				"at-nothing")))
  -
  -(defmethod task-completed-p ((task execution-task-3))
  -  (and (call-next-method)
  -       (not (string-equal (getf (operation-plist) :text) "dog"))))
  -
  -(define-design execution-design
  -    ((:documentation "Designs for execution"))
  -  ((execution-task-1 (:sigma 1 2 3 4 5)))
  -  ((execution-task-2 (:rho -1 -2 -3 -4 -5)))
  -  ((execution-task-3 (:gamma 11 12 13 14 15))))
  ++
  +;;;; Helpers
   
   (eval-when (:compile-toplevel :load-toplevel :execute)
     (defun ensure-temporary-directory ()
  
positive.code:   (defmacro with-temporary-directory ((var) &body body)
      `(do-with-temporary-directory #'(lambda (,var)
  				      ,@body))))
  
  (define-test compute-chains
    (let ((chains (compute-chains (generate 'execution-design))))
  
negative.code:       (assert-false (chain-completed-p area (list task-1 task-2 task-3) :text "dog")))))
  
  (define-test perform
    (with-temporary-directory (dir)
      (let ((*area* (prepare-directory dir))
  	  (*chain* nil)
  