How is AssemblyLinearVelocity applied to a part?

I think @kleptonaut may hold the key to the lock I’m trying to pick here…

  1. What do you want to achieve? Keep it simple and clear!
    I’m currently working on a lag compensation script that will predict on the server where a part controlled by a player is on their client.
  2. What is the issue? Include enough details if possible!
    My issue is that I do not understand how ‘AssemblyLinearVelocity’ correlates to how a part will move next tick/physics update.
  3. What solutions have you thought of so far?
    Refer to the image below.
    Independent Variables:
    Dark Green - The root part’s CFrame in the previous heartbeat on the server
    Bright Green - The root part’s current CFrame on the server
    Blue - The root part’s current CFrame on the client
    Dependant Variables:
    Dark Orange - The inverse object space between Dark Green and Bright Green applied to Bright Green, calculated as HRP.CFrame * HRP.CFrame:ToObjectSpace(lastTickValue.CFrame):Inverse()
    Bright Orange - Dark Orange but corrected for the time between the cached CFrame’s time and the time on the client, calculated as HRP.CFrame * HRP.CFrame:ToObjectSpace(HRP.CFrame:Lerp(lastTickValue.CFrame, clientTime - lastTickValue.Time)):Inverse()
    Yellow - Bright Orange but with HRP.AssemblyLinearVelocity.Unit added on to it.