When you create a required single-value entity reference field, for example a term reference, then the referenced entity is deleted, the _none option disappears. When the widget is loaded up it defaults to the first option in the list, and the user can easily save the new value without noticing. Steps to reproduce below.
- Install Drupal with the standard profile
- Change the Tags field to Required, Allowed number of values to 1
- Change the Tags widget to Select list
- Create two terms in the Tags vocabulary, "foo" and "bar"
- Create an article node, set the Tags field to "foo"
- Delete the "foo" term
- Edit the article node, the widget now has "bar" selected
- Save the article node
I believe this tracks back to OptionsSelectWidget::getEmptyLabel()
which checks for !$this->hasValue
. It doesn't consider whether the stored value is actually present in the available options.