{
  "note": "GENERATED by tools/gen-home-fixture.mjs from tools/demo-fixture-bundles.mjs through the production detectors and grader. Synthetic inputs illustrate the product; they are not a live scan or signed evidence. Media fetch-host IPs are intentionally omitted from the public specimen projection.",
  "target": "https://fixture.disclosureproof.com",
  "pack_versions": {
    "eu-ai-act-art50": "2026.12"
  },
  "current_message": "Hi there! How can we help you today?",
  "previous_message": "Hi! I'm your AI assistant. How can I help?",
  "current": [
    {
      "rule_id": "eu50.1.chat-disclosure",
      "ref": "Art. 50(1)",
      "state": "WARN",
      "title": "Chatbot AI disclosure at first interaction",
      "message": "No AI/automation disclosure was detected in the chat widget's first interaction (vendor: intercom). If this assistant is AI-driven, Article 50(1) requires disclosing that to users."
    },
    {
      "rule_id": "eu50.1b.mobile-disclosure",
      "ref": "Art. 50(1)",
      "state": "NA",
      "title": "Chatbot disclosure persists on mobile",
      "message": "Mobile disclosure was not separately assessed (no desktop disclosure to compare, or the mobile panel could not be read)."
    },
    {
      "rule_id": "eu50.1c.language-coverage",
      "ref": "Art. 50(1)",
      "state": "NA",
      "title": "Chatbot disclosure covers the site's languages",
      "message": "Language coverage was not assessed for this scan — it requires a detected chat widget, a detected disclosure, and readable site-language markup (html lang / same-host hreflang)."
    },
    {
      "rule_id": "eu50.2.media-provenance",
      "ref": "Art. 50(2)",
      "state": "WARN",
      "title": "Machine-readable provenance marking on media",
      "message": "AI-generation indicators were found on 1 of 2 sampled assets, and 1 sampled asset(s) carry no machine-readable provenance marking (C2PA/IPTC). Under Article 50(2), AI-generated content must carry such marking where technically feasible."
    },
    {
      "rule_id": "eu50.2b.c2pa-structure",
      "ref": "Art. 50(2) (supporting)",
      "state": "WARN",
      "title": "Provenance marking is structural, not textual-only",
      "message": "Provenance markers on the sampled assets are textual mentions only; no structural C2PA manifest was detected on any of 1 marked asset(s)."
    },
    {
      "rule_id": "eu50.4.text-label",
      "ref": "Art. 50(4)",
      "state": "WARN",
      "title": "AI-content label on article-like pages",
      "message": "One signal, uncorroborated: 1 independent kind(s) of publisher-emitted signal point to AI use in content production, and no AI-content label was detected on 3 of 4 article-like page(s) (6 page(s) scanned). This is evidence about the site, not a determination about any page's text. Manual verification recommended."
    },
    {
      "rule_id": "eu50.4b.eu-icon",
      "ref": "Art. 50(4) (supporting)",
      "state": "NA",
      "title": "Official EU labelling icons in use",
      "message": "Not assessed: applies only when article-like pages already carry an AI-content label (4 article-like page(s) found)."
    },
    {
      "rule_id": "eu50.policy-page",
      "ref": "Art. 50 (supporting)",
      "state": "PASS",
      "title": "AI policy / disclosure page",
      "message": "A dedicated AI policy/disclosure page was found (https://fixture.disclosureproof.com/ai-policy). This is supporting context that helps demonstrate transparency."
    },
    {
      "rule_id": "eu50.3.attestation",
      "ref": "Art. 50(3)",
      "state": "NA",
      "title": "Emotion recognition / biometric categorisation disclosure",
      "message": "Article 50(3) (emotion recognition and biometric categorisation systems) cannot be verified by an external crawler. Complete the in-product attestation module to cover this duty; attested answers are sealed as evidence like any other artifact."
    }
  ],
  "previous": [
    {
      "rule_id": "eu50.1.chat-disclosure",
      "ref": "Art. 50(1)",
      "state": "PASS",
      "title": "Chatbot AI disclosure at first interaction",
      "message": "AI/automation disclosure detected in the chat widget's first interaction (terms: ai assistant). Article 50(1) requires users be informed when they interact with an AI system; such a disclosure was detected here."
    },
    {
      "rule_id": "eu50.1b.mobile-disclosure",
      "ref": "Art. 50(1)",
      "state": "PASS",
      "title": "Chatbot disclosure persists on mobile",
      "message": "The chat widget's AI disclosure was present on both desktop and mobile."
    },
    {
      "rule_id": "eu50.1c.language-coverage",
      "ref": "Art. 50(1)",
      "state": "WARN",
      "title": "Chatbot disclosure covers the site's languages",
      "message": "The site serves language(s) the chat disclosure's wording does not cover (de). A disclosure a visitor cannot read does not reliably inform them (Art. 50(1))."
    },
    {
      "rule_id": "eu50.2.media-provenance",
      "ref": "Art. 50(2)",
      "state": "PASS",
      "title": "Machine-readable provenance marking on media",
      "message": "All 2 sampled media assets carried machine-readable provenance marking (C2PA/IPTC/XMP)."
    },
    {
      "rule_id": "eu50.2b.c2pa-structure",
      "ref": "Art. 50(2) (supporting)",
      "state": "WARN",
      "title": "Provenance marking is structural, not textual-only",
      "message": "Provenance markers on the sampled assets are textual mentions only; no structural C2PA manifest was detected on any of 2 marked asset(s)."
    },
    {
      "rule_id": "eu50.4.text-label",
      "ref": "Art. 50(4)",
      "state": "PASS",
      "title": "AI-content label on article-like pages",
      "message": "An AI-content label was detected on every article-like page checked (4 of 6 pages scanned; phrases: ai-generated; official EU icon detected: false)."
    },
    {
      "rule_id": "eu50.4b.eu-icon",
      "ref": "Art. 50(4) (supporting)",
      "state": "WARN",
      "title": "Official EU labelling icons in use",
      "message": "AI-content labels are present as text only; the official EU Code-of-Practice icon set was not detected on any checked page."
    },
    {
      "rule_id": "eu50.policy-page",
      "ref": "Art. 50 (supporting)",
      "state": "PASS",
      "title": "AI policy / disclosure page",
      "message": "A dedicated AI policy/disclosure page was found (https://fixture.disclosureproof.com/ai-policy). This is supporting context that helps demonstrate transparency."
    },
    {
      "rule_id": "eu50.3.attestation",
      "ref": "Art. 50(3)",
      "state": "NA",
      "title": "Emotion recognition / biometric categorisation disclosure",
      "message": "Article 50(3) (emotion recognition and biometric categorisation systems) cannot be verified by an external crawler. Complete the in-product attestation module to cover this duty; attested answers are sealed as evidence like any other artifact."
    }
  ],
  "finding_detail": {
    "rule_id": "eu50.4.text-label",
    "ref": "Art. 50(4)",
    "state": "WARN",
    "title": "AI-content label on article-like pages",
    "message": "One signal, uncorroborated: 1 independent kind(s) of publisher-emitted signal point to AI use in content production, and no AI-content label was detected on 3 of 4 article-like page(s) (6 page(s) scanned). This is evidence about the site, not a determination about any page's text. Manual verification recommended.",
    "detail": "Root cause: one publisher-emitted signal indicates AI tooling is in use here, uncorroborated by any other kind of evidence, and 3 of 4 article-like page(s) carry no AI disclosure. A single signal does not establish which pages a tool produced. Confirm which content the tool was used for.",
    "affected_paths": [
      "/blog/ai-in-logistics",
      "/blog/q3-market-outlook",
      "/news/expansion-2026"
    ],
    "fix_steps": [
      "If any published text is AI-generated on a matter of public interest, add a visible label (the Code of Practice's uniform wording/icons are the safe default)",
      "Human-reviewed content with editorial responsibility can rely on the Art. 50(4) carve-out — document the review process",
      "Add the label near the byline or article footer where a reader actually sees it, not only in metadata",
      "State your AI-use policy on a dedicated page and link it site-wide"
    ]
  },
  "observations": {
    "capture": {
      "note": "Viewport dimensions are the production capture settings. These synthetic inputs contain panel text and markup, not captured screenshot files.",
      "desktop": {
        "viewport": {
          "width": 1366,
          "height": 768
        },
        "panel_message": "Hi there! How can we help you today?",
        "panel_read": true
      },
      "mobile": {
        "viewport": {
          "width": 390,
          "height": 844
        },
        "panel_message": "Hi there!",
        "panel_read": true
      },
      "widget_vendor": "intercom",
      "declared_languages": [
        "en",
        "de"
      ]
    },
    "media": {
      "sampled": 2,
      "with_marking": 1,
      "without_marking": 1,
      "ai_marked": 1,
      "c2pa_structures": 0,
      "fetch_errors": 0,
      "ratio_marked": 0.5,
      "previous_sampled": 2,
      "previous_with_marking": 2,
      "previous_ratio_marked": 1,
      "assets": [
        {
          "file": "hero-illustration.png",
          "provenance": "xmp",
          "fetch_error": false,
          "has_marking": true,
          "ai_indicated": true,
          "generator": "adobe firefly",
          "c2pa_structure": false,
          "claim_generator": null,
          "signer_hint": null
        },
        {
          "file": "blog-cover.jpg",
          "provenance": "none",
          "fetch_error": false,
          "has_marking": false,
          "ai_indicated": false,
          "generator": null,
          "c2pa_structure": false,
          "claim_generator": null,
          "signer_hint": null
        }
      ],
      "note": "presence of machine-readable provenance marking; C2PA manifest STRUCTURE is parsed where present (claim generator + signer hint extracted) but signatures are NOT cryptographically verified, and this is not AI-detection"
    },
    "pages": {
      "checked": 6,
      "article_pages": 4,
      "labeled_pages": 1,
      "unlabeled_count": 3,
      "previous_labeled_pages": 4,
      "label_phrases": [
        "ai-assisted"
      ],
      "unlabeled_paths": [
        "/blog/ai-in-logistics",
        "/blog/q3-market-outlook",
        "/news/expansion-2026"
      ],
      "entries": [
        {
          "path": "/",
          "method": "rendered",
          "article_like": false,
          "label_found": false,
          "label_phrases": []
        },
        {
          "path": "/blog/ai-in-logistics",
          "method": "static",
          "article_like": true,
          "label_found": false,
          "label_phrases": []
        },
        {
          "path": "/blog/q3-market-outlook",
          "method": "static",
          "article_like": true,
          "label_found": false,
          "label_phrases": []
        },
        {
          "path": "/news/expansion-2026",
          "method": "static",
          "article_like": true,
          "label_found": false,
          "label_phrases": []
        },
        {
          "path": "/blog/how-we-write",
          "method": "static",
          "article_like": true,
          "label_found": true,
          "label_phrases": [
            "ai-assisted"
          ]
        },
        {
          "path": "/about",
          "method": "static",
          "article_like": false,
          "label_found": false,
          "label_phrases": []
        }
      ],
      "ai_evidence": {
        "strength": "single",
        "label": "One signal, uncorroborated",
        "families": [
          "media_provenance"
        ],
        "family_count": 1,
        "signal_count": 1,
        "signals": [
          {
            "id": "ai_marked_media",
            "family": "media_provenance",
            "scope": "site",
            "where": null,
            "detail": "1 of 2 sampled asset(s) carry AI-generation provenance"
          }
        ],
        "contradictions": [],
        "human_authorship_declared": false,
        "policy_denies_ai_authorship": false
      }
    },
    "policy": {
      "found": true,
      "path": "/ai-policy",
      "surface": "link"
    }
  }
}
