I see this in programming languages and packages too. Tensorflow is what I encountered most recently.
Scenario 1) "warning: doing this is deprecated, do it this way on new projects.". Code keeps building or running as the case may be. Tensorflow DOES NOT do this.
Scenario 2) " Error: this name is deprecated and you must use the new name.". Why make this an error? This is what tensorflow does. In each case the i've seen the new name *is* sensible and "better" than the old one. BUT, each and every old function, you have code to print the error and abort, why not generate a warning and run the new function, turn it into scenario 1?