{
  "separate_public_canary": {
    "target_id": "webscrapingdev",
    "site": "Web Scraping Dev",
    "category": "javascript",
    "url": "https://web-scraping.dev/reviews",
    "original_url": "https://web-scraping.dev/reviews",
    "final_url": "https://web-scraping.dev/reviews",
    "expected_required_content": "Review text loaded by the JavaScript review interface",
    "started_at": "2026-09-29T22:07:05.349506+00:00",
    "request_started_at": "2026-09-29T22:07:05.991303+00:00",
    "status": 200,
    "request_outcome": "returned",
    "redirect_history": [],
    "redirect_outcome": "none",
    "document_responses": [
      {
        "url": "https://web-scraping.dev/reviews",
        "status": 200,
        "protocol": "HTTP/1.1",
        "wire_body_bytes": 14727,
        "wire_body_sha256": "77a5e13ddd2d8d9d65ba531340293d16870224866f7d52bbf7377f113b514665"
      }
    ],
    "explicit_request_headers": {},
    "response_metadata": {
      "content_type": "text/html; charset=utf-8",
      "content_encoding": "",
      "protocol": "HTTP/1.1",
      "flags": [],
      "body_basis": "Final Spider response after compression middleware"
    },
    "error": null,
    "navigation_error": null,
    "capture_error": null,
    "screenshot_error": null,
    "screenshot_sha256": null,
    "capture_complete": true,
    "raw_response_sha256": "77a5e13ddd2d8d9d65ba531340293d16870224866f7d52bbf7377f113b514665",
    "response_bytes": 14727,
    "downloaded_body_bytes": 14727,
    "body_complete": true,
    "navigation_seconds": null,
    "attempt_seconds": 1.589,
    "effective_settings": {
      "USER_AGENT": "Scrapy/2.19.0 (+https://scrapy.org)",
      "CONCURRENT_REQUESTS": 1,
      "CONCURRENT_REQUESTS_PER_DOMAIN": 1,
      "ROBOTSTXT_OBEY": false,
      "COOKIES_ENABLED": false,
      "RETRY_ENABLED": false,
      "RETRY_TIMES": 0,
      "HTTPPROXY_ENABLED": false,
      "HTTPERROR_ALLOW_ALL": true,
      "REDIRECT_ENABLED": true,
      "REDIRECT_MAX_TIMES": 3,
      "METAREFRESH_ENABLED": false,
      "DOWNLOAD_TIMEOUT": 20,
      "DOWNLOAD_MAXSIZE": 5242880,
      "DOWNLOAD_WARNSIZE": 5242880,
      "DOWNLOAD_VERIFY_CERTIFICATES": true,
      "DOWNLOAD_FAIL_ON_DATALOSS": true,
      "HTTPCACHE_ENABLED": false,
      "TELNETCONSOLE_ENABLED": false,
      "MEMUSAGE_ENABLED": false,
      "LOG_LEVEL": "INFO",
      "DEFAULT_REQUEST_HEADERS": {
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
        "Accept-Language": "en"
      },
      "DOWNLOADER_MIDDLEWARES": {
        "__main__.ResponseObserver": 900,
        "scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware": null
      },
      "DOWNLOAD_HANDLERS": {
        "http": "scrapy.core.downloader.handlers.http11.HTTP11DownloadHandler",
        "https": "scrapy.core.downloader.handlers.http11.HTTP11DownloadHandler"
      }
    },
    "latency_seconds": 0.774,
    "scrapy_stats": {
      "log_count/INFO": 3,
      "scheduler/enqueued/memory": 1,
      "scheduler/enqueued": 1,
      "scheduler/dequeued/memory": 1,
      "scheduler/dequeued": 1,
      "downloader/request_count": 1,
      "downloader/request_method_count/GET": 1,
      "downloader/request_bytes": 234,
      "downloader/response_count": 1,
      "downloader/response_status_count/200": 1,
      "downloader/response_bytes": 15523,
      "response_received_count": 1,
      "elapsed_time_seconds": 0.7763546030037105,
      "finish_reason": "finished"
    },
    "downloader_request_count": 1,
    "observed_request_headers": [
      {
        "url": "https://web-scraping.dev/reviews",
        "method": "GET",
        "headers": [
          {
            "name": "Accept",
            "values": [
              "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
            ]
          },
          {
            "name": "Accept-Language",
            "values": [
              "en"
            ]
          },
          {
            "name": "User-Agent",
            "values": [
              "Scrapy/2.19.0 (+https://scrapy.org)"
            ]
          },
          {
            "name": "Accept-Encoding",
            "values": [
              "gzip, deflate, br, zstd"
            ]
          }
        ]
      }
    ],
    "transport_log_sha256": "ae07a02deb7a761ff97022795ca1461ed9058eec7ddaad1664f01f132768b1cf",
    "finished_at": "2026-09-29T22:07:06.938868+00:00",
    "checks": {
      "text_chars": 244,
      "required_text_checks": [
        {
          "alternatives": [
            "unique flavor and great energy boost",
            "excellent energy drink for gamers"
          ],
          "matched": []
        }
      ],
      "text_regex_checks": [],
      "min_text_chars": 300,
      "has_required_content": false,
      "soft_block_checks": {
        "phrases_checked": [
          "verify you are human",
          "robot or human",
          "robot check",
          "access denied",
          "pardon our interruption",
          "please complete the captcha",
          "enter the characters",
          "additional verification required",
          "unusual traffic",
          "checking your browser",
          "enable javascript and cookies to continue",
          "just a moment"
        ],
        "matched": []
      },
      "gate_checks": {
        "phrases_checked": [
          "log in to continue",
          "sign in to continue",
          "sign in to linkedin",
          "consent required",
          "before you continue"
        ],
        "matched": []
      }
    },
    "empty_content": false,
    "classification": "missing_required_content",
    "usable_content": false,
    "cleanup_surviving_owned_pids": [],
    "driver_log_sha256": "3d9d678d80b85157b616c05f4b11c0926aa79c457c6a0784c0a93131df364a8b",
    "peak_sampled_tree_pss_mb": 61.373,
    "pss_samples": 20,
    "attempt_process_exit": 0,
    "host_ram_before": {
      "MemTotal": 32049.69921875,
      "MemAvailable": 13772.01171875,
      "SwapTotal": 8191.99609375,
      "SwapFree": 39.296875,
      "unit": "MiB",
      "measured_at": "2026-09-29T22:07:05.082901+00:00"
    },
    "request_header_observation_basis": "Downloader middleware before the native handler; implicit Host/connection/transport headers are not a complete wire dump. Cookies/auth values excluded.",
    "inspection_note": "Saved response was rechecked with unchanged rules: missing required content. This HTTP-only pass did not execute JavaScript to populate the reviews route."
  },
  "canary_started_at": "2026-09-29T22:07:05.076827+00:00",
  "canary_finished_at": "2026-09-29T22:07:07.121746+00:00",
  "executed_command": "/tmp/scrapingevals-scrapy-20260930/bin/python public/evidence/scrapy-public-30-20260929/run.py --manifest runner/corpora/public-30-v1.json --output runner/data/scrapy-canary-20260930 --target webscrapingdev",
  "runner_sha256": "efb97b78cb6850fb006afd13011c83a4cedac57eecf0611b17dbcc4c578078fb",
  "config_same_as_batch": true,
  "counts_relation": "One complete HTTP 200 canary body failed frozen reviews checks. It establishes returned downloader plumbing, not usable review extraction. Excluded from the full 30-target batch; 31 explicit root Spider Requests total, plus ordinary redirects. No local smoke, browser or failed setup navigation."
}
