Reads very scannable, and the disabled email with the inline reason is exactly the right call. For field predictability I would tie Save Edits to a dirty state so it only activates once something actually changes, paired with a subtle unsaved-changes cue. That closes the loop...