edit: I corrected my label and it broke my save. When I use a saved game which has spoken to Xeona while her interaction was Under the faulty label then speaking to her again makes an error: cannot find label "find_xenoa".
If you had saved while being inside of that label, changed the name of the label and loaded that old save file, you'll get an error. It's not exactly a feature, it's the very core of the engine saving mechanism:
Ren'Py saves
the last finished Ren'Py Script statement,
label name where the said statement resides is a part of that save. Basically:
$ h = chars["Hinata"] # <== Single Ren'Py Script Statement.
"[h.fullname]" # <== Single Ren'Py Script Statement.
show expression h.show("profile", resize=(500, 500)) # <== Single Ren'Py Script Statement.
h.say "My name is Hinata" # <== Single Ren'Py Script Statement.
python:
# 10 000 000 lines of code... # <== STILL A Single Ren'Py Script Statement (meaning that only the previous statement will be saved until python block is finished).
Is that what you were warning me about when you said renaming labels caused problems?
Not at all, everyone who really worked with Ren'Py knows and expect that. What I meant was not usual Ren'Py behavior at all. In PyTFall we track a callback "last_label", it is a tricky way to remember where we came from while jumping labels when calling them is not really the best option for whatever reason. last_label callback is also used in Events and Quests. There is also a label_cache argument to Char.show() method for example, developer can ensure a behavior of a fixed image being returned while calling any constant set of tags from within any specific label. There are also a bunch of labels in interactions that expect specific naming, this has nothing to do with the callback, it's just expected naming rules.
None of that applies to NPCs in general, same for most of the unique content. It's something that is used by Interactions, Events and a couple of screens internally.
In my experience, saves are not a perfectly reliable way to test changes in the code, they don't take into account many things. Usually it's better to start a new game and, if needed, run the label you want to test from the console.
Also, when you change the code a lot, sometimes you have to force recompile the game, there is an option for that in renpy launcher.
You can test changes in the code using save/loading system, problem is that setting such an option in a game this complex requires too much work/concentration when writing code.
Recompiling is usually required when label names/file names have changed and Ren'Py doesn't notice that to trigger an auto-recompile for whatever reason. Those errors are less frequent since 6.18.