#53 — a runner killed between claiming a build and reporting it left the row running
forever, and ci/<job> pending on the commit. runner next now reaps builds past a 90m
deadline (longer than the runner's own 45m -timeout, so it fires only when nothing
reported at all), failing them with a log line and resolving the commit status.
#55 — keys add and repo deploy-key add take a bare < key.pub, but were wired
stdinOK, which forwards stdin only when --file - appears in the arguments. Both
reached the server with an empty body. Now alwaysStdin, with a coverage test pinning the
four commands whose payload is an unnamed redirect.
#54 closed as invalid — fingerprint is globally UNIQUE with no upsert, so
deploy-key add already refuses a registered key. The outage came from an ssh-keygen
that overwrote the runner's key.