Hi there, good questions!
We don’t have a syncVar for the myUnits list as there is no need to pass that information to the server or other clients. The myUnits list is used exclusively by the local authority to keep track of which unit’s it has spawned.
For knowing where a gameObject will exist, this has to do without how it was added to the scene. If it was spawned by the server, this will send action will cause the gameObject to be instantiated on all the clients as well as the server. If the gameObject was just instantiated locally or it appears already in a scene, then we can only guarantee it exists locally. Typically Mirror requires that all clients have the same starting scene setup to prevent users from have different objects appear when a scene is loaded. Later in the course we will create a preview of a building we are placing. This is instantiated locally just for the user to see where their building will go. This obejct appears only on the client it is created by and is not spawned by the server.
By default, the server has authority over all clients. So the check of !hasAuthority will always be false for a server owned object. In this case we need to check the connectionId instead to see if the server object belongs to local client or not. For other clients, only the local client has authority by default, so we can check if it hasAuthority to see if it’s the local client or a another client.