anchor.diff:      :initarg :fd
       :accessor invalid-fd-fd
       :initform (required)))
  -  (:report (lambda (c s) (format s "Redirect from invalid fd: ~A~%" (invalid-fd-fd c)))))
  +  (:report (lambda (c s) (format s "Redirect from invalid fd: ~A~%" (invalid-fd-fd c))))
  +  (:documentation
  +   "A condition that indicates that an invalid fd has been
  +requested.
  +
  +This represents an error in the shell expression.
  +
  +An fd is considered invalid if it hasn't been bound by the shell
  +expression."))
   
   (defun get-fd (fd)
  +  "Return the fd (in this process) will be dup'd into to the given
  +fd (in a spawned subprocesses).
  +
  +See `bind-fd'."
     (let ((binding (assoc fd *fd-bindings*)))
       (when binding
         (return-from get-fd fd)))
  
positive.code:   (:report (lambda (c s) (format s "Can't enter FD ~A into retain/release management again" (fd-already-managed-fd c)))))
  
  (defun %manage-new-fd (fd)
    (when (gethash fd %fd-retain-count-table%)
      (error 'fd-already-managed :fd fd))
    (setf (gethash fd %fd-retain-count-table%) 1)
  
negative.code:   (:report (lambda (c s) (format s "FD ~A was over released" (fd-over-release-fd c)))))
  
  (defun %fd-release (fd)
    "Do the work of `fd-release', but assume the table is already
  locked."
    (unless (gethash fd %fd-retain-count-table%)
      (error 'fd-over-release :fd fd))
    (let ((count (decf (gethash fd %fd-retain-count-table%))))
  