From 60159b9f003c1606fb69f9e5f59c4e0806a2daf8 Mon Sep 17 00:00:00 2001 From: Vincent Koc Date: Sat, 20 Jun 2026 18:10:32 +0200 Subject: [PATCH] fix(parallels): keep fresh malformed package locks --- scripts/e2e/parallels/package-artifact.ts | 2 +- test/scripts/parallels-smoke-model.test.ts | 12 +++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/scripts/e2e/parallels/package-artifact.ts b/scripts/e2e/parallels/package-artifact.ts index 2c0d5da5e15f..5251bfe2ab2d 100644 --- a/scripts/e2e/parallels/package-artifact.ts +++ b/scripts/e2e/parallels/package-artifact.ts @@ -248,7 +248,7 @@ async function removeStalePackageLock(lockDir: string, staleMs: number): Promise return; } const ageMs = Date.now() - ((await stat(lockDir).catch(() => undefined))?.mtimeMs ?? Date.now()); - if (owner || ageMs >= staleMs) { + if (owner?.pid !== undefined || staleMs <= 0 || ageMs >= staleMs) { await rm(lockDir, { force: true, recursive: true }).catch(() => undefined); } } diff --git a/test/scripts/parallels-smoke-model.test.ts b/test/scripts/parallels-smoke-model.test.ts index 699002f9ad3c..60f4fe0de41a 100644 --- a/test/scripts/parallels-smoke-model.test.ts +++ b/test/scripts/parallels-smoke-model.test.ts @@ -445,7 +445,7 @@ describe("Parallels smoke model selection", () => { expect(retained).toBe(`${"a".repeat(2)}${"b".repeat(10)}`); }); - it("reclaims package locks with malformed owner pids", async () => { + it("keeps fresh package locks with malformed owner pids", async () => { const lockDir = makeTempDir(tempDirs, "openclaw-parallels-package-lock-"); mkdirSync(lockDir, { recursive: true }); writeFileSync(join(lockDir, "owner.json"), '{"pid":-1,"token":"stale"}\n'); @@ -457,6 +457,16 @@ describe("Parallels smoke model selection", () => { await packageArtifactTesting.removeStalePackageLock(lockDir, 2 * 60 * 60_000); + expect(existsSync(lockDir)).toBe(true); + }); + + it("reclaims stale package locks with malformed owner pids", async () => { + const lockDir = makeTempDir(tempDirs, "openclaw-parallels-package-lock-"); + mkdirSync(lockDir, { recursive: true }); + writeFileSync(join(lockDir, "owner.json"), '{"pid":-1,"token":"stale"}\n'); + + await packageArtifactTesting.removeStalePackageLock(lockDir, 0); + expect(existsSync(lockDir)).toBe(false); });