{"id":"6a283f1ed16072619b0883ed","title":"2026 06 09 Issue 201","path":"how-to/committee/release-notes/2026-06-09-issue-201","contentMarkdown":"# 09-Jun-2026 — stop hot paths pulling large uncached payloads [#201](https://github.com/nbarrett/ngx-ramblers/issues/201)\n\n## [build 676](https://github.com/nbarrett/ngx-ramblers/actions/runs/27219444046) — [commit f52b56e](https://github.com/nbarrett/ngx-ramblers/commit/f52b56e28340fe41bf809fc1be4fabe04b13d059)\n\n_____\n\nTwo independent slow reads were dragging full, oversized documents over\nthrottled clusters on every request.\n\nS3 backup listing (/api/mongo-backup/s3/backups):\n- manifestByTimestamp reloaded the entire environments config doc and read\nthe full ~806KB manifest document for every one of 346 backups, just to get\neach manifest's status field (~272MB transferred to render a dropdown).\n- Add completedManifestStatusByTimestamp: one find per site, projected to\n{timestamp,status} only, run per-environment in parallel and reusing the\nalready-loaded backup config.\n- Result: multi-minute hang to ~0.4s for 659 backups.\n\nSystem config (config?key=system, system-status):\n- value.area.groups[].customGeometry (ONS boundary polygons) is 469KB of the\n483KB system doc and was read uncached on every page, though only the admin\nArea Map editor uses it.\n- handleQuery now projects customGeometry out of the system read; system-status\nuses a new systemConfigWithoutGeometry(). Internal consumers (geojson areas)\nkeep the full doc via systemConfig().\n- createOrUpdate preserves customGeometry on system saves (matched by groupCode,\nreorder-safe) so settings saves cannot wipe boundaries; geometry is only\nchanged via the api/areas/* endpoints.\n- Area Map editor loads groups from api/areas/groups (geometry intact) instead\nof the now-stripped config payload.\n- Result: system read 483KB/4.3s to 14KB/0.24s; fast on any cluster.","contentHtml":"<h1>09-Jun-2026 — stop hot paths pulling large uncached payloads <a href=\"https://github.com/nbarrett/ngx-ramblers/issues/201\">#201</a></h1>\n<h2><a href=\"https://github.com/nbarrett/ngx-ramblers/actions/runs/27219444046\">build 676</a> — <a href=\"https://github.com/nbarrett/ngx-ramblers/commit/f52b56e28340fe41bf809fc1be4fabe04b13d059\">commit f52b56e</a></h2>\n<hr>\n<p>Two independent slow reads were dragging full, oversized documents over\nthrottled clusters on every request.</p>\n<p>S3 backup listing (/api/mongo-backup/s3/backups):</p>\n<ul>\n<li>manifestByTimestamp reloaded the entire environments config doc and read\nthe full ~806KB manifest document for every one of 346 backups, just to get\neach manifest&#39;s status field (~272MB transferred to render a dropdown).</li>\n<li>Add completedManifestStatusByTimestamp: one find per site, projected to\n{timestamp,status} only, run per-environment in parallel and reusing the\nalready-loaded backup config.</li>\n<li>Result: multi-minute hang to ~0.4s for 659 backups.</li>\n</ul>\n<p>System config (config?key=system, system-status):</p>\n<ul>\n<li>value.area.groups[].customGeometry (ONS boundary polygons) is 469KB of the\n483KB system doc and was read uncached on every page, though only the admin\nArea Map editor uses it.</li>\n<li>handleQuery now projects customGeometry out of the system read; system-status\nuses a new systemConfigWithoutGeometry(). Internal consumers (geojson areas)\nkeep the full doc via systemConfig().</li>\n<li>createOrUpdate preserves customGeometry on system saves (matched by groupCode,\nreorder-safe) so settings saves cannot wipe boundaries; geometry is only\nchanged via the api/areas/* endpoints.</li>\n<li>Area Map editor loads groups from api/areas/groups (geometry intact) instead\nof the now-stripped config payload.</li>\n<li>Result: system read 483KB/4.3s to 14KB/0.24s; fast on any cluster.</li>\n</ul>\n"}