Follow-up to #66, #461, and #465. The native task-cancellation audit found a separate lifetime family: webcrypto/PhonyWorkQueue.cpp creates EventLoopTaskNoContext, and Home ConcurrentCppTask.runFromWorkpool reads its raw creating-VM pointer, runs the native work, then calls vm.event_loop.unrefConcurrently(). The event-loop liveness reference prevents a natural drain but does not join work during explicit Worker termination. Home worker shutdown currently tears down JSC, the event loop, and its arena without waiting for these per-VM jobs. Removing the ScriptExecutionContext from the contexts map only rejects result callbacks; it does not prove the work-pool job has stopped accessing the VM.
Implement per-VM native-job lifetime accounting and a shutdown quiescence barrier with clear admission rules. Wait outside callback/contexts-map locks, prevent new jobs after shutdown admission closes, preserve normal completion and error behavior, and do not execute user callbacks in a stopped VM. Audit interactions with FFI/Node-API cleanup and worker self-exit. Add bounded termination-during-WebCrypto tests and instrumented completion/ownership checks where feasible. This is a source-audited gap, not a claimed reproduced use-after-free or passing feature. Generic queued CppTask cancellation remains #465.