mirror of
https://github.com/paperclipai/paperclip.git
synced 2026-10-30 13:20:54 +01:00
The start-failure catch block sent one SIGTERM and removed the root directory at once, without waiting for sshd to exit. Because the state file is written only after readiness succeeds, a slow-to-exit sshd on this path became an orphan with no state file to target it. Reuse the bounded SIGTERM-to-SIGKILL escalation before the removal, and keep the root directory when the listener survives it. The test drain swallowed a failed stop and deleted the root directory anyway, which erased the state file stopSshEnvLabFixture relies on for a later kill attempt. The drain now removes the root directory only after the stop call succeeds, and logs the pid and port when it fails. The per-test teardown entry was pushed after several setup `await` calls (mkdir, writeFile, git init), so a throw among them leaked the temporary directory with no entry to clean it up. A new helper creates the root directory and registers its teardown entry in the same step. Add a regression test that forces a fixture to fail readiness (via an unreachable RFC 5737 host and a short, test-only readiness timeout) and proves it leaves no live listener and no root directory behind. Co-authored-by: Paperclip <noreply@paperclip.ing>