Files
zeekay 7846eed181 Every child gets the PATH Gen searched; signals and homes by lock
exe::command and exe::bare are now the only way to make a Command, and
root_is_the_one_resolver fails the build on Command::new anywhere else.
Each child is handed only the absolute PATH entries, so an agent whose
`#!/usr/bin/env node` used to find a repository's ./node finds the real
one; on Windows NoDefaultCurrentDirectoryInExePath=1 keeps cmd.exe out
of the working directory. A version is asked in the program's own
directory and only its first line is read, so a child left holding the
output open no longer holds the session for 20 seconds.

The relay is made before the agent starts, so a signal during startup no
longer kills Gen and orphans the agent. SIGINT is passed on unless Gen is
in its terminal's foreground group; a signal Gen was started ignoring
stays ignored; and once the agent is reaped each signal goes back to how
Gen started, so SIGTERM during finalize ends it at once.
tests/signals.rs holds all three against the built binary.

A run home is swept only when its gen.lock can be taken. Gen and the
agent, which inherits the descriptor, hold it, so a session in another
pid namespace, on another host, or whose agent outlived Gen keeps its
home.

The release smokes the linux binary in a job with no permissions; publish
executes nothing it was handed, downloads each artifact into a directory
of its own that must hold exactly its two files, and keeps the write
token in the one step that uses it.
2026-10-16 09:59:35 -07:00
..