From 82be278fc92a058f8eaee307b79dd63d510fa773 Mon Sep 17 00:00:00 2001 From: Senthil Ravichandran Date: Tue, 11 Aug 2026 17:21:40 -0700 Subject: [PATCH 1/2] test(e2e): accept inline Shields timer recovery --- test/e2e/live/shields-config.test.ts | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/test/e2e/live/shields-config.test.ts b/test/e2e/live/shields-config.test.ts index 6e86419eb9f..d161314eeff 100644 --- a/test/e2e/live/shields-config.test.ts +++ b/test/e2e/live/shields-config.test.ts @@ -989,14 +989,18 @@ test("shields-config: live Shields lifecycle restores stopped OpenClaw under bot const timerMarker = readTimerMarker(SANDBOX_NAME); process.kill(timerMarker.pid, "SIGKILL"); const statusTimer = await runNemoclaw(host, [SANDBOX_NAME, "shields", "status"], { - artifactName: "phase-9-status-down-before-auto-restore", + artifactName: "phase-9-status-after-dead-timer", }); - expect(statusTimer.stdout).toContain("Shields: DOWN"); + expect(statusTimer.exitCode, resultText(statusTimer)).toBe(0); + + let lastTimerStatus = resultText(statusTimer); + let restored = statusTimer.stdout.includes("Shields: UP"); + if (!restored) { + expect(statusTimer.stdout).toContain("Shields: DOWN"); + } const deadline = Date.now() + TIMER_POLL_TIMEOUT_MS; - let restored = false; - let lastTimerStatus = ""; - for (let attempt = 1; Date.now() < deadline; attempt += 1) { + for (let attempt = 1; !restored && Date.now() < deadline; attempt += 1) { const waitForRestoreAt = Math.max(0, new Date(timerMarker.restoreAt).getTime() - Date.now()); await delay(Math.max(TIMER_POLL_INTERVAL_MS, waitForRestoreAt + 1_000)); const poll = await runNemoclaw(host, [SANDBOX_NAME, "shields", "status"], { From 52897b041d6bcaf8bf29e7b46e0286e2ab14d5e1 Mon Sep 17 00:00:00 2001 From: Senthil Ravichandran Date: Tue, 11 Aug 2026 17:56:47 -0700 Subject: [PATCH 2/2] test(e2e): keep timer recovery assertion linear Signed-off-by: Senthil Ravichandran --- test/e2e/live/shields-config.test.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/test/e2e/live/shields-config.test.ts b/test/e2e/live/shields-config.test.ts index d161314eeff..48e133654e3 100644 --- a/test/e2e/live/shields-config.test.ts +++ b/test/e2e/live/shields-config.test.ts @@ -994,10 +994,8 @@ test("shields-config: live Shields lifecycle restores stopped OpenClaw under bot expect(statusTimer.exitCode, resultText(statusTimer)).toBe(0); let lastTimerStatus = resultText(statusTimer); + expect(statusTimer.stdout).toMatch(/Shields: (?:UP|DOWN)/); let restored = statusTimer.stdout.includes("Shields: UP"); - if (!restored) { - expect(statusTimer.stdout).toContain("Shields: DOWN"); - } const deadline = Date.now() + TIMER_POLL_TIMEOUT_MS; for (let attempt = 1; !restored && Date.now() < deadline; attempt += 1) {