Address CodeRabbit review: bounded ffmpeg waits, resilient teardown, scoped screenshot cleanup

- Bound renderer dispose frame drains with a timeout and release resources
  in a finally block so a stalled or throwing drain cannot hang or leak
- Add _awaitExit helper so writeFrame/finish never wait unboundedly on a
  hung ffmpeg; escalate to SIGKILL after a grace period
- Make frame writer cancel() awaitable and await it before deleting the
  temp frame directory to avoid the Windows delete race
- Gate MouseWatch dispose cleanup on the scoped screenshotProvider instead
  of the global CoordinateSystem flag so live instances disposed during an
  export still unregister hover and hitbox state
- Reset screenshot flag and dispose test container via addTearDown
2ea72df754Dara Adedeji committed on 8/3/2026, 1:03:45 AMparentdab3108
5 files changedLine totals unavailable