CmdPal: Migrate bookmarks manually#42814
Merged
michaeljolley merged 2 commits intomicrosoft:mainfrom Oct 23, 2025
Merged
Conversation
Stop being clever—do the hard work properly. Remove ID auto-fixing from BookmarkData and add an explicit migration step to BookmarkManager. That “save after load” must have been a mistake… right?
Adds a new unit test that verifies generated IDs are correctly persisted and can be reloaded.
Collaborator
Author
Contributor
There was a problem hiding this comment.
Pull Request Overview
This PR implements a migration path for legacy bookmark data from pre-0.95 versions that lacked ID fields. The migration ensures that bookmarks receive persistent IDs that are preserved across application restarts, which is critical for maintaining associations with hotkeys and aliases.
Key Changes
- Removed automatic ID generation from
BookmarkDataconstructor whenGuid.Emptyis provided, shifting migration responsibility to the manager layer - Added migration logic in
BookmarksManager.LoadBookmarksFromFile()to detect and upgrade legacy bookmarks - Enhanced test infrastructure with save tracking to verify persistence behavior
Reviewed Changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| src/modules/cmdpal/ext/Microsoft.CmdPal.Ext.Bookmark/Persistence/BookmarkData.cs | Simplified 3-parameter constructor to directly assign ID without fallback generation |
| src/modules/cmdpal/ext/Microsoft.CmdPal.Ext.Bookmark/BookmarksManager.cs | Added legacy data upgrade logic that generates and persists IDs for bookmarks with Guid.Empty |
| src/modules/cmdpal/Tests/Microsoft.CmdPal.Ext.Bookmarks.UnitTests/MockBookmarkDataSource.cs | Added save tracking with SaveCount property and WaitForSave method for deterministic async testing |
| src/modules/cmdpal/Tests/Microsoft.CmdPal.Ext.Bookmarks.UnitTests/BookmarkManagerTests.cs | Added test verifying that generated IDs persist correctly across manager instantiations |
src/modules/cmdpal/ext/Microsoft.CmdPal.Ext.Bookmark/BookmarksManager.cs
Show resolved
Hide resolved
mirmirmirr
pushed a commit
to mirmirmirr/PowerToys
that referenced
this pull request
Nov 9, 2025
<!-- Enter a brief description/summary of your PR here. What does it fix/what does it change/how was it tested (even manually, if necessary)? --> ## Summary of the Pull Request This PR fixes the migration of bookmarks from versions prior to 0.95, resolving an issue where hotkeys and aliases wouldn’t persist on bookmarks created with Command Palette 0.94 or earlier. It removes ID auto-fixing from `BookmarkData` in favor of an explicit migration step handled by `BookmarkManager`. <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [x] Closes: microsoft#42796 - [ ] **Communication:** I've discussed this with core contributors already. If the work hasn't been agreed, this work might be rejected - [ ] **Tests:** Added/updated and all pass - [ ] **Localization:** All end-user-facing strings can be localized - [ ] **Dev docs:** Added/updated - [ ] **New binaries:** Added on the required places - [ ] [JSON for signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json) for new binaries - [ ] [WXS for installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs) for new binaries and localization folder - [ ] [YML for CI pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml) for new test projects - [ ] [YML for signed pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml) - [ ] **Documentation updated:** If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys) and link it here: #xxx <!-- Provide a more detailed description of the PR, other things fixed, or any additional comments/features here --> ## Detailed Description of the Pull Request / Additional comments <!-- Describe how you validated the behavior. Add automated tests wherever possible, but list manual validation steps taken as well --> ## Validation Steps Performed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Summary of the Pull Request
This PR fixes the migration of bookmarks from versions prior to 0.95, resolving an issue where hotkeys and aliases wouldn’t persist on bookmarks created with Command Palette 0.94 or earlier.
It removes ID auto-fixing from
BookmarkDatain favor of an explicit migration step handled byBookmarkManager.PR Checklist
Detailed Description of the Pull Request / Additional comments
Validation Steps Performed