The recent gamestup rewrite opened an opportunity to split the "game logic" of the gamesetup and the "view logic" of it. The GUI should be concerned with presenting the gamesetup data, not handling what happens when one changes a setting.
The current approach is a dead end: one cannot easily change the game attributes without the GUI, nor even know the structure. It is also difficult to parse a the game attributes to initialise the GUI (see match settings troubles). This is all especially problematic for the campaigns.
This new approach, which I intend to gradually implement, will decouple the model and the view in MVC parlance, and will be serialization-compatible so that the JSOn gamesettings and the 'gameSettings' object are synchronised. The GUI will only show the relevant data.
I use proxies to automatically register watchers, and trigger them when a setting changes. This is an opt-in approach like the current one, but results in cleaner code.
As a first step and example, this updates the "reveal" and "explored" settings. You can easily see that clicking on 'explored' or 'revealed' works as expected.