From fbb24dfce7db98aef583c19df27e7ea46102f379 Mon Sep 17 00:00:00 2001 From: Lotus CI Date: Thu, 22 Oct 2026 21:56:26 -0400 Subject: [PATCH] ci(windows-smoke): shell-only commands are n/a without a desktop Without Explorer the tray icon, taskbar overlay badge and thumbnail toolbar can't exist (E_FAIL / E_NOTIMPL). On a runner without an interactive desktop only those calls may fail, and the app must still respond. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_017PCb59uY3UKqDqt7B6hzd5 --- scripts/windows-smoke.mjs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/scripts/windows-smoke.mjs b/scripts/windows-smoke.mjs index 2b66987..c4aa55c 100644 --- a/scripts/windows-smoke.mjs +++ b/scripts/windows-smoke.mjs @@ -360,10 +360,19 @@ for (const [cmd, args] of calls) { if (err) failures.push(`${cmd}(${JSON.stringify(args)}): ${err}`); } const alive = await page.evaluate(() => document.title !== undefined).catch(() => false); +// Without a desktop there is no Explorer shell: the tray icon, the taskbar +// overlay badge and the thumbnail toolbar can't exist, and Windows answers +// E_FAIL / E_NOTIMPL. cinny ignores those errors; the app must just survive. +const SHELL_ONLY = /^(set_badge_count|set_tray_unread|set_tray_call_state|set_tray_update_ready|set_thumbbar)\(/; +const real = interactive ? failures : failures.filter((f) => !SHELL_ONLY.test(f)); record( 'tray, badge, taskbar, thumbbar and media-control commands', - failures.length === 0 && alive ? 'pass' : 'fail', - failures.length ? failures.join(' | ') : `${calls.length} calls ok, app still responsive: ${alive}`, + real.length === 0 && alive ? 'pass' : 'fail', + real.length + ? real.join(' | ') + : `${calls.length - failures.length}/${calls.length} calls ok${ + failures.length ? `, ${failures.length} shell-only calls n/a without a desktop` : '' + }; app still responsive: ${alive}`, ); await page.screenshot({ path: `${OUT}/02-end.png` }).catch(() => undefined);