When a checkout or a hold is completed, Koha moves the issues/reserves row to their old_* counterpart. We are leaning towards chaining calls to simplify code, but calling methods like Koha::Hold->cancel or Koha::Hold->fill should somehow mark the current object so trying to store it by mistake should raise an exception.