cb84e7d94e
close() escalated to kill_process_tree() but never imported it; the NameError was swallowed by contextlib.suppress, so on the TimeoutExpired path neither the kill nor the post-kill wait ran and a root codex ignoring SIGTERM leaked (a regression vs the previous self._proc.kill()). Import it from agent.deadline and add a test forcing the timeout path that asserts the tree kill and the follow-up wait both run. Also drop the upstream product reference from the test docstring (credit stays in the PR body) and pass encoding= to the PID file reads flagged by the Windows footgun scanner.