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.