The commit and discard changes need to show what they actually discard and commit, when pressed.

They also have had no onboarding, so it's up to the user to guess that they commit or discard "something". Does the changes to be committed encompass ALL changes to the program? All rules? The program settings itself? Does creating a new rule for a program not become valid until I press commit, even though I created the rule through another dialogue which said it was created?
The system, as of now, needs better visibility of what it changes, and some better onboarding build into the dialogue itself. For example, if you press it, it could show you a list of changes, and ask you whether you want to commit them or not.
It should also be made clear, that IF the intent is for no rules to apply, until they are created AND committed, that distinction needs to be made very clear to the user.
Sometimes the button just shows there are changes to commit, I'm also not sure why, because I don't remember changing things, so it's not clear what it actually tracks.