During analysis of T305966 we discovered that various users have somehow got set to a state where their skin is set to empty string in the database. This is not a valid value for the skin preference. This means a call to mw.user.options.get('skin') incorrectly returns empty string (garbage in, garbage out). Yet on French Wikipedia, at time of writing 441002 rows for the skin preference in the preferences table were set to empty string.
Questions to answer
- How might users have got to this state?
- How can we prevent it happening in future? Can we add any sort of validation?
- How can we fix existing rows.