Found while building the §11 budget gate (1557f44). Rendering / repeatedly against a server with an empty projection walks RSS from 80MB to ~280MB over 60 renders, with a visible GC dip around render 40 — so it is heap high-water and GC pressure, not a true leak, but ~11MB of allocation per render of a near-empty page is the underlying number.
Curve (child-process RSS, ps -o rss=):
| renders | RSS |
|---|---|
| 0 | 80MB |
| 10 | 192MB |
| 20 | 232MB |
| 30 | 253MB |
| 40 | 228MB (GC) |
| 50 | 266MB |
| 60 | 281MB |
The budget gate holds today (251MB at 20 sessions against 300MB), so nothing is on fire — but the allocation lives in the stx SSR path (the page is ~20KB at zero profiles, so this is not the payload), which makes it an upstream candidate first. Worth profiling before the next stx bump: if each render churns the whole runtime + component tree through the heap, a hot control surface polling this page pays real GC pauses for it.
Reproduce: scripts/performance-budgets.ts child mode + a fetch loop; the rss-after lines the script prints localize it (renders account for ~165MB of the growth, the 600-event pile ~6MB).