b94a1613e3
`run_script` and `run_streamed` both left their select loop on stdout EOF and then ran unbounded post-loop drains, so `child.wait()` sat downstream of a read that a surviving descendant can hold open forever. Pipe EOF is not the child's to give: the write end is inherited by every descendant spawned without its own redirection, and `hermes update` deliberately runs its build steps with stdout inherited. One resident gateway stranded the whole update, exit code included. Both now go through one `pump_child`, which takes the exit status from waiting on the process and bounds the drain from the moment it exits — a slow child is not a stuck one, so nothing is metered while it runs. An abandoned drain says so in the log rather than silently truncating. Cancelling was not an escape hatch either: `start_kill` reaches the child, not the grandchild with the handle, so the bounded drain is what lets a cancel return at all. Same bound `Invoke-HermesStep` grew in windows.ps1 (#90455), and the same shape as Go's `exec.Cmd.WaitDelay`.