Change:
<!-- Do Not Delete This! bugreporttemplate --<!-- Please read our Rules of Conduct: --<!-- Read our guide about submitting issues: --<!-- Search existing issues to avoid creating duplicates. --<!-- Test using the latest Insiders build to see if your issue has already been fixed: --<!-- Instead of creating your report here, use 'Report Issue' from the 'Help' menu in VS Code to pre-fill useful information. --<!-- Launch with to check. --Does this issue occur when all extensions are disabled?: Yes <!-- If you answered No above, use 'Help: Start Extension Bisect' from Command Palette to try to identify the cause. --<!-- Issues caused by an extension need to be reported directly to the extension publisher. The 'Help Report Issue' dialog can assist with this. --- VS Code Version: 1.85.1 OS Version: Apple M1 Max Mac 13.6.2 Steps to Reproduce: this snippet to VSCode settings VSCode keeps changing the setting to: If I change the value back to true (a valid value), then force the settings to sync (confirming the sync happened with the new setting), then reopen VSCode again.. the value has reverted it back to "explicit" and a new sync entry (from opening VSCode) happens saying it synced that new value. If I change the value to "always" it does not change back to "explicit".
While is still allowed, I think they're trying to deprecate that and encourage usage of //. It's changing to which is equivalent to had been prior to the September 2023 release aka v1.83, see discussion in release notes and .
Probably the best fix would be actually remove true/false values as valid inputs. Keeping them as valid can/will cause confusion. While it is mentioned in those release notes, not everybody reads every release notes in detail and it still conflicts with VSCode suggesting those values as valid.
We're affected by this as well. We have committed our VS Code settings to over a dozen repositories, so any developer on v1.85 encountered this auto-migration and saw those changes in their . Fortunately, we all update our VS Code version on the same day, so the impact is reduced, but it still means there will be merge conflicts and developers will need to rebase all of their branches. In the past, whenever a VS Code update changes a setting, the old value continues to be accepted and there's a warning message shown. This gives us ample time to migrate the settings, instead of having to drop everything and fix it like today. Going forward, please follow that old approach and do not auto-migrate the settings.
This is a breaking change, how this even got merged?

Discussion:
const createCodeActionsAutoSave = (description: string): IJSONSchema => { return { <del> type: ['string', 'boolean'], </del> <ins> type: 'string', </ins> enum: ['always', 'explicit', 'never', true, false], enumDescriptions: [ nls.localize('alwaysSave', 'Triggers Code Actions on explicit saves and auto saves triggered by window or focus changes.'),

nls.localize('explicitSaveBoolean', 'Triggers Code Actions only when explicitly saved. This value will be deprecated in favor of "explicit".'), nls.localize('neverSaveBoolean', 'Never triggers Code Actions on save. This value will be deprecated in favor of "never".') ], <del> default: true, </del> <ins> default: 'explicit', </ins> description: description }; };

type: 'object', properties: codeActionsOnSaveDefaultProperties, additionalProperties: { <del> type: ['string', 'boolean'] </del> <ins> type: 'string' </ins> }, }, {

markdownDescription: nls.localize('editor.codeActionsOnSave', 'Run Code Actions for the editor on save. Code Actions must be specified and the editor must not be shutting down. Example: `"source.organizeImports": "explicit" `'), type: ['object', 'array'], additionalProperties: { <del> type: ['string', 'boolean'], </del> <ins> type: 'string', </ins> enum: ['always', 'explicit', 'never', true, false], }, default: {},