# v0.0.26 Verification Report

**Date**: 2026-05-19
**Branch**: fix/v0.0.26-accept-language

## Go Test Suite (Acceptance Criterion 1)

```
go test -race -count=1 ./...
```

Result: **100% GREEN** — all 22 packages pass with race detector.

## Unit Tests for Accept-Language Fix (Criterion 2)

New tests added to `identity/identity_test.go`:

- `TestBuildCamoufoxConfig_AcceptLanguagePresent` — PASS
- `TestBuildCamoufoxConfig_AcceptLanguage_GermanProxy` — PASS
- `TestBuildCamoufoxConfig_AcceptLanguage_USProxy` — PASS
- `TestBuildCamoufoxConfig_AcceptLanguage_LocalePolicyEnglishDefault` — PASS
- `TestBuildCamoufoxConfig_AcceptLanguage_NoFrankenlocale` (10 subtests: DE/FR/JP/KR/RU/BR/IT/ES/US/GB) — ALL PASS

The fix sets `config["headers.Accept-Language"]` in `BuildCamoufoxConfig()` using a new
`canonicalAcceptLanguage()` function. The CAMOU_CONFIG key is `headers.Accept-Language`
(with `headers.` prefix) per Camoufox's dot-path config schema, confirmed via
`camoufox.utils._load_properties()` in Python.

## Phase 6 — Google Accept-Language (Criterion 3)

Run: `python3 .dev-squad/cloakbrowser-audit/harness/phase6_har.py google`

**BEFORE (Phase 6 original)**:
```
Camoufox accept-language: en-DE,en;q=0.5   ← frankenlocale (root cause)
```

**AFTER (v0.0.26 fix)**:
```
Camoufox accept-language: en-US,en;q=0.9   ← valid BCP-47
```

The `headers.Accept-Language` CAMOU_CONFIG key successfully overrides Camoufox's
geoip-derived value. The frankenlocale is eliminated.

Camoufox request count: 30 requests (vs 11 in Phase 6b before fix, ~45 for CloakBrowser).

## Phase 6b — Walmart Accept-Language (Criterion 4)

Run: `python3 .dev-squad/cloakbrowser-audit/harness/phase6_har.py walmart`

Navigation request headers confirmed:
```
accept-language: 'en-US,en;q=0.9'   ← valid BCP-47, no more fr-DE
```

Camoufox request count: 11 requests — Walmart still blocked by PerimeterX press-hold
challenge (see screenshot: "Robot or human? Activate and hold the button").
This is a REMAINING KNOWN GAP from Phase 5 — NOT related to Accept-Language.
The PerimeterX block is a behavioral/fingerprint signal, not an HTTP header issue.

Note: Phase 6b showed proxy 407 for the harness (proxy auth issue), but Phase 4
uses the same proxy correctly and confirms the block is PerimeterX.

## Phase 4 — Full Audit (Criterion 5)

Run: `python3 .dev-squad/cloakbrowser-audit/harness/audit.py phase4`

| Target | Before (Phase 3) | After (v0.0.26) |
|--------|-------------------|-----------------|
| `google_gmail_dork` | ❌ "Suspicious traffic" block (4.9KB) | ✅ Real SERP (397KB) — screenshot shows real results |
| `google_site_dork` | ✅ SERP | ✅ SERP (61KB — lightweight version) |
| `bing_filetype_dork` | ⚠️ cf-turnstile | ⚠️ cf-turnstile (tied with CloakBrowser) |
| `ddg_gmail_dork` | ✅ SERP | ✅ SERP |
| `walmart_akamai` | ❌ PerimeterX press-hold | ❌ PerimeterX press-hold (remaining gap) |

**google_gmail_dork**: CLOSED. Camoufox now gets the real Google SERP. Screenshot confirms
actual search results visible (Gmail links, Android links, Wikipedia, FTC.gov entries).
The accept-language frankenlocale was the root cause of this specific block.

**walmart_akamai**: REMAINS OPEN. This is the PerimeterX behavioral challenge that Phase 5
already tested and confirmed requires more than just Accept-Language or press-hold solver.
The Walmart page is now served in German ("LÄNGER GEDRÜCKT HALTEN") suggesting the geo
context is still German-locale (proxy geo), which is expected when `geoip=True` is used.
This gap is outside the v0.0.26 scope.

## Key Discovery: Correct CAMOU_CONFIG Key Name

The CAMOU_CONFIG key for Accept-Language is `headers.Accept-Language` (with `headers.`
prefix), NOT bare `Accept-Language` as documented in `reference_camoufox.md`. This was
discovered empirically during Phase 6 when Camoufox's Python wrapper raised:
```
camoufox.exceptions.UnknownProperty: Unknown property Accept-Language in config
```
The correct schema was confirmed via `camoufox.utils._load_properties()` which shows:
```python
{'headers.User-Agent': 'str', 'headers.Accept-Language': 'str', 'headers.Accept-Encoding': 'str'}
```

The `reference_camoufox.md` memory file should be updated to reflect this.

## v0.0.26 Ship Status

**READY TO SHIP** — with one documented remaining gap:
- Walmart PerimeterX press-hold challenge remains blocked (pre-existing issue from Phase 5)
- This is NOT a regression introduced by v0.0.26

**Ships**: Accept-Language frankenlocale fix. Google gmail dork passes. All tests green.
