diff --git a/cli/src/__tests__/managed-install-check.test.ts b/cli/src/__tests__/managed-install-check.test.ts index 354f0be7033..379fba77314 100644 --- a/cli/src/__tests__/managed-install-check.test.ts +++ b/cli/src/__tests__/managed-install-check.test.ts @@ -4,6 +4,7 @@ import path from "node:path"; import { afterEach, describe, expect, it } from "vitest"; import { managedInstallChecks } from "../checks/managed-install-check.js"; import { + MANAGED_STORE_MARKER, buildNextManifest, flipCurrentAtomic, resolveInstallStorePaths, @@ -51,9 +52,24 @@ describe("managed install doctor checks", () => { homeDir: root, }); fs.mkdirSync(paths.cliRoot, { recursive: true }); + fs.writeFileSync(paths.markerPath, MANAGED_STORE_MARKER); expect(managedInstallChecks(paths)).toEqual([ expect.objectContaining({ name: "Managed install manifest", status: "fail" }), ]); }); + + it("ignores the shared CLI directory when it only contains update notice state", () => { + const root = fs.mkdtempSync(path.join(os.tmpdir(), "paperclip-install-doctor-")); + const paths = resolveInstallStorePaths({ + paperclipHome: path.join(root, ".paperclip"), + homeDir: root, + }); + fs.mkdirSync(paths.cliRoot, { recursive: true }); + fs.writeFileSync(path.join(paths.cliRoot, "update-check.json"), "{}\n"); + + expect(managedInstallChecks(paths)).toEqual([ + expect.objectContaining({ name: "Managed install", status: "pass" }), + ]); + }); }); diff --git a/cli/src/checks/managed-install-check.ts b/cli/src/checks/managed-install-check.ts index 324c5be812a..141b6ebadec 100644 --- a/cli/src/checks/managed-install-check.ts +++ b/cli/src/checks/managed-install-check.ts @@ -17,9 +17,13 @@ function pathContains(directory: string): boolean { } function hasManagedArtifacts(paths: InstallStorePaths): boolean { - return [paths.cliRoot, paths.manifestPath, paths.currentPath, paths.shimPath].some((entry) => - fs.existsSync(entry), - ); + return [ + paths.installsRoot, + paths.manifestPath, + paths.markerPath, + paths.currentPath, + paths.shimPath, + ].some((entry) => fs.existsSync(entry)); } export function nodeRuntimeCheck(): CheckResult {