sema acquire/release inside an async request handler: how to prove a missing release is what blocks drain() at shutdown
I'm using the sema JavaScript semaphore library (async acquire/release primitives) to cap concurrency inside a Node.js request handler, constructed with a fixed maximum. Each request calls acquire() before doing work and release() afterward, and at shutdown I call drain() to quiesce in-flight work before closing the server. The boundary I'm unsure about is b