Skip to content

Pro launcher: reach the render farm directly, not through the page's proxy - #17

Merged
JWriter20 merged 1 commit into
feat/pro_integrationfrom
fix/farm_bypasses_proxy
Oct 5, 2026
Merged

JWriter20 merged 1 commit into
feat/pro_integrationfrom
fix/farm_bypasses_proxy

Conversation

@JWriter20

Copy link
Copy Markdown
Owner

Bug: with a proxy and a farm GPU grant, the browser's render-farm WebSocket goes through the proxy. Camoufox Pro's warm sessions on dev showed it: every browser socket went to the warming proxy (:8081), cfp-render saw zero farm connections from 235 granted warm leases, and render-dev.camoufox.com is unreachable through that proxy (curl exit 56; example.com through the same proxy: 200). The farm route never opened, so heavy canvas/WebGL calls blocked until cfp-warm's 300 s watchdog killed the browser — most of the "browser call stuck after a pause" crashes. On production the same path would send all farm traffic through a customer's (often metered) residential proxy.

Fix (Python and TS): with a gpu grant and a proxy, the render endpoint's host is appended to proxy.bypass, after the caller's own entries. Without a proxy nothing changes.

Tests: both launchers: a farm launch with {server, bypass: "intranet.example"} ends with bypass = "intranet.example,render.example", and without a caller bypass, "render.example". Fail before (bypass unchanged), pass after. TS suite 821 passed, biome + tsc clean; Python suite 651 passed — the one failure, test_geoip_config.py::test_refresh_keeps_an_explicit_choice, fails on feat/pro_integration without this change too.

🤖 Generated with Claude Code

…proxy

A farm GPU grant points the browser at the render gateway's WebSocket, and
that socket went through whatever proxy the launch had. A proxy that cannot
reach the gateway (a residential exit, a warming proxy, a dev gateway on a
private network) left the farm route unopened, and every canvas or WebGL call
that needed it waited until the caller gave up. The render endpoint's host is
now added to the proxy's bypass list, after any entries the caller set.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 5, 2026

Copy link
Copy Markdown

✅ Tests passed

Camoufox 156.0.1 (beta.32), built on Firefox 156, tested against Playwright v1.62.0 — the newest released suite not ahead of Firefox 156 (it targets Firefox 153.0).

Suite Result Detail
native_rules ✅ pass 28 passed, 0 failed, 28 collected
pythonlib ✅ pass 653 passed, 0 failed, 655 collected
typescript ✅ pass 825 passed, 0 failed, 844 collected
build ✅ pass built camoufox-bin (0.7 MB)
patch_guards_spoofing ✅ pass 8 passed, 0 failed, 8 collected
patch_guards_automation ✅ pass 16 passed, 0 failed, 16 collected
patch_guards_parity ✅ pass 8 passed, 0 failed, 8 collected
skiplist_audit ✅ pass 17 passed, 0 failed, 17 collected
native_browser ✅ pass 46 passed, 0 failed, 46 collected
build_tester ✅ pass 478 passed, 4 failed, 482 collected
playwright ✅ pass 2248 passed, 0 failed, 2315 collected (across 6 shards), 328 via main-world fallback
typescript_browser ✅ pass 16 passed, 0 failed, 19 collected
native_growth ✅ pass 7 passed, 0 failed, 7 collected (across 7 shards)
sundial ✅ pass grade A+ — 626/630 in-scope checks passed

The Playwright suite is upstream playwright-python at the tag above, fetched fresh, with tests/camoufox/ overlaid. It runs with world isolation on — the configuration Camoufox ships — and only the failures are re-run with it off; those count as passes and are reported above as main-world fallbacks, which is the size of the isolated-world gap. Tests Camoufox cannot pass by design are deselected via ci/skiplist.yml — each with a stated reason. The stealth check reports a grade only; its per-vector detail is deliberately never published.

@JWriter20
JWriter20 merged commit edf104e into feat/pro_integration Oct 5, 2026
29 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant