Public: anyone can read this; nobody can change it.
A step that runs without a cell ends with everything it started, on a cancel, a timeout, or its own exit #64
Check · Review · Land done · Live — Landed; nothing deploys from this branch, so this is the end of its path.
Where the host cannot hold a cell (CI, a pod without bwrap), an install, test or check step ran as a plain `/bin/sh -c` child in the forge's own process group, and a cancel or timeout SIGKILLed the shell alone. What the shell had started (`bun install`'s scripts, a test runner and its workers, a `sleep`) was re-parented and kept running in the checkout after the step was reported cancelled; a supe…
shipped merged
Sign in to join this conversation.
Where the host cannot hold a cell (CI, a pod without bwrap), an install, test or check step ran as a plain
/bin/sh -cchild in the forge's own process group, and a cancel or timeout SIGKILLed the shell alone. What the shell had started (bun install's scripts, a test runner and its workers, asleep) was re-parented and kept running in the checkout after the step was reported cancelled; a superseded check kept burning the machine beside its replacement.The step now leads a process group of its own (
detached, without a cell only), a cancel or timeout kills the group, and once the shell has exited, what is left of the group is killed. A cell is unchanged: its tree dies with bubblewrap.signalGroupmoves to module level, shared withstartProcess(#63).Since a terminal's Ctrl-C no longer reaches a running check, the forge stops checks without the roll's drain wait on a person's signal (SIGINT, SIGHUP): they are cut off and queued again at once. A SIGTERM (a release) still lets them finish within FORGE_CHECKS_DRAIN_S.
<!-- pipeline:validation -->
Validation
pipeline/validateon82c7d253: baseline in 618s — bun 1.3.14, CI-shaped env (scrubbed vars, runner PATH), exact check.yml shard + forge.json commands.bun install --frozen-lockfileforge.json check.fastcheck.yml gate (1) pull_requestcheck.yml gate (2) pull_requestcheck.yml gate (3) pull_requesttest output (failures, totals)