I see the issue in fixing the errors automatically in that "fixing the error" is another aspect of "changing the behavior of the program" (even on the syntactic level: how would you fix a line "x = (2+3-4*5;"?), and we likely don’t want random changes to this behavior to happen. The article says that for self-healing of code to work, you need to have a full specification of what it should do, e.g. in the form of test cases that check for every scenario. But if you cover every possible scenario in your test cases, then how can a program have an error to fix to begin with?
If such tests have been written, then writing a program satisfying all of them is definitely a solvable problem. But now the entire complexity of writing good code turns into complexity of writing good tests.
If such tests have been written, then writing a program satisfying all of them is definitely a solvable problem. But now the entire complexity of writing good code turns into complexity of writing good tests.