Fork-only drain workers inherit the parent agent's already-initialized
OpenSSL/libpq state, which can deadlock the TLS handshake to managed
Postgres (PlanetScale/Supabase/RDS) on some Linux builds. AsyncServer now
takes an optional drainSpawner: the forked child pcntl_exec()s
`php artisan nightowl:drain-worker` (new hidden internal command) so the
worker runs in a clean process. Falls back to the original in-process
fork when exec isn't usable (no pcntl_exec or no artisan entrypoint, or if
exec fails). DrainWorker/RecordWriter thread sslmode through so the exec'd
worker honors NIGHTOWL_DB_SSLMODE.
Adds DrainSpawnerTest (guard returns a closure only when exec is usable)
and DrainWorkerExecSystemTest (proves the child takes the exec branch, no
PG required).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>