The key question is why save-snapshot-object doesn't catch the fact
that your Hero objects have been 'touched'. What is happening in the
touched vector in the snapshot set after each iteration? There isn't
too much code; I'd recommend compiling with full debug, putting a
break in save-pro
On closer inspection, it seems that snapshot-set acts up on any sort of
circular references.
I created a self-contained test case which demonstrates the failure, using
two objects with mutual references.
Looking at the code, my guess is that since an object is saved before it is
marked as touched