diff --git a/scripts/e2e/parallels/macos-smoke.ts b/scripts/e2e/parallels/macos-smoke.ts index 98f072e08bec..8afecf0c38e0 100755 --- a/scripts/e2e/parallels/macos-smoke.ts +++ b/scripts/e2e/parallels/macos-smoke.ts @@ -797,6 +797,8 @@ printf 'preflight.umask=%s\n' "$(umask)" printf 'preflight.npmRoot=%s\n' "$(${guestNpm} root -g 2>/dev/null || true)" ${guestNpm} uninstall -g openclaw >/dev/null 2>&1 || true rm -rf "$HOME/.openclaw" +# Restored snapshots can contain corrupt optional-dependency tarballs that npm silently skips. +rm -rf "$HOME/.npm/_cacache" rm -f /tmp/openclaw-parallels-macos-gateway.log`); } diff --git a/test/scripts/parallels-smoke-model.test.ts b/test/scripts/parallels-smoke-model.test.ts index 162cac1c5170..02e3f5de28fd 100644 --- a/test/scripts/parallels-smoke-model.test.ts +++ b/test/scripts/parallels-smoke-model.test.ts @@ -936,6 +936,12 @@ if (isPrlctl) { expect(guestTransports.match(/umask 022/g)).toHaveLength(2); }); + it("clears restored macOS npm content cache before install lanes", () => { + const macos = readFileSync(TS_PATHS.macos, "utf8"); + + expect(macos).toContain('rm -rf "$HOME/.npm/_cacache"'); + }); + it("provisions portable Git before Windows dev update lanes", () => { const script = readFileSync(TS_PATHS.windows, "utf8"); const windowsGit = readFileSync(TS_PATHS.windowsGit, "utf8");