Build 319's failure: on the CI host /bin/sh is dash, which forks sleep instead of exec'ing it; killing the shell left sleep holding the log pipe and cmd.Wait blocked for the full two minutes. Steps now run in their own process group, killed as a group on cancel or timeout, with a ten-second cap on the wait after a kill. The test's step forks its sleep as a child so it exercises this on any host.
Ref #90