First public release of runnerd. This release provides the complete planned
scope for a local, single-user Linux task runner.
Added
runnerddaemon andrunnerctlclient communicating over a permission-bound
Unix Domain Socket.- Length-prefixed binary framing with PING, SUBMIT, STATUS, LIST, and CANCEL
operations. - Single-threaded
epollevent loop for client connections, child output
pipes,signalfdnotifications, andtimerfddeadlines. - Process execution through
fork/execve, with an exec error pipe that
distinguishes startup failure from a program exiting with code 127. - Per-job process groups for supervising the direct child and its descendants.
- FIFO scheduling with a configurable
--max-runningconcurrency bound. - Cancellation and execution timeouts with
SIGTERMfollowed bySIGKILL
after a one-second grace period. - Persistent stdout/stderr files with private permissions and a 10 MiB limit
per stream; excess output is drained and discarded to prevent pipe stalls. - In-memory job states and result queries, including exit codes, exit signals,
output byte counts, and truncation flags. - 84 GoogleTest unit and integration tests covering protocol handling,
scheduling, process lifecycle, cancellation, timeouts, and output capture. - GitHub Actions checks for GCC Debug, Clang Debug, GCC Release, ASan, and UBSan.
- A reproducible end-to-end latency benchmark reporting throughput and
P50/P95/P99/Max latency.
Known limitations
- Linux-only and intended for trusted users and workloads on one host.
- Job metadata and JobId allocation are not persisted across daemon restarts.
- Persisted output cannot yet be retrieved through
runnerctl. - No authentication, sandboxing, cgroup isolation, or remote execution.
- The protocol and command-line interface may still change during the 0.x
release series.