Convert test-changed.mjs's invocation path from blocking spawnSync to async
spawn through the shared watchdog. runWatchedTest throws on failure/timeout with
.exitCode so the existing catch and the runMaybeIsolated finally (prune +
isolation post-check) still run — a watchdog kill reaps any leaked isolated HOME
instead of leaving it for the guard to flag. Full/affected runs use a generous
60min backstop (dashboard lanes are already inner-watchdog'd); the quick gate
uses the changed-class ceiling.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>