How to fix Server Authority Rollback on my Double Jump, which results in some character flickering?

I have a Double Jump code that uses InputContext, InputAction, etc. It’s meant to be a good way to Works with character movement in server Authority. I use a modulescript that checks If the player is in the Air and If It has a Double Jump charge, then It changed the humanoidstate to jumping.

It Works Perfectly on Roblox Studio Test, and no rollback is mande there. I made the server script not fire on purpose and then It rollbacked, which means server Authority ia doing its job and my code was working. But then I test it on the Roblox site, and It seems to sometimes run smoothly, and sometimes Flicker the character with rollbacks. My ping was 17ms, so no bad connections. Idk If i uses InputContext wrong (uses InputAction.Pressed and InputAction.Released for both client and server code

If I recall correctly, you should be using RunService::BindToSimulation to read inputs & perform state changes. Not sure if this ever changed, but it’s probably still valid to this day since SAuth forces SignalBehavior to be Deferred.
So basically, something along the lines of,

-- assuming `action` is the InputAction
RunService:BindToSimulation(function()
    -- also include all the relevant checks you'd normally run in
    -- the aforementioned connections
    if action:GetState() then
        -- double jump logic or something
    end
end, Enum.StepFrequency.Hz60)

Would this work smoother than an InputAction.Pressed Event? And How would this be some, because It seems like a loop checking every simulation step, and It looks to me that It would be expensive and would require extra code to Ensure It doesnt repeat the doublejump. But i’ll try it

No it will not work
Because signals are defered in roblox and run far too late + Input is not the same as prediction
To read prediction you use :GetState() on a client
On server you can use .Pressed as far as i remember but on client no
After input there will be slight delay before prediction will be valid because client effectively has to predict sync
I have written post to add what you kinda proposed to use right now

But currently you have to write code like:

RunService:BindToSimulation(function()
	local state = action:GetState()
	if not state then return end
	--Double jump logic
end,Enum.StepFrequency.Hz60)

For more information you can also view this tutorial/post i wrote:
https://devforum.roblox.com/t/why-you-should-proxy-out-your-server-authority-inputactions/4765262