Opens in a new tabSkip to content
Agent LighthouseAgent Lighthouse

    Searches the text of every published page. The evidence sources themselves are not in this index — search all of them on the trusted sources page.

    GitHub ↗
    Browse checks and page contents
    operability-safety/synthetic-media-disclosure-validity

    AI-generated-image disclosure is machine-readable and self-consistent

    What it checks

    Audits AI-generated-content disclosure at the only layer that is machine-readable and interoperable: the IPTC Iptc4xmpExt:DigitalSourceType XMP property. Catches the two failure modes that make disclosure worthless — malformed values outside the controlled vocabulary, and XMP that contradicts the C2PA manifest on the same asset.

    Why it matters

    IPTC types DigitalSourceType as [URI <External>], meaning the value must be a full NewsCodes URI from the ratified controlled vocabulary (base cv.iptc.org/…/digitalsourcetype, note the http scheme), not a bare token. A consumer matching against the vocabulary therefore silently ignores ‘AI-generated’, ‘trainedAlgorithmicMedia’ (bare), or an https-scheme variant — the publisher believes it disclosed and every machine reader sees nothing. FALSIFIABLE: parse the XMP packet and test membership in the fetched vocabulary; separately, compare against the digital source type asserted in the asset’s C2PA manifest, where a disagreement is a hard contradiction one of the two pipelines produced.

    Evidence

    • Lighthouse audit source: agent-accessibility-tree.js — Google Chrome / Lighthouse (repo, URL verified 2026-08-20)
    • It filters the accessibility violations Lighthouse already collects down to about 37 axe rules: button-name, link-name, input-button-name, label, autocomplete-valid, aria-allowed-attr, aria-required-attr, aria-valid-attr-value, tabindex, and the table and definition-list rules. Binary score: any violation scores 0. Crucially it inherits axe’s blind spots — axe cannot fail an element that has no interactive semantics at all, and autocomplete-valid only validates tokens that are already present, never their absence.
    • WebSuite: Systematically Evaluating Why Web Agents Fail — arXiv (study, URL verified 2026-08-20)
    • Per-UI-primitive success rates for natbot and SeeAct. Worst patterns: slider interaction 0% for both agents; tooltip-based information retrieval 0% for both; complex form filling 12.5% (natbot) / 0% (SeeAct). Aggregate: operational actions 85.2%/76.2%, menu navigation 93.8%/81.3%, informational actions 43.8%/40.6%. Taxonomy covers click (button, link, icon button, slider, switch, accordion, dropdown menu, dialog button, snackbar), type (text/date/phone), select (checkbox, multicheck, select, datagrid row).
    • Playwright: Auto-waiting / Actionability checks — Microsoft (vendor-doc, URL verified 2026-08-20)
    • Before click/check/fill/selectOption, Playwright enforces five checks: Visible (non-empty bounding box, not visibility:hidden), Stable (same bounding box over 2 animation frames), Receives Events (element is the hit target at the action point — overlays cause failure), Enabled (not [disabled]/aria-disabled), Editable (not readonly/aria-readonly). Fill requires visible+enabled+editable. This is the exact gate every Playwright-based agent (Playwright-MCP, browser-use, most CUA harnesses) passes through, so each check is a directly testable site-side failure cause.
    • Text fragments — Google / web.dev (vendor-doc, URL verified 2026-08-20)
    • Confirms a shipped answer-surface consumer: “Clicking a featured snippet takes the user directly to the featured snippet text on the source web page. This works thanks to automatically created Text Fragments URLs.” Support: Chrome 89+, Edge 89+, Firefox 131+, Safari 18.2+. Restates the boundary rule: “Each of prefix-, start, end, and -suffix can only match text within a single block-level element, but full start,end ranges can span multiple blocks.” Opt-out header: Document-Policy: force-load-at-top.

    How it scores

    Tier per evidence policy: scored — grade B meets the A/B bar required for scored audits.

    Example failure

    A publisher configures its CMS to stamp every AI-illustrated article header with DigitalSourceType = ‘trainedAlgorithmicMedia’. Because the value is a bare token rather than the cv.iptc.org/…/trainedAlgorithmicMedia URI, every conforming reader treats the field as unrecognized. The organization reports full AI-disclosure compliance internally while shipping zero machine-readable disclosure.

    Sources