From f7a6548b68ad279ad390c5d76ffeff46db6b2f20 Mon Sep 17 00:00:00 2001 From: Mohamed Boudra Date: Fri, 17 Jul 2026 11:33:56 +0200 Subject: [PATCH] fix(app): refresh stale config import apply --- .../project-config-import-model.test.ts | 4 ++++ .../project-config-import/project-config-import-model.ts | 6 +++++- packages/protocol/src/messages.ts | 2 +- packages/server/src/server/websocket-server.ts | 2 +- 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/packages/app/src/project-config-import/project-config-import-model.test.ts b/packages/app/src/project-config-import/project-config-import-model.test.ts index 462924bef6..2f3f6e53ca 100644 --- a/packages/app/src/project-config-import/project-config-import-model.test.ts +++ b/packages/app/src/project-config-import/project-config-import-model.test.ts @@ -120,8 +120,12 @@ describe("project config import state model", () => { currentRevision: null, }), ).toBe(true); + expect(projectConfigImportNeedsRefresh({ code: "nothing_to_import" })).toBe(true); expect(projectConfigImportNeedsRefresh({ code: "write_failed" })).toBe(false); expect(projectConfigImportApplyFailureRetryAction({ code: "write_failed" })).toBe("apply"); + expect(projectConfigImportApplyFailureRetryAction({ code: "nothing_to_import" })).toBe( + "refresh", + ); expect( projectConfigImportApplyFailureRetryAction({ code: "stale_source_config", diff --git a/packages/app/src/project-config-import/project-config-import-model.ts b/packages/app/src/project-config-import/project-config-import-model.ts index 276a4b6828..1049f9d692 100644 --- a/packages/app/src/project-config-import/project-config-import-model.ts +++ b/packages/app/src/project-config-import/project-config-import-model.ts @@ -92,7 +92,11 @@ export function projectConfigImportCanApply(state: ProjectConfigImportState): bo } export function projectConfigImportNeedsRefresh(error: ProjectConfigImportVisibleError): boolean { - return error.code === "stale_source_config" || error.code === "stale_project_config"; + return ( + error.code === "stale_source_config" || + error.code === "stale_project_config" || + error.code === "nothing_to_import" + ); } export function projectConfigImportApplyFailureRetryAction( diff --git a/packages/protocol/src/messages.ts b/packages/protocol/src/messages.ts index dafcb4b51c..dc81ab4f39 100644 --- a/packages/protocol/src/messages.ts +++ b/packages/protocol/src/messages.ts @@ -2706,7 +2706,7 @@ export const ServerInfoStatusPayloadSchema = z providerRemoval: z.boolean().optional(), // COMPAT(importSessionWorkspaceTarget): added in v0.1.110, remove gate after 2027-01-16. importSessionWorkspaceTarget: z.boolean().optional(), - // COMPAT(projectConfigImportConductor): added in v0.1.X, drop the gate when floor >= v0.1.X. + // COMPAT(projectConfigImportConductor): added in v0.1.110, drop the gate when floor >= v0.1.110. projectConfigImportConductor: z.boolean().optional(), // COMPAT(forgeProviders): added in v0.1.106, drop the gate when daemon floor >= v0.1.106. // Daemon advertises pluggable non-GitHub forge support (the forge registry); diff --git a/packages/server/src/server/websocket-server.ts b/packages/server/src/server/websocket-server.ts index 848cef2660..075c6d7998 100644 --- a/packages/server/src/server/websocket-server.ts +++ b/packages/server/src/server/websocket-server.ts @@ -1279,7 +1279,7 @@ export class VoiceAssistantWebSocketServer { providerRemoval: true, // COMPAT(importSessionWorkspaceTarget): added in v0.1.110, remove gate after 2027-01-16. importSessionWorkspaceTarget: true, - // COMPAT(projectConfigImportConductor): added in v0.1.X, drop the gate when floor >= v0.1.X. + // COMPAT(projectConfigImportConductor): added in v0.1.110, drop the gate when floor >= v0.1.110. projectConfigImportConductor: true, // COMPAT(forgeProviders): added in v0.1.106, drop the gate when daemon floor >= v0.1.106. forgeProviders: true,