From 01e1a8de0f1d39dfe24711ae4fe0f0ae4a4d8f82 Mon Sep 17 00:00:00 2001 From: Spencer Bull Date: Sun, 6 Sep 2026 01:57:42 -0500 Subject: [PATCH] Exercise lock release on a cold terminal launch Co-Authored-By: GPT-6 Codex (xhigh) --- test/hermes-desktop-test.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/test/hermes-desktop-test.py b/test/hermes-desktop-test.py index 07b3b58..15f0335 100644 --- a/test/hermes-desktop-test.py +++ b/test/hermes-desktop-test.py @@ -2,6 +2,7 @@ """Exercise the packaged entry point with a disposable HOME and installer.""" import json import os +import pty import signal import time from pathlib import Path @@ -202,6 +203,23 @@ if os.environ.get('TEST_GUI_WAIT'): time.sleep(30) lock=self.home/'.hermes/.omarchy-hermes-desktop.lock' self.assertEqual(subprocess.run(['flock','--nonblock',str(lock),'true']).returncode,0) + def test_cold_terminal_launch_releases_lock_before_exec(self): + master,slave=pty.openpty() + process=subprocess.Popen(['bash',str(self.base/'launcher')],stdin=slave,stdout=slave,stderr=slave,env=self.env | {'TEST_GUI_WAIT':'1'}) + os.close(slave) + def cleanup(): + if process.poll() is None: process.terminate() + process.wait(timeout=5) + os.close(master) + self.addCleanup(cleanup) + for _ in range(100): + if self.output.exists(): break + time.sleep(.02) + self.assertTrue(self.output.exists()) + self.assertIsNone(process.poll()) + lock=self.home/'.hermes/.omarchy-hermes-desktop.lock' + self.assertEqual(subprocess.run(['flock','--nonblock',str(lock),'true']).returncode,0) + def test_pending_marker_overrides_old_completion(self): self.install() (self.root/'.omarchy-hermes-desktop').write_text('pending\n')