Genie
Hmm, good guide... Unfortunately I don't know any guide for that. Possibly documentation have something mentioned about that somewhere around _process() and _physics_process() methods and differences between them. I think there should be something about overall nodes processing order etc.
I know more or less how processing of that nodes may possibly be done, because previously I was working long time on my own game engine, so I know how main loop of such engine need to work and I can imagine how it works in Godot. I read a lot about game engine architecture from different sources depending on issues I faced, so it's hard to give me one exact guide, but all that gave me some experience.
I think basically the most important is to know from which thread methods are called and at which step they are processed by the engine.
Error you originally mentioned cause me to believe you called add_child at the time when physics step was executed by the engine.
Method _ready() is called by the engine main thread and at that time it should be safe to add_child because that means currently no other nodes are processed (there may be of course different issues connected with recursion for example etc., but I assume Godot architecture avoids that, documentation should state what is safe from _ready() and what is not).
In case of _on_Player_just_jumped, it is probably triggered by user input. Not sure how user input is handled by Godot on lower layer, but I wouldn't trust it can't be triggered during another operation.
And if you try to add more threads (like launching physics processing in other thread in Godot 4.x) things are getting even wilder 😝