Server scripts have a visible property called RunContext that can be set to legacy, client, or server that will change how it works.
Unaware to many people, localscripts have the exact same property, but it’s hidden from the user.
They both inherit the same class BaseScript which contains this property, but localscripts are purposefully hiding this property. I would imagine due to legacy complications it needs to have this setup, but I believe it would be helpful to have this property show up as a readonly property to help communicate to the developer if it was accidentally put in an undesirable state.
By default it is set to Enum.RunContext.Legacy, if it gets set to Enum.RunContext.Client and is under StarterPlayerScripts it will run twice (once in StarterPlayerScripts and once in PlayerScripts). A subtle mistake that can easily cause some heartache if the dev is not aware of the issue at hand.
Additional context:
I use a plugin called ReClass that converts 1 instance to another 1 instance by copying all of the applicable properties over. One of the accidental hiccups that can occur is when converting a script to a localscript, the incorrect runcontext can be copied over without even realizing it, thus putting the script into an undesired state.