{
  "audit_label": "September 2026 field audit II",
  "ran_from": "2026-09-14",
  "ran_to": "2026-09-15",
  "build_before": "d79703c",
  "build_after": "ee7f57b",
  "sites_total": 56,
  "sites_compared": 47,
  "sites_blocked_both_runs": 2,
  "sites_changed_reachability": 7,
  "pages_per_site": 5,
  "findings_before": 890,
  "findings_after": 873,
  "duplicate_rows_before": 99,
  "duplicate_rows_after": 0,
  "null_rule_id_before": 0,
  "null_rule_id_after": 0,
  "by_engine": [
    {
      "engine": "arc-style",
      "kind": "engine",
      "before": 109,
      "after": 110
    },
    {
      "engine": "axe-core",
      "kind": "engine",
      "before": 202,
      "after": 213
    },
    {
      "engine": "ibm-equal-access",
      "kind": "engine",
      "before": 289,
      "after": 204
    },
    {
      "engine": "lighthouse",
      "kind": "engine",
      "before": 55,
      "after": 21
    },
    {
      "engine": "pa11y",
      "kind": "engine",
      "before": 118,
      "after": 111
    },
    {
      "engine": "focus-graph",
      "kind": "analyzer",
      "before": 0,
      "after": 1
    },
    {
      "engine": "form-behavior",
      "kind": "analyzer",
      "before": 1,
      "after": 1
    },
    {
      "engine": "keyboard-nav-tester",
      "kind": "analyzer",
      "before": 5,
      "after": 2
    },
    {
      "engine": "mobile-accessibility",
      "kind": "analyzer",
      "before": 111,
      "after": 210
    }
  ],
  "by_class": [
    {
      "rule_id": "ibm-text_contrast_sufficient",
      "before": 51,
      "after": 25,
      "fix": "cross-engine contrast twins fold; the painted ratio decides"
    },
    {
      "rule_id": "color-contrast",
      "before": 28,
      "after": 16,
      "fix": "pixel-verified against the page; twin rows fold"
    },
    {
      "rule_id": "ibm-svg_graphics_labelled",
      "before": 23,
      "after": 15,
      "fix": "decorative SVGs; an image's alt names the link"
    },
    {
      "rule_id": "ibm-img_alt_valid",
      "before": 8,
      "after": 2,
      "fix": "cross-engine twin rows fold"
    },
    {
      "rule_id": "ibm-aria_role_valid",
      "before": 7,
      "after": 2,
      "fix": "ARIA 1.2 roles; combobox pattern"
    },
    {
      "rule_id": "skip-link-broken",
      "before": 3,
      "after": 0,
      "fix": "a working link to an empty marker passes"
    },
    {
      "rule_id": "ibm-aria_main_label_unique",
      "before": 2,
      "after": 0,
      "fix": "cross-engine twin rows fold"
    },
    {
      "rule_id": "ibm-target_spacing_sufficient",
      "before": 7,
      "after": 5,
      "fix": "WCAG 2.5.8's 24 px circle, not the size rule"
    },
    {
      "rule_id": "link-in-text-block",
      "before": 11,
      "after": 9,
      "fix": "box-shadow underlines; GOV.UK and NHS focus styles"
    },
    {
      "rule_id": "label",
      "before": 4,
      "after": 2,
      "fix": "consent dialogs dismissed before the audit"
    },
    {
      "rule_id": "label-content-name-mismatch",
      "before": 7,
      "after": 6,
      "fix": "card links named by their title, icon-only controls"
    },
    {
      "rule_id": "ibm-label_name_visible",
      "before": 14,
      "after": 13,
      "fix": "label-in-name probe: cards, icons, form controls"
    },
    {
      "rule_id": "skip-link-missing",
      "before": 22,
      "after": 21,
      "fix": "medium when a main landmark exists"
    },
    {
      "rule_id": "aria-role-invalid",
      "before": 3,
      "after": 2,
      "fix": "ARIA 1.2 structural, graphics and DPUB roles are valid"
    },
    {
      "rule_id": "landmark-main-missing",
      "before": 7,
      "after": 6,
      "fix": "cross-engine twin rows fold"
    },
    {
      "rule_id": "ibm-aria_complementary_labelled",
      "before": 2,
      "after": 1,
      "fix": "only landmarks Chromium exposes count"
    },
    {
      "rule_id": "ibm-input_checkboxes_grouped",
      "before": 4,
      "after": 3,
      "fix": "consent dialogs dismissed before the audit"
    },
    {
      "rule_id": "ibm-fieldset_label_valid",
      "before": 5,
      "after": 4,
      "fix": "consent dialogs dismissed before the audit"
    },
    {
      "rule_id": "ibm-table_headers_exists",
      "before": 4,
      "after": 3,
      "fix": "layout tables judged by their role in the accessibility tree"
    },
    {
      "rule_id": "ibm-table_headers_related",
      "before": 4,
      "after": 3,
      "fix": "layout tables judged by their role in the accessibility tree"
    },
    {
      "rule_id": "keyboard-trap",
      "before": 2,
      "after": 2,
      "fix": "a carousel that lands focus after its slide is not a trap"
    },
    {
      "rule_id": "landmark-one-main",
      "before": 8,
      "after": 8,
      "fix": "cross-engine twin rows fold"
    },
    {
      "rule_id": "landmark-no-duplicate-main",
      "before": 2,
      "after": 2,
      "fix": "cross-engine twin rows fold"
    },
    {
      "rule_id": "frame-title",
      "before": 3,
      "after": 3,
      "fix": "rows inside ad frames are the vendor's"
    },
    {
      "rule_id": "ibm-aria_hidden_nontabbable",
      "before": 10,
      "after": 10,
      "fix": "consent traps dismissed; verifier reads the live page"
    },
    {
      "rule_id": "svg-accessible-name",
      "before": 8,
      "after": 9,
      "fix": "an image's alt names the link"
    },
    {
      "rule_id": "image-alt",
      "before": 7,
      "after": 8,
      "fix": "cross-engine twin rows fold"
    },
    {
      "rule_id": "ibm-img_alt_redundant",
      "before": 3,
      "after": 4,
      "fix": "graded low: the name is read twice, no criterion fails"
    },
    {
      "rule_id": "ibm-frame_title_exists",
      "before": 2,
      "after": 3,
      "fix": "rows inside ad frames are the vendor's"
    },
    {
      "rule_id": "mobile-target-unreachable-advisory",
      "before": 36,
      "after": 58,
      "fix": "capped at 25 per rule"
    },
    {
      "rule_id": "mobile-target-size-spacing-exempt-advisory",
      "before": 28,
      "after": 54,
      "fix": "capped at 25 per rule"
    },
    {
      "rule_id": "mobile-target-size-advisory",
      "before": 41,
      "after": 84,
      "fix": "capped at 25 per rule"
    }
  ],
  "sites": [
    {
      "site": "brooklinen.com",
      "before": 40,
      "after": 21,
      "score_before": 72,
      "score_after": 73
    },
    {
      "site": "daum.net",
      "before": 42,
      "after": 29,
      "score_before": 54,
      "score_after": 56
    },
    {
      "site": "stripe.com",
      "before": 36,
      "after": 24,
      "score_before": 54,
      "score_after": 63
    },
    {
      "site": "telekom.de",
      "before": 41,
      "after": 30,
      "score_before": 66,
      "score_after": 49
    },
    {
      "site": "lit.dev",
      "before": 28,
      "after": 18,
      "score_before": 50,
      "score_after": 63
    },
    {
      "site": "getbootstrap.com",
      "before": 36,
      "after": 29,
      "score_before": 52,
      "score_after": 54
    },
    {
      "site": "linear.app",
      "before": 34,
      "after": 27,
      "score_before": 72,
      "score_after": 68
    },
    {
      "site": "coolblue.nl",
      "before": 27,
      "after": 21,
      "score_before": 51,
      "score_after": 51
    },
    {
      "site": "skynewsarabia.com",
      "before": 16,
      "after": 12,
      "score_before": 77,
      "score_after": 73
    },
    {
      "site": "stanford.edu",
      "before": 13,
      "after": 9,
      "score_before": 79,
      "score_after": 89
    },
    {
      "site": "webflow.com",
      "before": 24,
      "after": 20,
      "score_before": 54,
      "score_after": 55
    },
    {
      "site": "cam.ac.uk",
      "before": 17,
      "after": 14,
      "score_before": 62,
      "score_after": 65
    },
    {
      "site": "news.ycombinator.com",
      "before": 18,
      "after": 15,
      "score_before": 51,
      "score_after": 51
    },
    {
      "site": "who.int",
      "before": 11,
      "after": 8,
      "score_before": 80,
      "score_after": 87
    },
    {
      "site": "bbc.com",
      "before": 8,
      "after": 6,
      "score_before": 51,
      "score_after": 51
    },
    {
      "site": "framer.com",
      "before": 35,
      "after": 33,
      "score_before": 49,
      "score_after": 48
    },
    {
      "site": "ghost.org",
      "before": 23,
      "after": 21,
      "score_before": 53,
      "score_after": 57
    },
    {
      "site": "docs.python.org",
      "before": 23,
      "after": 21,
      "score_before": 71,
      "score_after": 70
    },
    {
      "site": "berkshirehathaway.com",
      "before": 10,
      "after": 9,
      "score_before": 86,
      "score_after": 86
    },
    {
      "site": "gov.sg",
      "before": 11,
      "after": 10,
      "score_before": 85,
      "score_after": 85
    },
    {
      "site": "rakuten.co.jp",
      "before": 36,
      "after": 35,
      "score_before": 49,
      "score_after": 48
    },
    {
      "site": "userway.org",
      "before": 12,
      "after": 11,
      "score_before": 72,
      "score_after": 83
    },
    {
      "site": "designsystem.digital.gov",
      "before": 8,
      "after": 7,
      "score_before": 79,
      "score_after": 89
    },
    {
      "site": "gov.pl",
      "before": 13,
      "after": 13,
      "score_before": 73,
      "score_after": 70
    },
    {
      "site": "nhs.uk",
      "before": 3,
      "after": 3,
      "score_before": 100,
      "score_after": 100
    },
    {
      "site": "openstreetmap.org",
      "before": 19,
      "after": 19,
      "score_before": 50,
      "score_after": 59
    },
    {
      "site": "carbondesignsystem.com",
      "before": 17,
      "after": 18,
      "score_before": 79,
      "score_after": 79
    },
    {
      "site": "corriere.it",
      "before": 30,
      "after": 31,
      "score_before": 49,
      "score_after": 50
    },
    {
      "site": "government.nl",
      "before": 2,
      "after": 3,
      "score_before": 89,
      "score_after": 89
    },
    {
      "site": "harvard.edu",
      "before": 6,
      "after": 7,
      "score_before": 79,
      "score_after": 79
    },
    {
      "site": "n26.com",
      "before": 10,
      "after": 11,
      "score_before": 58,
      "score_after": 63
    },
    {
      "site": "service-manual.nhs.uk",
      "before": 3,
      "after": 4,
      "score_before": 89,
      "score_after": 100
    },
    {
      "site": "wise.com",
      "before": 24,
      "after": 25,
      "score_before": 71,
      "score_after": 66
    },
    {
      "site": "hespress.com",
      "before": 19,
      "after": 22,
      "score_before": 63,
      "score_after": 65
    },
    {
      "site": "theverge.com",
      "before": 27,
      "after": 30,
      "score_before": 53,
      "score_after": 65
    },
    {
      "site": "australia.gov.au",
      "before": 10,
      "after": 14,
      "score_before": 69,
      "score_after": 71
    },
    {
      "site": "about.gitlab.com",
      "before": 24,
      "after": 28,
      "score_before": 63,
      "score_after": 64
    },
    {
      "site": "sanook.com",
      "before": 32,
      "after": 36,
      "score_before": 51,
      "score_after": 46
    },
    {
      "site": "usa.gov",
      "before": 4,
      "after": 8,
      "score_before": 100,
      "score_after": 89
    },
    {
      "site": "wix.com",
      "before": 16,
      "after": 21,
      "score_before": 61,
      "score_after": 63
    },
    {
      "site": "kubernetes.io",
      "before": 13,
      "after": 19,
      "score_before": 75,
      "score_after": 68
    },
    {
      "site": "ryanair.com",
      "before": 15,
      "after": 21,
      "score_before": 64,
      "score_after": 56
    },
    {
      "site": "meta.discourse.org",
      "before": 20,
      "after": 29,
      "score_before": 53,
      "score_after": 52
    },
    {
      "site": "djangoproject.com",
      "before": 4,
      "after": 13,
      "score_before": 76,
      "score_after": 63
    },
    {
      "site": "u-tokyo.ac.jp",
      "before": 15,
      "after": 24,
      "score_before": 83,
      "score_after": 73
    },
    {
      "site": "hubspot.com",
      "before": 5,
      "after": 19,
      "score_before": 89,
      "score_after": 79
    },
    {
      "site": "u.ae",
      "before": 10,
      "after": 25,
      "score_before": 77,
      "score_after": 64
    }
  ],
  "scores": {
    "up": 21,
    "down": 17,
    "unchanged": 9
  },
  "removed_census": {
    "total": 1192,
    "correctly_removed": 91,
    "counted_but_unlisted": 27,
    "merged_into_canonical_row": 226,
    "rebucketed": 2,
    "lost": 25,
    "unexplained": 48,
    "indeterminate": 762,
    "policy": 11
  },
  "added_census": {
    "total": 857,
    "justified": 286,
    "borderline": 0,
    "manufactured": 37,
    "indeterminate": 534
  },
  "defects_fixed": 45,
  "tests_backend": 4304,
  "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). otto.de and ynet.co.il, whose second run failed under the new coverage rule, were scanned once more alone; both failed again (renderers dying under the engines) and are counted as changed reachability, not compared.",
    "justified_label": "Justified - the verifier confirms the failure on the live page",
    "policy": "PR #4's D44: a card link whose accessible name is the card's title while the visible text also carries the date and a 'News release' kicker (who.int). WCAG 2.5.3's Understanding document treats the heading-like text as the label, voice-control users say the title, and axe marks label-content-name-mismatch experimental; the scanner now reads the most prominent visible text run as the label. The verifier keeps the literal reading, that all visible text must be in the name, so these rows are neither counted as correctly removed nor as lost.",
    "lost": "The 25 genuinely lost occurrences are on eight sites; 16 of them are one brooklinen.com page (a rewards page whose aria-hidden panel holds focusable controls, reported by IBM's hidden-but-tabbable rules in the first run and by nothing in the second). Each is filed as an open defect against the after-build, not fixed before this page was published. The 48 unexplained rows are selectors that no longer resolve hours later on rakuten.co.jp, daum.net and stripe.com, plus two pages (linear.app/customers, n26.com's affiliate page) that hung the verifier's resolver and were skipped; they are not evidence either way. The indeterminate rows are pages the other run did not analyse, dynamic content whose selectors no longer resolve, and rows inside consent or ad vendors' frames."
  }
}
