# Changelog of ghost probe datacenter (`straightforward_understanding/ghost-probe-datacenter`) Actor

- **URL**: https://apify.com/straightforward\_understanding/ghost-probe-datacenter/changelog.md
- **Full Actor documentation**: https://apify.com/straightforward\_understanding/ghost-probe-datacenter.md

## Changelog

### 0.3.1 — 2026-06-10

#### Opt-in raw response capture in telemetry

- New `GHOST_FETCH_TELEMETRY_RAW=1` attaches the full raw fetch result — the same payload `/v1/fetch` returns, including the HTML `body`, response headers, `final_url`, decision trace, and base64 screenshot — to the request telemetry event under a `raw_response` field. Off by default; sanitized telemetry is unchanged (backward compatible).
- Double-gated: raw capture requires `GHOST_FETCH_TELEMETRY_RAW` **and** a valid custom `GHOST_FETCH_TELEMETRY_DATASET_ID`, so raw payloads (bodies, `set-cookie` headers, full URLs) never reach the shared default `ghost-fetch-telemetry` dataset that feeds Passive Context Profiles.
- `GHOST_FETCH_TELEMETRY_DATASET_ID` is now validated as an Apify Dataset id (17-char alphanumeric) or name (`name` / `username/name`); a malformed value warns and falls back to the default dataset instead of wedging writes. The dataset open is also no longer cached on failure.
- Raw `body` is bounded by `GHOST_FETCH_TELEMETRY_RAW_MAX_BYTES` (default 6 MB, fits Apify's ~9 MB item limit); when truncated the event carries `raw_response_truncated: true`.
- See [docs/telemetry.md → Raw Response Capture](docs/telemetry.md#raw-response-capture).

### 0.3.0 — 2026-05-16

#### Camoufox dep swap: cloverlabs-camoufox 0.6.0 + Firefox 150

- Dockerfile: `pip install "cloverlabs-camoufox[geoip]"` + `python3 -m camoufox fetch official/150.0.2-alpha.26`.
- Motivation: daijro/camoufox PyPI stale at Firefox 135 → DataDome serves unsolvable `rt:c` captcha. cloverlabs FF150 → auto-solvable `rt:i` interstitial.
- README local-install snippet updated to match.

#### Breaking — removed `fox_main_world_eval` request param

cloverlabs/FF150 has no Juggler-scope isolation (single-world model). The flag set camoufox's `allowMainWorld:True` which is now inert; the `mw:` prefix it was meant to enable is parsed as a JavaScript label. The param has no observable effect on this build and is dropped from the request schema and the `FoxOptions` interface. See `proxy-mcp` v3.3.0 for the underlying world-model investigation and `scripts/camoufox-world-probe.ts` to verify on any installed build.

#### Behavior note — `inPageFetch` no longer hidden from page hooks

`inPageFetch()` (`src/fetch.ts:498`) issues `fetch()` via `page.evaluate` to avoid Akamai poisoning of GET navigation. Under daijro/FF135 the eval ran in a Juggler scope, isolated from any page-installed `window.fetch` hooks. Under cloverlabs/FF150 it runs in the page's main world — pages that have hooked `window.fetch` (Akamai, PerimeterX) now observe the request. No correctness change; potential detection signal on high-tier WAFs.
