Release v0.51.301 — stage-3710 (hide test-helper console windows on Windows #3710) (#3753)

* test(windows): hide test helper console windows (#3706)

* test(windows): use CREATE_NO_WINDOW constant (#3706)

* test(windows): hide test-helper console windows on Windows (#3710 fixes #3706)

@rodboev. Long-lived test helper subprocesses (test server, browser-smoke, TLS helper,
ctl helpers) now spawn with CREATE_NO_WINDOW on Windows so a local pytest run doesn't
pop focus-stealing console windows. sys.platform=='win32' guarded → no-op on macOS/Linux
(expands to **{}). Test-only, no production code, no user impact. + CHANGELOG v0.51.301.

---------

Co-authored-by: Rod Boev <rod.boev@gmail.com>
Co-authored-by: nesquena-hermes <[email protected]>
This commit is contained in:
authored and GitHub committed 2026-06-06 16:16:39 -07:00
1 parent 1cb9d3b550
commit 1649a22f5a
5 files changed
+18 -3

No files matched your search

+5
View File
@@ -3,6 +3,11 @@
## [Unreleased]
## [v0.51.301] — 2026-06-06 — Release JQ (stage-3710 — hide test-helper console windows on Windows)
### Changed
- **Developer experience (Windows):** the test suite's long-lived helper subprocesses (main test server, browser-smoke server, TLS helper, and the `ctl` test helpers) now spawn with `CREATE_NO_WINDOW` on Windows, so a local `pytest` run no longer pops up several focus-stealing console windows. Windows-only (`sys.platform == "win32"` guard); no behavior change on macOS/Linux. (#3710 fixes #3706, @rodboev)
## [v0.51.300] — 2026-06-06 — Release JP (stage-3726 — context-length indicator honors provider per-model overrides)
### Fixed
+1
View File
@@ -114,6 +114,7 @@ def main():
proc = subprocess.Popen(
[sys.executable, server_py], cwd=repo_root, env=env,
stdout=log, stderr=subprocess.STDOUT,
**({"creationflags": subprocess.CREATE_NO_WINDOW} if sys.platform == "win32" else {}),
)
try:
if not _wait_for_health(timeout=30):
+1
View File
@@ -636,6 +636,7 @@ def test_server():
env=env,
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL,
**({"creationflags": subprocess.CREATE_NO_WINDOW} if sys.platform == "win32" else {}),
)
if not _wait_for_server(TEST_BASE, timeout=20):
+8 -2
View File
@@ -143,7 +143,10 @@ def windows_pid(pid: int) -> int | None:
def start_fake_launchd_process() -> subprocess.Popen:
return subprocess.Popen(["bash", "-lc", "exec sleep 30"])
return subprocess.Popen(
["bash", "-lc", "exec sleep 30"],
**({"creationflags": subprocess.CREATE_NO_WINDOW} if sys.platform == "win32" else {}),
)
def _kill_tree(pid: int) -> None:
@@ -316,7 +319,10 @@ def test_stale_pid_file_is_removed_without_killing_unrelated_process(tmp_path):
hermes_home = tmp_path / ".hermes"
hermes_home.mkdir()
pid_file = hermes_home / "webui.pid"
sleeper = subprocess.Popen([sys.executable, "-c", "import time; time.sleep(30)"])
sleeper = subprocess.Popen(
[sys.executable, "-c", "import time; time.sleep(30)"],
**({"creationflags": subprocess.CREATE_NO_WINDOW} if sys.platform == "win32" else {}),
)
try:
pid_file.write_text(str(sleeper.pid), encoding="utf-8")
result = run_ctl(tmp_path, "stop")
+3 -1
View File
@@ -8,9 +8,10 @@ import json
import os
import ssl
import subprocess
import sys
import tempfile
import textwrap
import time
import tempfile
import unittest
from contextlib import suppress
from pathlib import Path
@@ -79,6 +80,7 @@ def _start_server(port: int, cert: str = None, key: str = None) -> subprocess.Po
[os.sys.executable, str(ROOT / "server.py")],
env=env, stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
text=True,
**({"creationflags": subprocess.CREATE_NO_WINDOW} if sys.platform == "win32" else {}),
)
return proc