The server can always do what it wants, it doesn’t need to be the owner of something. It is Only when a client needs to ask the server to do something that ownership becomes important.
Spawning AI and GameMode things should just happen on the GameMode or wherever you think is appropiate. Player input (RunOnServer) events is the only thing that should happen on the PlayerController or Character or anything attached to it.
GameMode only exist on the server so Client don’t even know it exists.
GameState can’t be owned by a Client so it is where the server posts events to the Clients never the other way (RunOnServer is impossible)
PlayerState is similar to GameState but one instance exists per player connected.