node_modules and the Playwright Chromium binary were downloaded fresh on every run, making setup account for ~99% of pipeline runtime. - Cache frontend/node_modules keyed on package-lock.json hash - Cache ~/.cache/ms-playwright keyed on package-lock.json hash - On cache hit: skip npm ci and browser download, only reinstall system deps (install-deps) which is much faster than a full install Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>