Signals end every command, not only ssh to and ssh install (closes #48)
check / check (push) Failing after 3s

SIGINT, SIGTERM and SIGHUP were caught for the whole run, but only the
ssh and sftp children acted on them: the mnemonic prompt waited for
Enter, and an interrupted `age encrypt -o` put the encryption of the
cut-off input in place. Now `ssh to` and `ssh install` catch them from
once the mnemonic is read until their cleanup has run, and everywhere
else they end the tool at once, except while `age encrypt -o` or
`age decrypt -o` writes. There the work runs in the background, and a
signal that comes before it ends, or within a tenth of a second after,
removes the unfinished file and ends the tool with status 1, since
Ctrl-C on a pipeline can end the input just before the signal arrives.

Model: opus-5-5
This commit is contained in:
2026-10-04 06:39:38 +00:00
parent d4fbcbc83d
commit 893b351eb6
7 changed files with 267 additions and 48 deletions
+12
View File
@@ -288,6 +288,18 @@ girl mad pet galaxy egg matter matrix prison refuse sense ordinary nose
Errors go to standard error and the exit status is 1, except for `ssh to`, which
passes through `ssh`'s own exit status.
SIGINT, SIGTERM and SIGHUP end any command at once, at the mnemonic prompt too,
with the status a shell gives a program killed by that signal (130 for SIGINT).
An interrupted `age encrypt -o` or `age decrypt -o` leaves no file: it removes
the unfinished file it was writing, leaves a file already at the named path as
it was, and exits with status 1. It puts the file in place a tenth of a second
after its input ends, and a signal in that time still counts: Ctrl-C on a
pipeline also ends the program feeding it, so the input can end just before the
signal arrives. While `ssh to` or `ssh install` has `ssh` or `sftp` running, the
signal ends that program instead, the tool removes its agent socket or working
files, and it exits with status 1, or for `ssh to` with `ssh`'s own status if
`ssh` reported one.
## Entrypoints
The repo adheres to the