code: func (f *FinishAttempt) RollForward(c context.Context) (muts []tumble.Mutation, err error) {
  	atmpt, ex, err := model.InvalidateExecution(c, f.Auth)
  	if err != nil {
  		logging.WithError(err).Errorf(c, "could not invalidate execution")
  		return
  	}
  
  	if err = ResetExecutionTimeout(c, ex); err != nil {
  		logging.WithError(err).Errorf(c, "could not reset timeout")
  		return
  	}
  
  	ar := &model.AttemptResult{
  		Attempt: model.AttemptKeyFromID(c, &atmpt.ID),
  		Data:    *f.Data,
  	}
  
  	rslt := *f.Data
  	atmpt.Result.Data = &rslt
  	atmpt.Result.Data.Object = ""
  
  	err = errors.Annotate(ds.Put(c, atmpt, ar), "during Put").Tag(grpcutil.Tag.With(codes.Internal)).Err()
  	return
  }
docs: // RollForward implements tumble.Mutation
  //
  // This mutation is called directly from FinishAttempt.