{
  "schema_version": "declawd.source-review/v1",
  "reviewed_at": "2026-11-02T17:19:15.371369Z",
  "scope": "Fresh review of every ledger mutable non-GitHub source, with linked Anthropic generated-file documentation, OpenAI EU guidance/announcement, official C2PA 2.5 and trust landing pages, Unicode 18 and EU task-force documents. Repository discovery and live trust-list commits are recorded by a separate reviewer.",
  "limitations": [
    "Captured response hashes identify bytes, not substantive change. HTML page chrome, compressed transport and dynamic data can change hashes without changing a claim.",
    "The original 10 August Internet Archive capture remains historical and was not fetched. Immutable research-paper sources are handled by the separate research review.",
    "Unreadable HTTP responses, document shells and missing guessed paths are retained. Web reader access is distinguished from origin HTTP capture, and its origin status is unknown.",
    "Raw source text is held only in this local output directory. It is excluded from site publication. Provider statements and reported research have not been reproduced against private production detectors.",
    "No material date was inferred from a recent crawl or search ranking. The reported 3 November Claude expansion remains an unverified third-party future lead as of 2 November."
  ],
  "sources": [
    {
      "source_id": "anthropic-watermark-help",
      "reviewed_at": "2026-11-02T17:19:15.371369Z",
      "review_method": "Fresh HTTP capture and relevant-section review against the 29 October source-review findings. Rendered web extraction is used only where separately recorded. No production detector, upload or third-party executable was run.",
      "captures": [
        {
          "source_id": "anthropic-watermark-help",
          "requested_url": "https://support.claude.com/en/articles/16266773-how-claude-marks-ai-generated-content",
          "captured_at": "2026-11-02T17:12:14.769973Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "ledger",
          "previous_response_sha256": [
            "4e2cf650c144fd6a3f36b1b63178d4083783f04196ccdc2469d7d21649b883cb"
          ],
          "http_status": 200,
          "final_url": "https://support.claude.com/en/articles/16266773-how-claude-marks-ai-generated-content",
          "content_type": "text/html; charset=utf-8",
          "response_bytes": 238385,
          "response_sha256": "e81fdcb9ad941bbe25cb8a9601fdac3cf9ab1204f195c43b129789ae476548bb",
          "response_headers": {
            "Date": "Mon, 02 Nov 2026 17:12:15 GMT",
            "Content-Type": "text/html; charset=utf-8"
          },
          "local_capture": "raw/anthropic-watermark-help-042fb88968.html",
          "text_capture": "text/anthropic-watermark-help-042fb88968.txt",
          "text_sha256": "ae7b807c706554a50ba01f4357cb135170fa81b816512b068f4f37d759cce725",
          "text_bytes": 8872,
          "byte_comparison": "changed",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:12:16.031395Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        },
        {
          "source_id": "anthropic-watermark-help",
          "requested_url": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/code-execution-tool#content-credentials-on-generated-files",
          "captured_at": "2026-11-02T17:12:14.770419Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "ledger",
          "previous_response_sha256": [
            "5fa0e4586a6bec2b2567590a35028e9294c6c7f3f1ed6c1f34206ab292a433b9"
          ],
          "http_status": 200,
          "final_url": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/code-execution-tool#content-credentials-on-generated-files",
          "content_type": "text/html; charset=utf-8",
          "response_bytes": 1793264,
          "response_sha256": "9820dc1c1c72494354297bde2065d7de6992ce87e50fa139364aba1aa67fe922",
          "response_headers": {
            "Date": "Mon, 02 Nov 2026 17:12:15 GMT",
            "Content-Type": "text/html; charset=utf-8"
          },
          "local_capture": "raw/anthropic-watermark-help-f390091cd6.html",
          "text_capture": "text/anthropic-watermark-help-f390091cd6.txt",
          "text_sha256": "2b9354755ba141145804260c629a090ecf823bd6703dc158a0aed91c3f7ec252",
          "text_bytes": 29050,
          "byte_comparison": "changed",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:12:16.469178Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        }
      ],
      "findings": [
        "The current table retains nine models with text marks on first-party and cloud-partner routes: Fable 5.1, Fable 5, Mythos 5.1, Opus 5.5, Opus 5, Opus 4.8, Sonnet 5.5, Sonnet 5 and Haiku 5.5. All sixteen listed models retain C2PA ticks. The earlier Bedrock footnote remains absent.",
        "Text detection remains a private preview for eligible organisations and enterprises with relevant compliance duties. Generated-file documentation names issuer, timestamp and action description for supported image, audio and video downloads. It excludes text files, PDFs and Office documents from signing."
      ],
      "byte_comparison": {
        "compared_with": "declawd/reports/source-review-2026-10-29.json",
        "response_outcomes": {
          "changed": 2
        }
      }
    },
    {
      "source_id": "anthropic-text-watermark-announcement",
      "reviewed_at": "2026-11-02T17:19:15.371369Z",
      "review_method": "Fresh HTTP capture and relevant-section review against the 29 October source-review findings. Rendered web extraction is used only where separately recorded. No production detector, upload or third-party executable was run.",
      "captures": [
        {
          "source_id": "anthropic-text-watermark-announcement",
          "requested_url": "https://www.anthropic.com/news/claude-text-watermark",
          "captured_at": "2026-11-02T17:12:14.770571Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "ledger",
          "previous_response_sha256": [
            "3fb2543b157b5f0e4d50d3ff72350ff7c229a7a1a73d3aba2ebcc2362d5c9b30"
          ],
          "http_status": 200,
          "final_url": "https://www.anthropic.com/news/claude-text-watermark",
          "content_type": "text/html; charset=utf-8",
          "response_bytes": 180551,
          "response_sha256": "c606caee4c1b93975527f17efa1bea984b0c8c0758a8b16307cddf7c29a54b0e",
          "response_headers": {
            "Date": "Mon, 02 Nov 2026 17:12:15 GMT",
            "Content-Type": "text/html; charset=utf-8"
          },
          "local_capture": "raw/anthropic-text-watermark-announcement-e68246067e.html",
          "text_capture": "text/anthropic-text-watermark-announcement-e68246067e.txt",
          "text_sha256": "6bc719404e0a8000eaec59d0f68bff0f0d6a094a27943d90197501fc0442cfb3",
          "text_bytes": 13784,
          "byte_comparison": "changed",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:12:15.838548Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        }
      ],
      "findings": [
        "The technical post retains the 1 September update, SynthID-Text attribution, keyed selection, lack of hidden characters and private-preview detection. No public production key, matching detector configuration, threshold, output scale, measured error rate or minimum length was established."
      ],
      "byte_comparison": {
        "compared_with": "declawd/reports/source-review-2026-10-29.json",
        "response_outcomes": {
          "changed": 1
        }
      }
    },
    {
      "source_id": "anthropic-release-notes",
      "reviewed_at": "2026-11-02T17:19:15.371369Z",
      "review_method": "Fresh HTTP capture and relevant-section review against the 29 October source-review findings. Rendered web extraction is used only where separately recorded. No production detector, upload or third-party executable was run.",
      "captures": [
        {
          "source_id": "anthropic-release-notes",
          "requested_url": "https://platform.claude.com/docs/en/release-notes/overview",
          "captured_at": "2026-11-02T17:12:14.770697Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "ledger",
          "previous_response_sha256": [
            "c8b26074ef644d96289416d3b40e01546cce14087c957b5c17bd40fd1fe72175"
          ],
          "http_status": 200,
          "final_url": "https://platform.claude.com/docs/en/release-notes/overview",
          "content_type": "text/html; charset=utf-8",
          "response_bytes": 1290374,
          "response_sha256": "88e15a8d1c127972ea3f66850f47bae12bad5d989f5465ab9c8df5979869e8b7",
          "response_headers": {
            "Date": "Mon, 02 Nov 2026 17:12:15 GMT",
            "Content-Type": "text/html; charset=utf-8"
          },
          "local_capture": "raw/anthropic-release-notes-4182359e79.html",
          "text_capture": "text/anthropic-release-notes-4182359e79.txt",
          "text_sha256": "df6335bc7293af713b98a3967d5d25c5b4bcab7a161cbfafdd9ea31f832b3245",
          "text_bytes": 94568,
          "byte_comparison": "changed",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:12:16.418208Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        }
      ],
      "findings": [
        "The latest substantive entries are 30 October (Opus 4.8 fast-mode deprecation, removal planned 30 November), 29 October (usage/cost analytics beta) and 28 October (128 MB first-party Messages and Token Counting request limit). None of these entries establishes a change in watermark model coverage or detector access."
      ],
      "byte_comparison": {
        "compared_with": "declawd/reports/source-review-2026-10-29.json",
        "response_outcomes": {
          "changed": 1
        }
      }
    },
    {
      "source_id": "anthropic-models-overview",
      "reviewed_at": "2026-11-02T17:19:15.371369Z",
      "review_method": "Fresh HTTP capture and relevant-section review against the 29 October source-review findings. Rendered web extraction is used only where separately recorded. No production detector, upload or third-party executable was run.",
      "captures": [
        {
          "source_id": "anthropic-models-overview",
          "requested_url": "https://platform.claude.com/docs/en/models/overview",
          "captured_at": "2026-11-02T17:12:14.770813Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "ledger",
          "previous_response_sha256": [
            "4678877f1360d85076e7d74b2afc198ed213f176c1a41411ebd2941f190bf052"
          ],
          "http_status": 200,
          "final_url": "https://platform.claude.com/docs/en/models/overview",
          "content_type": "text/html; charset=utf-8",
          "response_bytes": 721867,
          "response_sha256": "15d9e110591f7cbe3ad0e421d7e832b4d5f6bbe93aab4f76dc35ff7b8be90499",
          "response_headers": {
            "Date": "Mon, 02 Nov 2026 17:12:15 GMT",
            "Content-Type": "text/html; charset=utf-8"
          },
          "local_capture": "raw/anthropic-models-overview-f3655eaf14.html",
          "text_capture": "text/anthropic-models-overview-f3655eaf14.txt",
          "text_sha256": "f3699af91e92ded0790083ba62fce56f96c660f64cd7ea77dcfe328268312c4b",
          "text_bytes": 12842,
          "byte_comparison": "changed",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:12:16.157286Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        }
      ],
      "findings": [
        "Current model catalogue and capability descriptions were fetched. Availability and tool capability fields do not establish text-watermark coverage. The Help Centre table remains the direct marking source."
      ],
      "byte_comparison": {
        "compared_with": "declawd/reports/source-review-2026-10-29.json",
        "response_outcomes": {
          "changed": 1
        }
      }
    },
    {
      "source_id": "anthropic-model-versioning",
      "reviewed_at": "2026-11-02T17:19:15.371369Z",
      "review_method": "Fresh HTTP capture and relevant-section review against the 29 October source-review findings. Rendered web extraction is used only where separately recorded. No production detector, upload or third-party executable was run.",
      "captures": [
        {
          "source_id": "anthropic-model-versioning",
          "requested_url": "https://platform.claude.com/docs/en/about-claude/models/model-ids-and-versions",
          "captured_at": "2026-11-02T17:12:14.770923Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "ledger",
          "previous_response_sha256": [
            "c6cbbdd1f192b003016ee5f2a659038205633fb8fff754e767dace9c01e59fff"
          ],
          "http_status": 200,
          "final_url": "https://platform.claude.com/docs/en/about-claude/models/model-ids-and-versions",
          "content_type": "text/html; charset=utf-8",
          "response_bytes": 384703,
          "response_sha256": "96329af2e7977705b5b4810a4d4b776a4810ecf73afb6049c1838c49f9035ac2",
          "response_headers": {
            "Date": "Mon, 02 Nov 2026 17:12:15 GMT",
            "Content-Type": "text/html; charset=utf-8"
          },
          "local_capture": "raw/anthropic-model-versioning-9332683246.html",
          "text_capture": "text/anthropic-model-versioning-9332683246.txt",
          "text_sha256": "91962ec6679b94433f09f49410afa4a967ac5c653426c3d8d45055d640269335",
          "text_bytes": 4376,
          "byte_comparison": "changed",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:12:16.125332Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        }
      ],
      "findings": [
        "The page retains the distinction between model weights/configuration and mutable serving infrastructure, including sampling logic. It does not date a particular watermark retrofit."
      ],
      "byte_comparison": {
        "compared_with": "declawd/reports/source-review-2026-10-29.json",
        "response_outcomes": {
          "changed": 1
        }
      }
    },
    {
      "source_id": "anthropic-models-api-documentation",
      "reviewed_at": "2026-11-02T17:19:15.371369Z",
      "review_method": "Fresh HTTP capture and relevant-section review against the 29 October source-review findings. Rendered web extraction is used only where separately recorded. No production detector, upload or third-party executable was run.",
      "captures": [
        {
          "source_id": "anthropic-models-api-documentation",
          "requested_url": "https://platform.claude.com/docs/en/api/models/list",
          "captured_at": "2026-11-02T17:12:14.771053Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "ledger",
          "previous_response_sha256": [
            "cf84dae56beed585ffc4c0e190804323102adff420d8d130e84290e105fb77c4"
          ],
          "http_status": 200,
          "final_url": "https://platform.claude.com/docs/en/api/models/list",
          "content_type": "text/html; charset=utf-8",
          "response_bytes": 692414,
          "response_sha256": "22a27f2e8d811bad8220d1fb0bad8277b0ff6f790446c93dc6bfc045443a60b5",
          "response_headers": {
            "Date": "Mon, 02 Nov 2026 17:12:16 GMT",
            "Content-Type": "text/html; charset=utf-8"
          },
          "local_capture": "raw/anthropic-models-api-documentation-77e92174d5.html",
          "text_capture": "text/anthropic-models-api-documentation-77e92174d5.txt",
          "text_sha256": "0da4cb87c52ecc08c848f2665d1d3eb86c7f2115c65d12e0fd02924421ad439c",
          "text_bytes": 9501,
          "byte_comparison": "changed",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:12:16.324762Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        }
      ],
      "findings": [
        "The public Models API documentation was fetched. It supplies model and capability information, rather than a production text-watermark detector contract. No authenticated model-list request was made."
      ],
      "byte_comparison": {
        "compared_with": "declawd/reports/source-review-2026-10-29.json",
        "response_outcomes": {
          "changed": 1
        }
      }
    },
    {
      "source_id": "eu-ai-act-article-fifty",
      "reviewed_at": "2026-11-02T17:19:15.371369Z",
      "review_method": "Fresh HTTP capture and relevant-section review against the 29 October source-review findings. Rendered web extraction is used only where separately recorded. No production detector, upload or third-party executable was run.",
      "captures": [
        {
          "source_id": "eu-ai-act-article-fifty",
          "requested_url": "https://eur-lex.europa.eu/legal-content/EN/TXT/HTML/?uri=CELEX%3A02024R1689-20260727",
          "captured_at": "2026-11-02T17:12:14.771182Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "ledger",
          "previous_response_sha256": [
            "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
          ],
          "http_status": 202,
          "final_url": "https://eur-lex.europa.eu/legal-content/EN/TXT/HTML/?uri=CELEX%3A02024R1689-20260727",
          "content_type": "text/html; charset=UTF-8",
          "response_bytes": 2035,
          "response_sha256": "95358b9905eb574aca6603302fa2cfe2d41681a772c17c71629ad31ec745a56b",
          "response_headers": {
            "Date": "Mon, 02 Nov 2026 17:12:15 GMT",
            "Content-Type": "text/html; charset=UTF-8"
          },
          "local_capture": "raw/eu-ai-act-article-fifty-1b34530960.html",
          "text_capture": "text/eu-ai-act-article-fifty-1b34530960.txt",
          "text_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
          "text_bytes": 0,
          "byte_comparison": "changed",
          "retrieval_outcome": "unreadable",
          "completed_at": "2026-11-02T17:12:15.588155Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": [
            "Robot challenge, not readable legislation."
          ]
        },
        {
          "source_id": "eu-ai-act-article-fifty",
          "requested_url": "https://ai-act-service-desk.ec.europa.eu/en/ai-act/article-50",
          "captured_at": "2026-11-02T17:12:15.588368Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "ledger",
          "previous_response_sha256": [
            "df96e69bd031073cf8eae70910a511a309284887643ab119403a0568ef0903e5"
          ],
          "http_status": 200,
          "final_url": "https://ai-act-service-desk.ec.europa.eu/en/ai-act/article-50",
          "content_type": "text/html; charset=utf-8",
          "response_bytes": 89509,
          "response_sha256": "e692da609032229f8fc67d9fd20defbdf7a1a3662cd9b70c4b5566daa6b3dd42",
          "response_headers": {
            "Content-Type": "text/html; charset=utf-8",
            "Date": "Mon, 02 Nov 2026 17:12:15 GMT",
            "Last-Modified": "Thu, 29 Oct 2026 15:56:18 GMT",
            "ETag": "W/\"1793289378-gzip\""
          },
          "local_capture": "raw/eu-ai-act-article-fifty-219ee5b420.html",
          "text_capture": "text/eu-ai-act-article-fifty-219ee5b420.txt",
          "text_sha256": "c3058da9d7e88978825e576ffb4ccbfde552a7b469dd65dda1e6ac348f5c894f",
          "text_bytes": 15422,
          "byte_comparison": "changed",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:12:15.885646Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        },
        {
          "source_id": "eu-ai-act-article-fifty",
          "requested_url": "https://ai-act-service-desk.ec.europa.eu/en/ai-act/article-111",
          "captured_at": "2026-11-02T17:12:15.838707Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "ledger",
          "previous_response_sha256": [
            "bf733811653846594052a50dd3c503bca1bfa6b3f41df0b389aa06e6c0397e27"
          ],
          "http_status": 200,
          "final_url": "https://ai-act-service-desk.ec.europa.eu/en/ai-act/article-111",
          "content_type": "text/html; charset=utf-8",
          "response_bytes": 86258,
          "response_sha256": "f563db99f6545e46c1815170cfbc38242085022fda9096e6c677a9018d9782aa",
          "response_headers": {
            "Content-Type": "text/html; charset=utf-8",
            "Date": "Mon, 02 Nov 2026 17:12:15 GMT",
            "Last-Modified": "Thu, 29 Oct 2026 15:56:29 GMT",
            "ETag": "W/\"1793289389-gzip\""
          },
          "local_capture": "raw/eu-ai-act-article-fifty-258e18e31d.html",
          "text_capture": "text/eu-ai-act-article-fifty-258e18e31d.txt",
          "text_sha256": "7d0e592b39dc95041e596986041fecb7ab691ac6df9cbf46015f275810f1fec7",
          "text_bytes": 12755,
          "byte_comparison": "changed",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:12:16.088210Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        }
      ],
      "findings": [
        "EUR-Lex direct retrieval returns an HTTP 202 challenge. The Commission Service Desk retains Article 50 provider marking and deployer disclosure duties and the editorial-control exception. Article 111(2) retains 2 December 2026 for qualifying systems placed on the market before 2 August 2026. These are the displayed adopted consolidated provisions, distinct from earlier proposals."
      ],
      "byte_comparison": {
        "compared_with": "declawd/reports/source-review-2026-10-29.json",
        "response_outcomes": {
          "changed": 3
        }
      }
    },
    {
      "source_id": "eu-transparency-code",
      "reviewed_at": "2026-11-02T17:19:15.371369Z",
      "review_method": "Fresh HTTP capture and relevant-section review against the 29 October source-review findings. Rendered web extraction is used only where separately recorded. No production detector, upload or third-party executable was run.",
      "captures": [
        {
          "source_id": "eu-transparency-code",
          "requested_url": "https://ec.europa.eu/newsroom/dae/redirection/document/129555",
          "captured_at": "2026-11-02T17:12:15.885838Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "ledger",
          "previous_response_sha256": [
            "7bd22c5a3c56eaefda27a5bf7a6118198ef2a9c9255241bd97abf7cdedf9bc28"
          ],
          "http_status": 200,
          "final_url": "https://ec.europa.eu/newsroom/dae/redirection/document/129555",
          "content_type": "/",
          "response_bytes": 1213943,
          "response_sha256": "7bd22c5a3c56eaefda27a5bf7a6118198ef2a9c9255241bd97abf7cdedf9bc28",
          "response_headers": {
            "Date": "Mon, 02 Nov 2026 17:12:16 GMT",
            "Content-Type": "/"
          },
          "local_capture": "raw/eu-transparency-code-091c5047ef.txt",
          "text_capture": "text/eu-transparency-code-091c5047ef.txt",
          "text_sha256": "8ab987dea21b46c274c6356e238071db62f164e1d07f61ca843bf033a7c23fc9",
          "text_bytes": 116013,
          "byte_comparison": "unchanged",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:12:17.279277Z",
          "pdf_text_status": 0,
          "capture_kind": "pdf_identified_by_magic_bytes",
          "extraction_method": "pdftotext -layout",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        }
      ],
      "findings": [
        "The captured Code PDF matches the 29 October SHA-256. Earlier findings remain applicable: free-form text above 200 tokens, conditional expert-only access, receipts, deletion rules and the voluntary 2 February 2027 interoperability commitment. No detector implementation or compliance was tested."
      ],
      "byte_comparison": {
        "compared_with": "declawd/reports/source-review-2026-10-29.json",
        "response_outcomes": {
          "unchanged": 1
        }
      }
    },
    {
      "source_id": "eu-code-signatories",
      "reviewed_at": "2026-11-02T17:19:15.371369Z",
      "review_method": "Fresh HTTP capture and relevant-section review against the 29 October source-review findings. Rendered web extraction is used only where separately recorded. No production detector, upload or third-party executable was run.",
      "captures": [
        {
          "source_id": "eu-code-signatories",
          "requested_url": "https://digital-strategy.ec.europa.eu/en/news/strong-backing-code-practice-transparency-ai-generated-content",
          "captured_at": "2026-11-02T17:12:16.031614Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "ledger",
          "previous_response_sha256": [
            "bde63dcbf6975b396904be8562985e74e0d9970b04635a229e80da2b4ddf61f0"
          ],
          "http_status": 200,
          "final_url": "https://digital-strategy.ec.europa.eu/en/news/strong-backing-code-practice-transparency-ai-generated-content",
          "content_type": "text/html; charset=UTF-8",
          "response_bytes": 95024,
          "response_sha256": "0dba0bc9ae5987b0cab22185ce2479da70b72d1249c31e7a55acfbe8807ad9bb",
          "response_headers": {
            "Content-Type": "text/html; charset=UTF-8",
            "Date": "Mon, 02 Nov 2026 17:12:16 GMT",
            "Last-Modified": "Mon, 02 Nov 2026 17:00:26 GMT",
            "ETag": "W/\"1793638826-gzip\""
          },
          "local_capture": "raw/eu-code-signatories-299cd71302.html",
          "text_capture": "text/eu-code-signatories-299cd71302.txt",
          "text_sha256": "56839dd1752b498eefd60a0137786066cd58b90d71ab5b6bc448ccb9c140aec6",
          "text_bytes": 7965,
          "byte_comparison": "changed",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:12:16.418330Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        }
      ],
      "findings": [
        "The official register displays 95 Section 1 and 192 Section 2 signatories, includes Anthropic, Google and OpenAI, and still labels its last update 24 September. This is a displayed count rather than a claim that all entries were added recently or implement every commitment."
      ],
      "byte_comparison": {
        "compared_with": "declawd/reports/source-review-2026-10-29.json",
        "response_outcomes": {
          "changed": 1
        }
      }
    },
    {
      "source_id": "eu-article-fifty-guidelines",
      "reviewed_at": "2026-11-02T17:19:15.371369Z",
      "review_method": "Fresh HTTP capture and relevant-section review against the 29 October source-review findings. Rendered web extraction is used only where separately recorded. No production detector, upload or third-party executable was run.",
      "captures": [
        {
          "source_id": "eu-article-fifty-guidelines",
          "requested_url": "https://ec.europa.eu/newsroom/dae/redirection/document/131215",
          "captured_at": "2026-11-02T17:12:16.088436Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "ledger",
          "previous_response_sha256": [
            "30861fc5de31205846f023068069c92fabc7271ebeac6af7bef68b97f0a33f66"
          ],
          "http_status": 200,
          "final_url": "https://ec.europa.eu/newsroom/dae/redirection/document/131215",
          "content_type": "/",
          "response_bytes": 837633,
          "response_sha256": "30861fc5de31205846f023068069c92fabc7271ebeac6af7bef68b97f0a33f66",
          "response_headers": {
            "Date": "Mon, 02 Nov 2026 17:12:16 GMT",
            "Content-Type": "/"
          },
          "local_capture": "raw/eu-article-fifty-guidelines-70406e8137.txt",
          "text_capture": "text/eu-article-fifty-guidelines-70406e8137.txt",
          "text_sha256": "ccf42dde1b556dc0e9103fa401d453cb586983a8671ed0393f843d91794179b0",
          "text_bytes": 185288,
          "byte_comparison": "unchanged",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:12:17.045776Z",
          "pdf_text_status": 0,
          "capture_kind": "pdf_identified_by_magic_bytes",
          "extraction_method": "pdftotext -layout",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        }
      ],
      "findings": [
        "The captured official guidelines PDF matches the 29 October SHA-256. Its earlier source-code, integral-comment, standard-editing and non-substantial-alteration scope findings remain applicable."
      ],
      "byte_comparison": {
        "compared_with": "declawd/reports/source-review-2026-10-29.json",
        "response_outcomes": {
          "unchanged": 1
        }
      }
    },
    {
      "source_id": "ars-anthropic-statement",
      "reviewed_at": "2026-11-02T17:19:15.371369Z",
      "review_method": "Fresh HTTP capture and relevant-section review against the 29 October source-review findings. Rendered web extraction is used only where separately recorded. No production detector, upload or third-party executable was run.",
      "captures": [
        {
          "source_id": "ars-anthropic-statement",
          "requested_url": "https://arstechnica.com/tech-policy/2026/08/claudes-new-scarlet-letter-watermark-is-invisible-for-now/",
          "captured_at": "2026-11-02T17:12:16.125571Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "ledger",
          "previous_response_sha256": [
            "98bac39eee3fb7f0dd78f3cd632ddc17ab0fcff1f98c95ae9d64b1402574d000"
          ],
          "http_status": 200,
          "final_url": "https://arstechnica.com/tech-policy/2026/08/claudes-new-scarlet-letter-watermark-is-invisible-for-now/",
          "content_type": "text/html; charset=UTF-8",
          "response_bytes": 152179,
          "response_sha256": "48c83d9cf1c6b3d27ae726e613e419bd7ba8758af058d7a3cc1ab097282f8c7d",
          "response_headers": {
            "Date": "Mon, 02 Nov 2026 17:12:16 GMT",
            "Content-Type": "text/html; charset=UTF-8"
          },
          "local_capture": "raw/ars-anthropic-statement-6d3a5f69bc.html",
          "text_capture": "text/ars-anthropic-statement-6d3a5f69bc.txt",
          "text_sha256": "96ab2749978ae620aa73be933ddf65647521c84136dddc230244c50ff9ffd7a8",
          "text_bytes": 9272,
          "byte_comparison": "changed",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:12:17.418536Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        }
      ],
      "findings": [
        "The historical August report retains unanswered detector-timing and error-rate questions. Current official private-preview access qualifies its historical future-tool wording. No new production measurement was found."
      ],
      "byte_comparison": {
        "compared_with": "declawd/reports/source-review-2026-10-29.json",
        "response_outcomes": {
          "changed": 1
        }
      }
    },
    {
      "source_id": "techcrunch-watermark-details",
      "reviewed_at": "2026-11-02T17:19:15.371369Z",
      "review_method": "Fresh HTTP capture and relevant-section review against the 29 October source-review findings. Rendered web extraction is used only where separately recorded. No production detector, upload or third-party executable was run.",
      "captures": [
        {
          "source_id": "techcrunch-watermark-details",
          "requested_url": "https://techcrunch.com/2026/08/15/anthropic-shares-more-details-about-how-claudes-new-watermarks-will-work/",
          "captured_at": "2026-11-02T17:12:16.157543Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "ledger",
          "previous_response_sha256": [
            "045d62149bbe0b8763fb52d1e508713639ff70891149840f81a292ab897be6ba"
          ],
          "http_status": 200,
          "final_url": "https://techcrunch.com/2026/08/15/anthropic-shares-more-details-about-how-claudes-new-watermarks-will-work/",
          "content_type": "text/html; charset=UTF-8",
          "response_bytes": 238092,
          "response_sha256": "4e720f3f3e0b584213ec912fb5b2f515551c3d4c38120dffe289de66d5ea7a9c",
          "response_headers": {
            "Date": "Mon, 02 Nov 2026 17:12:16 GMT",
            "Content-Type": "text/html; charset=UTF-8"
          },
          "local_capture": "raw/techcrunch-watermark-details-569c4523c8.html",
          "text_capture": "text/techcrunch-watermark-details-569c4523c8.txt",
          "text_sha256": "86cf9a4c7a4d81a0863bbfd14fe500c9d721dfe7f0fa112480d856acdb841cf4",
          "text_bytes": 5266,
          "byte_comparison": "changed",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:12:16.485506Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        }
      ],
      "findings": [
        "The August report retains planned detection API wording, complete-rewrite discussion and limited marking in code comments. Its planned-API wording is historical in light of the official private preview."
      ],
      "byte_comparison": {
        "compared_with": "declawd/reports/source-review-2026-10-29.json",
        "response_outcomes": {
          "changed": 1
        }
      }
    },
    {
      "source_id": "johnjwang-independent-report",
      "reviewed_at": "2026-11-02T17:19:15.371369Z",
      "review_method": "Fresh HTTP capture and relevant-section review against the 29 October source-review findings. Rendered web extraction is used only where separately recorded. No production detector, upload or third-party executable was run.",
      "captures": [
        {
          "source_id": "johnjwang-independent-report",
          "requested_url": "https://johnjwang.com/post/2026/08/12/how-claude-watermarking-probably-works/",
          "captured_at": "2026-11-02T17:12:16.325000Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "ledger",
          "previous_response_sha256": [
            "96899bb4243256324bf6db94dcd9ac283181bef757703531604e11d886645990"
          ],
          "http_status": 200,
          "final_url": "https://johnjwang.com/post/2026/08/12/how-claude-watermarking-probably-works/",
          "content_type": "text/html; charset=utf-8",
          "response_bytes": 30940,
          "response_sha256": "96899bb4243256324bf6db94dcd9ac283181bef757703531604e11d886645990",
          "response_headers": {
            "Date": "Mon, 02 Nov 2026 17:12:16 GMT",
            "Content-Type": "text/html; charset=utf-8",
            "etag": "W/\"3380ce950c1dc0a7eb3859948b49401a\"",
            "last-modified": "Tue, 27 Oct 2026 22:51:59 UTC"
          },
          "local_capture": "raw/johnjwang-independent-report-647cf52ead.html",
          "text_capture": "text/johnjwang-independent-report-647cf52ead.txt",
          "text_sha256": "09d4236b8cf89f18c00fca1c0299727cf7bbe525c1c3cd96b889b45a22f455c3",
          "text_bytes": 19768,
          "byte_comparison": "unchanged",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:12:16.824053Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        }
      ],
      "findings": [
        "The response bytes match 29 October. The dated 7.2-million-character scan and constrained-choice findings retain their stated limits. They do not establish the support status of current model serving."
      ],
      "byte_comparison": {
        "compared_with": "declawd/reports/source-review-2026-10-29.json",
        "response_outcomes": {
          "unchanged": 1
        }
      }
    },
    {
      "source_id": "hn-base64-bypass-proposal",
      "reviewed_at": "2026-11-02T17:19:15.371369Z",
      "review_method": "Fresh HTTP capture and relevant-section review against the 29 October source-review findings. Rendered web extraction is used only where separately recorded. No production detector, upload or third-party executable was run.",
      "captures": [
        {
          "source_id": "hn-base64-bypass-proposal",
          "requested_url": "https://news.ycombinator.com/item?id=49333167",
          "captured_at": "2026-11-02T17:12:16.418630Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "ledger",
          "previous_response_sha256": [
            "a2e33df06252e87d45d5a0e77530d14ae65cded099174aa08bae5f2f39749510"
          ],
          "http_status": 200,
          "final_url": "https://news.ycombinator.com/item?id=49333167",
          "content_type": "text/html; charset=utf-8",
          "response_bytes": 4228,
          "response_sha256": "aad3a470a7d4ab6588c60b2896367925f0cecb8b448326a0feee8e1ea23243d4",
          "response_headers": {
            "Date": "Mon, 02 Nov 2026 17:12:19 GMT",
            "Content-Type": "text/html; charset=utf-8"
          },
          "local_capture": "raw/hn-base64-bypass-proposal-c53c68bd26.html",
          "text_capture": "text/hn-base64-bypass-proposal-c53c68bd26.txt",
          "text_sha256": "a53cb270b643c4ca34bb368d0748e4dfcd61684fa023071fad1409573a544b23",
          "text_bytes": 905,
          "byte_comparison": "changed",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:12:17.016571Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        },
        {
          "source_id": "hn-base64-bypass-proposal",
          "requested_url": "https://news.ycombinator.com/item?id=49333167",
          "captured_at": "2026-11-02T17:16:09.379263Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "same resource via prior API representation",
          "previous_response_sha256": [
            "a2e33df06252e87d45d5a0e77530d14ae65cded099174aa08bae5f2f39749510"
          ],
          "http_status": 200,
          "final_url": "https://hacker-news.firebaseio.com/v0/item/49333167.json",
          "content_type": "application/json; charset=utf-8",
          "response_bytes": 678,
          "response_sha256": "a2e33df06252e87d45d5a0e77530d14ae65cded099174aa08bae5f2f39749510",
          "response_headers": {
            "Date": "Mon, 02 Nov 2026 17:16:09 GMT",
            "Content-Type": "application/json; charset=utf-8"
          },
          "local_capture": "raw/hn-base64-bypass-proposal-07807ba667.json",
          "text_capture": "text/hn-base64-bypass-proposal-07807ba667.txt",
          "text_sha256": "a2e33df06252e87d45d5a0e77530d14ae65cded099174aa08bae5f2f39749510",
          "text_bytes": 678,
          "byte_comparison": "unchanged",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:16:09.948976Z",
          "retrieval_url": "https://hacker-news.firebaseio.com/v0/item/49333167.json",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        }
      ],
      "findings": [
        "The fresh public API representation matches 29 October exactly and retains zero descendants. It contains a proposal, without measured provider detection results. The HTML display was also captured and is a different representation."
      ],
      "byte_comparison": {
        "compared_with": "declawd/reports/source-review-2026-10-29.json",
        "response_outcomes": {
          "changed": 1,
          "unchanged": 1
        }
      }
    },
    {
      "source_id": "google-synthid-text-status",
      "reviewed_at": "2026-11-02T17:19:15.371369Z",
      "review_method": "Fresh HTTP capture and relevant-section review against the 29 October source-review findings. Rendered web extraction is used only where separately recorded. No production detector, upload or third-party executable was run.",
      "captures": [
        {
          "source_id": "google-synthid-text-status",
          "requested_url": "https://deepmind.google/models/synthid/",
          "captured_at": "2026-11-02T17:12:16.418740Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "ledger",
          "previous_response_sha256": [
            "f96b72f6ebd4147e4d0ab92a72ec697d27d8294b2c9cdda63f0bb85113467431"
          ],
          "http_status": 200,
          "final_url": "https://deepmind.google/models/synthid/",
          "content_type": "text/html",
          "response_bytes": 27190,
          "response_sha256": "3c41d2def5394afece30e1d44d2a59ee3fe163ef36f486c2a73d2341570536a9",
          "response_headers": {
            "Date": "Mon, 02 Nov 2026 17:11:57 GMT",
            "ETag": "\"qMZ_Ig\"",
            "Content-Type": "text/html"
          },
          "local_capture": "raw/google-synthid-text-status-804f5f9f59.html",
          "text_capture": "text/google-synthid-text-status-804f5f9f59.txt",
          "text_sha256": "6382311364b3bd350a191dab723aabb7c8d171a6898e3858033fb9fc2b4c4556",
          "text_bytes": 3102,
          "byte_comparison": "changed",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:12:16.823659Z",
          "content_decoding": "gzip",
          "decoded_bytes": 144858,
          "decoded_sha256": "1425b019700c68845d390f3e3bdd3b8909d79dc0c48e1102cf4816fbad2e746f",
          "decode_correction": "Initial extraction treated a compressed response as HTML. The saved original bytes were decompressed and re-extracted before review.",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        },
        {
          "source_id": "google-synthid-text-status",
          "requested_url": "https://ai.google.dev/responsible/docs/safeguards/synthid?hl=en",
          "captured_at": "2026-11-02T17:12:16.469538Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "ledger",
          "previous_response_sha256": [
            "1cac3151fb0c12116d3c4d476fa1b2c800ea130dabf709bc0f3d15a482b37e26"
          ],
          "http_status": 200,
          "final_url": "https://ai.google.dev/responsible/docs/safeguards/synthid?hl=en",
          "content_type": "text/html; charset=utf-8",
          "response_bytes": 120479,
          "response_sha256": "775e5fe83f5a95aa4155ac77ab16d67c33229325f78bfb247e097df931d7b2c2",
          "response_headers": {
            "last-modified": "Wed, 09 Apr 2025 18:19:10 GMT",
            "content-type": "text/html; charset=utf-8",
            "date": "Mon, 02 Nov 2026 17:12:17 GMT"
          },
          "local_capture": "raw/google-synthid-text-status-658601597d.html",
          "text_capture": "text/google-synthid-text-status-658601597d.txt",
          "text_sha256": "7c28531d324ac231fdd16e02a734120fcce1ab7728e626b510bb663d7edb288c",
          "text_bytes": 6369,
          "byte_comparison": "changed",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:12:17.234583Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        },
        {
          "source_id": "google-synthid-text-status",
          "requested_url": "https://blog.google/innovation-and-ai/products/google-synthid-ai-content-detector/",
          "captured_at": "2026-11-02T17:12:16.485664Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "ledger",
          "previous_response_sha256": [
            "7bbe87fc6cbd6a06e52071152ba9516cd4087b102ec3ce229747bd60e16944f8"
          ],
          "http_status": 200,
          "final_url": "https://blog.google/innovation-and-ai/products/google-synthid-ai-content-detector/",
          "content_type": "text/html; charset=utf-8",
          "response_bytes": 360153,
          "response_sha256": "5db921bdace28a9e73e5f0a3aec3b45ac423565c888801968852917f19d72ee5",
          "response_headers": {
            "content-type": "text/html; charset=utf-8",
            "date": "Mon, 02 Nov 2026 17:12:16 GMT"
          },
          "local_capture": "raw/google-synthid-text-status-031f8ad0b0.html",
          "text_capture": "text/google-synthid-text-status-031f8ad0b0.txt",
          "text_sha256": "edb6340f2871f8f482ca3be79b8e566bae5da78ebc19cbb4b529f00caaa5f77d",
          "text_bytes": 5974,
          "byte_comparison": "changed",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:12:17.141235Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        }
      ],
      "findings": [
        "Current official overview still names Gemini app/web text marking, while public verifier instructions list images, audio and video. The current partner list includes OpenAI, NVIDIA and Kakao, with Apple planned. The historical detector launch article included planned text verification.",
        "The developer page documents operator-configured reference generation/detection with chosen keys and context settings. This does not supply a Google or Anthropic production key or a public production text verifier."
      ],
      "byte_comparison": {
        "compared_with": "declawd/reports/source-review-2026-10-29.json",
        "response_outcomes": {
          "changed": 3
        }
      }
    },
    {
      "source_id": "gemini-developer-forum-thread",
      "reviewed_at": "2026-11-02T17:19:15.371369Z",
      "review_method": "Fresh HTTP capture and relevant-section review against the 29 October source-review findings. Rendered web extraction is used only where separately recorded. No production detector, upload or third-party executable was run.",
      "captures": [
        {
          "source_id": "gemini-developer-forum-thread",
          "requested_url": "https://discuss.ai.google.dev/t/does-gemini-api-text-output-carry-synthid-watermarking-gemini-2-5-flash-lite-gemini-3-1-flash-lite-eu-ai-act-art-50-2/177241",
          "captured_at": "2026-11-02T17:12:16.823888Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "ledger",
          "previous_response_sha256": [
            "4706924a4f4e33b1d77f061fd544ec4e6c7ff1032ead0da763656daa86ac5563"
          ],
          "http_status": 200,
          "final_url": "https://discuss.ai.google.dev/t/does-gemini-api-text-output-carry-synthid-watermarking-gemini-2-5-flash-lite-gemini-3-1-flash-lite-eu-ai-act-art-50-2/177241",
          "content_type": "text/html; charset=utf-8",
          "response_bytes": 44349,
          "response_sha256": "2ad574924d3e6080d35b1bd2dea305f6a1e9d0e7bd4ef928984981a755461abe",
          "response_headers": {
            "Date": "Mon, 02 Nov 2026 17:12:17 GMT",
            "Content-Type": "text/html; charset=utf-8",
            "Last-Modified": "Thu, 29 Oct 2026 03:44:28 GMT"
          },
          "local_capture": "raw/gemini-developer-forum-thread-acd535f9b5.html",
          "text_capture": "text/gemini-developer-forum-thread-acd535f9b5.txt",
          "text_sha256": "0eb9b789902097c004171f47647ccad7898f6d41c8ced205b787e44c44690af4",
          "text_bytes": 5532,
          "byte_comparison": "changed",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:12:17.793852Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        },
        {
          "source_id": "gemini-developer-forum-thread",
          "requested_url": "https://discuss.ai.google.dev/t/does-gemini-api-text-output-carry-synthid-watermarking-gemini-2-5-flash-lite-gemini-3-1-flash-lite-eu-ai-act-art-50-2/177241.json",
          "captured_at": "2026-11-02T17:12:16.824315Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "ledger",
          "previous_response_sha256": [
            "4c01edef65d844ccb4c0fe3fa1a0de1f0b268103f083ad35c4b2fe764b300f59"
          ],
          "http_status": 200,
          "final_url": "https://discuss.ai.google.dev/t/does-gemini-api-text-output-carry-synthid-watermarking-gemini-2-5-flash-lite-gemini-3-1-flash-lite-eu-ai-act-art-50-2/177241.json",
          "content_type": "application/json; charset=utf-8",
          "response_bytes": 29356,
          "response_sha256": "054a8d2c9a0e99de4896c0f3aed99159bb3ab54a9046527fcdd8b615566ab073",
          "response_headers": {
            "Date": "Mon, 02 Nov 2026 17:12:17 GMT",
            "Content-Type": "application/json; charset=utf-8"
          },
          "local_capture": "raw/gemini-developer-forum-thread-5ef80dc0f2.json",
          "text_capture": "text/gemini-developer-forum-thread-5ef80dc0f2.txt",
          "text_sha256": "054a8d2c9a0e99de4896c0f3aed99159bb3ab54a9046527fcdd8b615566ab073",
          "text_bytes": 29356,
          "byte_comparison": "changed",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:12:17.705114Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        }
      ],
      "findings": [
        "The captured topic now has seven posts. The additional post, dated 29 October 03:44 UTC, asks about gemini-3.8-flash marking, timing, official documentation and text detection. It has no answer in this capture. The 19 August correction saying API/AI Studio text is marked remains a forum participant statement, without a model-by-model production history."
      ],
      "byte_comparison": {
        "compared_with": "declawd/reports/source-review-2026-10-29.json",
        "response_outcomes": {
          "changed": 2
        }
      }
    },
    {
      "source_id": "anthropic-public-file-checker",
      "reviewed_at": "2026-11-02T17:19:15.371369Z",
      "review_method": "Fresh HTTP capture and relevant-section review against the 29 October source-review findings. Rendered web extraction is used only where separately recorded. No production detector, upload or third-party executable was run.",
      "captures": [
        {
          "source_id": "anthropic-public-file-checker",
          "requested_url": "https://claude.com/check-files",
          "captured_at": "2026-11-02T17:12:17.016754Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "ledger",
          "previous_response_sha256": [
            "81a1a4fda29d82806aa2194251cc4837866e367fe922724adffaac61de5fcf16"
          ],
          "http_status": 200,
          "final_url": "https://claude.com/check-files",
          "content_type": "text/html; charset=utf-8",
          "response_bytes": 394825,
          "response_sha256": "19517b3e4962e30cde5d29618bbbe46f84514319b6ca24f5d2a050c7fdb6881a",
          "response_headers": {
            "Date": "Mon, 02 Nov 2026 17:12:17 GMT",
            "Content-Type": "text/html; charset=utf-8"
          },
          "local_capture": "raw/anthropic-public-file-checker-23326b9d9d.html",
          "text_capture": "text/anthropic-public-file-checker-23326b9d9d.txt",
          "text_sha256": "f2f035dc887424beff8cfc5604bc2981ec310e64482fff8e696ad663bea59cc7",
          "text_bytes": 1862,
          "byte_comparison": "changed",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:12:17.357053Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        }
      ],
      "findings": [
        "The public checker continues to describe browser-side checking of Claude-issued C2PA credentials and explicitly excludes text. Its stated local processing was read, without an independent network/security test."
      ],
      "byte_comparison": {
        "compared_with": "declawd/reports/source-review-2026-10-29.json",
        "response_outcomes": {
          "changed": 1
        }
      }
    },
    {
      "source_id": "openai-provenance-help",
      "reviewed_at": "2026-11-02T17:19:15.371369Z",
      "review_method": "Fresh HTTP capture and relevant-section review against the 29 October source-review findings. Rendered web extraction is used only where separately recorded. No production detector, upload or third-party executable was run.",
      "captures": [
        {
          "source_id": "openai-provenance-help",
          "requested_url": "https://help.openai.com/en/articles/8912793-provenance-signals-in-openai-generated-content",
          "captured_at": "2026-11-02T17:12:17.046226Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "ledger",
          "previous_response_sha256": [
            "912349057a61e01aa4a49eb8ffa0f4d90f8b06181165d66a2f22e6b4577a18b7",
            "46f4baa0ce1d4606d266e096c337a3c7467ed68089eeafc195ad7a8e97561591"
          ],
          "http_status": 403,
          "final_url": "https://help.openai.com/en/articles/8912793-provenance-signals-in-openai-generated-content",
          "content_type": "text/html; charset=UTF-8",
          "response_bytes": 10085,
          "response_sha256": "1b4a55dca8d5ed409bc205076d186a59e65c7894ceea3bc4363e5b318fe8ccde",
          "response_headers": {
            "Date": "Mon, 02 Nov 2026 17:12:17 GMT",
            "Content-Type": "text/html; charset=UTF-8"
          },
          "local_capture": "raw/openai-provenance-help-000fa13b0c.html",
          "text_capture": "text/openai-provenance-help-000fa13b0c.txt",
          "text_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
          "text_bytes": 0,
          "byte_comparison": "changed",
          "retrieval_outcome": "unreadable",
          "completed_at": "2026-11-02T17:12:17.234252Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": [
            "Access challenge. Reviewed through the separately recorded web reader instead."
          ]
        },
        {
          "source_id": "openai-provenance-help",
          "requested_url": "https://help.openai.com/en/articles/8912793-provenance-signals-in-openai-generated-content",
          "captured_at": "2026-11-02T17:19:15.371369Z",
          "capture_time_scope": "Time this saved extraction was indexed. The tool retrieval preceded indexing during this same 2 November session.",
          "http_status": null,
          "http_status_limitation": "Web reader does not expose an origin HTTP status. Direct HTTP challenge is recorded separately.",
          "access_method": "web.run open, rendered page extraction",
          "capture_kind": "rendered_page_review",
          "response_bytes": 14098,
          "response_sha256": "1ffcddc7b6feebacc1375d6a0b73acbea752d9d404c225f104a24e20305076e4",
          "local_capture": "text/openai-provenance-help-1ffcddc7b6-web-reader.txt",
          "retrieval_outcome": "fetched_readable",
          "byte_comparison": "not_comparable",
          "evidence_limits": [
            "Reader text is not origin response bytes. It is not byte-comparable with prior HTML or prior reader formats."
          ]
        },
        {
          "source_id": "openai-provenance-help",
          "requested_url": "https://help.openai.com/en/articles/8912793-provenance-signals-in-openai-generated-content",
          "captured_at": "2026-11-02T17:19:15.371369Z",
          "capture_time_scope": "Time this saved extraction was indexed. The tool retrieval preceded indexing during this same 2 November session.",
          "http_status": null,
          "http_status_limitation": "Web reader does not expose an origin HTTP status. Direct HTTP challenge is recorded separately.",
          "access_method": "web.run open, rendered page extraction",
          "capture_kind": "rendered_page_review",
          "response_bytes": 12022,
          "response_sha256": "30e3194a859ac0685800bd1318960600e47ca4ad54182add2345127043282e56",
          "local_capture": "text/openai-provenance-help-30e3194a85-web-reader.txt",
          "retrieval_outcome": "fetched_readable",
          "byte_comparison": "not_comparable",
          "evidence_limits": [
            "Reader text is not origin response bytes. It is not byte-comparable with prior HTML or prior reader formats."
          ]
        }
      ],
      "findings": [
        "Direct HTTP returned 403, while the official page was readable through the web reader. Current guidance retains EU ChatGPT textGrain, optional global API marking by project/organisation and model, and application-only text-detector access. It explicitly excludes student-work checking and general commercial verification from the current text programme. Enabling marking does not grant detector access."
      ],
      "byte_comparison": {
        "compared_with": "declawd/reports/source-review-2026-10-29.json",
        "response_outcomes": {
          "changed": 1,
          "not_comparable": 2
        }
      }
    },
    {
      "source_id": "openai-content-provenance-guide",
      "reviewed_at": "2026-11-02T17:19:15.371369Z",
      "review_method": "Fresh HTTP capture and relevant-section review against the 29 October source-review findings. Rendered web extraction is used only where separately recorded. No production detector, upload or third-party executable was run.",
      "captures": [
        {
          "source_id": "openai-content-provenance-guide",
          "requested_url": "https://developers.openai.com/api/docs/guides/content-provenance",
          "captured_at": "2026-11-02T17:12:17.141441Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "ledger",
          "previous_response_sha256": [
            "f73904aaf5f7de1bd89992440de929426283c789824aa02638d492a2921369fb"
          ],
          "http_status": 200,
          "final_url": "https://developers.openai.com/api/docs/guides/content-provenance",
          "content_type": "text/html; charset=utf-8",
          "response_bytes": 435576,
          "response_sha256": "1f7538afedd77bfcb4212f0e05563b726960e605524c0bf0287a9d3499fd44e7",
          "response_headers": {
            "Content-Type": "text/html; charset=utf-8",
            "Date": "Mon, 02 Nov 2026 17:12:17 GMT",
            "Etag": "\"f28f6023fd6915f92d23eff1643703ea\"",
            "Last-Modified": "Mon, 02 Nov 2026 16:21:57 GMT"
          },
          "local_capture": "raw/openai-content-provenance-guide-5391d8bf13.html",
          "text_capture": "text/openai-content-provenance-guide-5391d8bf13.txt",
          "text_sha256": "1a333eb36b07877e661e9020f988013b7de0d60858d4c46290698f05d285cd06",
          "text_bytes": 20699,
          "byte_comparison": "changed",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:12:17.572684Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        },
        {
          "source_id": "openai-content-provenance-guide",
          "requested_url": "https://developers.openai.com/api/docs/guides/content-provenance.md",
          "captured_at": "2026-11-02T17:12:17.357287Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "additional",
          "previous_response_sha256": [
            "2f162e3896438a3850aceaffbea965c618ae4491f75350b59ab74d265b560b20"
          ],
          "http_status": 200,
          "final_url": "https://developers.openai.com/api/docs/guides/content-provenance.md",
          "content_type": "text/markdown; charset=utf-8",
          "response_bytes": 10637,
          "response_sha256": "ca98bbae3f685c64c10caf94dad86b3b5143f1e788a33ef0c3a7f25b328ace62",
          "response_headers": {
            "Content-Type": "text/markdown; charset=utf-8",
            "Date": "Mon, 02 Nov 2026 17:12:17 GMT",
            "Etag": "\"f2c78658142faf02f72eb4b1f361315d\"",
            "Last-Modified": "Mon, 02 Nov 2026 16:36:39 GMT"
          },
          "local_capture": "raw/openai-content-provenance-guide-e94dd9a9cf.txt",
          "text_capture": "text/openai-content-provenance-guide-e94dd9a9cf.txt",
          "text_sha256": "ca98bbae3f685c64c10caf94dad86b3b5143f1e788a33ef0c3a7f25b328ace62",
          "text_bytes": 10637,
          "byte_comparison": "changed",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:12:17.572373Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        }
      ],
      "findings": [
        "The public Content Provenance API remains image/audio-only. Current docs explicitly separate C2PA validation_state (trusted, valid, invalid, not_present) from OpenAI signal outcome. A third-party issuer or missing AI-generation action can return not_detected even with manifest details. No API request or upload was performed."
      ],
      "byte_comparison": {
        "compared_with": "declawd/reports/source-review-2026-10-29.json",
        "response_outcomes": {
          "changed": 2
        }
      }
    },
    {
      "source_id": "openai-textgrain-technical-report",
      "reviewed_at": "2026-11-02T17:19:15.371369Z",
      "review_method": "Fresh HTTP capture and relevant-section review against the 29 October source-review findings. Rendered web extraction is used only where separately recorded. No production detector, upload or third-party executable was run.",
      "captures": [
        {
          "source_id": "openai-textgrain-technical-report",
          "requested_url": "https://cdn.openai.com/pdf/e9508624-d767-41b6-a26d-e34ca798ada6/textgrain-entropy-calibrated-watermarking-for-language-model-text.pdf",
          "captured_at": "2026-11-02T17:12:17.234655Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "ledger",
          "previous_response_sha256": [
            "206e7345bb7d73fe98cf1d560df4cdd8f41b4e9125e98cda22d057c34e7bced8"
          ],
          "http_status": 200,
          "final_url": "https://cdn.openai.com/pdf/e9508624-d767-41b6-a26d-e34ca798ada6/textgrain-entropy-calibrated-watermarking-for-language-model-text.pdf",
          "content_type": "application/pdf",
          "response_bytes": 342639,
          "response_sha256": "206e7345bb7d73fe98cf1d560df4cdd8f41b4e9125e98cda22d057c34e7bced8",
          "response_headers": {
            "Date": "Mon, 02 Nov 2026 17:12:18 GMT",
            "Content-Type": "application/pdf",
            "Last-Modified": "Mon, 05 Oct 2026 02:02:38 GMT",
            "ETag": "0x8DF2284BB80F826"
          },
          "local_capture": "raw/openai-textgrain-technical-report-a51f9ad7d1.pdf",
          "pdf_text_status": 0,
          "text_capture": "text/openai-textgrain-technical-report-a51f9ad7d1.txt",
          "text_sha256": "85bab21e69c5c73f1fbb8ee127c0935ec4ae24564d104139b4ce6cc1c6847ee6",
          "text_bytes": 70955,
          "byte_comparison": "unchanged",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:12:19.069482Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        }
      ],
      "findings": [
        "The 20-page technical report is byte-identical to the 29 October capture. Its keyed optimal-transport/vocabulary-block method and stated independence assumptions retain the prior review limits. No production key, model-specific configuration or reproduced experiment was obtained."
      ],
      "byte_comparison": {
        "compared_with": "declawd/reports/source-review-2026-10-29.json",
        "response_outcomes": {
          "unchanged": 1
        }
      }
    },
    {
      "source_id": "openai-eu-guidance",
      "reviewed_at": "2026-11-02T17:19:15.371369Z",
      "review_method": "Fresh HTTP capture and relevant-section review against the 29 October source-review findings. Rendered web extraction is used only where separately recorded. No production detector, upload or third-party executable was run.",
      "captures": [
        {
          "source_id": "openai-eu-guidance",
          "requested_url": "https://help.openai.com/en/articles/12141645-eu-ai-act-openai-resources-and-customer-guidance",
          "captured_at": "2026-11-02T17:12:17.234893Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "additional",
          "previous_response_sha256": [
            "fc99008aa5bc64e89570dbd53c2f1de96635d3e7114f4fa8ec72de19876c1b0c"
          ],
          "http_status": 403,
          "final_url": "https://help.openai.com/en/articles/12141645-eu-ai-act-openai-resources-and-customer-guidance",
          "content_type": "text/html; charset=UTF-8",
          "response_bytes": 10094,
          "response_sha256": "857a7873c70af39ef6b1f34f2b620121a319d95ce1290517b8c86dac4438f791",
          "response_headers": {
            "Date": "Mon, 02 Nov 2026 17:12:17 GMT",
            "Content-Type": "text/html; charset=UTF-8"
          },
          "local_capture": "raw/openai-eu-guidance-c36e7385a0.html",
          "text_capture": "text/openai-eu-guidance-c36e7385a0.txt",
          "text_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
          "text_bytes": 0,
          "byte_comparison": "changed",
          "retrieval_outcome": "unreadable",
          "completed_at": "2026-11-02T17:12:17.418599Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": [
            "Access challenge. Reviewed through the separately recorded web reader instead."
          ]
        },
        {
          "source_id": "openai-eu-guidance",
          "requested_url": "https://openai.com/index/eu-text-provenance/",
          "captured_at": "2026-11-02T17:12:17.279806Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "additional",
          "previous_response_sha256": [],
          "http_status": 403,
          "final_url": "https://openai.com/index/eu-text-provenance/",
          "content_type": "text/html; charset=UTF-8",
          "response_bytes": 9893,
          "response_sha256": "03a49a01823a394e6a7ae899adb4704ae20a52b718ea09627af24bf9df686dc9",
          "response_headers": {
            "Date": "Mon, 02 Nov 2026 17:12:17 GMT",
            "Content-Type": "text/html; charset=UTF-8"
          },
          "local_capture": "raw/openai-eu-guidance-514fa33e6f.html",
          "text_capture": "text/openai-eu-guidance-514fa33e6f.txt",
          "text_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
          "text_bytes": 0,
          "byte_comparison": "no_previous_capture",
          "retrieval_outcome": "unreadable",
          "completed_at": "2026-11-02T17:12:17.473615Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": [
            "Access challenge. Reviewed through the separately recorded web reader instead."
          ]
        },
        {
          "source_id": "openai-eu-guidance",
          "requested_url": "https://help.openai.com/en/articles/12141645-eu-ai-act-openai-resources-and-customer-guidance",
          "captured_at": "2026-11-02T17:19:15.371369Z",
          "capture_time_scope": "Time this saved extraction was indexed. The tool retrieval preceded indexing during this same 2 November session.",
          "http_status": null,
          "http_status_limitation": "Web reader does not expose an origin HTTP status. Direct HTTP challenge is recorded separately.",
          "access_method": "web.run open, rendered page extraction",
          "capture_kind": "rendered_page_review",
          "response_bytes": 8120,
          "response_sha256": "b5ebfc2792137d97ba49a19910caed9e8983b9dd40d8a9a0c2b46a973e38bca1",
          "local_capture": "text/openai-eu-guidance-b5ebfc2792-web-reader.txt",
          "retrieval_outcome": "fetched_readable",
          "byte_comparison": "not_comparable",
          "evidence_limits": [
            "Reader text is not origin response bytes. It is not byte-comparable with prior HTML or prior reader formats."
          ]
        }
      ],
      "findings": [
        "Direct HTTP returned 403. The official customer page was reviewed through the web reader and retains project/organisation text-marking settings and a separate detector-access application. It does not determine customer-specific compliance."
      ],
      "byte_comparison": {
        "compared_with": "declawd/reports/source-review-2026-10-29.json",
        "response_outcomes": {
          "changed": 1,
          "no_previous_capture": 1,
          "not_comparable": 1
        }
      }
    },
    {
      "source_id": "eu-article-fifty-faq",
      "reviewed_at": "2026-11-02T17:19:15.371369Z",
      "review_method": "Fresh HTTP capture and relevant-section review against the 29 October source-review findings. Rendered web extraction is used only where separately recorded. No production detector, upload or third-party executable was run.",
      "captures": [
        {
          "source_id": "eu-article-fifty-faq",
          "requested_url": "https://digital-strategy.ec.europa.eu/en/faqs/transparency-obligations-under-article-50-ai-act",
          "captured_at": "2026-11-02T17:12:17.418805Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "additional",
          "previous_response_sha256": [],
          "http_status": 200,
          "final_url": "https://digital-strategy.ec.europa.eu/en/faqs/transparency-obligations-under-article-50-ai-act",
          "content_type": "text/html; charset=UTF-8",
          "response_bytes": 76478,
          "response_sha256": "659cc9120c80a000e8299206cca9f5e19f144f94889800bec5690a0393613bc3",
          "response_headers": {
            "Content-Type": "text/html; charset=UTF-8",
            "Date": "Mon, 02 Nov 2026 17:12:17 GMT",
            "Last-Modified": "Mon, 02 Nov 2026 17:00:46 GMT",
            "ETag": "W/\"1793638846-gzip\""
          },
          "local_capture": "raw/eu-article-fifty-faq-6b9c978375.html",
          "text_capture": "text/eu-article-fifty-faq-6b9c978375.txt",
          "text_sha256": "68b61f41443882e654bab3c16c093ae231da334f9a0310fe602df1b7db2e0003",
          "text_bytes": 17335,
          "byte_comparison": "no_previous_capture",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:12:17.633896Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        }
      ],
      "findings": [
        "The Commission FAQ continues to distinguish provider marking, deployer disclosure and specified exceptions. It is guidance alongside the adopted text and Code. It is not an amendment to the Regulation."
      ],
      "byte_comparison": {
        "compared_with": "declawd/reports/source-review-2026-10-29.json",
        "response_outcomes": {
          "no_previous_capture": 1
        }
      }
    },
    {
      "source_id": "eu-code-landing",
      "reviewed_at": "2026-11-02T17:19:15.371369Z",
      "review_method": "Fresh HTTP capture and relevant-section review against the 29 October source-review findings. Rendered web extraction is used only where separately recorded. No production detector, upload or third-party executable was run.",
      "captures": [
        {
          "source_id": "eu-code-landing",
          "requested_url": "https://digital-strategy.ec.europa.eu/en/policies/code-practice-ai-generated-content",
          "captured_at": "2026-11-02T17:12:17.418946Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "additional",
          "previous_response_sha256": [],
          "http_status": 200,
          "final_url": "https://digital-strategy.ec.europa.eu/en/policies/code-practice-ai-generated-content",
          "content_type": "text/html; charset=UTF-8",
          "response_bytes": 66573,
          "response_sha256": "a7c7b5919d24ac80d206a5d5adc2dd55cbf360603c17911b7cd09f1e49ee632a",
          "response_headers": {
            "Content-Type": "text/html; charset=UTF-8",
            "Date": "Mon, 02 Nov 2026 17:12:17 GMT",
            "Last-Modified": "Mon, 02 Nov 2026 17:01:03 GMT",
            "ETag": "W/\"1793638863-gzip\""
          },
          "local_capture": "raw/eu-code-landing-a9e3e225db.html",
          "text_capture": "text/eu-code-landing-a9e3e225db.txt",
          "text_sha256": "93363eea743521066edb466f91b610a5b4f59e36e7524e879835f9884c10c0b8",
          "text_bytes": 8076,
          "byte_comparison": "no_previous_capture",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:12:17.621426Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        }
      ],
      "findings": [
        "The official landing page continues to link the same final Code PDF. No replacement Code text was identified in this review."
      ],
      "byte_comparison": {
        "compared_with": "declawd/reports/source-review-2026-10-29.json",
        "response_outcomes": {
          "no_previous_capture": 1
        }
      }
    },
    {
      "source_id": "eu-task-forces",
      "reviewed_at": "2026-11-02T17:19:15.371369Z",
      "review_method": "Fresh HTTP capture and relevant-section review against the 29 October source-review findings. Rendered web extraction is used only where separately recorded. No production detector, upload or third-party executable was run.",
      "captures": [
        {
          "source_id": "eu-task-forces",
          "requested_url": "https://digital-strategy.ec.europa.eu/en/policies/task-forces-code-transparency-ai-generated-content",
          "captured_at": "2026-11-02T17:12:17.473958Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "additional",
          "previous_response_sha256": [],
          "http_status": 200,
          "final_url": "https://digital-strategy.ec.europa.eu/en/policies/task-forces-code-transparency-ai-generated-content",
          "content_type": "text/html; charset=UTF-8",
          "response_bytes": 64497,
          "response_sha256": "6243bf69505de8054c04019567493e51d597442540aa01f0b89143f49058e3f0",
          "response_headers": {
            "Content-Type": "text/html; charset=UTF-8",
            "Date": "Mon, 02 Nov 2026 17:12:17 GMT",
            "Last-Modified": "Mon, 02 Nov 2026 17:07:08 GMT",
            "ETag": "W/\"1793639228-gzip\""
          },
          "local_capture": "raw/eu-task-forces-cebfe6e167.html",
          "text_capture": "text/eu-task-forces-cebfe6e167.txt",
          "text_sha256": "1ac61d7715d75810ed7111f089798ba04176c036e1d3e1085e1fe91465914253",
          "text_bytes": 6695,
          "byte_comparison": "no_previous_capture",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:12:17.688039Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        }
      ],
      "findings": [
        "The landing page last updated 28 October lists a 23 October interoperability-group meeting with minutes pending and a next meeting on 5 November. It describes objectives and future work, without publishing an operational common detector or interface here."
      ],
      "byte_comparison": {
        "compared_with": "declawd/reports/source-review-2026-10-29.json",
        "response_outcomes": {
          "no_previous_capture": 1
        }
      }
    },
    {
      "source_id": "c2pa-specifications",
      "reviewed_at": "2026-11-02T17:19:15.371369Z",
      "review_method": "Fresh HTTP capture and relevant-section review against the 29 October source-review findings. Rendered web extraction is used only where separately recorded. No production detector, upload or third-party executable was run.",
      "captures": [
        {
          "source_id": "c2pa-specifications",
          "requested_url": "https://spec.c2pa.org/",
          "captured_at": "2026-11-02T17:12:17.572594Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "additional",
          "previous_response_sha256": [],
          "http_status": 200,
          "final_url": "https://spec.c2pa.org/",
          "content_type": "text/html; charset=utf-8",
          "response_bytes": 342,
          "response_sha256": "b7c5611b9c81b9b4cb849062232dcd8449832d68488af39d19924c0b73344183",
          "response_headers": {
            "Content-Type": "text/html; charset=utf-8",
            "Last-Modified": "Wed, 28 Oct 2026 18:13:02 GMT",
            "ETag": "\"6ae23b2e-156\"",
            "Date": "Mon, 02 Nov 2026 17:12:17 GMT"
          },
          "local_capture": "raw/c2pa-specifications-f7ad8e5804.html",
          "text_capture": "text/c2pa-specifications-f7ad8e5804.txt",
          "text_sha256": "506b00e2686d11d153f298036be1c7af690b1ec890c273fe17f235c4b1c86f93",
          "text_bytes": 53,
          "byte_comparison": "no_previous_capture",
          "retrieval_outcome": "unreadable",
          "completed_at": "2026-11-02T17:12:17.854339Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        },
        {
          "source_id": "c2pa-specifications",
          "requested_url": "https://spec.c2pa.org/specifications/specifications/2.4/specs/ContentCredentials.html",
          "captured_at": "2026-11-02T17:12:17.572990Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "additional",
          "previous_response_sha256": [],
          "http_status": 200,
          "final_url": "https://spec.c2pa.org/specifications/specifications/2.4/specs/ContentCredentials.html",
          "content_type": "text/html; charset=utf-8",
          "response_bytes": 990748,
          "response_sha256": "52cefe4efd9ed878d1b665178269e968954e986f2354eab90831a87b0002a036",
          "response_headers": {
            "Content-Type": "text/html; charset=utf-8",
            "Last-Modified": "Sun, 25 Oct 2026 02:24:23 GMT",
            "ETag": "\"6add6857-f1e1c\"",
            "Date": "Mon, 02 Nov 2026 17:12:17 GMT"
          },
          "local_capture": "raw/c2pa-specifications-912496930a.html",
          "text_capture": "text/c2pa-specifications-912496930a.txt",
          "text_sha256": "650ff082d9707fe87ff38d9f31f94822761a7d256274763388ef99a41e7fd232",
          "text_bytes": 588327,
          "byte_comparison": "no_previous_capture",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:12:18.367638Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        },
        {
          "source_id": "c2pa-specifications",
          "requested_url": "https://spec.c2pa.org/specifications/specifications/2.2/explainer/Explainer.html",
          "captured_at": "2026-11-02T17:12:17.621726Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "additional",
          "previous_response_sha256": [],
          "http_status": 200,
          "final_url": "https://spec.c2pa.org/specifications/specifications/2.2/explainer/Explainer.html",
          "content_type": "text/html; charset=utf-8",
          "response_bytes": 51398,
          "response_sha256": "956b484110ec5e3192b187eb8dccdb610650cc6254ce2b7bcc4a527b51d83d94",
          "response_headers": {
            "Content-Type": "text/html; charset=utf-8",
            "Last-Modified": "Sun, 25 Oct 2026 02:24:23 GMT",
            "ETag": "\"6add6857-c8c6\"",
            "Date": "Mon, 02 Nov 2026 17:12:17 GMT"
          },
          "local_capture": "raw/c2pa-specifications-264ba7b482.html",
          "text_capture": "text/c2pa-specifications-264ba7b482.txt",
          "text_sha256": "f4ce0cbae144094673ff5f1e554d5b39c61f596b542e5a2987840b159e92819a",
          "text_bytes": 26227,
          "byte_comparison": "no_previous_capture",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:12:17.907590Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        }
      ],
      "findings": [
        "The versioned 2.4 specification and 2.2 explainer remain readable. Their navigation now points to 2.5. A current version differs from the version used to explain or reproduce an earlier fixture."
      ],
      "byte_comparison": {
        "compared_with": "declawd/reports/source-review-2026-10-29.json",
        "response_outcomes": {
          "no_previous_capture": 3
        }
      }
    },
    {
      "source_id": "c2pa-trust",
      "reviewed_at": "2026-11-02T17:19:15.371369Z",
      "review_method": "Fresh HTTP capture and relevant-section review against the 29 October source-review findings. Rendered web extraction is used only where separately recorded. No production detector, upload or third-party executable was run.",
      "captures": [
        {
          "source_id": "c2pa-trust",
          "requested_url": "https://c2pa.org/conformance/",
          "captured_at": "2026-11-02T17:12:17.634046Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "additional",
          "previous_response_sha256": [],
          "http_status": 200,
          "final_url": "https://c2pa.org/conformance/",
          "content_type": "text/html; charset=UTF-8",
          "response_bytes": 88935,
          "response_sha256": "1e16a908fd1fb46ffd893b8909b48412d285fabb84bde2cd8fe2a33d10f7a7a0",
          "response_headers": {
            "Content-Type": "text/html; charset=UTF-8",
            "Date": "Mon, 02 Nov 2026 17:12:18 GMT"
          },
          "local_capture": "raw/c2pa-trust-54b84387b6.html",
          "text_capture": "text/c2pa-trust-54b84387b6.txt",
          "text_sha256": "a3d7c6210746fd45900a0c541a97af2a79bc103ac48a4efa7c4d638f83ead360",
          "text_bytes": 2377,
          "byte_comparison": "no_previous_capture",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:12:18.348397Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        },
        {
          "source_id": "c2pa-trust",
          "requested_url": "https://c2pa.org/conformance/trust-list/",
          "captured_at": "2026-11-02T17:12:17.688197Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "additional",
          "previous_response_sha256": [],
          "http_status": 404,
          "final_url": "https://c2pa.org/conformance/trust-list/",
          "content_type": "text/html; charset=UTF-8",
          "response_bytes": 80496,
          "response_sha256": "9d98b9ef99802237ebf4fcf84024d1ede02e81074e0b78fa48449d6ab4f454f3",
          "response_headers": {
            "Content-Type": "text/html; charset=UTF-8",
            "Date": "Mon, 02 Nov 2026 17:12:18 GMT"
          },
          "local_capture": "raw/c2pa-trust-be20519351.html",
          "text_capture": "text/c2pa-trust-be20519351.txt",
          "text_sha256": "55ca9c53cc5d836dab118f086885eccca7d4d5604f299e68316412fcdfb28c5a",
          "text_bytes": 515,
          "byte_comparison": "no_previous_capture",
          "retrieval_outcome": "unreadable",
          "completed_at": "2026-11-02T17:12:18.335719Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": [
            "Resource not found. No technical conclusion follows from the missing guessed URL."
          ]
        },
        {
          "source_id": "c2pa-trust",
          "requested_url": "https://spec.c2pa.org/conformance-explorer/",
          "captured_at": "2026-11-02T17:13:42.311803Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "additional",
          "previous_response_sha256": [],
          "http_status": 200,
          "final_url": "https://spec.c2pa.org/conformance-explorer/",
          "content_type": "text/html; charset=utf-8",
          "response_bytes": 13238,
          "response_sha256": "1b8830b8b9a126b3eb017f4e3e0d2323437e1d1e849262c607175b382c3f03e9",
          "response_headers": {
            "Content-Type": "text/html; charset=utf-8",
            "Last-Modified": "Fri, 16 Oct 2026 21:24:40 GMT",
            "ETag": "\"6ad29618-33b6\"",
            "Date": "Mon, 02 Nov 2026 17:13:43 GMT"
          },
          "local_capture": "raw/c2pa-trust-e1307e9b2d.html",
          "text_capture": "text/c2pa-trust-e1307e9b2d.txt",
          "text_sha256": "56ffaf5b366995c3038a2aa8681a034297fe68d73de7912200a3479f314d67c7",
          "text_bytes": 25,
          "byte_comparison": "no_previous_capture",
          "retrieval_outcome": "unreadable",
          "completed_at": "2026-11-02T17:13:43.306416Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        }
      ],
      "findings": [
        "The official landing page describes Conformance Program v0.2 and links current trust, TSA and conforming-product data plus the explorer. The guessed /conformance/trust-list/ URL returns 404. Exact live trust-data revisions and certificate changes are assigned to the repository review."
      ],
      "byte_comparison": {
        "compared_with": "declawd/reports/source-review-2026-10-29.json",
        "response_outcomes": {
          "no_previous_capture": 3
        }
      }
    },
    {
      "source_id": "unicode-17-text-controls",
      "reviewed_at": "2026-11-02T17:19:15.371369Z",
      "review_method": "Fresh HTTP capture and relevant-section review against the 29 October source-review findings. Rendered web extraction is used only where separately recorded. No production detector, upload or third-party executable was run.",
      "captures": [
        {
          "source_id": "unicode-17-text-controls",
          "requested_url": "https://www.unicode.org/reports/tr9/tr9-51.html",
          "captured_at": "2026-11-02T17:12:17.705400Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "additional",
          "previous_response_sha256": [],
          "http_status": 200,
          "final_url": "https://www.unicode.org/reports/tr9/tr9-51.html",
          "content_type": "text/html; charset=UTF-8",
          "response_bytes": 187487,
          "response_sha256": "25ebbc5bc05ec302677ace0e3118e454e12da5e1e7ebec386aabd6e585c8cebe",
          "response_headers": {
            "Date": "Mon, 02 Nov 2026 17:12:18 GMT",
            "Content-Type": "text/html; charset=UTF-8",
            "Last-Modified": "Wed, 13 Aug 2025 16:14:50 GMT"
          },
          "local_capture": "raw/unicode-17-text-controls-4ada51777d.html",
          "text_capture": "text/unicode-17-text-controls-4ada51777d.txt",
          "text_sha256": "d07036172d189a7d7650092007a99a0f23006ef630d3d569c3070c17457228de",
          "text_bytes": 122183,
          "byte_comparison": "no_previous_capture",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:12:18.470413Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        },
        {
          "source_id": "unicode-17-text-controls",
          "requested_url": "https://www.unicode.org/reports/tr51/tr51-29.html",
          "captured_at": "2026-11-02T17:12:17.794022Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "additional",
          "previous_response_sha256": [],
          "http_status": 200,
          "final_url": "https://www.unicode.org/reports/tr51/tr51-29.html",
          "content_type": "text/html; charset=UTF-8",
          "response_bytes": 207556,
          "response_sha256": "3b648142de7a17bd66e4263c2ad584c826a893cd39083a41d9549c4c659279e1",
          "response_headers": {
            "Date": "Mon, 02 Nov 2026 17:12:18 GMT",
            "Content-Type": "text/html; charset=UTF-8",
            "Last-Modified": "Fri, 05 Sep 2025 15:47:46 GMT"
          },
          "local_capture": "raw/unicode-17-text-controls-748ab717af.html",
          "text_capture": "text/unicode-17-text-controls-748ab717af.txt",
          "text_sha256": "6ebd03a893b0ebe46065269ffe0419b4221a1c63f93d687d9bde8becc3e34dd5",
          "text_bytes": 104635,
          "byte_comparison": "no_previous_capture",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:12:18.517272Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        },
        {
          "source_id": "unicode-17-text-controls",
          "requested_url": "https://www.unicode.org/versions/Unicode17.0.0/core-spec/chapter-23/",
          "captured_at": "2026-11-02T17:12:17.854704Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "additional",
          "previous_response_sha256": [],
          "http_status": 200,
          "final_url": "https://www.unicode.org/versions/Unicode17.0.0/core-spec/chapter-23/",
          "content_type": "text/html; charset=UTF-8",
          "response_bytes": 175850,
          "response_sha256": "bfeba0d4980b4b540d26ea96157f98f142ac93ab481c2ed2285aa002eb9acd3f",
          "response_headers": {
            "Date": "Mon, 02 Nov 2026 17:12:18 GMT",
            "Content-Type": "text/html; charset=UTF-8",
            "Last-Modified": "Thu, 11 Sep 2025 18:08:53 GMT"
          },
          "local_capture": "raw/unicode-17-text-controls-dbe55a3aea.html",
          "text_capture": "text/unicode-17-text-controls-dbe55a3aea.txt",
          "text_sha256": "948d43b4ac5c42366bad4a0c5c05d22574103513ed2adeef7370a1b4b2a35580",
          "text_bytes": 84960,
          "byte_comparison": "no_previous_capture",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:12:18.457794Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        },
        {
          "source_id": "unicode-17-text-controls",
          "requested_url": "https://www.unicode.org/versions/latest/",
          "captured_at": "2026-11-02T17:12:17.907851Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "additional",
          "previous_response_sha256": [],
          "http_status": 200,
          "final_url": "http://www.unicode.org/versions/Unicode18.0.0/",
          "content_type": "text/html; charset=UTF-8",
          "response_bytes": 62764,
          "response_sha256": "e7c984c2738f5c402df0f89fb87fe7b2625d1e767ba07fe2aef723f4c07b7d77",
          "response_headers": {
            "Date": "Mon, 02 Nov 2026 17:12:18 GMT",
            "Content-Type": "text/html; charset=UTF-8",
            "Last-Modified": "Wed, 14 Oct 2026 22:48:25 GMT"
          },
          "local_capture": "raw/unicode-17-text-controls-b7bf8f4708.html",
          "text_capture": "text/unicode-17-text-controls-b7bf8f4708.txt",
          "text_sha256": "7c32fafbbdfd9257107badfaf14ee9d2a2f900e202f78733ab8f66cfe7cad178",
          "text_bytes": 27351,
          "byte_comparison": "no_previous_capture",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:12:18.608138Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        }
      ],
      "findings": [
        "The pinned Unicode 17 references remain readable and support their historical scope. The latest-version pointer now identifies Unicode 18, so present-tense claims of latest version need separate revision."
      ],
      "byte_comparison": {
        "compared_with": "declawd/reports/source-review-2026-10-29.json",
        "response_outcomes": {
          "no_previous_capture": 4
        }
      }
    },
    {
      "source_id": "anthropic-text-detection",
      "reviewed_at": "2026-11-02T17:19:15.371369Z",
      "review_method": "Fresh HTTP capture and relevant-section review against the 29 October source-review findings. Rendered web extraction is used only where separately recorded. No production detector, upload or third-party executable was run.",
      "captures": [
        {
          "source_id": "anthropic-text-detection",
          "requested_url": "https://platform.claude.com/docs/en/build-with-claude/watermark-detection",
          "captured_at": "2026-11-02T17:12:18.336004Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "additional",
          "previous_response_sha256": [],
          "http_status": 200,
          "final_url": "https://platform.claude.com/docs/en/build-with-claude/watermark-detection",
          "content_type": "text/html; charset=utf-8",
          "response_bytes": 176304,
          "response_sha256": "d2267a79dcac57e60c02332b11a5876a66104f898b6498661ee15728a6584054",
          "response_headers": {
            "Date": "Mon, 02 Nov 2026 17:12:18 GMT",
            "Content-Type": "text/html; charset=utf-8"
          },
          "local_capture": "raw/anthropic-text-detection-6eb8b290b6.html",
          "text_capture": "text/anthropic-text-detection-6eb8b290b6.txt",
          "text_sha256": "b948603b628fa046c6b27f61a7f3d3116d43765e0b9fe2ed0966461b7f32d5fc",
          "text_bytes": 31,
          "byte_comparison": "no_previous_capture",
          "retrieval_outcome": "unreadable",
          "completed_at": "2026-11-02T17:12:18.917325Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": [
            "HTTP 200 contains a documentation shell only. It is not a readable production-detector contract."
          ]
        }
      ],
      "findings": [
        "The guessed documentation URL returns an HTTP 200 shell containing only a documentation title. It supplies no readable detector contract and is recorded as unreadable. Official help and technical announcement remain the evidence for preview access."
      ],
      "byte_comparison": {
        "compared_with": "declawd/reports/source-review-2026-10-29.json",
        "response_outcomes": {
          "no_previous_capture": 1
        }
      }
    },
    {
      "source_id": "c2pa-specification-2-5",
      "reviewed_at": "2026-11-02T17:19:15.371369Z",
      "review_method": "Fresh HTTP capture and relevant-section review against the 29 October source-review findings. Rendered web extraction is used only where separately recorded. No production detector, upload or third-party executable was run.",
      "captures": [
        {
          "source_id": "c2pa-specification-2-5",
          "requested_url": "https://spec.c2pa.org/specifications/specifications/2.5/specs/ContentCredentials.html",
          "captured_at": "2026-11-02T17:13:42.311078Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "additional",
          "previous_response_sha256": [],
          "http_status": 200,
          "final_url": "https://spec.c2pa.org/specifications/specifications/2.5/specs/ContentCredentials.html",
          "content_type": "text/html; charset=utf-8",
          "response_bytes": 1243784,
          "response_sha256": "9669db0c98270643895eb61a35f60263f1a5750049ccb78b670490115780e4d3",
          "response_headers": {
            "Content-Type": "text/html; charset=utf-8",
            "Last-Modified": "Sun, 25 Oct 2026 02:24:24 GMT",
            "ETag": "\"6add6858-12fa88\"",
            "Date": "Mon, 02 Nov 2026 17:13:43 GMT"
          },
          "local_capture": "raw/c2pa-specification-2-5-bf708434cc.html",
          "text_capture": "text/c2pa-specification-2-5-bf708434cc.txt",
          "text_sha256": "ff74d195c163ae971870887c4acf622c6c2252d7ce72d36e3949799b5d7b1f9a",
          "text_bytes": 739620,
          "byte_comparison": "no_previous_capture",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:13:44.392882Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        },
        {
          "source_id": "c2pa-specification-2-5",
          "requested_url": "https://spec.c2pa.org/specifications/specifications/2.5/index.html",
          "captured_at": "2026-11-02T17:13:42.311586Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "additional",
          "previous_response_sha256": [],
          "http_status": 200,
          "final_url": "https://spec.c2pa.org/specifications/specifications/2.5/index.html",
          "content_type": "text/html; charset=utf-8",
          "response_bytes": 14181,
          "response_sha256": "aba22be89af99ae3fe32486113faeada5a852bf467b8f65bc5d09c352905f56b",
          "response_headers": {
            "Content-Type": "text/html; charset=utf-8",
            "Last-Modified": "Sun, 25 Oct 2026 02:24:24 GMT",
            "ETag": "\"6add6858-3765\"",
            "Date": "Mon, 02 Nov 2026 17:13:43 GMT"
          },
          "local_capture": "raw/c2pa-specification-2-5-57f5b36220.html",
          "text_capture": "text/c2pa-specification-2-5-57f5b36220.txt",
          "text_sha256": "4127d3327a21e4eaf9e161452b51aaa2c54abff46ac251ae8b7577b4b32053af",
          "text_bytes": 1039,
          "byte_comparison": "no_previous_capture",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:13:43.286702Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        }
      ],
      "findings": [
        "Published 2.5 text adds explicit external retrieval-security guidance and append-only text checkpoints. Compared with current 2.4, its unstructured-text wrapper clarifies exclusion-before-NFC byte offsets, U+FEFF inclusion, deterministic padding and handling multiple valid wrappers. The underlying variation-selector wrapper already exists in 2.4 and remains explicitly under review in 2.5.",
        "Signer trust and TSA stores remain separate, with trust windows and revocation rules. A spec text and a live SDK implementation need separate verification. Current certificate-list revisions are assigned to the repository review."
      ],
      "byte_comparison": {
        "compared_with": "declawd/reports/source-review-2026-10-29.json",
        "response_outcomes": {
          "no_previous_capture": 2
        }
      }
    },
    {
      "source_id": "unicode-18",
      "reviewed_at": "2026-11-02T17:19:15.371369Z",
      "review_method": "Fresh HTTP capture and relevant-section review against the 29 October source-review findings. Rendered web extraction is used only where separately recorded. No production detector, upload or third-party executable was run.",
      "captures": [
        {
          "source_id": "unicode-18",
          "requested_url": "https://www.unicode.org/reports/tr9/tr9-52.html",
          "captured_at": "2026-11-02T17:13:42.311957Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "additional",
          "previous_response_sha256": [],
          "http_status": 200,
          "final_url": "https://www.unicode.org/reports/tr9/tr9-52.html",
          "content_type": "text/html; charset=UTF-8",
          "response_bytes": 188933,
          "response_sha256": "3c281b38800bad85b16bf3a169b8cb693d8a2dbceb60903feb26e68a2659ee8a",
          "response_headers": {
            "Date": "Mon, 02 Nov 2026 17:13:43 GMT",
            "Content-Type": "text/html; charset=UTF-8",
            "Last-Modified": "Tue, 01 Sep 2026 21:00:40 GMT"
          },
          "local_capture": "raw/unicode-18-c9c163a731.html",
          "text_capture": "text/unicode-18-c9c163a731.txt",
          "text_sha256": "61e752dd91ddf5c48329533dde2ccea0ba241cae3f4bb56dc4e79272ab2d9440",
          "text_bytes": 123359,
          "byte_comparison": "no_previous_capture",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:13:43.832928Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        },
        {
          "source_id": "unicode-18",
          "requested_url": "https://www.unicode.org/reports/tr51/tr51-31.html",
          "captured_at": "2026-11-02T17:13:42.312093Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "additional",
          "previous_response_sha256": [],
          "http_status": 200,
          "final_url": "https://www.unicode.org/reports/tr51/tr51-31.html",
          "content_type": "text/html; charset=UTF-8",
          "response_bytes": 207223,
          "response_sha256": "a12a8c986f50b97c2d82cbdabfe18928ac16375e74b6eb61b54654e132966658",
          "response_headers": {
            "Date": "Mon, 02 Nov 2026 17:13:43 GMT",
            "Content-Type": "text/html; charset=UTF-8",
            "Last-Modified": "Tue, 01 Sep 2026 21:17:04 GMT"
          },
          "local_capture": "raw/unicode-18-d9df97d765.html",
          "text_capture": "text/unicode-18-d9df97d765.txt",
          "text_sha256": "7a49e4e023eaf82be8f142bd0cd646306d48326ce5ef4117c38bc525316b7ff1",
          "text_bytes": 104844,
          "byte_comparison": "no_previous_capture",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:13:43.873821Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        },
        {
          "source_id": "unicode-18",
          "requested_url": "https://www.unicode.org/versions/Unicode18.0.0/core-spec/chapter-23/",
          "captured_at": "2026-11-02T17:13:42.312217Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "additional",
          "previous_response_sha256": [],
          "http_status": 200,
          "final_url": "https://www.unicode.org/versions/Unicode18.0.0/core-spec/chapter-23/",
          "content_type": "text/html; charset=UTF-8",
          "response_bytes": 204196,
          "response_sha256": "6ac4cc43a45d8ccfbcbd39013149ff11328e1eb60c2c2e9d2cab454c43d8d782",
          "response_headers": {
            "Date": "Mon, 02 Nov 2026 17:13:43 GMT",
            "Content-Type": "text/html; charset=UTF-8",
            "Last-Modified": "Tue, 15 Sep 2026 21:54:57 GMT"
          },
          "local_capture": "raw/unicode-18-acee774dde.html",
          "text_capture": "text/unicode-18-acee774dde.txt",
          "text_sha256": "ed35dcf60b216c66941154dc8748685e3d84c42a091134b7e350efa59fd12d35",
          "text_bytes": 85479,
          "byte_comparison": "no_previous_capture",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:13:43.872857Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        },
        {
          "source_id": "unicode-18",
          "requested_url": "https://blog.unicode.org/2026/09/announcing-unicode-standard-version-180.html",
          "captured_at": "2026-11-02T17:13:42.312341Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "additional",
          "previous_response_sha256": [],
          "http_status": 200,
          "final_url": "https://blog.unicode.org/2026/09/announcing-unicode-standard-version-180.html",
          "content_type": "text/html; charset=UTF-8",
          "response_bytes": 190324,
          "response_sha256": "617ea388e5a2e2f7e6245ae62e0a16fda49b819a1306bc5afe142b9d52b6d29e",
          "response_headers": {
            "Content-Type": "text/html; charset=UTF-8",
            "Date": "Mon, 02 Nov 2026 17:13:43 GMT",
            "Last-Modified": "Wed, 28 Oct 2026 00:13:27 GMT"
          },
          "local_capture": "raw/unicode-18-d0b83db9ee.html",
          "text_capture": "text/unicode-18-d0b83db9ee.txt",
          "text_sha256": "1ad08c457e817b91b4f6e8dd7a6103c737336727f6845c52cdc51bb10e243f3c",
          "text_bytes": 13175,
          "byte_comparison": "no_previous_capture",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:13:43.873644Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        },
        {
          "source_id": "unicode-18",
          "requested_url": "https://www.unicode.org/Public/18.0.0/ucd/ReadMe.txt",
          "captured_at": "2026-11-02T17:13:42.312471Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "additional",
          "previous_response_sha256": [],
          "http_status": 200,
          "final_url": "https://www.unicode.org/Public/18.0.0/ucd/ReadMe.txt",
          "content_type": "text/plain; charset=utf-8",
          "response_bytes": 729,
          "response_sha256": "b0ea442f29dee90584aacd3665a6e1ce87ffc917a4d31f34e1916d2d6f7f9205",
          "response_headers": {
            "Date": "Mon, 02 Nov 2026 17:13:43 GMT",
            "Content-Type": "text/plain; charset=utf-8",
            "Last-Modified": "Tue, 01 Sep 2026 20:29:03 GMT",
            "ETag": "W/\"2d9-65a71c4fd41c0-gzip\""
          },
          "local_capture": "raw/unicode-18-c6ae1f527a.txt",
          "text_capture": "text/unicode-18-c6ae1f527a.txt",
          "text_sha256": "b0ea442f29dee90584aacd3665a6e1ce87ffc917a4d31f34e1916d2d6f7f9205",
          "text_bytes": 729,
          "byte_comparison": "no_previous_capture",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:13:43.363545Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        },
        {
          "source_id": "unicode-18",
          "requested_url": "https://www.unicode.org/errata/",
          "captured_at": "2026-11-02T17:13:43.286891Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "additional",
          "previous_response_sha256": [],
          "http_status": 200,
          "final_url": "https://www.unicode.org/errata/",
          "content_type": "text/html; charset=UTF-8",
          "response_bytes": 11745,
          "response_sha256": "e4ddc8dd57701da045b6750e05b3613deb1811eb4f2b522e5c68027b2d37db7a",
          "response_headers": {
            "Date": "Mon, 02 Nov 2026 17:13:43 GMT",
            "Content-Type": "text/html; charset=UTF-8",
            "Last-Modified": "Fri, 04 Sep 2026 18:05:50 GMT"
          },
          "local_capture": "raw/unicode-18-ebbf087530.html",
          "text_capture": "text/unicode-18-ebbf087530.txt",
          "text_sha256": "7b8e5b9d3dea34355d4c2d10747c622925b2f69f5838cd0f5a1b51b786c6b2fc",
          "text_bytes": 2969,
          "byte_comparison": "no_previous_capture",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:13:43.678190Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        },
        {
          "source_id": "unicode-18",
          "requested_url": "https://www.unicode.org/versions/Unicode18.0.0/core-spec/chapter-3/",
          "captured_at": "2026-11-02T17:17:06.724638Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "additional",
          "previous_response_sha256": [],
          "http_status": 200,
          "final_url": "https://www.unicode.org/versions/Unicode18.0.0/core-spec/chapter-3/",
          "content_type": "text/html; charset=UTF-8",
          "response_bytes": 428731,
          "response_sha256": "f9e158a640c88cb0aebf60e5f724ea4f957eca539c620fb1e161cb6c8f8fb22e",
          "response_headers": {
            "Date": "Mon, 02 Nov 2026 17:17:07 GMT",
            "Content-Type": "text/html; charset=UTF-8",
            "Last-Modified": "Tue, 15 Sep 2026 21:54:57 GMT"
          },
          "local_capture": "raw/unicode-18-46430d3e9b.html",
          "text_capture": "text/unicode-18-46430d3e9b.txt",
          "text_sha256": "e888a0592ab5e510859f0638f78f6ddfe69db0d3992be1629765a643e82cb916",
          "text_bytes": 207515,
          "byte_comparison": "no_previous_capture",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:17:07.567546Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        },
        {
          "source_id": "unicode-18",
          "requested_url": "https://www.unicode.org/versions/Unicode18.0.0/core-spec/chapter-5/",
          "captured_at": "2026-11-02T17:17:06.725091Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "additional",
          "previous_response_sha256": [],
          "http_status": 200,
          "final_url": "https://www.unicode.org/versions/Unicode18.0.0/core-spec/chapter-5/",
          "content_type": "text/html; charset=UTF-8",
          "response_bytes": 332557,
          "response_sha256": "53777cf08843ebe775e61a1eb32d1d2007aa5c300691fbf99c4761377f841fa0",
          "response_headers": {
            "Date": "Mon, 02 Nov 2026 17:17:07 GMT",
            "Content-Type": "text/html; charset=UTF-8",
            "Last-Modified": "Tue, 15 Sep 2026 21:54:57 GMT"
          },
          "local_capture": "raw/unicode-18-434c0d4f95.html",
          "text_capture": "text/unicode-18-434c0d4f95.txt",
          "text_sha256": "005ff19d140caabc05164ea1b8b61cc7c28d0346ae501d65c65aa549fa533b19",
          "text_bytes": 138427,
          "byte_comparison": "no_previous_capture",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:17:07.460666Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        }
      ],
      "findings": [
        "Unicode officially announced 18.0 on 16 September 2026. UAX 9 revision 52 is stable and UTS 51 revision 31 updates presentation guidance. Core chapter 3 defines misplaced variation selectors and recommends visible display, with further security/display guidance in chapter 5. Historical fixtures and carrier registries retain their original release pins. Explanatory annotations currently use Unicode 17 and can be upgraded separately.",
        "The latest-version landing page retains a stale preliminary-draft banner despite the official release announcement, stable UAX status and released UCD ReadMe. Record that inconsistency rather than using that banner alone to classify the release."
      ],
      "byte_comparison": {
        "compared_with": "declawd/reports/source-review-2026-10-29.json",
        "response_outcomes": {
          "no_previous_capture": 8
        }
      }
    },
    {
      "source_id": "eu-task-force-vademecum",
      "reviewed_at": "2026-11-02T17:19:15.371369Z",
      "review_method": "Fresh HTTP capture and relevant-section review against the 29 October source-review findings. Rendered web extraction is used only where separately recorded. No production detector, upload or third-party executable was run.",
      "captures": [
        {
          "source_id": "eu-task-force-vademecum",
          "requested_url": "https://ec.europa.eu/newsroom/dae/redirection/document/133407",
          "captured_at": "2026-11-02T17:13:43.306565Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "additional",
          "previous_response_sha256": [],
          "http_status": 200,
          "final_url": "https://ec.europa.eu/newsroom/dae/redirection/document/133407",
          "content_type": "/",
          "response_bytes": 179486,
          "response_sha256": "87b1b4915981ccff92c8ddd5dbd846c24da72bd4e37c45c41ad8197de50fd4e9",
          "response_headers": {
            "Date": "Mon, 02 Nov 2026 17:13:43 GMT",
            "Content-Type": "/"
          },
          "local_capture": "raw/eu-task-force-vademecum-870df336cd.txt",
          "text_capture": "text/eu-task-force-vademecum-870df336cd.txt",
          "text_sha256": "de5c78567b8430d32e093bef882e235f2c11b71e1f252b0e39560e0b1fb45ae2",
          "text_bytes": 22739,
          "byte_comparison": "no_previous_capture",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:13:44.184555Z",
          "pdf_text_status": 0,
          "capture_kind": "pdf_identified_by_magic_bytes",
          "extraction_method": "pdftotext -layout",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        }
      ],
      "findings": [
        "September rules govern membership, voting, expert invitations and technical groups. Their adoption is recorded in the 30 September joint meeting minutes. They are procedures rather than a detector specification."
      ],
      "byte_comparison": {
        "compared_with": "declawd/reports/source-review-2026-10-29.json",
        "response_outcomes": {
          "no_previous_capture": 1
        }
      }
    },
    {
      "source_id": "eu-task-force-minutes-joint",
      "reviewed_at": "2026-11-02T17:19:15.371369Z",
      "review_method": "Fresh HTTP capture and relevant-section review against the 29 October source-review findings. Rendered web extraction is used only where separately recorded. No production detector, upload or third-party executable was run.",
      "captures": [
        {
          "source_id": "eu-task-force-minutes-joint",
          "requested_url": "https://ec.europa.eu/newsroom/dae/redirection/document/134456",
          "captured_at": "2026-11-02T17:13:43.363880Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "additional",
          "previous_response_sha256": [],
          "http_status": 200,
          "final_url": "https://ec.europa.eu/newsroom/dae/redirection/document/134456",
          "content_type": "/",
          "response_bytes": 239301,
          "response_sha256": "092b3b9cddb3bbb56ecfc9d18eea0ac9dfa57ed205f018fd2d45a323938db988",
          "response_headers": {
            "Date": "Mon, 02 Nov 2026 17:13:43 GMT",
            "Content-Type": "/"
          },
          "local_capture": "raw/eu-task-force-minutes-joint-493e0fec27.txt",
          "text_capture": "text/eu-task-force-minutes-joint-493e0fec27.txt",
          "text_sha256": "13db942d66b28f773dc508f83b0112a204b58051c0381563055820b4d8a2c0aa",
          "text_bytes": 7358,
          "byte_comparison": "no_previous_capture",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:13:44.223694Z",
          "pdf_text_status": 0,
          "capture_kind": "pdf_identified_by_magic_bytes",
          "extraction_method": "pdftotext -layout",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        }
      ],
      "findings": [
        "The minutes dated 26 October record consensus adoption of task-force rules at the 30 September meeting, establishing the two task forces."
      ],
      "byte_comparison": {
        "compared_with": "declawd/reports/source-review-2026-10-29.json",
        "response_outcomes": {
          "no_previous_capture": 1
        }
      }
    },
    {
      "source_id": "eu-task-force-minutes-marking",
      "reviewed_at": "2026-11-02T17:19:15.371369Z",
      "review_method": "Fresh HTTP capture and relevant-section review against the 29 October source-review findings. Rendered web extraction is used only where separately recorded. No production detector, upload or third-party executable was run.",
      "captures": [
        {
          "source_id": "eu-task-force-minutes-marking",
          "requested_url": "https://ec.europa.eu/newsroom/dae/redirection/document/134454",
          "captured_at": "2026-11-02T17:13:43.680106Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "additional",
          "previous_response_sha256": [],
          "http_status": 200,
          "final_url": "https://ec.europa.eu/newsroom/dae/redirection/document/134454",
          "content_type": "/",
          "response_bytes": 175817,
          "response_sha256": "37882a1a9b6200e68d45c0ddfa788dd6e2c2ac66dff056edc98476c923b02d79",
          "response_headers": {
            "Date": "Mon, 02 Nov 2026 17:13:44 GMT",
            "Content-Type": "/"
          },
          "local_capture": "raw/eu-task-force-minutes-marking-555a387dff.txt",
          "text_capture": "text/eu-task-force-minutes-marking-555a387dff.txt",
          "text_sha256": "603db733858c5e1da0ec26cf5df00b1de3d229d6629d89497427ed5258321efe",
          "text_bytes": 7776,
          "byte_comparison": "no_previous_capture",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:13:44.432190Z",
          "pdf_text_status": 0,
          "capture_kind": "pdf_identified_by_magic_bytes",
          "extraction_method": "pdftotext -layout",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        }
      ],
      "findings": [
        "The 1 October minutes, issued 26 October, record discussion of a common detection API as a possible first interoperability deliverable. Creation of that group did not achieve consensus at this meeting. The later landing page records subsequent group activity. The minutes distinguish the 2 December statutory transition from the 2 February Code commitment."
      ],
      "byte_comparison": {
        "compared_with": "declawd/reports/source-review-2026-10-29.json",
        "response_outcomes": {
          "no_previous_capture": 1
        }
      }
    },
    {
      "source_id": "eu-task-force-minutes-labelling",
      "reviewed_at": "2026-11-02T17:19:15.371369Z",
      "review_method": "Fresh HTTP capture and relevant-section review against the 29 October source-review findings. Rendered web extraction is used only where separately recorded. No production detector, upload or third-party executable was run.",
      "captures": [
        {
          "source_id": "eu-task-force-minutes-labelling",
          "requested_url": "https://ec.europa.eu/newsroom/dae/redirection/document/134455",
          "captured_at": "2026-11-02T17:13:43.871052Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "additional",
          "previous_response_sha256": [],
          "http_status": 200,
          "final_url": "https://ec.europa.eu/newsroom/dae/redirection/document/134455",
          "content_type": "/",
          "response_bytes": 229947,
          "response_sha256": "be85964b51484b12bc951a72c35573d433977351dcb5f9144dafa886503fa88b",
          "response_headers": {
            "Date": "Mon, 02 Nov 2026 17:13:44 GMT",
            "Content-Type": "/"
          },
          "local_capture": "raw/eu-task-force-minutes-labelling-6c4cb751b9.txt",
          "text_capture": "text/eu-task-force-minutes-labelling-6c4cb751b9.txt",
          "text_sha256": "2407fe378b31b875e3c61601de6cb9afdb6cc0e901e5eb87718e4ef83eae139f",
          "text_bytes": 6660,
          "byte_comparison": "no_previous_capture",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:13:44.879459Z",
          "pdf_text_status": 0,
          "capture_kind": "pdf_identified_by_magic_bytes",
          "extraction_method": "pdftotext -layout",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        }
      ],
      "findings": [
        "The 1 October minutes record agreement to establish working groups for an interactive second layer, audio disclosure and sectoral practice. A proposed evaluation group required further consultation. Planned study and group work are distinct from published technical implementation."
      ],
      "byte_comparison": {
        "compared_with": "declawd/reports/source-review-2026-10-29.json",
        "response_outcomes": {
          "no_previous_capture": 1
        }
      }
    },
    {
      "source_id": "c2pa-announcements",
      "reviewed_at": "2026-11-02T17:19:15.371369Z",
      "review_method": "Fresh HTTP capture and relevant-section review against the 29 October source-review findings. Rendered web extraction is used only where separately recorded. No production detector, upload or third-party executable was run.",
      "captures": [
        {
          "source_id": "c2pa-announcements",
          "requested_url": "https://c2pa.org/news/",
          "captured_at": "2026-11-02T17:16:09.379855Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "additional",
          "previous_response_sha256": [],
          "http_status": 200,
          "final_url": "https://c2pa.org/news/",
          "content_type": "text/html; charset=UTF-8",
          "response_bytes": 93342,
          "response_sha256": "bd696c7bb53280d5b9f7ddf096419d301cf44c7f60e172cab404857e87c1bf60",
          "response_headers": {
            "Content-Type": "text/html; charset=UTF-8",
            "Date": "Mon, 02 Nov 2026 17:16:10 GMT"
          },
          "local_capture": "raw/c2pa-announcements-642f2c1d9c.html",
          "text_capture": "text/c2pa-announcements-642f2c1d9c.txt",
          "text_sha256": "b0d0662866051c0591277cd405fb49b15f2c4ad1ff47dd58c088dbae063de471",
          "text_bytes": 7287,
          "byte_comparison": "no_previous_capture",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:16:10.763006Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        }
      ],
      "findings": [
        "The official announcement listing was captured as a discovery source. A listing or recent crawl alone does not establish a new normative requirement or deployed validation behaviour."
      ],
      "byte_comparison": {
        "compared_with": "declawd/reports/source-review-2026-10-29.json",
        "response_outcomes": {
          "no_previous_capture": 1
        }
      }
    },
    {
      "source_id": "unicode-18-data",
      "reviewed_at": "2026-11-02T17:19:15.371369Z",
      "review_method": "Fresh HTTP capture and relevant-section review against the 29 October source-review findings. Rendered web extraction is used only where separately recorded. No production detector, upload or third-party executable was run.",
      "captures": [
        {
          "source_id": "unicode-18-data",
          "requested_url": "https://www.unicode.org/Public/18.0.0/ucd/Scripts.txt",
          "captured_at": "2026-11-02T17:16:09.380017Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "additional",
          "previous_response_sha256": [],
          "http_status": 200,
          "final_url": "https://www.unicode.org/Public/18.0.0/ucd/Scripts.txt",
          "content_type": "text/plain; charset=utf-8",
          "response_bytes": 196089,
          "response_sha256": "0071fd81b6aeae25f6e8bce8efec3066a6476a91b49bdb2f52dc76e817862a6a",
          "response_headers": {
            "Date": "Mon, 02 Nov 2026 17:16:09 GMT",
            "Content-Type": "text/plain; charset=utf-8",
            "Last-Modified": "Tue, 01 Sep 2026 20:29:02 GMT",
            "ETag": "W/\"2fdf9-65a71c4edff80-gzip\""
          },
          "local_capture": "raw/unicode-18-data-f886cf2693.txt",
          "text_capture": "text/unicode-18-data-f886cf2693.txt",
          "text_sha256": "0071fd81b6aeae25f6e8bce8efec3066a6476a91b49bdb2f52dc76e817862a6a",
          "text_bytes": 196089,
          "byte_comparison": "no_previous_capture",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:16:10.097869Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        },
        {
          "source_id": "unicode-18-data",
          "requested_url": "https://www.unicode.org/Public/security/18.0.0/confusables.txt",
          "captured_at": "2026-11-02T17:16:09.380147Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "additional",
          "previous_response_sha256": [],
          "http_status": 404,
          "final_url": "https://www.unicode.org/Public/security/18.0.0/confusables.txt",
          "content_type": "text/html; charset=iso-8859-1",
          "response_bytes": 196,
          "response_sha256": "80c3fe2ae1062abf56456f52518bd670f9ec3917b7f85e152b347ac6b6faf880",
          "response_headers": {
            "Date": "Mon, 02 Nov 2026 17:16:09 GMT",
            "Content-Type": "text/html; charset=iso-8859-1"
          },
          "local_capture": "raw/unicode-18-data-a870a1752b.html",
          "text_capture": "text/unicode-18-data-a870a1752b.txt",
          "text_sha256": "be53248eec91a0043dedebd22312244affb58144dfdf27744229c18869d3a277",
          "text_bytes": 71,
          "byte_comparison": "no_previous_capture",
          "retrieval_outcome": "unreadable",
          "completed_at": "2026-11-02T17:16:09.875559Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": [
            "Resource not found. No technical conclusion follows from the missing guessed URL."
          ]
        },
        {
          "source_id": "unicode-18-data",
          "requested_url": "https://www.unicode.org/Public/security/latest/confusables.txt",
          "captured_at": "2026-11-02T17:17:06.725254Z",
          "access_method": "python urllib.request HTTPS GET",
          "scope": "additional",
          "previous_response_sha256": [],
          "http_status": 200,
          "final_url": "https://www.unicode.org/Public/security/latest/confusables.txt",
          "content_type": "text/plain; charset=utf-8",
          "response_bytes": 763128,
          "response_sha256": "6ed3ee967c9dfdf6677d563c9985182fbc50a2efb7d6059cd57b2e2ce18f5b92",
          "response_headers": {
            "Date": "Mon, 02 Nov 2026 17:17:07 GMT",
            "Content-Type": "text/plain; charset=utf-8",
            "Last-Modified": "Tue, 01 Sep 2026 20:29:03 GMT",
            "ETag": "W/\"ba4f8-65a71c4fd41c0-gzip\""
          },
          "local_capture": "raw/unicode-18-data-8d7bb9a70b.txt",
          "text_capture": "text/unicode-18-data-8d7bb9a70b.txt",
          "text_sha256": "6ed3ee967c9dfdf6677d563c9985182fbc50a2efb7d6059cd57b2e2ce18f5b92",
          "text_bytes": 763128,
          "byte_comparison": "no_previous_capture",
          "retrieval_outcome": "fetched_readable",
          "completed_at": "2026-11-02T17:17:07.571941Z",
          "comparison_scope": "Captured response bytes only. A byte difference can reflect page chrome, compression or dynamic data and does not by itself establish a claim change.",
          "evidence_limits": []
        }
      ],
      "findings": [
        "Scripts.txt for 18.0 was captured. The guessed /Public/security/18.0.0/confusables.txt path returns 404, while the official latest security file is readable and labels version 18.0. A current annotations migration should pin this file by content hash and retain the old generation inputs for reproducibility."
      ],
      "byte_comparison": {
        "compared_with": "declawd/reports/source-review-2026-10-29.json",
        "response_outcomes": {
          "no_previous_capture": 3
        }
      }
    },
    {
      "source_id": "openai-eu-announcement",
      "reviewed_at": "2026-11-02T17:19:15.371369Z",
      "review_method": "Fresh HTTP capture and relevant-section review against the 29 October source-review findings. Rendered web extraction is used only where separately recorded. No production detector, upload or third-party executable was run.",
      "captures": [
        {
          "source_id": "openai-eu-announcement",
          "requested_url": "https://openai.com/index/eu-text-provenance/",
          "captured_at": "2026-11-02T17:19:15.371369Z",
          "capture_time_scope": "Time this saved extraction was indexed. The tool retrieval preceded indexing during this same 2 November session.",
          "http_status": null,
          "http_status_limitation": "Web reader does not expose an origin HTTP status. Direct HTTP challenge is recorded separately.",
          "access_method": "web.run open, rendered page extraction",
          "capture_kind": "rendered_page_review",
          "response_bytes": 8002,
          "response_sha256": "132da1b2e553b20c81616134cb7b81546c4b900d61620a20d486d8c905b07fdc",
          "local_capture": "text/openai-eu-announcement-132da1b2e5-web-reader.txt",
          "retrieval_outcome": "fetched_readable",
          "byte_comparison": "not_comparable",
          "evidence_limits": [
            "Reader text is not origin response bytes. It is not byte-comparable with prior HTML or prior reader formats."
          ]
        },
        {
          "source_id": "openai-eu-announcement",
          "requested_url": "https://openai.com/index/eu-text-provenance/",
          "captured_at": "2026-11-02T17:19:15.371369Z",
          "capture_time_scope": "Time this saved extraction was indexed. The tool retrieval preceded indexing during this same 2 November session.",
          "http_status": null,
          "http_status_limitation": "Web reader does not expose an origin HTTP status. Direct HTTP challenge is recorded separately.",
          "access_method": "web.run open, rendered page extraction",
          "capture_kind": "rendered_page_review",
          "response_bytes": 11783,
          "response_sha256": "27aac5786a58bf456d34ab23f31ff9a5ba29282ace8188096ad5a8b40a8b0543",
          "local_capture": "text/openai-eu-announcement-27aac5786a-web-reader.txt",
          "retrieval_outcome": "fetched_readable",
          "byte_comparison": "not_comparable",
          "evidence_limits": [
            "Reader text is not origin response bytes. It is not byte-comparable with prior HTML or prior reader formats."
          ]
        }
      ],
      "findings": [
        "The 5 October official post still states that API text marking is opt-in and off by default, and describes an EU rollout for eligible ChatGPT/Codex output. It promises open source in future and restricts initial text detection to approved organisations. The announcement alone does not confirm that rollout has finished."
      ],
      "byte_comparison": {
        "compared_with": "declawd/reports/source-review-2026-10-29.json",
        "response_outcomes": {
          "not_comparable": 2
        }
      }
    }
  ],
  "excluded_sources": [
    {
      "source_id": "public-cleaner-review",
      "reason": "Owned by the separate GitHub repository sweep and review."
    },
    {
      "source_id": "demark-documentation",
      "reason": "Owned by the separate GitHub repository sweep and review."
    },
    {
      "source_id": "watermarks-remover-documentation",
      "reason": "Owned by the separate GitHub repository sweep and review."
    },
    {
      "source_id": "claude-awm-variation-selector-study",
      "reason": "Owned by the separate GitHub repository sweep and review."
    },
    {
      "source_id": "unsynth-id-reference-attacks",
      "reason": "Owned by the separate GitHub repository sweep and review."
    },
    {
      "source_id": "trellismark-many-user-attribution",
      "reason": "Owned by the separate GitHub repository sweep and review."
    },
    {
      "source_id": "declawd-issue-seventeen",
      "reason": "Owned by the separate GitHub repository sweep and review."
    },
    {
      "source_id": "synthid-score-family-amendment",
      "reason": "Owned by the separate GitHub repository sweep and review."
    },
    {
      "source_id": "synthid-attack-reproduction",
      "reason": "Owned by the separate GitHub repository sweep and review."
    },
    {
      "source_id": "black-box-watermark-presence-study",
      "reason": "Owned by the separate GitHub repository sweep and review."
    }
  ],
  "publication_scope": "Response metadata, hashes, review findings and access limits only. HTTP headers are restricted to date, content type, ETag and last-modified. Raw third-party response bodies remain outside the published site.",
  "repository_scope_reviews": {
    "reviewed_at": "2026-11-02T17:24:08.012764+00:00",
    "source_mapping": "claims-ledger-source-mapping-2026-11-02.json",
    "sources": [
      {
        "source_id": "demark-documentation",
        "repository": "jcsuen/demark",
        "ledger_url": "https://github.com/jcsuen/demark/tree/d5bd2f6a1d85097d79f5d24442c984db38965775",
        "ledger_revision": "d5bd2f6a1d85097d79f5d24442c984db38965775",
        "current_revision": "d5bd2f6a1d85097d79f5d24442c984db38965775",
        "current_url": "https://github.com/jcsuen/demark/blob/d5bd2f6a1d85097d79f5d24442c984db38965775/README.md",
        "readme_sha256": "e58ccfde1f90b0b5c75490d2f9037356b6312c96d622c850b75823b19ecb95f1",
        "capture_record": "known-repository-capture-2026-11-02.json",
        "pinned_historical_url_refetched": true,
        "review_method": "current_head_metadata_and_targeted_current_readme_reading",
        "current_code_reviewed": false,
        "finding": "Current README limits the tool to carrier/metadata hygiene. No runtime or source-code review was renewed.",
        "site_drift_decision": "No new numerical result adopted. Preserve historical measurements and their stated limits."
      },
      {
        "source_id": "watermarks-remover-documentation",
        "repository": "guillaumemeyer/watermarks-remover",
        "ledger_url": "https://github.com/guillaumemeyer/watermarks-remover/tree/5c180932a00c793261177f79aee21db8929f3fe2",
        "ledger_revision": "c5297e9e69fec0779c29127c7892427e673fafd9",
        "current_revision": "5a62be6338d2812372b1da440e55c82922f97d53",
        "current_url": "https://github.com/guillaumemeyer/watermarks-remover/blob/5a62be6338d2812372b1da440e55c82922f97d53/README.md",
        "readme_sha256": "629fd73ddf4243a13f7a21c687982617b08ac588a7a13fa14780873bfe17a992",
        "capture_record": "known-repository-capture-2026-11-02.json",
        "pinned_historical_url_refetched": false,
        "review_method": "current_head_metadata_and_targeted_current_readme_reading",
        "current_code_reviewed": true,
        "finding": "Current README and service/scripts/text_detectors.py were read. The current source file matches the 29 October hash exactly and ClaudeTextDetector remains a placeholder.",
        "site_drift_decision": "No new numerical result adopted. Preserve historical measurements and their stated limits."
      },
      {
        "source_id": "claude-awm-variation-selector-study",
        "repository": "aloshdenny/claude-awm",
        "ledger_url": "https://github.com/aloshdenny/claude-awm/tree/90f39752ff06c16460cfb58f8e37827dc397c419",
        "ledger_revision": "90f39752ff06c16460cfb58f8e37827dc397c419",
        "current_revision": "9476e1a966c85ad82147f7f5c6ffead018ffae06",
        "current_url": "https://github.com/aloshdenny/claude-awm/blob/9476e1a966c85ad82147f7f5c6ffead018ffae06/README.md",
        "readme_sha256": "85127b40114557ba8284173d1b8bb22cf521cf9af7f997a7dafe5427af10f068",
        "capture_record": "known-repository-capture-2026-11-02.json",
        "pinned_historical_url_refetched": false,
        "review_method": "current_head_metadata_and_targeted_current_readme_reading",
        "current_code_reviewed": false,
        "finding": "Current README method and scope sections were read. These are author own-key results with normalisation and roundtrip controls. No production compatibility or numerical reproduction. The ledger historical 90f397 link differs from the current 9476e1a head and should retain its historical identity unless a separate current citation is added.",
        "site_drift_decision": "No new numerical result adopted. Preserve historical measurements and their stated limits."
      },
      {
        "source_id": "unsynth-id-reference-attacks",
        "repository": "martinobettucci/unsynth-id",
        "ledger_url": "https://github.com/martinobettucci/unsynth-id/tree/9cfef6efc006a90b4635c4d8c4e1ace20830e64a",
        "ledger_revision": "9cfef6efc006a90b4635c4d8c4e1ace20830e64a",
        "current_revision": "9cfef6efc006a90b4635c4d8c4e1ace20830e64a",
        "current_url": "https://github.com/martinobettucci/unsynth-id/blob/9cfef6efc006a90b4635c4d8c4e1ace20830e64a/README.md",
        "readme_sha256": "f03390a79fcd43b81636c24c6341ac50333617ea52c338796d677a9dac3b285d",
        "capture_record": "known-repository-capture-2026-11-02.json",
        "pinned_historical_url_refetched": true,
        "review_method": "current_head_metadata_and_targeted_current_readme_reading",
        "current_code_reviewed": false,
        "finding": "Current README method and result sections were read. Quality costs and own-reference-detector measurements remain author reports. No numerical reproduction.",
        "site_drift_decision": "No new numerical result adopted. Preserve historical measurements and their stated limits.",
        "result_sections_reread_at": "2026-11-02T17:35:40.969716+00:00",
        "reported_results_reread": true,
        "numerical_results_reproduced": false,
        "reading_confirmation": "The pinned README result sections retain nine reference layers recovered in 1.8 seconds and the 8-document 3-seed rewrite result z 16.38 to 1.99 with 87.5% numeral/entity preservation. The same section says mean-g near 2 remains detectable in a long document."
      },
      {
        "source_id": "trellismark-many-user-attribution",
        "repository": "xlr8harder/trellismark",
        "ledger_url": "https://github.com/xlr8harder/trellismark/tree/3f0157de07112f4bb92546bd15d8face8116479b",
        "ledger_revision": "3f0157de07112f4bb92546bd15d8face8116479b",
        "current_revision": "3f0157de07112f4bb92546bd15d8face8116479b",
        "current_url": "https://github.com/xlr8harder/trellismark/blob/3f0157de07112f4bb92546bd15d8face8116479b/README.md",
        "readme_sha256": "ef84e8f2d8cab6787471977f7360d60861f15b3ed43266b5fa235a163f9cee94",
        "capture_record": "known-repository-capture-2026-11-02.json",
        "pinned_historical_url_refetched": true,
        "review_method": "current_head_metadata_and_targeted_current_readme_reading",
        "current_code_reviewed": false,
        "finding": "Current README method, CLI and reproduction sections were read. Many-user message decoding under supplied keys remains distinct from arbitrary production attribution.",
        "site_drift_decision": "No new numerical result adopted. Preserve historical measurements and their stated limits.",
        "result_sections_reread_at": "2026-11-02T17:35:40.969716+00:00",
        "reported_results_reread": true,
        "numerical_results_reproduced": false,
        "reading_confirmation": "The pinned README method and scope sections retain a 30-bit address, exact full-space Viterbi and an independent Qwen research experiment. The ledger claim is structural, with no adopted numerical detection benchmark."
      },
      {
        "source_id": "synthid-score-family-amendment",
        "repository": "xlr8harder/synthid",
        "ledger_url": "https://github.com/xlr8harder/synthid/blob/b3adb0f13301506e6ee0f49be26e99f6abde5829/docs/DETECTOR_SCORE_FAMILY_AMENDMENT.md",
        "ledger_revision": "b3adb0f13301506e6ee0f49be26e99f6abde5829",
        "current_revision": "b3adb0f13301506e6ee0f49be26e99f6abde5829",
        "current_url": "https://github.com/xlr8harder/synthid/blob/b3adb0f13301506e6ee0f49be26e99f6abde5829/README.md",
        "readme_sha256": "53645fb23f01a5b533d8620573cded91be67730cac5f5c7c677f4fabf23666d3",
        "capture_record": "known-repository-capture-2026-11-02.json",
        "pinned_historical_url_refetched": true,
        "review_method": "current_head_metadata_and_targeted_current_readme_reading",
        "current_code_reviewed": false,
        "finding": "The exact pinned amendment was re-fetched at the current unchanged head, SHA256 1f25395bc1f8f386f9d8af26b25837ce4912f849848a566f13950d7d185c51a2. Relevant metrics and 200-token eligibility were re-read.",
        "site_drift_decision": "No new numerical result adopted. Preserve historical measurements and their stated limits."
      },
      {
        "source_id": "synthid-attack-reproduction",
        "repository": "natzir/synthid-text-watermark-attacks",
        "ledger_url": "https://github.com/natzir/synthid-text-watermark-attacks/tree/57ae0159c23b14ea12abfefc3ba69cf2a172d815",
        "ledger_revision": "57ae0159c23b14ea12abfefc3ba69cf2a172d815",
        "current_revision": "57ae0159c23b14ea12abfefc3ba69cf2a172d815",
        "current_url": "https://github.com/natzir/synthid-text-watermark-attacks/blob/57ae0159c23b14ea12abfefc3ba69cf2a172d815/README.md",
        "readme_sha256": "c9193a50ce20b749b3237d628a862b47fde69811d01eccba334141971407a874",
        "capture_record": "known-repository-capture-2026-11-02.json",
        "pinned_historical_url_refetched": true,
        "review_method": "current_head_metadata_and_targeted_current_readme_reading",
        "current_code_reviewed": false,
        "finding": "Current pinned README configuration and limitation sections were re-read. The historical claim that no Anthropic detector API exists is superseded by private preview, which the site already distinguishes. Own-key results were not rerun.",
        "site_drift_decision": "No new numerical result adopted. Preserve historical measurements and their stated limits.",
        "result_sections_reread_at": "2026-11-02T17:35:40.969716+00:00",
        "reported_results_reread": true,
        "numerical_results_reproduced": false,
        "reading_confirmation": "The pinned README run 3 table retains 100% unedited, 5% paraphrase, 16% Chinese round-trip and 4% SIRA detection on the author own-key open-model study, plus the production-Claude exclusion."
      },
      {
        "source_id": "black-box-watermark-presence-study",
        "repository": "KarenSpinner/watermark-detection-study",
        "ledger_url": "https://github.com/KarenSpinner/watermark-detection-study/tree/8838e0db8e99ee99d0832601f7abeabaf0a660fd",
        "ledger_revision": "8838e0db8e99ee99d0832601f7abeabaf0a660fd",
        "current_revision": "8838e0db8e99ee99d0832601f7abeabaf0a660fd",
        "current_url": "https://github.com/KarenSpinner/watermark-detection-study/blob/8838e0db8e99ee99d0832601f7abeabaf0a660fd/README.md",
        "readme_sha256": "4f9abb4b9cbb7f75d973406864aa6ffd173f8610982bef4022564f294d826d79",
        "capture_record": "known-repository-capture-2026-11-02.json",
        "pinned_historical_url_refetched": true,
        "review_method": "current_head_metadata_and_targeted_current_readme_reading",
        "current_code_reviewed": false,
        "finding": "Current pinned README method and dated result sections were re-read. It still reports historical Fable 5.1 evidence, Sonnet 5 null and an Opus 4.8 trace. These historical support statements do not establish current model marking, and the site already records the newer official table.",
        "site_drift_decision": "No new numerical result adopted. Preserve historical measurements and their stated limits."
      },
      {
        "source_id": "declawd-issue-seventeen",
        "current_url": "https://github.com/san-digital/declawd/issues/17",
        "capture_record": "ledger-repository-captures-2026-11-02.json",
        "review_method": "current_public_issue_body_read",
        "state": "closed",
        "updated_at": "2026-09-25T20:14:36Z",
        "finding": "Issue body retains the two frozen v1 defects and the need for a separate registration. Current site already explains the completed r2 correction. The earlier 2026-09-24 scope sentence is historical and is stale if presented as current status. No fresh numerical reproduction was run."
      },
      {
        "source_id": "public-cleaner-review",
        "capture_record": "github-repository-scan-2026-11-02.json",
        "review_record": "github-repository-review-2026-11-02.json",
        "retry_record": "repository-gap-retries-2026-11-02.json",
        "review_method": "fixed_floor_capture_hash_verification_automated_screening_and_selected_reading",
        "finding": "2556 repositories, 2523 initial READMEs, 11 full raw-URL recoveries and 22 remaining README gaps. Three complete README readings and six targeted readings among 77 fresh candidates. The search remains incomplete because one 17 October match is unidentified.",
        "site_drift_decision": "A current-sweep paragraph should use 2 November counts and retain search/README gaps. Earlier dated counts remain historical evidence."
      }
    ],
    "limitations": "Current README or selected source reading is recorded separately from historical-pin retrieval and numerical reproduction. The AWM numerical row retains its earlier review date."
  }
}
