···179179builds and activates it before the user steps run. Afterwards, each step is sent
180180as an exec request (`$shell -lc <command>` as an unprivileged workflow user in
181181`/workspace/repo`, with workflow/step environment and unlocked secrets), and
182182-stdout/stderr stream back as messages until an exit message arrives. Timeouts
183183-are cooperative: we derive a deadline from the workflow timeout and ship it to
182182+stdout streams back raw over a dedicated per-exec vsock connection (the
183183+agent dials it; stdin rides the same socket), while stderr and the exit
184184+status stay on the control channel. Timeouts are cooperative: we derive a deadline from the workflow timeout and ship it to
184185the guest, with a little grace on the host side so the guest gets to report the
185186timeout itself. While a step runs we also watch for the VM crashing, if it does
186187we tail the serial (and qemu) logs into the step's stderr so you get something