Warm vs cold: where a sync webhook's time goes

Cold is the first request on a fresh worker that has never seen this flow. Installing pieces and booting the engine dominate. After it, the worker is warm.

0
0.5s
1.0s
1.5s
2.0s
Warm
the normal case
~0.2 s
Cold
first request,
fresh worker
Queue + route
~0.4 s
Install pieces
~0.5 s
Boot engine
~0.9 s
~2 s
Queue + route to a worker
Install pieces (bun install)
Fetch flow bundle
Boot engine (fork + isolated-vm)
Run flow
A worker restart wipes its cache, so its first request is cold again. Keep workers warm with AP_REUSE_SANDBOX=true and a pre-sized fleet.