drain() is public on SerialBatches but was only exercised through shutdown.
Cover it on its own: it waits for in-flight work and leaves the queue open, so
a shutdown can drain before the watchers flush and still have that work
accepted, and it returns immediately when nothing is running.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Lcj4iQ3fBxMwAu2rf4zLbC