anchor.diff:  ;; You can see which ones have already been performed by doing
   ;; (access-history =monitored-metaobject=)
   ;;
  -;; To try it further, try performing some of the operations we wrote replies for.
  +;; To try it further, perform some of the operations we wrote replies for.
  
positive.code: 
  (in-package :sheeple-user)
  
  (defproto =monitored-metaobject= =standard-metaobject=
    ((access-history nil)))
  
  (defmessage note-operation (metaobject object property-name operation)
    (:reply ((metaobject =monitored-metaobject=) object property-name operation)
      (push (list operation object property-name (get-universal-time)) (access-history metaobject))))
  
  (defmessage reset-access-history (metaobject)
    (:reply ((metaobject =monitored-metaobject=))
      (setf (access-history metaobject) nil)))
  
  (defreply smop:direct-property-value :before ((mo =monitored-metaobject=) object pname)
    (note-operation mo object pname 'direct-property-access))
  
  
negative.code: (defreply smop:property-makunbound :before ((mo =monitored-metaobject=) object pname)
    (note-operation mo object pname 'property-removal))
  
  ;; Once we've defined our 'alternate' object system, it's just a matter of creating a new object
  ;; and making it use our =monitored-metaobject=, which essentially puts it in the realm of
  ;; 'The fork of Sheeple that happens to monitor some property-related stuff'.
  (defproto =monitored-object= ()
    ((prop1 "var")
     (prop2 234))
  