public void doPrepare() {
   // note for future: in anticompaction two different operations use the same Transaction, and
   // both prepareToCommit()
   // separately: the second prepareToCommit is ignored as a "redundant" transition. since it is
   // only a checkpoint
   // (and these happen anyway) this is fine but if more logic gets inserted here than is performed
   // in a checkpoint,
   // it may break this use case, and care is needed
   checkpoint();
 }