Summary
Two tests depend on GNU coreutils being resolvable on Windows PATH:
tests/test_runs.py::test_stop_run_signals_live_process — spawns its victim with subprocess.Popen(["sleep", "30"]). No sleep.exe on PATH → FileNotFoundError before the test's subject (SIGTERM delivery to a live engine pid) even starts.
tests/test_verify.py::test_verify_review_happy_and_commands — uses VerifyPolicy(commands=("true",)) (and ("true", "false")) as the happy/fail commands. cmd has no true/false builtins, so the happy path exits 9009 and the assertion fails.
GitHub's windows-latest runners ship C:\Program Files\Git\usr\bin on PATH, so CI is green. A stock local shell (only Git\cmd on PATH — the default Git for Windows install) fails both. Verified during the #254 full-suite runs: both fail on a clean PATH and both pass once Git\usr\bin is prepended.
Suggested fix
Remove the coreutils dependency instead of documenting it:
- The sleeper:
subprocess.Popen([sys.executable, "-c", "import time; time.sleep(30)"]) — same lifetime semantics, zero PATH dependency, and the pid is a real process the SIGTERM path can kill on any OS.
- The verify commands:
tests/conftest.py already centralizes cross-shell verify verbs (_OK = "exit 0" honored by both cmd /c and sh -c); use that pattern for the happy command and an exit 1 equivalent for the failing one.
Refs: #254
Summary
Two tests depend on GNU coreutils being resolvable on Windows PATH:
tests/test_runs.py::test_stop_run_signals_live_process— spawns its victim withsubprocess.Popen(["sleep", "30"]). Nosleep.exeon PATH →FileNotFoundErrorbefore the test's subject (SIGTERM delivery to a live engine pid) even starts.tests/test_verify.py::test_verify_review_happy_and_commands— usesVerifyPolicy(commands=("true",))(and("true", "false")) as the happy/fail commands. cmd has notrue/falsebuiltins, so the happy path exits 9009 and the assertion fails.GitHub's
windows-latestrunners shipC:\Program Files\Git\usr\binon PATH, so CI is green. A stock local shell (onlyGit\cmdon PATH — the default Git for Windows install) fails both. Verified during the #254 full-suite runs: both fail on a clean PATH and both pass onceGit\usr\binis prepended.Suggested fix
Remove the coreutils dependency instead of documenting it:
subprocess.Popen([sys.executable, "-c", "import time; time.sleep(30)"])— same lifetime semantics, zero PATH dependency, and the pid is a real process the SIGTERM path can kill on any OS.tests/conftest.pyalready centralizes cross-shell verify verbs (_OK = "exit 0"honored by bothcmd /candsh -c); use that pattern for the happy command and anexit 1equivalent for the failing one.Refs: #254