A portal running on Orleans activates a node's hub the first time anything addresses it, and lets it go again when nothing has addressed it for a while. That second half had stopped happening. Every activated hub was handed the process-wide mesh-node cache's live view of its own path as the source of its own node, and kept a subscription on it for its whole life; an entry with a subscriber is never released, and the entry's own hydration stream sends the hub a heartbeat every 45 seconds that tells the grain not to deactivate. A loop with nothing outside it — so every node ever touched on a replica stayed resident, with its cache entry and about six sync hubs, until the pod restarted. On the live portal that was the population issue #3432 measured growing at ~25 hubs a minute and never retiring, concentrated on the per-activity records every compile and every import writes.
The hub now receives the node it was activated with — one emission, then done — which is what the single-process host has always handed it. Nothing was lost: after activation the cache's view of a node is hydrated by the node's own hub, so everything it could emit was an echo; writes reach the owner as writes and changes made elsewhere reach every process through the change feed, as before. A test pins it: after a node is activated and its reader has gone, the silo's cache can release the node's entry; on the previous grain it never could.