Patchright's Chromium (Chrome 150) is newer than wreq's newest Emulation
(Chrome 149), so the post-solve pin block silently no-opped:
emulation_for_version(150) returned None. WAF clearance cookies
(cf_clearance, DataDome) bind to the solving browser's UA + client hints,
so the Chrome149 replay was re-challenged on the very first request and the
session then rotated away from the identity the cookie belonged to. This
affected every Chrome-family cookie-replay WAF, not just Cloudflare.
FingerprintManager.pin_to_browser() now pins the closest Chrome emulation
for the TLS shape (the newest when there is no exact match; adjacent Chrome
majors are JA4/H2 wire-identical) and overrides the UA + sec-ch-ua to the
solving browser's exact version so UA-bound cookies validate on replay.
SolveResult.browser_version carries the real build. build_fingerprint_envelope
gains Chrome-only ch_major_version/ch_full_version kwargs so the diagnostic
snapshot matches the wire. Imperva keeps its unpinned wreq/native path. A
WARNING now fires when the browser outruns wreq's newest profile (was silent).
Wire-verified on miata.net (Cloudflare): 200, clearance persists across
requests, 0 rotations.