Go for it with the weak-key Scheme hash table - the garbage collection
stuff is a bit over my head, but if it works, that's great! Otherwise, you
can stay w/ the derived mark solution.
The map (in whatever form it takes) should be cleared at every
stop_translation_time_step. You can add that to your patch. It's
continually growing size is an oversight on my part from when I wrote the
engraver.