hosting: bound in-process memory and make the budgets configurable master
nothing in hosting reads the observability log/metric rings (5000 logs, 10000 request metrics), so hosting now keeps none; console output and the loki/otlp exporters are unchanged. site manifests get a byte budget (MANIFEST_CACHE_SIZE, 16 MiB estimated, count stays as MANIFEST_CACHE_COUNT) and the cache sweep runs every minute instead of every 30, so manifests whose 10 s ttl lapsed no longer sit resident. the hot tier defaults to 32 MiB for a 1 GiB edge (HOT_CACHE_SIZE still raises it) and releases expired entries on its next write. buffered reads borrow the tier's bytes instead of copying the whole object per read; hosting only hashes, decodes or serves them. scripts/memory-bench.ts serves 2000 sites from a local hosting process with a fake postgres and reports rss, js heap and cache sizes, plus a digest of every response so a change in bytes or headers shows up.