{
  "url": "https://www.bbc.com",
  "auditedAt": "2026-07-21T06:17:24.856Z",
  "mode": "report",
  "status": "completed",
  "statusDetail": "Complete 58-check atomic audit. Requests redirected to the UK BBC experience for this audit location.",
  "page": {
    "appType": "hybrid",
    "framework": "React/Next-like homepage plus BBC MPA templates",
    "notes": "Public editorial/media service. Representative homepage, section, article, search and 404 templates were covered. Authenticated account, playback, weather location, iPlayer/Sounds, children/education and checkout-like journeys were not covered because they are separate products or require broader consent/auth/location scope."
  },
  "evidenceUsed": [
    "screenshot",
    "dom",
    "layout-metrics",
    "evaluate-probe",
    "discoverability",
    "headers",
    "cookies",
    "trackers",
    "images",
    "secrets",
    "har",
    "trace",
    "heap-summary",
    "lighthouse",
    "Modern Web Guidance 0.0.172"
  ],
  "guidanceConsulted": [
    "dark-mode",
    "accessibility",
    "performance",
    "css",
    "forms",
    "security",
    "privacy",
    "optimize-image-priority",
    "break-up-long-tasks",
    "light-dismiss-a-dialog",
    "declarative-dialog-popover-control",
    "optimize-script-priority",
    "identify-heavy-scripts",
    "batch-analytics-events",
    "fluid-scaling",
    "manage-recurring-intervals"
  ],
  "artifacts": [
    {
      "type": "screenshot",
      "path": "evidence/home.png",
      "caption": "Homepage desktop, fresh profile.",
      "findingIds": [
        "BBC-003",
        "BBC-004"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-mobile.png",
      "caption": "Homepage at 360×800.",
      "condition": "viewport: 360x800",
      "findingIds": [
        "BBC-003",
        "BBC-009"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-dark.png",
      "caption": "Homepage under prefers-color-scheme: dark.",
      "condition": "prefers-color-scheme: dark",
      "findingIds": [
        "BBC-001"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-contrast.png",
      "caption": "Homepage under prefers-contrast: more.",
      "condition": "prefers-contrast: more",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/news.png",
      "caption": "News section fresh profile.",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/article.png",
      "caption": "Article fresh profile with promotion overlay.",
      "findingIds": [
        "BBC-003"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/search-mobile.png",
      "caption": "Search results at 360×800.",
      "condition": "viewport: 360x800",
      "findingIds": [
        "BBC-003"
      ]
    },
    {
      "type": "dom",
      "path": "evidence/home-dom.json",
      "caption": "Rendered homepage DOM/CSS snapshot.",
      "findingIds": [
        "BBC-013"
      ]
    },
    {
      "type": "dom",
      "path": "evidence/news-dom.json",
      "caption": "Rendered news DOM snapshot.",
      "findingIds": []
    },
    {
      "type": "dom",
      "path": "evidence/article-dom.json",
      "caption": "Rendered article DOM snapshot.",
      "findingIds": []
    },
    {
      "type": "layout",
      "path": "evidence/home-mobile-layout.json",
      "caption": "Mobile layout metrics and shift observation.",
      "condition": "viewport: 360x800",
      "findingIds": []
    },
    {
      "type": "discoverability",
      "path": "evidence/home-discoverability.json",
      "caption": "Raw HTML versus rendered-content discoverability.",
      "findingIds": [
        "BBC-013"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-discoverability-rendered.png",
      "caption": "Discoverability browser-rendered view.",
      "findingIds": [
        "BBC-013"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-discoverability-crawler.png",
      "caption": "Discoverability crawler/no-JS view.",
      "findingIds": [
        "BBC-013"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-headers.json",
      "caption": "Security header audit.",
      "findingIds": [
        "BBC-010",
        "BBC-011"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-cookies.json",
      "caption": "Cookie audit.",
      "findingIds": [
        "BBC-010"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-trackers.json",
      "caption": "Third-party origin audit.",
      "findingIds": [
        "BBC-012"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-images.json",
      "caption": "Image element audit.",
      "findingIds": [
        "BBC-014"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-secrets.json",
      "caption": "Client-side secrets scan.",
      "findingIds": []
    },
    {
      "type": "har",
      "path": "evidence/home.har",
      "caption": "Homepage network capture.",
      "findingIds": [
        "BBC-007",
        "BBC-012"
      ]
    },
    {
      "type": "har-summary",
      "path": "evidence/home-summary.json",
      "caption": "Compact homepage HAR analysis.",
      "findingIds": [
        "BBC-007",
        "BBC-012"
      ]
    },
    {
      "type": "trace",
      "path": "evidence/home-trace.json",
      "caption": "Homepage performance trace.",
      "findingIds": [
        "BBC-005"
      ]
    },
    {
      "type": "trace-summary",
      "path": "evidence/home-trace-summary.json",
      "caption": "Compact trace timings and long tasks.",
      "findingIds": [
        "BBC-005",
        "BBC-006"
      ]
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse.json",
      "caption": "Lighthouse report.",
      "findingIds": [
        "BBC-005",
        "BBC-006",
        "BBC-007",
        "BBC-008"
      ]
    },
    {
      "type": "other",
      "path": "evidence/lighthouse-selected.txt",
      "caption": "Selected Lighthouse audit details.",
      "findingIds": [
        "BBC-007",
        "BBC-008",
        "BBC-010"
      ]
    },
    {
      "type": "heap",
      "path": "evidence/home-heap.json",
      "caption": "Fresh homepage heap baseline.",
      "findingIds": [
        "BBC-015"
      ]
    },
    {
      "type": "heap",
      "path": "evidence/home-heap-post-valid.json",
      "caption": "Heap after repeated menu interaction attempt.",
      "findingIds": [
        "BBC-015"
      ]
    },
    {
      "type": "other",
      "path": "evidence/motion.json",
      "caption": "Reduced-motion animation probe.",
      "findingIds": [
        "BBC-002"
      ]
    },
    {
      "type": "other",
      "path": "evidence/platform-probe.json",
      "caption": "Metadata, primitives, headings and focus probe.",
      "findingIds": [
        "BBC-004",
        "BBC-008"
      ]
    },
    {
      "type": "other",
      "path": "evidence/delivery-probe.json",
      "caption": "Script delivery attributes and PWA probe.",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/inclusive-i18n-probe.json",
      "caption": "Target-size, language, date and media probe.",
      "findingIds": [
        "BBC-009"
      ]
    },
    {
      "type": "other",
      "path": "evidence/interaction-css-probe.json",
      "caption": "Scroll/gesture CSS and fixed-element probe.",
      "findingIds": [
        "BBC-004"
      ]
    },
    {
      "type": "other",
      "path": "evidence/recon.json",
      "caption": "Navigation and route recon.",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/robots-sitemap.json",
      "caption": "robots.txt and sitemap.xml fetch.",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/search-probe.json",
      "caption": "Search form and result-state probe.",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/404-probe.json",
      "caption": "404 recovery-state probe.",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/article-metadata.json",
      "caption": "Article JSON-LD and social metadata probe.",
      "findingIds": []
    }
  ],
  "config": {
    "loaded": false
  },
  "coverage": {
    "catalogVersion": "modern-web-guidance@0.0.172",
    "catalogChecksum": "sha256:78ccfdb2d483f4c57d9dafed80fd86c6265585a56457c8dcfddc254b80fb44d7",
    "expected": 58,
    "recorded": 58,
    "judged": 58,
    "blocked": 0,
    "notRun": 0,
    "missing": 0,
    "unknown": 0,
    "duplicates": 0,
    "complete": true
  },
  "checkOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-color-scheme",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted visual/CDP/Lighthouse evidence mapped to this atomic check.",
      "evidence": "The dark-mode screenshot remains a white page with white cards; only loading placeholders change, while body and content surfaces do not retint.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dark.png"
      ],
      "findingIds": [
        "BBC-001"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-reduced-motion",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted visual/CDP/Lighthouse evidence mapped to this atomic check.",
      "evidence": "The reduced-motion probe confirmed matchMedia(...reduce) and found 18 running animations, each with an 8,000 ms duration. CSS contains reduced-motion rules, but the active loading animations were not suppressed.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/motion.json"
      ],
      "findingIds": [
        "BBC-002"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-contrast",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection using the referenced artifact(s).",
      "evidence": "Screenshot under prefers-contrast: more retained visible high-contrast text and controls; Lighthouse contrast passed.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-contrast.png",
        "evidence/lighthouse.json"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "view-transitions",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from representative-path recon.",
      "evidence": "No in-page state or route transition was essential to the representative reading/search tasks; ordinary MPA link navigation was observed.",
      "reason": "No in-page state or route transition was essential to the representative reading/search tasks; ordinary MPA link navigation was observed."
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "scroll-driven-animations",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection using the referenced artifact(s).",
      "evidence": "CSS probe found native scroll-snap usage and no inline scroll/pointer/touch event handlers; no main-thread scroll animation was observed.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/interaction-css-probe.json"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "physical-gestures",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection using the referenced artifact(s).",
      "evidence": "The UI uses normal browser scrolling and CSS scroll-snap, with no authored pointer/touch event attributes fighting platform gestures.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/interaction-css-probe.json"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "scroll-state-aware-chrome",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection using the referenced artifact(s).",
      "evidence": "Desktop and mobile screenshots show compact navigation that does not cover the reading surface; the only fixed content was consent/modal chrome, reported separately.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home.png",
        "evidence/home-mobile.png",
        "evidence/interaction-css-probe.json"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "anchored-positioning",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from representative-path recon.",
      "evidence": "No tooltip, anchored popover, or edge-positioned menu was exposed on the representative paths.",
      "reason": "No tooltip, anchored popover, or edge-positioned menu was exposed on the representative paths."
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "directs-attention",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection using the referenced artifact(s).",
      "evidence": "Navigation labels are descriptive and the focused first link had a 2 px outline plus contrasting box shadow.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/platform-probe.json"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "no-intrusive-interruptions",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted visual/CDP/Lighthouse evidence mapped to this atomic check.",
      "evidence": "The homepage and mobile search screenshots show a fixed cookie panel covering roughly half the viewport. The article screenshot adds a centered sign-in modal over the cookie layer and dims the article.",
      "pathIds": [
        "article"
      ],
      "artifacts": [
        "evidence/home.png",
        "evidence/home-mobile.png",
        "evidence/article.png",
        "evidence/search-mobile.png"
      ],
      "findingIds": [
        "BBC-003"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "semantic-dismissible-primitives",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted visual/CDP/Lighthouse evidence mapped to this atomic check.",
      "evidence": "The DOM probe reported zero dialog and zero popover elements while the screenshot and interaction probe show the cookie UI as a fixed SECTION.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/interaction-css-probe.json",
        "evidence/home.png"
      ],
      "findingIds": [
        "BBC-004"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "reduced-chrome",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection using the referenced artifact(s).",
      "evidence": "Outside the separately reported overlays, the homepage and search layouts devote the viewport to headline cards/results with restrained borders.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/search-mobile.png"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "responsive-no-horizontal-scroll",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection using the referenced artifact(s).",
      "evidence": "At 360×800, layout measured scrollWidth=clientWidth=360, zero horizontal overflow, and a viewport meta tag.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile-layout.json",
        "evidence/home-mobile.png"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "component-level-responsiveness",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection using the referenced artifact(s).",
      "evidence": "Live CSS inspection found @container usage, and cards reflowed from desktop columns to a single mobile column.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/home.png",
        "evidence/home-mobile.png"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "input-modality-aware",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection using the referenced artifact(s).",
      "evidence": "Keyboard focus probe produced a clear 2 px outline and contrasting 2 px halo; small touch targets are separately reported.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/platform-probe.json"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-purpose-and-primary-action",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection using the referenced artifact(s).",
      "evidence": "H1/title and first viewport clearly identify BBC, News, article and Search purposes; search results expose an explicit Search action.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home.png",
        "evidence/news.png",
        "evidence/search-mobile.png",
        "evidence/article-metadata.json"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "primary-flow-completion",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted visual/CDP/Lighthouse evidence mapped to this atomic check.",
      "evidence": "The homepage and mobile search screenshots show a fixed cookie panel covering roughly half the viewport. The article screenshot adds a centered sign-in modal over the cookie layer and dims the article.",
      "pathIds": [
        "article"
      ],
      "artifacts": [
        "evidence/home.png",
        "evidence/home-mobile.png",
        "evidence/article.png",
        "evidence/search-mobile.png"
      ],
      "findingIds": [
        "BBC-003"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-system-state-and-recovery",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection using the referenced artifact(s).",
      "evidence": "The deliberate 404 has a specific title/H1, explains the failure, and offers search/home recovery.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/404-probe.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "good-core-web-vitals",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted visual/CDP/Lighthouse evidence mapped to this atomic check.",
      "evidence": "Lighthouse scored performance 0.34, with FCP 5.8 s, LCP 14.0 s, TBT 1,700 ms, and time to interactive 23.2 s. A separate trace measured LCP 2.94 s and 64 ms TBT, confirming variable but non-good LCP.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/home-trace-summary.json",
        "evidence/home-trace.json"
      ],
      "findingIds": [
        "BBC-005"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "visual-stability",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection using the referenced artifact(s).",
      "evidence": "Mobile layout observation reported CLS 0 with no shift entries; Lighthouse also measured CLS 0.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile-layout.json",
        "evidence/lighthouse.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-main-thread",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted visual/CDP/Lighthouse evidence mapped to this atomic check.",
      "evidence": "Lighthouse measured 1,700 ms TBT and 710 ms maximum potential input delay. The raw-CDP trace independently found three long tasks (longest 81 ms).",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/home-trace-summary.json"
      ],
      "findingIds": [
        "BBC-006"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-resource-delivery",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted visual/CDP/Lighthouse evidence mapped to this atomic check.",
      "evidence": "Lighthouse scored performance 0.34, with FCP 5.8 s, LCP 14.0 s, TBT 1,700 ms, and time to interactive 23.2 s. A separate trace measured LCP 2.94 s and 64 ms TBT, confirming variable but non-good LCP. The HAR recorded 99 scripts and 1.12 MB transferred JavaScript. Lighthouse estimated 283 KiB unused JavaScript, including player, analytics, and website bundles over 50% unused.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/home-trace-summary.json",
        "evidence/home-trace.json",
        "evidence/home-summary.json",
        "evidence/home.har",
        "evidence/lighthouse-selected.txt"
      ],
      "findingIds": [
        "BBC-005",
        "BBC-007"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "trim-unused-and-duplicate-code",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted visual/CDP/Lighthouse evidence mapped to this atomic check.",
      "evidence": "The HAR recorded 99 scripts and 1.12 MB transferred JavaScript. Lighthouse estimated 283 KiB unused JavaScript, including player, analytics, and website bundles over 50% unused.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har",
        "evidence/lighthouse.json",
        "evidence/lighthouse-selected.txt"
      ],
      "findingIds": [
        "BBC-007"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "names-roles-labels",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection using the referenced artifact(s).",
      "evidence": "Lighthouse image-alt passed; search input had an associated “Input your search term” label and visible submit button.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/search-probe.json"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "sufficient-contrast",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection using the referenced artifact(s).",
      "evidence": "Lighthouse color-contrast audit passed and high-contrast screenshot retained clear text/control boundaries.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/home-contrast.png"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "structure-and-focus",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted visual/CDP/Lighthouse evidence mapped to this atomic check.",
      "evidence": "Lighthouse accessibility scored 0.99 but failed heading-order: the lead story is an H3 directly under the H1 without an intervening H2. The DOM heading probe corroborates this structure.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/lighthouse-selected.txt",
        "evidence/platform-probe.json"
      ],
      "findingIds": [
        "BBC-008"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "legible-text",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection using the referenced artifact(s).",
      "evidence": "Desktop/mobile screenshots show readable BBC Reith text, strong hierarchy, and no clipping; mobile has no horizontal overflow.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home.png"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "zoom-reflow-targets-and-media",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted visual/CDP/Lighthouse evidence mapped to this atomic check.",
      "evidence": "The target-size probe found repeated “View more” links only 22 px high and a comments-count link 16.25×24 px. Mobile reflow itself had no horizontal overflow.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/inclusive-i18n-probe.json",
        "evidence/home-mobile.png"
      ],
      "findingIds": [
        "BBC-009"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "no-console-errors",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection using the referenced artifact(s).",
      "evidence": "Lighthouse errors-in-console audit passed with no logged browser errors.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-selected.txt"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "sound-document-and-assets",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection using the referenced artifact(s).",
      "evidence": "DOM/Lighthouse confirmed HTML doctype, UTF-8 charset and valid viewport; image optimization gaps are separately reported under sustainability.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/lighthouse-selected.txt",
        "evidence/home-images.json"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "browser-platform-hygiene",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection using the referenced artifact(s).",
      "evidence": "Lighthouse passed deprecated APIs, BFCache, geolocation-on-start and notification-on-start; cookie/CSP inspector issues are assigned to security.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-selected.txt"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "title-and-description",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection using the referenced artifact(s).",
      "evidence": "Homepage and article probes found descriptive unique titles and meta descriptions.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/article-metadata.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "crawlable-and-mobile-friendly",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection using the referenced artifact(s).",
      "evidence": "Lighthouse SEO scored 1.0; crawlable anchors and viewport audits passed, and robots permits normal public content routes.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/lighthouse-selected.txt",
        "evidence/robots-sitemap.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "canonical-and-indexing-signals",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection using the referenced artifact(s).",
      "evidence": "Homepage/article expose BBC canonical URLs; robots.txt and sitemap.xml returned 200 and enumerate public sitemap indexes without accidental homepage noindex.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/article-metadata.json",
        "evidence/robots-sitemap.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "structured-and-shareable-metadata",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection using the referenced artifact(s).",
      "evidence": "The article exposes matching ReportageNewsArticle JSON-LD and complete Open Graph title, description, image and URL.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/article-metadata.json"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "secure-transport-and-headers",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted visual/CDP/Lighthouse evidence mapped to this atomic check.",
      "evidence": "The headers primitive found no Content-Security-Policy. The cookie audit found five first-party cookies with Secure=false and SameSite=None; Lighthouse also logged CSP/cookie inspector issues.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-headers.json",
        "evidence/home-cookies.json",
        "evidence/lighthouse-selected.txt"
      ],
      "findingIds": [
        "BBC-010"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "data-minimisation-and-third-parties",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted visual/CDP/Lighthouse evidence mapped to this atomic check.",
      "evidence": "The tracker primitive observed 14 non-main origins, including Optimizely, Piano, Chartbeat and Cxense. The HAR attributes 206 of 207 requests and 1.89 MB to origins different from www.bbc.com (including BBC asset domains), with external personalization scripts among the largest resources.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-trackers.json",
        "evidence/home-summary.json",
        "evidence/home.har"
      ],
      "findingIds": [
        "BBC-012"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "in-context-permissions-and-modern-auth",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection using the referenced artifact(s).",
      "evidence": "Lighthouse confirmed no geolocation or notification prompt on load; authentication was not required for reading/search and therefore passkey support was not asserted.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-selected.txt",
        "evidence/article.png"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "defensive-browser-policies",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted visual/CDP/Lighthouse evidence mapped to this atomic check.",
      "evidence": "Headers include HSTS, nosniff and SAMEORIGIN, but Permissions-Policy is absent, CSP/frame-ancestors is absent, and Referrer-Policy remains no-referrer-when-downgrade.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-headers.json"
      ],
      "findingIds": [
        "BBC-011"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "progressive-enhancement",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted visual/CDP/Lighthouse evidence mapped to this atomic check.",
      "evidence": "Discoverability measured only 37% rendered-word coverage in raw HTML; the raw response lacked the rendered title and H1, although it was not an empty JS shell and retained substantial text.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-discoverability.json",
        "evidence/home-discoverability-rendered.png",
        "evidence/home-discoverability-crawler.png",
        "evidence/home-dom.json"
      ],
      "findingIds": [
        "BBC-013"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "resilient-runtime-behaviour",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection using the referenced artifact(s).",
      "evidence": "Responsive screenshots show consent and article prompts contained within the viewport with visible dismissal (“Maybe later”); no cut-off menu was observed.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/article.png",
        "evidence/home-mobile.png"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "offline-and-installable",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from representative-path recon.",
      "evidence": "BBC is primarily a network-dependent publishing/media service; offline installation was not required for the audited reading/search paths.",
      "reason": "BBC is primarily a network-dependent publishing/media service; offline installation was not required for the audited reading/search paths."
    },
    {
      "principleId": "be-resilient",
      "checkId": "network-and-http-failure-states",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection using the referenced artifact(s).",
      "evidence": "The deliberate missing URL renders a useful 404 with explanation and home/search recovery rather than a broken shell.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/404-probe.json"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "lang-dir-and-logical-properties",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection using the referenced artifact(s).",
      "evidence": "Homepage and article use html lang=en-GB; mobile reflow survives narrow layout without direction-dependent clipping.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/recon.json",
        "evidence/article-metadata.json",
        "evidence/home-mobile-layout.json"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "locale-aware-data",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection using the referenced artifact(s).",
      "evidence": "Article JSON-LD uses unambiguous ISO 8601 publication/modification values and Open Graph locale en_GB; visible search dates use readable relative wording.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/article-metadata.json",
        "evidence/search-probe.json"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "time-zone-correctness",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from representative-path recon.",
      "evidence": "The representative paths exposed no scheduling or user-entered time-zone flow; article timestamps are unambiguous ISO values.",
      "reason": "The representative paths exposed no scheduling or user-entered time-zone flow; article timestamps are unambiguous ISO values."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "no-dark-patterns",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection using the referenced artifact(s).",
      "evidence": "Cookie choices give equal visual weight to accept and reject plus a settings option; account promotion has a clear “Maybe later” escape. Intrusion is reported separately, but no deceptive choice wording was observed.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home.png",
        "evidence/article.png"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "humane-error-handling",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from representative-path recon.",
      "evidence": "The only form audited was a non-required search field, so there was no invalid submission state to validate.",
      "reason": "The only form audited was a non-required search field, so there was no invalid submission state to validate."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "trustworthy-input-assistance",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection using the referenced artifact(s).",
      "evidence": "Search input is visibly labelled and uses an intentional text/search workflow; autocomplete=off does not block browser paste or submission.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/search-probe.json",
        "evidence/search-mobile.png"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "safe-commercial-and-account-flows",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from representative-path recon.",
      "evidence": "No checkout, subscription purchase, or authenticated account-management flow was in the unauthenticated scope.",
      "reason": "No checkout, subscription purchase, or authenticated account-management flow was in the unauthenticated scope."
    },
    {
      "principleId": "be-sustainable",
      "checkId": "optimised-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted visual/CDP/Lighthouse evidence mapped to this atomic check.",
      "evidence": "The image audit found 100/100 images delivered as JPG/PNG, 11 over 2× displayed width, three without dimensions, and six below-fold images not lazy-loaded. All images did expose srcset.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-images.json"
      ],
      "findingIds": [
        "BBC-014"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "no-wasteful-work",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection using the referenced artifact(s).",
      "evidence": "The trace completed with only three bounded long tasks and no continuous background media/animation was observed beyond the separately reported reduced-motion skeletons.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-trace-summary.json",
        "evidence/inclusive-i18n-probe.json"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "third-party-and-media-budget",
      "status": "issues",
      "confidence": "high",
      "method": "Targeted visual/CDP/Lighthouse evidence mapped to this atomic check.",
      "evidence": "The HAR recorded 99 scripts and 1.12 MB transferred JavaScript. Lighthouse estimated 283 KiB unused JavaScript, including player, analytics, and website bundles over 50% unused. The tracker primitive observed 14 non-main origins, including Optimizely, Piano, Chartbeat and Cxense. The HAR attributes 206 of 207 requests and 1.89 MB to origins different from www.bbc.com (including BBC asset domains), with external personalization scripts among the largest resources. The image audit found 100/100 images delivered as JPG/PNG, 11 over 2× displayed width, three without dimensions, and six below-fold images not lazy-loaded. All images did expose srcset.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har",
        "evidence/lighthouse.json",
        "evidence/lighthouse-selected.txt",
        "evidence/home-trackers.json",
        "evidence/home-images.json"
      ],
      "findingIds": [
        "BBC-007",
        "BBC-012",
        "BBC-014"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "structured-agent-capabilities",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from representative-path recon.",
      "evidence": "BBC robots.txt explicitly opts out of agentic AI, RAG, summarisation and automated extraction, so agent-facing capability exposure is intentionally outside this public site’s scope.",
      "reason": "BBC robots.txt explicitly opts out of agentic AI, RAG, summarisation and automated extraction, so agent-facing capability exposure is intentionally outside this public site’s scope."
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "on-device-inference",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from representative-path recon.",
      "evidence": "No agent-facing or on-device inference task is intended on the audited editorial/search surfaces.",
      "reason": "No agent-facing or on-device inference task is intended on the audited editorial/search surfaces."
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-leak-under-repeated-interaction",
      "status": "issues",
      "confidence": "low",
      "method": "Targeted visual/CDP/Lighthouse evidence mapped to this atomic check.",
      "evidence": "A fresh baseline heap summary reported 126,462 nodes / 10.3 MB self size; after ten menu open/close attempts a fresh-session post snapshot reported 794,217 nodes / 47.0 MB. Different hydration timing can explain part of this delta, so this is a low-confidence leak signal, not a proven leak trace.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-heap.json",
        "evidence/home-heap-post-valid.json"
      ],
      "findingIds": [
        "BBC-015"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "bounded-footprint",
      "status": "issues",
      "confidence": "low",
      "method": "Targeted visual/CDP/Lighthouse evidence mapped to this atomic check.",
      "evidence": "A fresh baseline heap summary reported 126,462 nodes / 10.3 MB self size; after ten menu open/close attempts a fresh-session post snapshot reported 794,217 nodes / 47.0 MB. Different hydration timing can explain part of this delta, so this is a low-confidence leak signal, not a proven leak trace.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-heap.json",
        "evidence/home-heap-post-valid.json"
      ],
      "findingIds": [
        "BBC-015"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-detached-dom-or-unbounded-listeners",
      "status": "pass",
      "confidence": "high",
      "method": "Direct inspection using the referenced artifact(s).",
      "evidence": "Heap summaries contained no Detached* constructor entries, and authored DOM exposed no inline pointer/touch/scroll handlers. No detached-node growth was directly observed.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-heap.json",
        "evidence/home-heap-post-valid.json",
        "evidence/interaction-css-probe.json"
      ]
    }
  ],
  "principleOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "BBC-001",
        "BBC-002"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "provide-guided-navigation",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "BBC-003",
        "BBC-004"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "support-core-task-success",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "BBC-003"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "BBC-005",
        "BBC-006",
        "BBC-007"
      ]
    },
    {
      "principleId": "be-inclusive",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "BBC-008",
        "BBC-009"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "be-discoverable",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "be-private-and-secure",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "BBC-010",
        "BBC-012",
        "BBC-011"
      ]
    },
    {
      "principleId": "be-resilient",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "BBC-013"
      ]
    },
    {
      "principleId": "be-internationalised",
      "expectation": "contextual",
      "status": "pass"
    },
    {
      "principleId": "be-trustworthy",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "be-sustainable",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "BBC-014",
        "BBC-007",
        "BBC-012"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "expectation": "contextual",
      "status": "not-applicable",
      "reason": "All checks were judged outside the declared or observed scope."
    },
    {
      "principleId": "be-memory-efficient",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "BBC-015"
      ]
    }
  ],
  "paths": [
    {
      "id": "home",
      "description": "Homepage and global navigation; represents the main editorial landing template.",
      "url": "https://www.bbc.com/",
      "conditions": [
        "desktop",
        "viewport: 360x800",
        "prefers-color-scheme: dark",
        "prefers-contrast: more",
        "prefers-reduced-motion: reduce",
        "keyboard focus"
      ],
      "result": "issues"
    },
    {
      "id": "news",
      "description": "News section listing; represents a section/index template and promotional chrome.",
      "url": "https://www.bbc.com/news",
      "conditions": [
        "desktop",
        "fresh profile"
      ],
      "result": "issues"
    },
    {
      "id": "article",
      "description": "Current news article; represents editorial detail content and share metadata.",
      "url": "https://www.bbc.com/news/articles/c24mnnnd18do",
      "conditions": [
        "desktop",
        "fresh profile"
      ],
      "result": "issues"
    },
    {
      "id": "search",
      "description": "Search results for “climate”; represents the primary search form and result-list journey.",
      "url": "https://www.bbc.com/search?q=climate",
      "conditions": [
        "viewport: 360x800",
        "fresh profile"
      ],
      "result": "issues"
    },
    {
      "id": "not-found",
      "description": "Deliberately invalid URL; represents HTTP failure and recovery behavior.",
      "url": "https://www.bbc.com/404-web-uplift",
      "conditions": [
        "desktop"
      ],
      "result": "pass"
    }
  ],
  "findings": [
    {
      "id": "BBC-001",
      "pathId": "home",
      "url": "https://www.bbc.com/",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-color-scheme",
      "guidanceId": "dark-mode",
      "guidanceCategory": "user-experience",
      "severity": "medium",
      "confidence": "high",
      "summary": "The site does not adapt its main surfaces to the user’s dark color-scheme preference.",
      "evidence": "The dark-mode screenshot remains a white page with white cards; only loading placeholders change, while body and content surfaces do not retint.",
      "artifacts": [
        "evidence/home-dark.png"
      ],
      "suggestedFix": "Declare color-scheme: light dark and use preference-aware surface/text tokens, for example light-dark(), while preserving BBC brand colors.",
      "effort": "medium"
    },
    {
      "id": "BBC-002",
      "pathId": "home",
      "url": "https://www.bbc.com/",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-reduced-motion",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "severity": "medium",
      "confidence": "high",
      "summary": "Long-running animations remain active when reduced motion is requested.",
      "evidence": "The reduced-motion probe confirmed matchMedia(...reduce) and found 18 running animations, each with an 8,000 ms duration. CSS contains reduced-motion rules, but the active loading animations were not suppressed.",
      "artifacts": [
        "evidence/motion.json"
      ],
      "suggestedFix": "Under prefers-reduced-motion: reduce, stop non-essential skeleton/auto-advance animation and replace it with a static state or near-instant transition.",
      "effort": "small"
    },
    {
      "id": "BBC-003",
      "pathId": "article",
      "url": "https://www.bbc.com/news/articles/c24mnnnd18do",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "no-intrusive-interruptions",
      "guidanceId": "light-dismiss-a-dialog",
      "guidanceCategory": "user-experience",
      "severity": "high",
      "confidence": "high",
      "summary": "Fresh visitors encounter content-obscuring overlays before they can read.",
      "evidence": "The homepage and mobile search screenshots show a fixed cookie panel covering roughly half the viewport. The article screenshot adds a centered sign-in modal over the cookie layer and dims the article.",
      "artifacts": [
        "evidence/home.png",
        "evidence/home-mobile.png",
        "evidence/article.png",
        "evidence/search-mobile.png"
      ],
      "suggestedFix": "Keep necessary consent compact and non-obscuring where legally possible, avoid stacking prompts, delay account promotion until contextual intent, and ensure immediate light-dismiss.",
      "effort": "medium"
    },
    {
      "id": "BBC-004",
      "pathId": "home",
      "url": "https://www.bbc.com/",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "semantic-dismissible-primitives",
      "guidanceId": "declarative-dialog-popover-control",
      "guidanceCategory": "user-experience",
      "severity": "medium",
      "confidence": "high",
      "summary": "The cookie overlay is custom fixed chrome rather than an appropriate dialog/popover primitive.",
      "evidence": "The DOM probe reported zero dialog and zero popover elements while the screenshot and interaction probe show the cookie UI as a fixed SECTION.",
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/interaction-css-probe.json",
        "evidence/home.png"
      ],
      "suggestedFix": "Use dialog for genuinely modal consent or popover for transient promotion, with native focus management, Escape/light-dismiss behavior, and no stacked top-layer surfaces.",
      "effort": "medium"
    },
    {
      "id": "BBC-005",
      "pathId": "home",
      "url": "https://www.bbc.com/",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "good-core-web-vitals",
      "guidanceId": "performance",
      "guidanceCategory": "performance",
      "severity": "high",
      "confidence": "high",
      "summary": "Cold mobile performance is well outside the good range.",
      "evidence": "Lighthouse scored performance 0.34, with FCP 5.8 s, LCP 14.0 s, TBT 1,700 ms, and time to interactive 23.2 s. A separate trace measured LCP 2.94 s and 64 ms TBT, confirming variable but non-good LCP.",
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/home-trace-summary.json",
        "evidence/home-trace.json"
      ],
      "suggestedFix": "Prioritize the LCP image, shorten dependency chains, and defer non-critical personalization, analytics, and media code until after primary content.",
      "effort": "large"
    },
    {
      "id": "BBC-006",
      "pathId": "home",
      "url": "https://www.bbc.com/",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-main-thread",
      "guidanceId": "break-up-long-tasks",
      "guidanceCategory": "performance",
      "severity": "high",
      "confidence": "high",
      "summary": "Heavy script execution blocks the main thread on a cold load.",
      "evidence": "Lighthouse measured 1,700 ms TBT and 710 ms maximum potential input delay. The raw-CDP trace independently found three long tasks (longest 81 ms).",
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/home-trace-summary.json"
      ],
      "suggestedFix": "Break long tasks, schedule non-critical work after interaction/idle, and remove or lazy-load scripts that do not support the initial viewport.",
      "effort": "large"
    },
    {
      "id": "BBC-007",
      "pathId": "home",
      "url": "https://www.bbc.com/",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "trim-unused-and-duplicate-code",
      "guidanceId": "identify-heavy-scripts",
      "guidanceCategory": "performance",
      "severity": "high",
      "confidence": "high",
      "summary": "The homepage ships a large script surface with substantial unused JavaScript.",
      "evidence": "The HAR recorded 99 scripts and 1.12 MB transferred JavaScript. Lighthouse estimated 283 KiB unused JavaScript, including player, analytics, and website bundles over 50% unused.",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har",
        "evidence/lighthouse.json",
        "evidence/lighthouse-selected.txt"
      ],
      "suggestedFix": "Route-split player and personalization code, conditionally import analytics/media dependencies, and remove duplicate legacy bundles from the homepage.",
      "effort": "large"
    },
    {
      "id": "BBC-008",
      "pathId": "home",
      "url": "https://www.bbc.com/",
      "principleId": "be-inclusive",
      "principleCheckId": "structure-and-focus",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "severity": "medium",
      "confidence": "high",
      "summary": "The homepage heading hierarchy skips levels.",
      "evidence": "Lighthouse accessibility scored 0.99 but failed heading-order: the lead story is an H3 directly under the H1 without an intervening H2. The DOM heading probe corroborates this structure.",
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/lighthouse-selected.txt",
        "evidence/platform-probe.json"
      ],
      "suggestedFix": "Use headings to reflect document hierarchy, introducing the appropriate section H2 before story-card H3 headings.",
      "effort": "small"
    },
    {
      "id": "BBC-009",
      "pathId": "home",
      "url": "https://www.bbc.com/",
      "principleId": "be-inclusive",
      "principleCheckId": "zoom-reflow-targets-and-media",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "severity": "medium",
      "confidence": "medium",
      "summary": "Several visible links have touch boxes below common minimum target guidance.",
      "evidence": "The target-size probe found repeated “View more” links only 22 px high and a comments-count link 16.25×24 px. Mobile reflow itself had no horizontal overflow.",
      "artifacts": [
        "evidence/inclusive-i18n-probe.json",
        "evidence/home-mobile.png"
      ],
      "suggestedFix": "Expand the clickable area of compact links to at least 24×24 CSS px, preferably 44×44 where space allows, without changing visual text size.",
      "effort": "small"
    },
    {
      "id": "BBC-010",
      "pathId": "home",
      "url": "https://www.bbc.com/",
      "principleId": "be-private-and-secure",
      "principleCheckId": "secure-transport-and-headers",
      "guidanceId": "security",
      "guidanceCategory": "security",
      "severity": "high",
      "confidence": "high",
      "summary": "Transport is HTTPS, but CSP is absent and several cookies are not Secure.",
      "evidence": "The headers primitive found no Content-Security-Policy. The cookie audit found five first-party cookies with Secure=false and SameSite=None; Lighthouse also logged CSP/cookie inspector issues.",
      "artifacts": [
        "evidence/home-headers.json",
        "evidence/home-cookies.json",
        "evidence/lighthouse-selected.txt"
      ],
      "suggestedFix": "Deploy a restrictive report-only then enforced CSP, and set Secure plus an intentional SameSite value on every cookie sent over HTTPS.",
      "effort": "medium"
    },
    {
      "id": "BBC-011",
      "pathId": "home",
      "url": "https://www.bbc.com/",
      "principleId": "be-private-and-secure",
      "principleCheckId": "defensive-browser-policies",
      "guidanceId": "security",
      "guidanceCategory": "security",
      "severity": "medium",
      "confidence": "high",
      "summary": "Several browser-enforced defensive policies are missing or weak.",
      "evidence": "Headers include HSTS, nosniff and SAMEORIGIN, but Permissions-Policy is absent, CSP/frame-ancestors is absent, and Referrer-Policy remains no-referrer-when-downgrade.",
      "artifacts": [
        "evidence/home-headers.json"
      ],
      "suggestedFix": "Add a least-privilege Permissions-Policy, CSP frame-ancestors, and a stricter Referrer-Policy such as strict-origin-when-cross-origin.",
      "effort": "small"
    },
    {
      "id": "BBC-012",
      "pathId": "home",
      "url": "https://www.bbc.com/",
      "principleId": "be-private-and-secure",
      "principleCheckId": "data-minimisation-and-third-parties",
      "guidanceId": "batch-analytics-events",
      "guidanceCategory": "privacy",
      "severity": "medium",
      "confidence": "high",
      "summary": "The initial page has a broad personalization and measurement footprint.",
      "evidence": "The tracker primitive observed 14 non-main origins, including Optimizely, Piano, Chartbeat and Cxense. The HAR attributes 206 of 207 requests and 1.89 MB to origins different from www.bbc.com (including BBC asset domains), with external personalization scripts among the largest resources.",
      "artifacts": [
        "evidence/home-trackers.json",
        "evidence/home-summary.json",
        "evidence/home.har"
      ],
      "suggestedFix": "Audit vendor necessity, load experimentation/measurement only after consent and intent, batch events, and treat BBC-controlled asset domains separately from external vendors in budgets.",
      "effort": "large"
    },
    {
      "id": "BBC-013",
      "pathId": "home",
      "url": "https://www.bbc.com/",
      "principleId": "be-resilient",
      "principleCheckId": "progressive-enhancement",
      "guidanceId": "performance",
      "guidanceCategory": "performance",
      "severity": "medium",
      "confidence": "high",
      "summary": "A non-JavaScript crawler receives materially different, incomplete page semantics.",
      "evidence": "Discoverability measured only 37% rendered-word coverage in raw HTML; the raw response lacked the rendered title and H1, although it was not an empty JS shell and retained substantial text.",
      "artifacts": [
        "evidence/home-discoverability.json",
        "evidence/home-discoverability-rendered.png",
        "evidence/home-discoverability-crawler.png",
        "evidence/home-dom.json"
      ],
      "suggestedFix": "Server-render stable title, H1 and primary editorial modules so core semantics and content match before hydration.",
      "effort": "large"
    },
    {
      "id": "BBC-014",
      "pathId": "home",
      "url": "https://www.bbc.com/",
      "principleId": "be-sustainable",
      "principleCheckId": "optimised-assets",
      "guidanceId": "optimize-image-priority",
      "guidanceCategory": "performance",
      "severity": "medium",
      "confidence": "high",
      "summary": "Image delivery is responsive but still wastes bytes through legacy and oversized candidates.",
      "evidence": "The image audit found 100/100 images delivered as JPG/PNG, 11 over 2× displayed width, three without dimensions, and six below-fold images not lazy-loaded. All images did expose srcset.",
      "artifacts": [
        "evidence/home-images.json"
      ],
      "suggestedFix": "Negotiate AVIF/WebP from the image CDN, tighten sizes/srcset selection, add dimensions, and lazy-load non-critical below-fold images.",
      "effort": "medium"
    },
    {
      "id": "BBC-015",
      "pathId": "home",
      "url": "https://www.bbc.com/",
      "principleId": "be-memory-efficient",
      "principleCheckId": "no-leak-under-repeated-interaction",
      "guidanceId": "manage-recurring-intervals",
      "guidanceCategory": "javascript",
      "severity": "medium",
      "confidence": "low",
      "summary": "Repeated menu interaction is associated with large retained-heap growth and needs controlled leak investigation.",
      "evidence": "A fresh baseline heap summary reported 126,462 nodes / 10.3 MB self size; after ten menu open/close attempts a fresh-session post snapshot reported 794,217 nodes / 47.0 MB. Different hydration timing can explain part of this delta, so this is a low-confidence leak signal, not a proven leak trace.",
      "artifacts": [
        "evidence/home-heap.json",
        "evidence/home-heap-post-valid.json"
      ],
      "suggestedFix": "Repeat baseline/target/final snapshots in one controlled session after hydration and GC, then trace retainers for growing closures, timers, menu DOM and personalization caches.",
      "effort": "medium"
    }
  ],
  "taskList": [
    {
      "id": "TASK-1",
      "title": "Remove stacked on-load prompts and use semantic top-layer primitives",
      "priority": 1,
      "findingIds": [
        "BBC-003",
        "BBC-004"
      ],
      "guidanceId": "light-dismiss-a-dialog",
      "status": "open"
    },
    {
      "id": "TASK-2",
      "title": "Cut initial JavaScript, long tasks and LCP dependency chains",
      "priority": 2,
      "findingIds": [
        "BBC-005",
        "BBC-006",
        "BBC-007"
      ],
      "guidanceId": "identify-heavy-scripts",
      "status": "open"
    },
    {
      "id": "TASK-3",
      "title": "Enforce CSP, secure cookies and least-privilege browser policies",
      "priority": 3,
      "findingIds": [
        "BBC-010",
        "BBC-011"
      ],
      "guidanceId": "security",
      "status": "open"
    },
    {
      "id": "TASK-4",
      "title": "Reduce consent-time third-party measurement and personalization",
      "priority": 4,
      "findingIds": [
        "BBC-012"
      ],
      "guidanceId": "batch-analytics-events",
      "status": "open"
    },
    {
      "id": "TASK-5",
      "title": "Honor dark scheme and reduced motion preferences",
      "priority": 5,
      "findingIds": [
        "BBC-001",
        "BBC-002"
      ],
      "guidanceId": "dark-mode",
      "status": "open"
    },
    {
      "id": "TASK-6",
      "title": "Server-render stable homepage title, H1 and primary content",
      "priority": 6,
      "findingIds": [
        "BBC-013"
      ],
      "guidanceId": "performance",
      "status": "open"
    },
    {
      "id": "TASK-7",
      "title": "Modernize responsive image formats and sizing",
      "priority": 7,
      "findingIds": [
        "BBC-014"
      ],
      "guidanceId": "optimize-image-priority",
      "status": "open"
    },
    {
      "id": "TASK-8",
      "title": "Repair heading hierarchy and compact touch targets",
      "priority": 8,
      "findingIds": [
        "BBC-008",
        "BBC-009"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "TASK-9",
      "title": "Run a controlled same-session memory leak trace",
      "priority": 9,
      "findingIds": [
        "BBC-015"
      ],
      "guidanceId": "manage-recurring-intervals",
      "status": "open"
    }
  ],
  "budget": {
    "pathCount": 5,
    "auditPasses": 1
  },
  "agent": "pi",
  "runId": "2026-07-21T06-17-01-524Z"
}
