Chrome Updates Runbook¶
How to bump the emulated Chrome version across every tier โ the wred sidecar
(wire + behavioural profiles) and the wreq wheel (Path B). The failure mode of
a stale fingerprint is a silent, site-wide block, so this is a recurring
operational task, not a one-off.
Why it matters¶
TLS/HTTP2 emulation must track Chrome stable. Akamai and similar gates match a raw ClientHello against a known-browser baseline; a profile that describes a Chrome version the gate hasn't seen โ or whose wire layer disagrees with the JS sensor โ is rejected.
When to run¶
- Chrome stable ships a new major version.
make chrome-watch(scheduled CI) flags a drift.
Toolkit repo (wre-toolkit-patched)¶
-
Re-capture the behavioural profile (do not skip). The V8 sensor profile must agree with the wire profile.
make chrome-capture N=<new>against a real Chrome captures the JS sensor signature; skipping it desyncs the two layers (the JS claims a different Chrome than the wire). -
Add the profile.
make chrome-profile N=<new> BASE=<old>derives the new wire profile from the previous one. -
Verify.
make chrome-verify N=<new>runs the hermetic fingerprint gate (no network, no Chrome). -
Tag + publish. Tag
v<upstream>-chrome<new>.1; CI buildswredand publishes it to the GitLab generic package registry.
Scraper side¶
-
Wheel (Path B). Bump the fork's
wreq/btls-sysoverlay, rebuildwreq-patched, and publish. Updatepyproject.toml+uv.lock. -
Defaults. Update
core/settings.py(wre_fingerprint,wre_profile,wreq_emulation) and the.env.example/docker-compose.ymldefaults. -
Dockerfile. Bump
WRE_TOOLKIT_VERSIONand re-verify the sha256. -
Gates. The CI
validate_wre/validate_wreq_emulationgates assert the configured names resolve in the built artifacts. -
Reference profiles. Re-run the live Best Buy smoke and the
wreqsmoke forbooking_com/facebook_marketplace.
See docs/wre-integration-plan.md ยง8 for the full detail.