Quick answer: Unity Input System action firing twice after the player rebinds a key? The interactive rebind isn't removing the previous binding - call ApplyBindingOverride or EraseBindingOverride before assigning.

After remapping Jump from Space to F, every press now fires the action twice. Removing F still leaves the original Space binding live.

Override the right binding index

var op = action.PerformInteractiveRebinding(bindingIndex)
    .OnComplete(o => { o.Dispose(); SaveBindings(); })
    .Start();

The bindingIndex matters. Without it, the rebind appends a composite leg instead of overriding the binding you meant.

Clear stale composite bindings

For Movement-style composites, iterate action.bindings and call RemoveBindingOverride(i) on each leg before reassigning. Otherwise stale overrides for WASD compose with the new arrow-key binding.

Persist and reload

Use actions.SaveBindingOverridesAsJson() on save, LoadBindingOverridesFromJson() on boot. Manually editing each binding is the bug path; the JSON round-trip is the supported one.

“Rebinding without clearing previous overrides is how every Input System rebind UI ships a double-fire bug.”

Hook your rebind flow to a developer console command that dumps the override JSON - reproducing user-reported binding issues is the kind of thing you'll want next month.