So I will change the behavior to update only when something changes in SI/ YAFLA (maybe).
I'm working on something and I'm planning to make a full rewrite of some functions so this will take a bit.
The migration will always be a full reset to the base configuration of that version, having a migration for the actual content of that menu is probably unnecessary (I'll probably add a message in chat to notify the player).
Still, I was surprised (nicely) that you took the time to look at that awful code.
this function should not have changed the settings since the line that add checkboxes this should keep the data "state = global.SI_Storage[player_index].copy_settings[name]"
I guess I was missing something somewhere along the pipeline of the function ensure_data.
Sorry if the message is long/technical I don't get every day a chance to talk about this code so it was fun for me.