fix: use atomic rename in setup_subprocess_double_fork test to prevent race condition (#2815)
The forked child process writes .outbox directly, which means the
predictor can observe the file (via os.path.exists) before the content
is fully flushed. Write to .outbox.tmp first, then os.rename() to
.outbox so the predictor never reads a partially-written file.
Co-authored-by: Michael Dwan <code@michaeldwan.com>