src/cli.ts runTests: appium?.kill() only runs when the wdio promise settles. On SIGTERM (CI cancellation) the parent dies and both children (appium stdio:ignore, wdio) are orphaned; port 4723 stays occupied for the next run, which then hits the misleading 30s reachability timeout. Add signal handlers that kill both children (and forward the signal exit code). Found during adversarial review (2026-07-02).
src/cli.ts runTests: appium?.kill() only runs when the wdio promise settles. On SIGTERM (CI cancellation) the parent dies and both children (appium stdio:ignore, wdio) are orphaned; port 4723 stays occupied for the next run, which then hits the misleading 30s reachability timeout. Add signal handlers that kill both children (and forward the signal exit code). Found during adversarial review (2026-07-02).