v1.0-build85 — Safari-mimic PoW solver + grower expiry staggering
Combines builds 81-85 since v1.0-build80.
PoW captcha auto-solver rewrite (the headline)
• Per-attempt success rate jumped 6% → 55%, per-session (3-retry
budget) success from ~17% to near-100%. The 12-slot cred pool now
refills in ~90 seconds cold-start; previously was hours-and-often-
never. Caused by VK tightening bot detection around 2026-05-08/09 —
our Go-side replay diverged enough from real Safari mobile shape
to be flagged even when sending a valid captured browser_fp.
• Three concrete fixes vs real Safari iOS 17 capture:
- adFp body field populated with random 21-char base64url tracking
ID (was empty); mirrors sync-loader.js behavior, VK enforces
presence.
- HTTP request headers matched to Safari mobile: removed Chrome-
only sec-ch-ua / sec-ch-ua-mobile / sec-ch-ua-platform / Sec-GPC
/ DNT; Accept-Language → en-GB; added Cache-Control, Pragma,
Priority.
- User-Agent now from captured profile (Safari iOS) rather than
input-derived Chrome desktop. Previously the UA didn't match
the environment that computed the saved browser_fp.
• Plus privacy-cs.mail.ru tracking ping replicated for full Safari
network footprint match.
Background grower staggering
• After the PoW rewrite, fast pool fills (~90s) would have caused
synchronized expirations 8h later. Grower now switches to
maintenance mode at pool ≥ 50%, inserting random 60-240s pauses
between fills. Cold start (first half) remains fast so user can
connect quickly; second half spreads over ~15 min with naturally-
staggered cred expiration timestamps.
Diagnostics inherited from builds 81-84
• Both directions of fresh-state transitions logged on each periodic
save tick (was previously silent — only visible by 60s-poll
aliasing).
• Pool indicator in UI now reflects USABLE creds (excludes those
within 30-min expiry buffer the grower can't refresh due to PoW
rate-limit). Previously a "6/12/12 stuck" scenario appeared as
"12 with creds" when 6 of those were dead.
• 500ms credPool.get() pause after each PathMonitor event prevents
iOS dual-event sequences (130-365ms apart on physical interface
swap) from stealing extra slots in the gap between events.