208.77.244.106
· Railway
·
Results reflect how this site presents to this location.
| Banner detected | False |
| Accept button | |
| Reject button | |
| Clicks to accept / reject | 0 / 0 |
| Reject buried in manage panel | True |
| Category | Result |
|---|---|
| Pre Consent Clean | ✓ PASS |
| No Tracking Cookies Pre Consent | ✓ PASS |
| Tracker Globals Undefined | ✓ PASS |
| No Tracking Storage Pre Consent | ✓ PASS |
| Network Blocked After Decline | ☐ MANUAL |
| Third Party Cookies Absent | ☐ MANUAL |
| Doc Cookie Clean Post Reject | ✓ PASS |
| Web Storage Clean Post Reject | ✓ PASS |
| First Party Cookies Classified | ℹ INFO |
| Server Side Cookies Gated | — N/A |
| No Cname Cloaking | ☐ MANUAL |
| Tracker Globals Absent | ✓ PASS |
| Dom Scripts Blocked | ✓ PASS |
| Reject Equals Accept Clicks | ✓ PASS |
| No Preticked Boxes | ☐ MANUAL |
| Persistent Withdrawal Widget | ✗ FAIL |
| No Cookie Wall | ✗ FAIL |
| Consent Persists | ✓ PASS |
| elapsed | level | session | message |
|---|---|---|---|
| 0.0s | ▶ STEP | MAIN | Run 2e517903 started {"url": "https://sfchronicle.com"} |
| 0.0s | · INFO | MAIN | Detecting probe server location |
| 0.3s | · INFO | MAIN | Probe location {"ip": "208.77.244.106", "city": "Amsterdam", "region": "North Holland", "country": "The Netherlands", "country_code": "NL", "org": "Railway", "latitude": 52.37403, "longitude": 4.88969} |
| 0.3s | ▶ STEP | MAIN | Starting analysis of https://sfchronicle.com {"mode": "GDPR"} |
| 1.2s | · INFO | MAIN | Chromium launched {"headless": true} |
| 1.2s | · INFO | PREFLIGHT | Navigating to https://sfchronicle.com |
| 9.7s | ⚠ WARN | PREFLIGHT | Network did not reach idle state — proceeding after load event. Normal for sites with persistent connections (websockets, polling). |
| 9.7s | ▶ STEP | A | Session A start (accept path) |
| 9.9s | · INFO | A | Navigating to https://sfchronicle.com |
| 18.4s | ⚠ WARN | A | Network did not reach idle state — proceeding after load event. Normal for sites with persistent connections (websockets, polling). |
| 20.4s | · INFO | A | Capturing pre-consent state |
| 20.6s | · INFO | A | Pre-consent state captured {"pre_consent_cookies": 6, "pre_consent_ad_cookies": 0, "pre_consent_tracking_storage": 0, "pre_consent_tracker_globals": [], "pre_consent_unblocked_scripts": 0, "pre_consent_capture_error": null} |
| 90.8s | · INFO | A | Banner: NOT FOUND |
| 90.8s | ⚠ WARN | A | No consent banner detected before Accept All — CMP may not have loaded, or banner was auto-dismissed by a prior cookie. |
| 92.3s | · INFO | A | Accept All interaction {"cmp": "Unknown", "button_text": "", "clicked": false, "in_iframe": false, "error": "Accept All button not found"} |
| 92.3s | ⚠ WARN | A | Accept interaction issue: Accept All button not found |
| 94.3s | · INFO | A | Capturing post-accept baseline state |
| 94.5s | · INFO | A | Baseline captured {"baseline_cookies": 6, "baseline_ad_cookies": 0, "baseline_tracking_storage": 0, "baseline_tracker_globals": [], "baseline_unblocked_scripts": 0, "baseline_capture_error": null} |
| 95.6s | · INFO | A | Context closed, HAR saved |
| 95.7s | ▶ STEP | A | Session A complete {"pre_consent_cookies": 6, "pre_consent_ad_cookies": 0, "pre_consent_tracking_storage": 0, "pre_consent_tracker_globals": [], "pre_consent_unblocked_scripts": 0, "pre_consent_capture_error": null, "baseline_cookies": 6, "baseline_ad_cookies": 0, "baseline_tracking_storage": 0, "baseline_tracker_globals": [], "baseline_unblocked_scripts": 0, "baseline_capture_error": null} |
| 95.7s | ▶ STEP | B | Session B start (reject path) |
| 95.8s | · INFO | B | Navigating to https://sfchronicle.com |
| 104.2s | ⚠ WARN | B | Network did not reach idle state — proceeding after load event. Normal for sites with persistent connections (websockets, polling). |
| 106.2s | · INFO | B | Capturing pre-consent state |
| 106.4s | · INFO | B | Pre-consent B captured {"pre_consent_B_cookies": 6, "pre_consent_B_ad_cookies": 0, "pre_consent_B_tracking_storage": 0, "pre_consent_B_tracker_globals": [], "pre_consent_B_unblocked_scripts": 0, "pre_consent_B_capture_error": null} |
| 176.7s | · INFO | B | Banner: NOT FOUND |
| 176.7s | ⚠ WARN | B | No consent banner detected in Session B — Reject All will likely fail. Post-reject checks will be unreliable. |
| 190.2s | · INFO | B | Click symmetry measured {"accept_clicks": 0, "reject_clicks": 0} |
| 192.2s | · INFO | B | Reject All interaction {"cmp": "Unknown", "button_text": "", "clicked": false, "clicks_required": 0, "required_manage_panel": true, "panel_navigated": false, "panel_new_frames": 0, "panel_wait_s": 0.0, "error": "No reject button and no manage/preferences button found on layer 1. CMP may not have loaded, or uses an unrecognised button label."} |
| 192.2s | ⚠ WARN | B | Reject interaction issue: No reject button and no manage/preferences button found on layer 1. CMP may not have loaded, or uses an unrecognised button label. |
| 192.2s | ⚠ WARN | B | Reject All was NOT successfully clicked — post-reject state captures an unmodified consent state, not a rejection. |
| 194.3s | · INFO | B | Site accessible after reject: False |
| 194.3s | · INFO | B | Capturing post-reject state |
| 194.5s | · INFO | B | Post-reject captured {"post_reject_cookies": 6, "post_reject_ad_cookies": 0, "post_reject_tracking_storage": 0, "post_reject_tracker_globals": [], "post_reject_unblocked_scripts": 0, "post_reject_capture_error": null} |
| 199.9s | · INFO | B | Persistent widget check {"found": false, "text": "", "in_iframe": false} |
| 199.9s | · INFO | B | Capturing subpages |
| 199.9s | · INFO | B | 0 subpage(s) captured {"urls": [], "errors": []} |
| 201.2s | · INFO | B | Context closed, HAR saved |
| 201.2s | · INFO | B | Checking pre-ticked toggles (separate session) |
| 201.2s | · INFO | B | Navigating to https://sfchronicle.com |
| 209.8s | ⚠ WARN | B | Network did not reach idle state — proceeding after load event. Normal for sites with persistent connections (websockets, polling). |
| 294.4s | ⚠ WARN | B | Manage/preferences button not visible after 5s wait — toggle check may return 0 results |
| 295.9s | · INFO | B | Pre-ticked toggles: 0 found {"toggles": {}} |
| 295.9s | ⚠ WARN | B | Toggle check returned 0 results — diagnostics: {"manage_button_found": false, "manage_button_text": null, "frames_scanned": [], "total_elements_found": 0, "note": "Manage/preferences button not found on page"} |
| 295.9s | ▶ STEP | B | Session B complete {"post_reject_cookies": 6, "post_reject_ad_cookies": 0, "post_reject_tracking_storage": 0, "post_reject_tracker_globals": [], "post_reject_unblocked_scripts": 0, "post_reject_capture_error": null, "accept_clicks": 0, "reject_clicks": 0, "reject_at_first_screen": false, "subpages_captured": 0} |
| 295.9s | ▶ STEP | C | Session C start (persistence check) |
| 296.1s | · INFO | C | Navigating to https://sfchronicle.com |
| 304.5s | ⚠ WARN | C | Network did not reach idle state — proceeding after load event. Normal for sites with persistent connections (websockets, polling). |
| 378.3s | · INFO | C | Reject for persistence test {"clicked": false, "error": "No reject button and no manage/preferences button found on layer 1. CMP may not have loaded, or uses an unrecognised button label."} |
| 378.3s | ⚠ WARN | C | Reject All failed in Session C — persistence check results will be unreliable. |
| 380.3s | · INFO | C | Opening second tab (same-session test) |
| 380.4s | · INFO | C | Navigating to https://sfchronicle.com |
| 388.7s | ⚠ WARN | C | Network did not reach idle state — proceeding after load event. Normal for sites with persistent connections (websockets, polling). |
| 390.8s | · INFO | C | Same-session state captured {"persistence_1_cookies": 6, "persistence_1_ad_cookies": 0, "persistence_1_tracking_storage": 0, "persistence_1_tracker_globals": [], "persistence_1_unblocked_scripts": 0, "persistence_1_capture_error": null} |
| 390.9s | · INFO | C | Storage state saved, opening new context |
| 390.9s | · INFO | C | Navigating to https://sfchronicle.com |
| 399.4s | ⚠ WARN | C | Network did not reach idle state — proceeding after load event. Normal for sites with persistent connections (websockets, polling). |
| 401.5s | · INFO | C | New-session state captured {"persistence_2_cookies": 6, "persistence_2_ad_cookies": 0, "persistence_2_tracking_storage": 0, "persistence_2_tracker_globals": [], "persistence_2_unblocked_scripts": 0, "persistence_2_capture_error": null} |
| 401.6s | ▶ STEP | C | Session C complete {"persistence_1_captured": true, "persistence_2_captured": true} |
| 401.6s | ▶ STEP | POLICY_RENDER | Rendering cookie policy page in browser |
| 402.1s | · INFO | POLICY_RENDER | Navigating to policy: https://sfchronicle.com/cookies |
| 412.7s | · INFO | POLICY_RENDER | Extracted 2051 chars from policy page |
| 412.7s | · INFO | POLICY_RENDER | Policy page rendered (2073 chars) |
| 412.8s | · INFO | MAIN | Browser closed |
| 412.9s | ▶ STEP | DNS | Running CNAME cloaking checks |
| 412.9s | · INFO | DNS | Apex domain: sfchronicle.com (from hostname: sfchronicle.com) |
| 413.1s | · INFO | DNS | Checking 0 subdomain(s) {"subdomains": []} |
| 413.1s | · INFO | DNS | No first-party subdomains to check |
| 413.1s | ▶ STEP | POLICY | Fetching cookie policy |
| 413.1s | · INFO | POLICY | Policy found at https://sfchronicle.com/cookies |
| 413.1s | · INFO | POLICY | Fetching policy, cross-referencing 6 cookie(s) |
| 424.3s | · INFO | POLICY | Policy fetch OK {"declared": 2, "undeclared_observed": 6, "ai_used": true} |
| 424.3s | ⚠ WARN | POLICY | 6 cookie(s) not in policy {"cookies": ["hnpdiudpf1", "ab_bucket", "hnpdiudpf2", "_fs_ch_cp_79UUvfpJ5mWYtLQv", "location_data", "_fs_ch_st_FSBmUei20MqUiJb9"]} |
| 424.3s | ▶ STEP | MAIN | Analysis complete {"error_count": 0} |
| 424.3s | ▶ STEP | C1 | Running Component 1 HAR analysis |
| 424.7s | · INFO | C1 | HAR analysis complete — 0 FAIL item(s) {"total_requests": 960, "phases": ["pre_consent"], "phase_strategy": {"accept": "not_detected", "reject": "not_detected"}, "fail_items": []} |
| 424.9s | ▶ STEP | CHECKS | Running browser-state checks |
| 424.9s | · INFO | CHECKS | Browser checks complete — 5 FAIL item(s) {"fail_items": ["G.2", "G.3", "K.5", "K.6", "L.2"], "mode": "gdpr"} |
No consent-required domains observed before the consent signal.
No advertising cookies found in Storage before consent.
All probed tracker globals are undefined pre-consent.
No tracking keys found in web storage pre-consent.
All tracking scripts in DOM appear to be CMP-blocked (type=text/plain) or absent.
No post-accept phase detected. Was 'Accept All' clicked during recording?
6 cookies in storage after Accept All (full metadata).
| name | domain | expires_days | http_only | secure | same_site | classification |
|---|---|---|---|---|---|---|
| location_data | www.sfchronicle.com | session | False | True | Strict | UNKNOWN |
| hnpdiudpf1 | .sfchronicle.com | 365.0 | True | True | Lax | UNKNOWN |
| hnpdiudpf2 | .sfchronicle.com | session | False | True | Lax | UNKNOWN |
| ab_bucket | www.sfchronicle.com | 365.0 | False | True | None | UNKNOWN |
| _fs_ch_cp_79UUvfpJ5mWYtLQv | www.sfchronicle.com | 0.0 | True | False | Lax | UNKNOWN |
| _fs_ch_st_FSBmUei20MqUiJb9 | www.sfchronicle.com | 0.0 | True | False | Lax | UNKNOWN |
Globals defined after consent: []
Accept and Reject both require 1 click(s). Symmetric.
No post-reject phase detected in this HAR.
No post-reject phase detected in this HAR.
No post-reject phase detected in this HAR.
No subpages captured.
No post-reject phase detected.
No advertising cookies visible in document.cookie post-reject.
No tracking identifiers found in localStorage/sessionStorage post-reject.
6 first-party cookies in Storage after Accept All.
| name | domain | expires_days | http_only | secure | same_site | classification |
|---|---|---|---|---|---|---|
| location_data | www.sfchronicle.com | session | False | True | Strict | UNKNOWN |
| hnpdiudpf1 | .sfchronicle.com | 365.0 | True | True | Lax | UNKNOWN |
| hnpdiudpf2 | .sfchronicle.com | session | False | True | Lax | UNKNOWN |
| ab_bucket | www.sfchronicle.com | 365.0 | False | True | None | UNKNOWN |
| _fs_ch_cp_79UUvfpJ5mWYtLQv | www.sfchronicle.com | 0.0 | True | False | Lax | UNKNOWN |
| _fs_ch_st_FSBmUei20MqUiJb9 | www.sfchronicle.com | 0.0 | True | False | Lax | UNKNOWN |
6 cookie(s) observed but not found in cookie policy at https://sfchronicle.com/cookies.
| cookie_name | status |
|---|---|
| hnpdiudpf1 | observed but not in cookie policy |
| ab_bucket | observed but not in cookie policy |
| hnpdiudpf2 | observed but not in cookie policy |
| _fs_ch_cp_79UUvfpJ5mWYtLQv | observed but not in cookie policy |
| location_data | observed but not in cookie policy |
| _fs_ch_st_FSBmUei20MqUiJb9 | observed but not in cookie policy |
AI analysis: 3 cookie(s) fail the strictly-necessary test and should be absent after reject-all. Summary: Major GDPR compliance issues identified: All 6 observed cookies are not declared in the cookie policy, which only mentions 'event' and 'script' cookies. Multiple FullStory analytics cookies are present without declaration. The cookie policy appears incomplete or the provided text doesn't contain the actual policy content. All cookies should be absent if user rejected consent, as none appear to be strictly necessary for basic website functionality.
| cookie_name | declared | category | strictly_necessary_test | should_be_absent_post_reject | notes |
|---|---|---|---|---|---|
| hnpdiudpf1 | False | unknown | unclear | True | Cookie not declared in policy. Name suggests it could be a session identifier or tracking cookie, but purpose is unclear without declaration. |
| ab_bucket | False | analytics | not_exempt | True | Appears to be an A/B testing bucket assignment cookie. Not declared in policy. A/B testing is not essential for basic service functionality. |
| hnpdiudpf2 | False | unknown | unclear | True | Cookie not declared in policy. Similar naming pattern to hnpdiudpf1, purpose unclear without declaration. |
| _fs_ch_cp_79UUvfpJ5mWYtLQv | False | analytics | not_exempt | True | Appears to be a FullStory (fs) analytics/session recording cookie. Not declared in policy. Analytics cookies are not strictly necessary. |
| location_data | False | functional | unclear | True | Appears to store location information. Not declared in policy. Could be functional if location is essential for the service, but typically requires consent. |
| _fs_ch_st_FSBmUei20MqUiJb9 | False | analytics | not_exempt | True | Another FullStory analytics/session recording cookie. Not declared in policy. Analytics cookies are not strictly necessary. |
No advertising cookies observed in Set-Cookie response headers.
Found 0 first-party subdomains. Run 'dig CNAME
All advertising cookies absent from Storage post-reject.
No tracking identifiers found in first-party web storage post-reject.
All tracker globals return undefined post-reject.
See H.1 — same evidence applies.
dataLayer not present post-reject.
All 0 tracker scripts correctly blocked in DOM post-reject.
See I.1 — same check.
Based on DOM script inventory; full Sources tab verification requires Chrome DevTools protocol introspection (beyond current scope).
Requires manual browser configuration check.
Requires manual browser configuration check.
No obvious ITP-bypass server-side cookies detected.
Could not determine button prominence.
Could not open preferences panel to check toggles.
DOM-level button detection completed. Full visual assessment of colour contrast, typography prominence, and deceptive visual hierarchy requires screenshot review. See screenshots in report.
No persistent consent widget found. Users cannot easily withdraw consent.
Site content may be blocked after declining — possible cookie wall.
Consent preference correctly persisted to second tab.
No advertising cookies found on simulated return visit.
No persistent cross-phase identifiers detected in POST bodies.
No TCF consent strings detected in query parameters.
No session ID bridging detected across consent states.
No post-reject phase detected.
CMP identified as: Unknown / Not detected
| url | Client Challenge |
| test date | 2026-03-31 |
| test time utc | 2026-03-31T16:48:26 |
| cmp detected | Unknown / Not detected |
| total requests | 960 |
| phases detected | pre_consent |
| phase strategy | {'accept': 'not_detected', 'reject': 'not_detected'} |