{ "$comment": "Client-bundle budgets, enforced by scripts/check-bundle-budget.mjs --check after `pnpm build` in CI; the script header describes the method. Numbers are KB gzip. routeBaselineKbGz is the measured first load of every page (the shared rootMainFiles plus the page's client-reference chunks, each file counted once by content hash), written with --write-baselines; a page fails when it is more than routeDriftAllowanceKbGz over its baseline, and a page without a baseline fails until one is written in the same change. firstLoadP95KbGz and firstLoadMaxKbGz cap the distribution across pages. uniqueClientKbGz caps the distinct client code: every module counted once by its module id, the lazy message catalogs excluded. maxCatalogKbGz holds each catalog, maxRechartsChunks the one shared chart chunk. The summed-chunk aggregate the gate used up to v1.44.0 (3875 KB there, capped at 3900) is still printed but no longer gated: it counted a module once per chunk group it landed in, so it rose whenever a page moved code into on-demand chunks and needed a raise in most releases while no reader downloaded more. Re-based at v1.45.0 from the v1.44.0 build, measured on a local arm64 machine: 110 pages, first load p50 336, p95 437, max 451 KB; unique client code 1904 KB in 1224 modules. The five pages watched before keep their numbers within a kilobyte (/ 359, /measurements 339, /insights/mood 337, /insights 323, /settings/[section] 311), and the metric pages that no watched route covered before are gated now too (/insights/weight 339, /insights/pulse 339). Caps: p95 447 and max 461 KB (10 KB over the measurement), unique client code 1930 KB (about 25 KB, roughly two releases of new client code). A raise or a re-base is a reviewed change with the measured numbers and the reason written here; earlier re-bases are in the history of this file. v1.47.0 raised maxCatalogKbGz from 210 to 250 for the Russian catalog: Cyrillic is two bytes per letter in UTF-8, so the same key set is 1.12 MB raw against about 0.8 MB for the Latin-script locales, 240 KB gz as an emitted chunk where the largest Latin one is under 210. A reader downloads one catalog, once; nothing else in the budget moved.", "routeDriftAllowanceKbGz": 20, "firstLoadP95KbGz": 447, "firstLoadMaxKbGz": 461, "uniqueClientKbGz": 1930, "maxRechartsChunks": 1, "maxCatalogKbGz": 250, "routeBaselineKbGz": { "/_global-error/page": 133, "/_not-found/page": 282, "/about/page": 282, "/achievements/page": 292, "/admin/[section]/page": 451, "/admin/page": 297, "/auth/claim/page": 298, "/auth/login/page": 290, "/auth/register/page": 288, "/c/[token]/page": 284, "/checkups/page": 365, "/checkups/practitioners/page": 289, "/claim/[token]/page": 282, "/coach/conversations/page": 294, "/coach/page": 355, "/coach/plans/page": 288, "/confirm-access/page": 287, "/custom-metrics/[id]/page": 303, "/custom-metrics/[id]/values/page": 311, "/cycle/page": 412, "/documents/deleted/page": 291, "/documents/page": 378, "/enroll-mfa/page": 305, "/illness/[id]/page": 447, "/illness/page": 421, "/insights/active-energy/page": 336, "/insights/audio-events/page": 337, "/insights/blood-glucose/page": 340, "/insights/blood-pressure/page": 336, "/insights/bmi/page": 331, "/insights/body-fat/page": 336, "/insights/body-temperature/page": 336, "/insights/body-water/page": 336, "/insights/bone-mass/page": 336, "/insights/breathing-disturbances/page": 337, "/insights/cardio-fitness/page": 336, "/insights/cardio-recovery/page": 337, "/insights/catalog/page": 317, "/insights/daylight/page": 336, "/insights/double-support-time/page": 336, "/insights/ecg/[id]/page": 316, "/insights/ecg/page": 316, "/insights/environmental-audio/page": 337, "/insights/falls/page": 336, "/insights/fat-free-mass/page": 336, "/insights/fat-mass/page": 336, "/insights/flights-climbed/page": 336, "/insights/grip-strength/page": 337, "/insights/headphone-audio/page": 336, "/insights/health-score/page": 315, "/insights/hrv/page": 337, "/insights/lean-body-mass/page": 336, "/insights/medications/page": 338, "/insights/mood/page": 337, "/insights/muscle-mass/page": 337, "/insights/nutrients/page": 319, "/insights/oxygen/page": 337, "/insights/page": 323, "/insights/pain/page": 336, "/insights/pulse-wave-velocity/page": 336, "/insights/pulse/page": 339, "/insights/recovery/page": 330, "/insights/respiratory-rate/page": 336, "/insights/resting-pulse/page": 337, "/insights/scores/[metric]/page": 328, "/insights/six-minute-walk/page": 336, "/insights/skin-temperature/page": 338, "/insights/sleep/page": 337, "/insights/sources/page": 321, "/insights/stair-ascent-speed/page": 336, "/insights/stair-descent-speed/page": 336, "/insights/step-length/page": 336, "/insights/steps/page": 337, "/insights/values/[type]/page": 350, "/insights/vascular-age/page": 337, "/insights/visceral-fat/page": 336, "/insights/waist-to-height/page": 336, "/insights/waist/page": 336, "/insights/walking-asymmetry/page": 336, "/insights/walking-distance/page": 336, "/insights/walking-heart-rate/page": 337, "/insights/walking-speed/page": 336, "/insights/walking-steadiness/page": 336, "/insights/weight/page": 339, "/insights/workouts/[id]/page": 437, "/insights/workouts/page": 437, "/insights/wrist-temperature/page": 336, "/invite/[token]/page": 282, "/labs/[biomarkerId]/page": 327, "/labs/[biomarkerId]/values/page": 335, "/labs/page": 423, "/measurements/page": 339, "/medications/[id]/history/page": 283, "/medications/[id]/page": 402, "/medications/new/page": 282, "/medications/page": 355, "/mental-wellbeing/page": 297, "/mood/page": 438, "/notifications/page": 289, "/onboarding/[step]/page": 445, "/onboarding/handover/page": 295, "/onboarding/page": 286, "/page": 359, "/privacy/page": 282, "/profile/page": 285, "/settings/[section]/page": 311, "/settings/layout/[module]/page": 380, "/settings/modules/[module]/page": 374, "/settings/page": 282, "/timeline/page": 331, "/vaccinations/page": 327 } }