[Bug]: Saving a keybinding discards other unsaved keybinding edits
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 23k
- Forks
- 5.9k
- Avg merge
- 11h 14m
- Merged PRs (30d)
- 357
Description
Before submitting
- I searched existing issues and did not find a duplicate standalone issue.
- I included enough detail to reproduce or investigate the problem.
Area
apps/web
Steps to reproduce
- Open Settings → Keybindings.
- Edit the shortcuts or When conditions of several existing bindings without saving.
- Save one edited binding.
- Observe that other unsaved edits revert to their saved values.
Which edits disappear depends on the bindings' order in the saved configuration. No particular shortcuts or search filter are required.
Expected behavior
Saving one binding preserves every other binding's unsaved edits. The order in which bindings are saved should not matter.
Actual behavior
Other edited rows revert to their saved values, discarding their unsaved changes. Users must re-enter those edits when configuring several bindings together.
Impact
Minor bug or occasional failure
Version or commit
Reproduced against d29c56a5c.
Environment
Reproduced in Chrome using the web client from vp run dev with an isolated checkout and disposable settings. This editor is shared by web and desktop.
The recording host currently reports macOS 26.5.2 and Chrome 153.0.8010.36; versions were checked during this draft review.
Supporting evidence
Saving replaces a binding by removing its old entry and appending the new one. Settings row IDs include each binding's array index, so unchanged siblings receive new IDs when their positions shift. React recreates those rows and their local draft state.
https://github.com/user-attachments/assets/9473e0db-0c90-4825-a7a9-4113704d99f2
Related: https://github.com/pingdotgg/t3code/pull/4366 describes the same behavior. It was closed without merging.
Workaround
Edit and save one binding at a time.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start in the apps/web keybindings settings UI and reproduce the issue with vp run dev in Chrome, editing several rows before saving one. Inspect the React row identity and draft-state behavior described in the report; done means saving one binding preserves every other unsaved shortcut or When-condition edit regardless of row order.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- react, typescript
- Domain
- frontend, web-dev
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 68/100