I don’t think that it’s a bug. Destroy has been on Roblox for many years and the “issue” is still here. This is what the official API has to say about it:
Sets the Instance.Parent property to nil, locks the Instance.Parent property, disconnects all connections, and calls Destroy on all children. This function is the correct way to dispose of objects that are no longer required. Disposing of unneeded objects is important, since unnecessary objects and connections in a place use up memory (this is called a memory leak) which can lead to serious performance issues over time.
In conclusion, this is technically intentional to work like that.
Then it seems like roblox not recommend to clone a modulescript or script in game
And I am realy confused that each player has serveral official script running under it like Health or PlayerControl. Do they cause memory leak when player get out?
Roblox servers don’t last forever. There is always something to make servers in Your game restart, like a Roblox Client update. I don’t think that someone needs to make 1000 scripts every second. Just work on the game like normal and it won’t be that problematic (I hope).
I think that servers are a lot more powerful than clients devices so i think that a server for Your game will be able to work properly for way longer than 13 hours. You can also use this tip from the official API:
Tip: After calling Destroy on an object, set any variables referencing the object (or its descendants) to nil. This prevents your code from accessing anything to do with the object.
This will also reduce memory usage because server needs less space to store nil comparing to let’s say a module script object.