fix(sync): refresh cloud preferences and restore cleared shortcuts - #2881
Merged
bobleer merged 1 commit intoSep 8, 2026
Merged
Conversation
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
Account settings could reach disk while the live font, language, appearance or shortcut runtime retained old preferences. Refresh these runtimes after settings-applied events, serialize overlapping refreshes, and restore registered shortcut defaults when synced overrides are cleared.
Exclude document write timestamps and informational build versions from settings hashes to avoid uploading unchanged preferences. Add configuration coverage and older supported payload round-trip tests, and document the actual synchronization scope and authoritative import behavior.
Type and Areas
Type: Bug fix / regression fix
Areas: Rust core settings sync, Web UI configuration and preference runtimes, documentation
Motivation / Impact
Verification
Passed:
cargo test -p openbitfun-core --no-default-features --lib service::config::— 122 tests.cargo test -p openbitfun-core --no-default-features --features remote-connect --lib service::remote_connect::settings_sync::tests— 6 tests.cargo test -p openbitfun-core --no-default-features --features remote-connect --lib service::config::service::tests::account_settings_round_trip_covers_persisted_preference_groups— final coverage fixture passed.pnpm --dir src/web-ui exec vitest run src/infrastructure/config/services/ConfigManager.test.ts src/infrastructure/account/settingsAppliedListener.test.ts src/infrastructure/font-preference/core/FontPreferenceService.test.ts src/infrastructure/services/ShortcutManager.test.ts— focused suites passed; the subsequently added refresh-order test also passed in the settings-applied suite (44 tests total).pnpm run check:webcompleted the canvas, typography, Appearance and theme gates; its first type-check was blocked by missing generated API bindings. Afterpnpm --dir src/web-ui run gen:types,pnpm run type-check:weband the finalpnpm --dir src/web-ui exec tsc --noEmitpassed.pnpm run fmt:rsandgit diff --checkpassed.Reviewer Notes
AI-assisted implementation with focused automated verification. Tests use isolated configuration directories and mocked frontend adapters. No live multi-device, SSH remote-workspace, remote-control, Peer Device Mode or Detached Dispatch end-to-end verification was performed; no rendered visual QA is claimed.
The settings wire format and import replacement semantics are unchanged. The hash adjustment can cause one upload on the next local change when an existing cursor still has the old hash. Custom Agent/Skill source files, Hook scripts, imported skin/pet assets and local credential-vault records remain outside the configuration payload; the documentation makes that boundary explicit.
Checklist