6e5aa578ee
The synchronous handler.merge() call blocked the uvicorn event loop for the entire merge duration (38s for a 19-member helm virtual repo), stalling all other requests on the same worker during that window. Wrapping the call in asyncio.to_thread() releases the event loop while the CPU-bound YAML parse/merge/dump runs in the default thread pool, allowing health checks and other requests to be served concurrently. Measured impact (19-member helm-all, single worker): Before: first concurrent /health stalled for 37721ms After: all concurrent /health requests served in <65ms The change is at the generic handler dispatch site, so it applies to all current and future _VirtualHandler implementations without modification. Also fix base_url/package keys merged onto a single line in examples/single-file/remotes.yaml, which prevented docker-compose startup.