{
  "audit_label": "September 2026 field audit III",
  "ran_from": "2026-09-15",
  "ran_to": "2026-09-16",
  "build_before": "ee7f57b",
  "build_after": "115e5b2",
  "sites_total": 56,
  "sites_compared": 50,
  "sites_blocked_both_runs": 2,
  "sites_changed_reachability": 4,
  "pages_per_site": 5,
  "findings_before": 926,
  "findings_after": 928,
  "duplicate_rows_before": 0,
  "duplicate_rows_after": 0,
  "null_rule_id_before": 0,
  "null_rule_id_after": 0,
  "by_engine": [
    {
      "engine": "arc-style",
      "kind": "engine",
      "before": 114,
      "after": 119
    },
    {
      "engine": "axe-core",
      "kind": "engine",
      "before": 225,
      "after": 237
    },
    {
      "engine": "ibm-equal-access",
      "kind": "engine",
      "before": 219,
      "after": 198
    },
    {
      "engine": "lighthouse",
      "kind": "engine",
      "before": 22,
      "after": 22
    },
    {
      "engine": "pa11y",
      "kind": "engine",
      "before": 113,
      "after": 121
    },
    {
      "engine": "focus-graph",
      "kind": "analyzer",
      "before": 2,
      "after": 1
    },
    {
      "engine": "form-behavior",
      "kind": "analyzer",
      "before": 1,
      "after": 1
    },
    {
      "engine": "keyboard-nav-tester",
      "kind": "analyzer",
      "before": 2,
      "after": 2
    },
    {
      "engine": "mobile-accessibility",
      "kind": "analyzer",
      "before": 228,
      "after": 227
    }
  ],
  "by_class": [
    {
      "rule_id": "ibm-text_contrast_sufficient",
      "before": 28,
      "after": 24,
      "fix": "the same locator for IBM's XPaths"
    },
    {
      "rule_id": "ibm-aria_id_unique",
      "before": 4,
      "after": 1,
      "fix": "locations inside shadow roots resolve; a collapsed trigger's aria-controls is verified, not shipped on the engine's word"
    },
    {
      "rule_id": "ibm-svg_graphics_labelled",
      "before": 15,
      "after": 12,
      "fix": "an svg inside a named control in a shadow root is contradicted"
    },
    {
      "rule_id": "aria-hidden-focus",
      "before": 5,
      "after": 4,
      "fix": "the same overlays and ad frames"
    },
    {
      "rule_id": "ibm-element_tabbable_role_valid",
      "before": 29,
      "after": 28,
      "fix": "tiles an overlay had hidden are reported again"
    },
    {
      "rule_id": "frame-title",
      "before": 3,
      "after": 3,
      "fix": "ad frames that never load carry no untitled iframe"
    },
    {
      "rule_id": "color-contrast",
      "before": 17,
      "after": 19,
      "fix": "a location that matches several elements is measured on the one it names or not at all"
    },
    {
      "rule_id": "ibm-aria_hidden_nontabbable",
      "before": 10,
      "after": 13,
      "fix": "ad players and timed marketing overlays no longer load for the engines; rows inside them are gone, rows the overlay hid are back"
    }
  ],
  "sites": [
    {
      "site": "theverge.com",
      "before": 30,
      "after": 23,
      "score_before": 65,
      "score_after": 58
    },
    {
      "site": "sanook.com",
      "before": 36,
      "after": 31,
      "score_before": 46,
      "score_after": 48
    },
    {
      "site": "usa.gov",
      "before": 8,
      "after": 4,
      "score_before": 89,
      "score_after": 100
    },
    {
      "site": "linear.app",
      "before": 27,
      "after": 24,
      "score_before": 68,
      "score_after": 71
    },
    {
      "site": "hespress.com",
      "before": 22,
      "after": 20,
      "score_before": 65,
      "score_after": 63
    },
    {
      "site": "n26.com",
      "before": 11,
      "after": 9,
      "score_before": 63,
      "score_after": 63
    },
    {
      "site": "u-tokyo.ac.jp",
      "before": 24,
      "after": 22,
      "score_before": 73,
      "score_after": 79
    },
    {
      "site": "bombas.com",
      "before": 24,
      "after": 23,
      "score_before": 49,
      "score_after": 50
    },
    {
      "site": "djangoproject.com",
      "before": 13,
      "after": 12,
      "score_before": 63,
      "score_after": 63
    },
    {
      "site": "about.gitlab.com",
      "before": 28,
      "after": 27,
      "score_before": 64,
      "score_after": 64
    },
    {
      "site": "lit.dev",
      "before": 18,
      "after": 17,
      "score_before": 63,
      "score_after": 63
    },
    {
      "site": "ryanair.com",
      "before": 21,
      "after": 20,
      "score_before": 56,
      "score_after": 56
    },
    {
      "site": "userway.org",
      "before": 11,
      "after": 10,
      "score_before": 83,
      "score_after": 88
    },
    {
      "site": "designsystem.digital.gov",
      "before": 7,
      "after": 6,
      "score_before": 89,
      "score_after": 89
    },
    {
      "site": "australia.gov.au",
      "before": 14,
      "after": 14,
      "score_before": 71,
      "score_after": 71
    },
    {
      "site": "bbc.com",
      "before": 6,
      "after": 6,
      "score_before": 51,
      "score_after": 51
    },
    {
      "site": "getbootstrap.com",
      "before": 29,
      "after": 29,
      "score_before": 54,
      "score_after": 60
    },
    {
      "site": "cam.ac.uk",
      "before": 14,
      "after": 14,
      "score_before": 65,
      "score_after": 62
    },
    {
      "site": "carbondesignsystem.com",
      "before": 18,
      "after": 18,
      "score_before": 79,
      "score_after": 79
    },
    {
      "site": "coolblue.nl",
      "before": 21,
      "after": 21,
      "score_before": 51,
      "score_after": 52
    },
    {
      "site": "framer.com",
      "before": 33,
      "after": 33,
      "score_before": 48,
      "score_after": 49
    },
    {
      "site": "ghost.org",
      "before": 21,
      "after": 21,
      "score_before": 57,
      "score_after": 57
    },
    {
      "site": "github.com",
      "before": 12,
      "after": 12,
      "score_before": 83,
      "score_after": 83
    },
    {
      "site": "gov.pl",
      "before": 13,
      "after": 13,
      "score_before": 70,
      "score_after": 70
    },
    {
      "site": "gov.sg",
      "before": 10,
      "after": 10,
      "score_before": 85,
      "score_after": 85
    },
    {
      "site": "government.nl",
      "before": 3,
      "after": 3,
      "score_before": 89,
      "score_after": 89
    },
    {
      "site": "news.ycombinator.com",
      "before": 15,
      "after": 15,
      "score_before": 51,
      "score_after": 51
    },
    {
      "site": "harvard.edu",
      "before": 7,
      "after": 7,
      "score_before": 79,
      "score_after": 79
    },
    {
      "site": "kubernetes.io",
      "before": 19,
      "after": 19,
      "score_before": 68,
      "score_after": 68
    },
    {
      "site": "service-manual.nhs.uk",
      "before": 4,
      "after": 4,
      "score_before": 100,
      "score_after": 100
    },
    {
      "site": "nhs.uk",
      "before": 3,
      "after": 3,
      "score_before": 100,
      "score_after": 100
    },
    {
      "site": "docs.python.org",
      "before": 21,
      "after": 21,
      "score_before": 70,
      "score_after": 70
    },
    {
      "site": "rakuten.co.jp",
      "before": 35,
      "after": 35,
      "score_before": 48,
      "score_after": 48
    },
    {
      "site": "skynewsarabia.com",
      "before": 12,
      "after": 12,
      "score_before": 73,
      "score_after": 73
    },
    {
      "site": "telekom.de",
      "before": 30,
      "after": 30,
      "score_before": 49,
      "score_after": 50
    },
    {
      "site": "webflow.com",
      "before": 20,
      "after": 20,
      "score_before": 55,
      "score_after": 55
    },
    {
      "site": "who.int",
      "before": 8,
      "after": 8,
      "score_before": 87,
      "score_after": 87
    },
    {
      "site": "wise.com",
      "before": 25,
      "after": 25,
      "score_before": 66,
      "score_after": 66
    },
    {
      "site": "wix.com",
      "before": 21,
      "after": 21,
      "score_before": 63,
      "score_after": 63
    },
    {
      "site": "corriere.it",
      "before": 31,
      "after": 32,
      "score_before": 50,
      "score_after": 46
    },
    {
      "site": "meta.discourse.org",
      "before": 29,
      "after": 30,
      "score_before": 52,
      "score_after": 53
    },
    {
      "site": "ethz.ch",
      "before": 11,
      "after": 12,
      "score_before": 79,
      "score_after": 79
    },
    {
      "site": "hubspot.com",
      "before": 19,
      "after": 20,
      "score_before": 79,
      "score_after": 79
    },
    {
      "site": "stanford.edu",
      "before": 9,
      "after": 10,
      "score_before": 89,
      "score_after": 74
    },
    {
      "site": "en.wikipedia.org",
      "before": 31,
      "after": 32,
      "score_before": 59,
      "score_after": 53
    },
    {
      "site": "stripe.com",
      "before": 24,
      "after": 26,
      "score_before": 63,
      "score_after": 59
    },
    {
      "site": "berkshirehathaway.com",
      "before": 9,
      "after": 12,
      "score_before": 86,
      "score_after": 82
    },
    {
      "site": "daum.net",
      "before": 29,
      "after": 34,
      "score_before": 56,
      "score_after": 63
    },
    {
      "site": "openstreetmap.org",
      "before": 19,
      "after": 24,
      "score_before": 59,
      "score_after": 59
    },
    {
      "site": "brooklinen.com",
      "before": 21,
      "after": 34,
      "score_before": 73,
      "score_after": 61
    }
  ],
  "scores": {
    "up": 12,
    "down": 9,
    "unchanged": 29
  },
  "removed_census": {
    "total": 1176,
    "correctly_removed": 42,
    "counted_but_unlisted": 31,
    "merged_into_canonical_row": 123,
    "rebucketed": 5,
    "lost": 13,
    "unexplained": 19,
    "indeterminate": 931,
    "policy": 12
  },
  "added_census": {
    "total": 861,
    "justified": 232,
    "borderline": 0,
    "manufactured": 42,
    "indeterminate": 587
  },
  "defects_fixed": 6,
  "tests_backend": 4350,
  "notes": {
    "method": "a verifier that shares no code with the scanner. Names, roles and hidden-ness come from Chromium's own accessibility tree over the DevTools protocol; contrast from rendered pixels, the glyphs isolated by screenshotting the text and then the same box with the text made transparent; id references by token lookup in the element's own root; focusability by calling focus() and reading the active element. Each occurrence keeps the scanner's page preparation (1920x1080, light theme, reduced motion, the scroll primer). Every occurrence the comparison counted has a row here: target-size occurrences, which the verifier hands to a separate mobile pass, are counted as indeterminate rather than dropped. rakuten.co.jp and stanford.edu lost three pages each to task timeouts while running side by side and were scanned once more alone; those runs are the ones compared.",
    "justified_label": "Justified - the verifier confirms the failure on the live page",
    "lost": "The 13 genuinely lost occurrences are on six sites: hespress.com's consent widget (four icon-only buttons whose visible Material-icon ligature the verifier reads as a label, and a tabbable span), a skip link on one gitlab.com page, an unnamed svg each on linear.app and lit.dev's playground, a 'Like post' button on framer.com whose visible count is not in its name, and a skipped heading level and a tabbable div on theverge.com. Each is filed as an open defect against the after-build, not fixed before this page was published. The 19 unexplained rows are occurrences the reconciliation could not resolve on the live page hours later (usa.gov, gitlab.com, theverge.com and four others) and are shown inside Indeterminate; they are not evidence either way. The indeterminate rows are pages the other run did not analyse, target-size occurrences (judged by a separate mobile pass this census does not fold in), dynamic content whose selectors no longer resolve, and rows inside consent or ad vendors' frames.",
    "policy": "PR #12's D78: brooklinen.com opens Attentive's SMS signup about twenty seconds after load, moves focus into its iframe and sets aria-hidden on the navigation, the nano-bar and main. The second run audited the rewards page in that state and reported the page's own chrome as focusable-but-hidden; the scanner now refuses the overlay's host, so those rows are gone. The verifier does not block it, still meets the popup, and keeps the literal reading, so these rows are neither counted as correctly removed nor as lost."
  }
}
