The server is fully authoritative and doesn't do any projection, the clients which didn't initiate the action will receive a packet from the server on other players motions and they will have to forward project to get the "real" state, which is what they think the server is running. That way all clients will see approximately what it thinks is the "real" state of the server.
So something like this on a timeline
T0 - ( Original Player presses thrust, sends off packet to server but does not execute thrust command locally yet )
T0 + 1/2 Ping - ( Packet arrives on server, server executes thrust command for OP, also OP executes thrust command locally, server sends out state update for OP )
T0 + 1/2 Ping OP + 1/2 Ping Receiving Player - ( Packet arrives to another client, that client forward projects to get the approximate realtime state of OP )
Hope that helps.