v0.1.1
First published version: 0.1.0 existed only as a local commit.
Packaging
- Installable from PyPI as
proc-warden, providing both theprocand
proc-wardenconsole scripts. Still zero runtime dependencies; the CLI
moved tosrc/proc_warden/cli.py, and the rootprocscript is now a shim so
a clone (or a symlink into one) keeps working with nothing installed. - MIT
LICENSE,CITATION.cff, and.zenodo.json. - CI on Python 3.10–3.13: unit tests everywhere, integration tests against a real
systemd user manager, a packaging job that builds andtwine checks the
artifacts and runs both console scripts, plus CodeQL and Codecov. docs/CONTRIBUTING.mdanddocs/RELEASING.md.
Tests
- 60 unit tests covering naming, status parsing, the state machine, environment
assembly, argv resolution, and the--split — none of which need systemd, so
the suite is no longer all-or-nothing on the host having a user manager. PROC_REQUIRE_SYSTEMD=1turns the integration suite's skip into a hard error,
so CI cannot pass by skipping the half that proves the tool works.- Coverage now follows the subprocesses the integration tests spawn, which is the
difference between a reported 38% and the real 86%.
Fixes
Three defects found by review, each with a regression test that fails against 0.1.0.
wait --readycould miss a marker that was printed. The incremental
scanner consumed the partial trailing line, so a regex spanning two reads never
matched and a ready process was reported asTIMEOUT— the false negative that
invariant 4 exists to prevent. SincePYTHONUNBUFFERED=1makes
print("bodies:", n)onewrite()per argument, splitting mid-marker was the
common case rather than a corner one. The incomplete line is now carried
forward between polls.proc runnow exits 1 when the process is already dead when it looks. It
returned 0 while printing-> FAILED, soproc run ... || handlecaught a busy
lease but silently missed a crash. A clean fast exit is still 0; a process that
dies later is stillwait's job to report.--gpu-waitwithout--gpuis now a usage error. It was silently ignored,
so the typo launched an unserialized GPU run that looked fine.