Read stdout and stderr concurrently (background thread for stderr)
to prevent the classic deadlock where cargo blocks writing stderr
while the parent blocks reading stdout. Timeout now actually kills
the child process via kill -9. Added eprintln logging for all job
lifecycle events so failures are visible in local-runner.log.
Also switches .ci.yml to use $HOME instead of ~ for shell portability.
Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Add ci-relay (VPS webhook receiver) and local-runner (Thinkpad CI
executor) crates that communicate over iroh. Includes .ci.yml smoke
test pipeline, simulation tests, and development docs.
Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski