anchor.diff:  (defun+ make-pipeline-spec (name stages context)
     (dbind (&key vertex tessellation-control tessellation-evaluation
                  geometry fragment) (flatten stages)
  -    (make-instance 'pipeline-spec
  -                   :name name
  -                   :vertex-stage vertex
  -                   :tessellation-control-stage tessellation-control
  -                   :tessellation-evaluation-stage tessellation-evaluation
  -                   :geometry-stage geometry
  -                   :fragment-stage fragment
  -                   :context context)))
  +    (let ((tags (mapcar λ(when _
  +                           (slot-value (gpu-func-spec _) 'diff-tag))
  +                        (list vertex
  +                              tessellation-control
  +                              tessellation-evaluation
  +                              geometry
  +                              fragment))))
  +      (make-instance 'pipeline-spec
  +                     :name name
  +                     :vertex-stage vertex
  +                     :tessellation-control-stage tessellation-control
  +                     :tessellation-evaluation-stage tessellation-evaluation
  +                     :geometry-stage geometry
  +                     :fragment-stage fragment
  +                     :diff-tags tags
  +                     :context context))))
   
   (defun+ pipeline-spec (name)
     (bt:with-lock-held (*gpu-pipeline-specs-lock*)
  
positive.code:                    :actual-uniforms uniforms
                     :doc-string nil
                     :declarations nil
                     :missing-dependencies nil)))
  
  (defmacro with-gpu-func-spec (func-spec &body body)
    `(with-slots (name in-args uniforms actual-uniforms context body instancing
                       equivalent-inargs equivalent-uniforms doc-string
                       declarations missing-dependencies) ,func-spec
       (declare (ignorable name in-args uniforms actual-uniforms context body
                           instancing equivalent-inargs equivalent-uniforms
                           doc-string declarations missing-dependencies))
       ,@body))
  
  (defmacro with-glsl-stage-spec (glsl-stage-spec &body body)
  
negative.code:    (doc-string :initarg :doc-string)
     (declarations :initarg :declarations)
     (missing-dependencies :initarg :missing-dependencies :initform nil)
     (cached-compile-results :initarg :compiled :initform nil)
     (diff-tag :initarg :diff-tag)))
  
  (defmethod pipeline-stages ((spec pipeline-spec))
    (with-slots (vertex-stage
  