I was not able to reproduce the error you are getting after using the same steps. Try doing it in an empty baseplate with just those two scripts. Same result?
To verify if the module remains there, check the player’s PlayerScripts at runtime. Check if the module is still there. If it isn’t, something else is removing it.
Try disabling the other scripts in your game one by one and see which one allows the module to remain there. The fact that it works in an empty baseplate leads me to believe that some part of your game is removing the module.
Cloning is synchronous. If ControlScript is available, so is its descendants. Going all the way back around to reference StarterPlayerScripts is pointless overhead when you can index the child directly. If you want to wait for availability, there’s WaitForChild.