code: func (rcStrategy) ValidateUpdate(ctx context.Context, obj, old runtime.Object) field.ErrorList {
  	oldRc := old.(*api.ReplicationController)
  	newRc := obj.(*api.ReplicationController)
  
  	validationErrorList := validation.ValidateReplicationController(newRc)
  	updateErrorList := validation.ValidateReplicationControllerUpdate(newRc, oldRc)
  	updateErrorList = append(updateErrorList, validation.ValidateConditionalPodTemplate(newRc.Spec.Template, oldRc.Spec.Template, field.NewPath("spec.template"))...)
  	errs := append(validationErrorList, updateErrorList...)
  
  	for key, value := range helper.NonConvertibleFields(oldRc.Annotations) {
  		parts := strings.Split(key, "/")
  		if len(parts) != 2 {
  			continue
  		}
  		brokenField := parts[1]
  
  		switch {
  		case strings.Contains(brokenField, "selector"):
  			if !apiequality.Semantic.DeepEqual(oldRc.Spec.Selector, newRc.Spec.Selector) {
  				errs = append(errs, field.Invalid(field.NewPath("spec").Child("selector"), newRc.Spec.Selector, "cannot update non-convertible selector"))
  			}
  		default:
  			errs = append(errs, &field.Error{Type: field.ErrorTypeNotFound, BadValue: value, Field: brokenField, Detail: "unknown non-convertible field"})
  		}
  	}
  
  	return errs
  }
docs: // ValidateUpdate is the default update validation for an end user.