Context
PR #623 fixed the Lighthouse performance gate root cause: the CI served the build uncompressed (python -m http.server) while production (GitHub Pages) serves gzip/brotli, and each page was measured on a single noisy run. Fixes landed there:
- Page-scoped tool-page CSS bundle + repaired a broken
cookieconsent-theme exclusion
- Median-of-3 Lighthouse measurement
- gzip-compressing serve (
scripts/serve_static.py) matching production
These follow-ups build on that work. Thresholds must stay unchanged (perf 90 / a11y + best-practices 95 / CLS 0.1) — the goal is correctness and margin, not weakening gates.
Proposed improvements
Acceptance
- Each item is independently shippable and keeps all existing gates green.
- No Lighthouse threshold is lowered.
Follow-up to #623.
Context
PR #623 fixed the Lighthouse performance gate root cause: the CI served the build uncompressed (
python -m http.server) while production (GitHub Pages) serves gzip/brotli, and each page was measured on a single noisy run. Fixes landed there:cookieconsent-themeexclusionscripts/serve_static.py) matching productionThese follow-ups build on that work. Thresholds must stay unchanged (perf 90 / a11y + best-practices 95 / CLS 0.1) — the goal is correctness and margin, not weakening gates.
Proposed improvements
search,about,methodology, andprivacypages that also skip article/chart CSS, trimming render-blocking bytes site-wide. Seelayouts/partials/head.html.scripts/serve_static.py. GitHub Pages also serves brotli; negotiatingbrwhen the client accepts it makes the CI gate environment even closer to production.docs/qa-gates.mdso future maintainers do not revert to the uncompressed single-run server.Acceptance
Follow-up to #623.