fix(config): preserve settings across saves and account sync - #2701
Merged
bobleer merged 1 commit intoAug 31, 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
Fix settings loss across local saves, account synchronization, and backup restoration. A saved realtime voice API key could disappear when an older or unconfigured account snapshot replaced local settings. The same paths also exposed other settings and model credentials to stale read/write races.
Type and Areas
Bug fix / regression fix. Rust configuration services and account sync, Desktop adapters, Web UI settings, regression tests, and compatibility documentation.
Motivation / Impact
Saving another setting, restarting, restoring an older backup, or receiving a delayed sync response must not silently discard unrelated settings or credentials. This also prevents failed disk writes from being committed by a later successful save and prevents concurrent model changes from losing or resurrecting entries.
Verification
GitHub CI passed on PR head
4698bfc9232f82010983b76b1b1754bf0ffb8d92: 10 successful checks, with only the 2 unrelated packaging jobs skipped by the existing impact classifier. Rust/CLI checks passed on Linux, macOS, and Windows. The full Web UI suite passed all 4,286 tests across 591 files, and frontend build/governance checks passed. No CI rules were weakened and no reruns were needed.Passed locally before rebasing onto the latest target branch; the intervening upstream commit changes unrelated Write-tool code. Rust commands used an isolated temporary Cargo target directory, and tests used synthetic temporary settings rather than the user's configuration.
cargo test -p bitfun-core --no-default-features --lib service::config:: --quiet— 120 passed.cargo test -p bitfun-core --no-default-features --features remote-connect --lib service::config:: --quiet— 131 passed.cargo test -p bitfun-core --no-default-features --features remote-connect --lib service::remote_connect::settings_sync::tests --quiet— 4 passed.pnpm run check:web— passed.cargo test -p bitfun-desktop --lib api::config_api::tests --quiet— passed.cargo check -p bitfun-desktop --quietandcargo build -p bitfun-desktop --bin bitfun-desktop --quiet— passed.pnpm run fmt:rsandgit diff --check— passed.After rebasing, the remote-connect configuration suite was rerun on the PR commit (131 passed), and
pnpm run lint:webpassed with no errors.Reviewer Notes
Checklist