diff --git a/src/plugins/installed-plugin-index.test.ts b/src/plugins/installed-plugin-index.test.ts index 8490e9bdb59..0547d893711 100644 --- a/src/plugins/installed-plugin-index.test.ts +++ b/src/plugins/installed-plugin-index.test.ts @@ -551,6 +551,43 @@ describe("installed plugin index", () => { ]); }); + it("does not mark enabled-only migration snapshots stale for omitted disabled plugins", () => { + const enabledFixture = createRichPluginFixture(); + const disabledFixture = createRichPluginFixture(); + writePluginManifest(disabledFixture.rootDir, { + id: "disabled-demo", + name: "Disabled Demo", + configSchema: { type: "object" }, + providers: ["disabled-demo"], + }); + const current = loadInstalledPluginIndex({ + candidates: [ + enabledFixture.candidate, + { + ...disabledFixture.candidate, + idHint: "disabled-demo", + }, + ], + config: { + plugins: { + entries: { + "disabled-demo": { + enabled: false, + }, + }, + }, + }, + env: hermeticEnv(), + }); + const migratedEnabledOnly = { + ...current, + refreshReason: "migration" as const, + plugins: current.plugins.filter((plugin) => plugin.enabled), + }; + + expect(diffInstalledPluginIndexInvalidationReasons(migratedEnabledOnly, current)).toEqual([]); + }); + it("marks disabled plugins without dropping their cold contributions", () => { const fixture = createRichPluginFixture(); diff --git a/src/plugins/installed-plugin-index.ts b/src/plugins/installed-plugin-index.ts index f3b35c8725c..5c605c96762 100644 --- a/src/plugins/installed-plugin-index.ts +++ b/src/plugins/installed-plugin-index.ts @@ -731,6 +731,10 @@ export function diffInstalledPluginIndexInvalidationReasons( } for (const pluginId of currentByPluginId.keys()) { if (!previousByPluginId.has(pluginId)) { + const currentPlugin = currentByPluginId.get(pluginId); + if (currentPlugin?.enabled === false) { + continue; + } reasons.add("source-changed"); } }