{
  "url": "https://www.bbc.co.uk",
  "auditedAt": "2026-07-20T11:57:55.367Z",
  "mode": "report",
  "status": "completed",
  "statusDetail": "Coverage-complete representative audit of seven public paths. Not covered: authenticated account settings, payment/subscription flows, playback after media start, personalized signed-in states, and every BBC product subdomain; these require credentials or represent separate product templates.",
  "page": {
    "appType": "hybrid",
    "framework": "React-like server-rendered MPA with legacy and modern product surfaces",
    "notes": "Large public-service publishing ecosystem. Homepage and article raw HTML retain 97–99% of rendered content. Dynamic headlines reflect the live site at capture time."
  },
  "evidenceUsed": [
    "Modern Web Guidance live feed",
    "screenshot",
    "DOM/computed styles",
    "evaluate probes",
    "layout metrics",
    "DevTools trace",
    "HAR",
    "discoverability/no-JS comparison",
    "security headers",
    "cookies",
    "trackers",
    "secrets scan",
    "image audit",
    "heap summaries",
    "Lighthouse"
  ],
  "guidanceConsulted": [
    "dark-mode",
    "accessibility",
    "adapt-scrollbar-to-contrast-preferences",
    "same-document-transitions",
    "scrollytelling",
    "physics-based-easing",
    "shrinking-header-on-scroll",
    "anchor-positioning-tab-underline",
    "directional-navigation-transitions",
    "light-dismiss-a-dialog",
    "declarative-dialog-popover-control",
    "complex-shapes",
    "fluid-scaling",
    "size-aware-styling",
    "improve-text-layout-and-legibility",
    "forms",
    "accessible-error-announcement",
    "identify-inp-causes",
    "visually-stable-font-fallbacks",
    "break-up-long-tasks",
    "optimize-image-priority",
    "identify-heavy-scripts",
    "move-dom-element-without-losing-state",
    "css",
    "html",
    "security",
    "privacy",
    "passkeys",
    "flicker-free-client-side-ab-testing",
    "resilient-context-menus-and-nested-dropdowns",
    "persistent-toast-notifications",
    "translator",
    "support-global-calendar-systems",
    "coordinate-global-events",
    "search-hidden-content",
    "autofill-address-form",
    "autofill-payment-form",
    "deliver-optimized-decorative-images",
    "deprioritize-background-fetches",
    "webmcp",
    "language-model",
    "manage-recurring-intervals",
    "highlight-text-ranges",
    "passkey-management",
    "faster-spa-view-transitions",
    "calculate-with-intrinsic-sizes"
  ],
  "artifacts": [
    {
      "type": "screenshot",
      "path": "evidence/404-mobile.png",
      "caption": "404 mobile",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/article-discoverability-crawler.png",
      "caption": "article discoverability crawler",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/article-discoverability-rendered.png",
      "caption": "article discoverability rendered",
      "findingIds": []
    },
    {
      "type": "discoverability",
      "path": "evidence/article-discoverability.json",
      "caption": "article discoverability",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/article-mobile.png",
      "caption": "article mobile",
      "findingIds": [
        "BBC-004",
        "BBC-012"
      ]
    },
    {
      "type": "other",
      "path": "evidence/article-probe.json",
      "caption": "article probe",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/focus-targets.json",
      "caption": "focus targets",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/guidance-list.json",
      "caption": "guidance list",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/guidance-retrieved.md",
      "caption": "guidance retrieved",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/guidance-searches.json",
      "caption": "guidance searches",
      "findingIds": []
    },
    {
      "type": "heap",
      "path": "evidence/heap-baseline.json",
      "caption": "heap baseline",
      "findingIds": [
        "BBC-015"
      ]
    },
    {
      "type": "heap",
      "path": "evidence/heap-post-menu.json",
      "caption": "heap post menu",
      "findingIds": [
        "BBC-015"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-cookies.json",
      "caption": "home cookies",
      "findingIds": [
        "BBC-010"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-dark.png",
      "caption": "home dark",
      "findingIds": [
        "BBC-001"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-desktop.png",
      "caption": "home desktop",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/home-discoverability-crawler.png",
      "caption": "home discoverability crawler",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/home-discoverability-rendered.png",
      "caption": "home discoverability rendered",
      "findingIds": []
    },
    {
      "type": "discoverability",
      "path": "evidence/home-discoverability.json",
      "caption": "home discoverability",
      "findingIds": []
    },
    {
      "type": "dom",
      "path": "evidence/home-dom.json",
      "caption": "home dom",
      "findingIds": [
        "BBC-008"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-headers.json",
      "caption": "home headers",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/home-high-contrast.png",
      "caption": "home high contrast",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/home-images.json",
      "caption": "home images",
      "findingIds": [
        "BBC-013"
      ]
    },
    {
      "type": "lighthouse",
      "path": "evidence/home-lighthouse.json",
      "caption": "home lighthouse",
      "findingIds": [
        "BBC-006",
        "BBC-009"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/home-mobile-layout.json",
      "caption": "home mobile layout",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/home-mobile.png",
      "caption": "home mobile",
      "findingIds": [
        "BBC-004",
        "BBC-010"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-recon.json",
      "caption": "home recon",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/home-secrets.json",
      "caption": "home secrets",
      "findingIds": []
    },
    {
      "type": "har-summary",
      "path": "evidence/home-summary.json",
      "caption": "home summary",
      "findingIds": [
        "BBC-008",
        "BBC-010",
        "BBC-013",
        "BBC-014"
      ]
    },
    {
      "type": "trace-summary",
      "path": "evidence/home-trace-summary.json",
      "caption": "home trace summary",
      "findingIds": [
        "BBC-006",
        "BBC-007",
        "BBC-014"
      ]
    },
    {
      "type": "trace",
      "path": "evidence/home-trace.json",
      "caption": "home trace",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/home-trackers.json",
      "caption": "home trackers",
      "findingIds": [
        "BBC-010",
        "BBC-014"
      ]
    },
    {
      "type": "har",
      "path": "evidence/home.har",
      "caption": "home",
      "findingIds": [
        "BBC-008"
      ]
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse-summary.json",
      "caption": "lighthouse summary",
      "findingIds": [
        "BBC-006",
        "BBC-007",
        "BBC-009"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/news-mobile.png",
      "caption": "news mobile",
      "findingIds": [
        "BBC-004"
      ]
    },
    {
      "type": "other",
      "path": "evidence/news-overlays.json",
      "caption": "news overlays",
      "findingIds": [
        "BBC-005"
      ]
    },
    {
      "type": "other",
      "path": "evidence/news-probe.json",
      "caption": "news probe",
      "findingIds": [
        "BBC-005"
      ]
    },
    {
      "type": "other",
      "path": "evidence/platform-probe.json",
      "caption": "platform probe",
      "findingIds": [
        "BBC-003"
      ]
    },
    {
      "type": "other",
      "path": "evidence/preferences.json",
      "caption": "preferences",
      "findingIds": [
        "BBC-001",
        "BBC-002"
      ]
    },
    {
      "type": "other",
      "path": "evidence/robots.json",
      "caption": "robots",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/search-mobile.png",
      "caption": "search mobile",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/search-probe.json",
      "caption": "search probe",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/signin-mobile.png",
      "caption": "signin mobile",
      "findingIds": [
        "BBC-011"
      ]
    },
    {
      "type": "other",
      "path": "evidence/signin-probe.json",
      "caption": "signin probe",
      "findingIds": [
        "BBC-011"
      ]
    },
    {
      "type": "other",
      "path": "evidence/sitemap.json",
      "caption": "sitemap",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/weather-mobile.png",
      "caption": "weather mobile",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/weather-probe.json",
      "caption": "weather 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": "Direct evidence review using the linked artifacts and representative path",
      "evidence": "The prefers-color-scheme: dark screenshot is visually identical to the light capture; the probe reports color-scheme \"normal\" and body background rgb(248, 248, 248).",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dark.png",
        "evidence/preferences.json"
      ],
      "findingIds": [
        "BBC-001"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-reduced-motion",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence review using the linked artifacts and representative path",
      "evidence": "The emulated reduced-motion probe found sixteen running animations named animation-w6tfot, each with an 8,000 ms duration.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/preferences.json"
      ],
      "findingIds": [
        "BBC-002"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-contrast",
      "status": "pass",
      "confidence": "medium",
      "method": "screenshot + emulated forced-colors",
      "evidence": "Forced-colors/high-contrast screenshot keeps navigation, hero text, consent controls and focus boundaries visible.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-high-contrast.png"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "view-transitions",
      "status": "issues",
      "confidence": "medium",
      "method": "Direct evidence review using the linked artifacts and representative path",
      "evidence": "The platform probe found zero authored view-transition rules across accessible stylesheets on an interaction-rich homepage.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/platform-probe.json"
      ],
      "findingIds": [
        "BBC-003"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "scroll-driven-animations",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement across representative paths",
      "evidence": "No parallax, scrollytelling, entry reveal or other scroll-linked motion was observed on the representative templates, so there is no scroll-linked implementation to assess.",
      "reason": "No parallax, scrollytelling, entry reveal or other scroll-linked motion was observed on the representative templates, so there is no scroll-linked implementation to assess.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "physical-gestures",
      "status": "pass",
      "confidence": "medium",
      "method": "visual + focus probe",
      "evidence": "Homepage media carousel exposes large native controls and a horizontal content sequence without evidence of custom pointer-only handling.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "scroll-state-aware-chrome",
      "status": "pass",
      "confidence": "medium",
      "method": "visual review",
      "evidence": "Long-page screenshots show compact global chrome and no sticky element obscuring content; no JS-driven scroll-state malfunction was observed.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "anchored-positioning",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement across representative paths",
      "evidence": "No tooltip or detached floating-menu use case was observed on the representative first-visit paths; fixed consent and modal surfaces are assessed under interruption and semantics.",
      "reason": "No tooltip or detached floating-menu use case was observed on the representative first-visit paths; fixed consent and modal surfaces are assessed under interruption and semantics.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "directs-attention",
      "status": "pass",
      "confidence": "medium",
      "method": "screenshot + focus probe",
      "evidence": "Global nav uses descriptive section labels, skip navigation and strong visible focus rings; search and article headings clearly establish destination context.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/focus-targets.json"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "no-intrusive-interruptions",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence review using the linked artifacts and representative path",
      "evidence": "Mobile captures show the fixed cookie banner occupying roughly the lower 40% of the viewport across templates; the article capture also shows a centered sign-in promotion layered above both article and cookie banner.",
      "pathIds": [
        "news"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/article-mobile.png",
        "evidence/news-mobile.png"
      ],
      "findingIds": [
        "BBC-004"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "semantic-dismissible-primitives",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence review using the linked artifacts and representative path",
      "evidence": "The overlay DOM probe found three DIV elements with role=dialog and aria-modal=true; no native dialog or popover elements were found on the representative news template.",
      "pathIds": [
        "news"
      ],
      "artifacts": [
        "evidence/news-overlays.json",
        "evidence/news-probe.json"
      ],
      "findingIds": [
        "BBC-005"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "reduced-chrome",
      "status": "pass",
      "confidence": "medium",
      "method": "visual review across templates",
      "evidence": "Despite dense editorial content, primary viewports prioritize headline, imagery and results; chrome is compact once the separately-reported first-visit overlays are excluded.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "responsive-no-horizontal-scroll",
      "status": "pass",
      "confidence": "medium",
      "method": "mobile layout primitive",
      "evidence": "At 360x800, layout metrics report scrollWidth 360, clientWidth 360 and horizontalOverflowPx 0 with viewport meta present.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile-layout.json"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "component-level-responsiveness",
      "status": "pass",
      "confidence": "medium",
      "method": "CSS rule probe + screenshots",
      "evidence": "The stylesheet probe found an authored container rule and mobile captures show distinct reflowed global navigation and cards.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/platform-probe.json"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "input-modality-aware",
      "status": "pass",
      "confidence": "medium",
      "method": "active focus/target probe",
      "evidence": "Focus probe shows 2–3 px outlines on primary links and controls and main nav targets are at least 44 px high; mobile controls remain directly operable.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/focus-targets.json"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-purpose-and-primary-action",
      "status": "pass",
      "confidence": "medium",
      "method": "multi-path screenshots + heading probes",
      "evidence": "Homepage, News, Weather, Search and article captures each expose a descriptive H1/section title and an obvious content or search task.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "primary-flow-completion",
      "status": "pass",
      "confidence": "medium",
      "method": "live journey walkthrough",
      "evidence": "The climate query loaded real topic/results content, article navigation reached a complete story, and Weather exposes location search without an account requirement.",
      "pathIds": [
        "search"
      ],
      "artifacts": [
        "evidence/search-mobile.png"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-system-state-and-recovery",
      "status": "pass",
      "confidence": "medium",
      "method": "error-state and search screenshots",
      "evidence": "The invalid route produced a designed BBC error page with navigation rather than a blank shell; search results visibly echo the query.",
      "pathIds": [
        "not-found"
      ],
      "artifacts": [
        "evidence/404-mobile.png"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "good-core-web-vitals",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence review using the linked artifacts and representative path",
      "evidence": "Lighthouse measured LCP 3.7 s, TBT 1,350 ms, max potential FID 740 ms, and a performance score of 0.64; the trace independently recorded 309 ms TBT and a 189 ms longest task.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-lighthouse.json",
        "evidence/lighthouse-summary.json",
        "evidence/home-trace-summary.json"
      ],
      "findingIds": [
        "BBC-006"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "visual-stability",
      "status": "pass",
      "confidence": "medium",
      "method": "layout observer + Lighthouse",
      "evidence": "Mobile layout observer recorded CLS 0 with no layout-shift entries; Lighthouse independently measured CLS 0.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile-layout.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-main-thread",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence review using the linked artifacts and representative path",
      "evidence": "Trace evidence contains three long tasks (189, 182, and 88 ms); Lighthouse reports 1,350 ms total blocking time and 14.3 s time to interactive.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-trace-summary.json",
        "evidence/lighthouse-summary.json"
      ],
      "findingIds": [
        "BBC-007"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-resource-delivery",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence review using the linked artifacts and representative path",
      "evidence": "HAR recorded 97 requests and 1.40 MB transferred, including 67 scripts (698 KB); several high-priority parser-initiated bundles were listed, while DOM confirmation shows the core bundles are async modules, so the issue is breadth and cost rather than a claim that those modules block parsing.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har",
        "evidence/home-dom.json"
      ],
      "findingIds": [
        "BBC-008"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "trim-unused-and-duplicate-code",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence review using the linked artifacts and representative path",
      "evidence": "HAR recorded 97 requests and 1.40 MB transferred, including 67 scripts (698 KB); several high-priority parser-initiated bundles were listed, while DOM confirmation shows the core bundles are async modules, so the issue is breadth and cost rather than a claim that those modules block parsing.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har",
        "evidence/home-dom.json"
      ],
      "findingIds": [
        "BBC-008"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "names-roles-labels",
      "status": "pass",
      "confidence": "medium",
      "method": "Lighthouse + DOM probes",
      "evidence": "Lighthouse accessibility scored 1.0; the search input has a programmatic label and meaningful editorial images expose alt text in the DOM/image audit.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-lighthouse.json"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "sufficient-contrast",
      "status": "pass",
      "confidence": "medium",
      "method": "Lighthouse + forced-colors screenshot",
      "evidence": "Lighthouse accessibility scored 1.0 and forced-colors capture preserves legible text and controls across high-contrast hero and consent surfaces.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-high-contrast.png"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "structure-and-focus",
      "status": "pass",
      "confidence": "medium",
      "method": "heading + focus probes",
      "evidence": "Pages expose one meaningful H1, skip navigation and ordered headings; active focus probe reports strong outlines on global nav and content controls.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/focus-targets.json"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "legible-text",
      "status": "pass",
      "confidence": "medium",
      "method": "visual review",
      "evidence": "Desktop and mobile captures show readable Reith text, strong hierarchy and no clipping outside the separately reported overlays.",
      "pathIds": [
        "article"
      ],
      "artifacts": [
        "evidence/article-mobile.png"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "zoom-reflow-targets-and-media",
      "status": "pass",
      "confidence": "medium",
      "method": "viewport + layout + target probe",
      "evidence": "Viewport allows scaling, narrow layouts reflow without overflow, and primary controls sampled by the focus probe meet or exceed 44 px in at least one dimension.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile-layout.json"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "no-console-errors",
      "status": "pass",
      "confidence": "medium",
      "method": "Lighthouse runtime audit",
      "evidence": "Lighthouse did not fail its errors-in-console audit and completed without run warnings.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-lighthouse.json"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "sound-document-and-assets",
      "status": "pass",
      "confidence": "medium",
      "method": "DOM + Lighthouse",
      "evidence": "DOM probe reports HTML doctype, UTF-8 charset and correctly configured viewport; Lighthouse best-practices found no image aspect-ratio failure.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/platform-probe.json"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "browser-platform-hygiene",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence review using the linked artifacts and representative path",
      "evidence": "Lighthouse best-practices scored 0.77 and the inspector-issues audit failed, despite the document otherwise using a valid doctype and charset.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-lighthouse.json",
        "evidence/lighthouse-summary.json"
      ],
      "findingIds": [
        "BBC-009"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "title-and-description",
      "status": "pass",
      "confidence": "medium",
      "method": "multi-path DOM probes",
      "evidence": "Homepage, News, article, Weather and Search probes expose descriptive titles and meta descriptions.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-recon.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "crawlable-and-mobile-friendly",
      "status": "pass",
      "confidence": "medium",
      "method": "DOM + robots inspection",
      "evidence": "Real href links, viewport metadata and descriptive nav/content labels are present; robots permits normal public indexing outside explicitly disallowed search routes.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/robots.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "canonical-and-indexing-signals",
      "status": "pass",
      "confidence": "medium",
      "method": "DOM + robots/sitemap inspection",
      "evidence": "Homepage, News, article and Weather expose canonical URLs; robots lists multiple sitemaps and public routes returned successful content. Search correctly declares noindex.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/sitemap.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "structured-and-shareable-metadata",
      "status": "pass",
      "confidence": "medium",
      "method": "metadata probe",
      "evidence": "News and article probes each find JSON-LD plus Open Graph metadata that aligns with visible titles; homepage also provides share metadata via server HTML.",
      "pathIds": [
        "article"
      ],
      "artifacts": [
        "evidence/article-probe.json"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "secure-transport-and-headers",
      "status": "pass",
      "confidence": "medium",
      "method": "headers + cookies + secrets primitives",
      "evidence": "Page is HTTPS with CSP, HSTS preload, nosniff and secure cookies; secrets scan found no exposed credentials. The nonce/strict-dynamic CSP mitigates the reported unsafe-inline compatibility token.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-headers.json"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "data-minimisation-and-third-parties",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence review using the linked artifacts and representative path",
      "evidence": "The tracker capture observed 16 non-page origins and an active scorecardresearch tracker; the HAR attributes 95 of 97 requests and 1.28 MB to origins other than www.bbc.co.uk (including BBC-owned CDNs), and cookies include long-lived Chartbeat/analytics identifiers.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-trackers.json",
        "evidence/home-cookies.json",
        "evidence/home-summary.json",
        "evidence/home-mobile.png"
      ],
      "findingIds": [
        "BBC-010"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "in-context-permissions-and-modern-auth",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence review using the linked artifacts and representative path",
      "evidence": "The live sign-in probe found a username form with correct autocomplete and no passkey or PublicKeyCredential affordance; the page text offers Continue with Google as the alternative.",
      "pathIds": [
        "signin"
      ],
      "artifacts": [
        "evidence/signin-probe.json",
        "evidence/signin-mobile.png"
      ],
      "findingIds": [
        "BBC-011"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "defensive-browser-policies",
      "status": "pass",
      "confidence": "medium",
      "method": "security headers primitive",
      "evidence": "Headers include frame-ancestors none/X-Frame-Options DENY, strict referrer policy and a restrictive Permissions-Policy alongside HSTS.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-headers.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "progressive-enhancement",
      "status": "pass",
      "confidence": "medium",
      "method": "discoverability no-JS comparison",
      "evidence": "Discoverability comparison reports 99% raw-HTML coverage on home and 97% on the article, with title, H1 and description available without JavaScript.",
      "pathIds": [
        "article"
      ],
      "artifacts": [
        "evidence/article-discoverability.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "resilient-runtime-behaviour",
      "status": "pass",
      "confidence": "medium",
      "method": "multi-path screenshots + overlay DOM",
      "evidence": "Representative content, search and weather templates rendered complete mobile states; modal controls expose explicit close actions and no viewport-edge clipping was observed.",
      "pathIds": [
        "news"
      ],
      "artifacts": [
        "evidence/news-overlays.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "offline-and-installable",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement across representative paths",
      "evidence": "BBC is primarily a live content and media service; installability exists via a manifest/service-worker signal, but a meaningful full offline flow is not expected for live weather, news and streaming content.",
      "reason": "BBC is primarily a live content and media service; installability exists via a manifest/service-worker signal, but a meaningful full offline flow is not expected for live weather, news and streaming content.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "network-and-http-failure-states",
      "status": "pass",
      "confidence": "medium",
      "method": "404 walkthrough + HAR summary",
      "evidence": "An invalid route renders a branded, navigable error state rather than a blank shell, and HAR recorded no HTTP errors on the primary homepage load.",
      "pathIds": [
        "not-found"
      ],
      "artifacts": [
        "evidence/404-mobile.png"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "lang-dir-and-logical-properties",
      "status": "pass",
      "confidence": "medium",
      "method": "DOM language + mobile visual review",
      "evidence": "Representative pages declare en-GB or en and maintain coherent reading order and mobile reflow; no bidi content was present that required explicit dir.",
      "pathIds": [
        "article"
      ],
      "artifacts": [
        "evidence/article-probe.json"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "locale-aware-data",
      "status": "pass",
      "confidence": "medium",
      "method": "rendered locale review",
      "evidence": "Weather and editorial surfaces render UK-localized language and human-readable dates/conditions consistently with their declared English locale.",
      "pathIds": [
        "weather"
      ],
      "artifacts": [
        "evidence/weather-mobile.png"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "time-zone-correctness",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement across representative paths",
      "evidence": "No scheduled event creation or time-zone-sensitive transactional flow was present in the selected public content, search, weather or sign-in paths.",
      "reason": "No scheduled event creation or time-zone-sensitive transactional flow was present in the selected public content, search, weather or sign-in paths.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "no-dark-patterns",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence review using the linked artifacts and representative path",
      "evidence": "The mobile article capture shows “Get the news, your way” as a centered modal over dimmed article content, with the already-large cookie decision surface still behind it.",
      "pathIds": [
        "article"
      ],
      "artifacts": [
        "evidence/article-mobile.png"
      ],
      "findingIds": [
        "BBC-012"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "humane-error-handling",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement across representative paths",
      "evidence": "No user-authored validation flow could be completed without account credentials; public search accepts an empty/query string and the representative pages expose no required-data form.",
      "reason": "No user-authored validation flow could be completed without account credentials; public search accepts an empty/query string and the representative pages expose no required-data form.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "trustworthy-input-assistance",
      "status": "pass",
      "confidence": "medium",
      "method": "form attribute probes",
      "evidence": "Sign-in username uses autocomplete=username and an explicit label; search is labelled “Input your search term”.",
      "pathIds": [
        "signin"
      ],
      "artifacts": [
        "evidence/signin-probe.json"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "safe-commercial-and-account-flows",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement across representative paths",
      "evidence": "No checkout, subscription purchase, cancellation or sensitive authenticated account-management flow is part of the public BBC paths audited.",
      "reason": "No checkout, subscription purchase, cancellation or sensitive authenticated account-management flow is part of the public BBC paths audited.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "optimised-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence review using the linked artifacts and representative path",
      "evidence": "The image audit found 6 images over twice their displayed dimensions and 11 below-fold images without lazy loading. The HAR confirms modern WebP delivery for sampled large images, so format is not the concern.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-images.json",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "BBC-013"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "no-wasteful-work",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence review using the linked artifacts and representative path",
      "evidence": "HAR recorded 67 scripts and multiple analytics origins; trace and layout evidence recorded repeated long tasks after content appeared.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home-trace-summary.json",
        "evidence/home-trackers.json"
      ],
      "findingIds": [
        "BBC-014"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "third-party-and-media-budget",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence review using the linked artifacts and representative path",
      "evidence": "The tracker capture observed 16 non-page origins and an active scorecardresearch tracker; the HAR attributes 95 of 97 requests and 1.28 MB to origins other than www.bbc.co.uk (including BBC-owned CDNs), and cookies include long-lived Chartbeat/analytics identifiers.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-trackers.json",
        "evidence/home-cookies.json",
        "evidence/home-summary.json",
        "evidence/home-mobile.png"
      ],
      "findingIds": [
        "BBC-010",
        "BBC-014"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "structured-agent-capabilities",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement across representative paths",
      "evidence": "BBC robots.txt explicitly disallows agentic AI, AI-powered search, RAG and major AI crawlers; structured agent capabilities are intentionally outside the publisher’s declared policy.",
      "reason": "BBC robots.txt explicitly disallows agentic AI, AI-powered search, RAG and major AI crawlers; structured agent capabilities are intentionally outside the publisher’s declared policy.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "on-device-inference",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement across representative paths",
      "evidence": "BBC robots policy and the observed public surfaces show no intended AI-assistance capability; on-device inference is an emerging optional opportunity, not required for this publishing service.",
      "reason": "BBC robots policy and the observed public surfaces show no intended AI-assistance capability; on-device inference is an emerging optional opportunity, not required for this publishing service.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-leak-under-repeated-interaction",
      "status": "issues",
      "confidence": "low",
      "method": "Direct evidence review using the linked artifacts and representative path",
      "evidence": "After ten menu open/escape cycles, the heap summary grew from 689,702 nodes / 38.9 MB self-size to 887,218 nodes / 52.2 MB. Separate page processes add noise, so this is a low-confidence leak signal, not a proven retained path.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.json",
        "evidence/heap-post-menu.json"
      ],
      "findingIds": [
        "BBC-015"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "bounded-footprint",
      "status": "pass",
      "confidence": "medium",
      "method": "heap summary + page profile",
      "evidence": "Baseline heap is 38.9 MB self-size for a very large media homepage; substantial but proportionate to the 100-image, component-rich page, with the interaction growth separately flagged.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.json"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-detached-dom-or-unbounded-listeners",
      "status": "pass",
      "confidence": "medium",
      "method": "before/after heap summary comparison",
      "evidence": "Heap summaries do not surface Detached* among the top constructors; growth remains a low-confidence general signal handled by BBC-015 rather than proof of detached DOM/listener accumulation.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-post-menu.json"
      ]
    }
  ],
  "principleOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "BBC-001",
        "BBC-002"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "BBC-003"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "BBC-004",
        "BBC-005"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "support-core-task-success",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "be-fast-and-stable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "BBC-006",
        "BBC-007",
        "BBC-008"
      ]
    },
    {
      "principleId": "be-inclusive",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "follow-best-practices",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "BBC-009"
      ]
    },
    {
      "principleId": "be-discoverable",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "be-private-and-secure",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "BBC-010",
        "BBC-011"
      ]
    },
    {
      "principleId": "be-resilient",
      "expectation": "contextual",
      "status": "pass"
    },
    {
      "principleId": "be-internationalised",
      "expectation": "contextual",
      "status": "pass"
    },
    {
      "principleId": "be-trustworthy",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "BBC-012"
      ]
    },
    {
      "principleId": "be-sustainable",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "BBC-013",
        "BBC-014",
        "BBC-010"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "expectation": "contextual",
      "status": "not-applicable",
      "reason": "BBC robots.txt explicitly disallows agentic AI, AI-powered search, RAG and major AI crawlers; structured agent capabilities are intentionally outside the publisher’s declared policy. BBC robots policy and the observed public surfaces show no intended AI-assistance capability; on-device inference is an emerging optional opportunity, not required for this publishing service."
    },
    {
      "principleId": "be-memory-efficient",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "BBC-015"
      ]
    }
  ],
  "paths": [
    {
      "id": "home",
      "description": "BBC homepage, global navigation and content-hub template; primary entry surface.",
      "url": "https://www.bbc.co.uk/",
      "conditions": [
        "desktop 1440x1000",
        "mobile 360x800",
        "prefers-color-scheme: dark",
        "prefers-reduced-motion: reduce",
        "forced-colors: active",
        "keyboard focus"
      ],
      "result": "issues"
    },
    {
      "id": "news",
      "description": "BBC News section/listing template, including first-load personalization and consent overlays.",
      "url": "https://www.bbc.co.uk/news",
      "conditions": [
        "mobile 390x844",
        "first visit"
      ],
      "result": "issues"
    },
    {
      "id": "article",
      "description": "Representative editorial article/detail template selected from the homepage.",
      "url": "https://www.bbc.co.uk/news/articles/c20d4j4v9g9o",
      "conditions": [
        "mobile 390x844",
        "JavaScript enabled and crawler/no-JS comparison"
      ],
      "result": "issues"
    },
    {
      "id": "weather",
      "description": "Interactive utility surface representing location search and personalized data.",
      "url": "https://www.bbc.co.uk/weather",
      "conditions": [
        "mobile 390x844",
        "first visit"
      ],
      "result": "issues"
    },
    {
      "id": "search",
      "description": "Primary site-search journey with a real query and results.",
      "url": "https://www.bbc.co.uk/search?q=climate",
      "conditions": [
        "mobile 390x844"
      ],
      "result": "issues"
    },
    {
      "id": "signin",
      "description": "Authentication entry surface reached from global navigation.",
      "url": "https://session.bbc.co.uk/session",
      "conditions": [
        "mobile 390x844"
      ],
      "result": "issues"
    },
    {
      "id": "not-found",
      "description": "Invalid route used to inspect HTTP/error recovery presentation.",
      "url": "https://www.bbc.co.uk/this-route-does-not-exist-web-uplift",
      "conditions": [
        "mobile 390x844"
      ],
      "result": "pass"
    }
  ],
  "findings": [
    {
      "id": "BBC-001",
      "pathId": "home",
      "url": "https://www.bbc.co.uk/",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-color-scheme",
      "guidanceId": "dark-mode",
      "guidanceCategory": "user-experience",
      "severity": "medium",
      "confidence": "high",
      "summary": "The public homepage remains light when the system requests a dark colour scheme.",
      "evidence": "The prefers-color-scheme: dark screenshot is visually identical to the light capture; the probe reports color-scheme \"normal\" and body background rgb(248, 248, 248).",
      "artifacts": [
        "evidence/home-dark.png",
        "evidence/preferences.json"
      ],
      "suggestedFix": "Declare color-scheme: light dark and provide preference-driven dark surface, text, border and image treatments using the dark-mode guidance.",
      "effort": "medium"
    },
    {
      "id": "BBC-002",
      "pathId": "home",
      "url": "https://www.bbc.co.uk/",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-reduced-motion",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "severity": "medium",
      "confidence": "high",
      "summary": "Long-running animations continue under prefers-reduced-motion: reduce.",
      "evidence": "The emulated reduced-motion probe found sixteen running animations named animation-w6tfot, each with an 8,000 ms duration.",
      "artifacts": [
        "evidence/preferences.json"
      ],
      "suggestedFix": "Under prefers-reduced-motion: reduce, remove non-essential looping animation and stop auto-advance while preserving essential state feedback.",
      "effort": "small"
    },
    {
      "id": "BBC-003",
      "pathId": "home",
      "url": "https://www.bbc.co.uk/",
      "principleId": "implement-natural-interactions",
      "principleCheckId": "view-transitions",
      "guidanceId": "same-document-transitions",
      "guidanceCategory": "user-experience",
      "severity": "low",
      "confidence": "medium",
      "summary": "State and route changes do not expose View Transition styling.",
      "evidence": "The platform probe found zero authored view-transition rules across accessible stylesheets on an interaction-rich homepage.",
      "artifacts": [
        "evidence/platform-probe.json"
      ],
      "suggestedFix": "Use same-document or cross-document View Transitions for major route and state changes, with reduced-motion handling.",
      "effort": "medium"
    },
    {
      "id": "BBC-004",
      "pathId": "news",
      "url": "https://www.bbc.co.uk/news",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "no-intrusive-interruptions",
      "guidanceId": "light-dismiss-a-dialog",
      "guidanceCategory": "user-experience",
      "severity": "high",
      "confidence": "high",
      "summary": "First-visit overlays substantially obscure primary content on mobile.",
      "evidence": "Mobile captures show the fixed cookie banner occupying roughly the lower 40% of the viewport across templates; the article capture also shows a centered sign-in promotion layered above both article and cookie banner.",
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/article-mobile.png",
        "evidence/news-mobile.png"
      ],
      "suggestedFix": "Reduce the consent surface to the minimum legally required footprint and delay the optional personalization prompt until an explicit user action; ensure clear light-dismiss where appropriate.",
      "effort": "medium"
    },
    {
      "id": "BBC-005",
      "pathId": "news",
      "url": "https://www.bbc.co.uk/news",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "semantic-dismissible-primitives",
      "guidanceId": "declarative-dialog-popover-control",
      "guidanceCategory": "user-experience",
      "severity": "medium",
      "confidence": "high",
      "summary": "Modal experiences are implemented as generic divs with ARIA rather than native dialog primitives.",
      "evidence": "The overlay DOM probe found three DIV elements with role=dialog and aria-modal=true; no native dialog or popover elements were found on the representative news template.",
      "artifacts": [
        "evidence/news-overlays.json",
        "evidence/news-probe.json"
      ],
      "suggestedFix": "Use native <dialog> for modal media flows and popover for transient non-modal UI, retaining accessible names and declarative dismissal.",
      "effort": "medium"
    },
    {
      "id": "BBC-006",
      "pathId": "home",
      "url": "https://www.bbc.co.uk/",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "good-core-web-vitals",
      "guidanceId": "identify-inp-causes",
      "guidanceCategory": "performance",
      "severity": "high",
      "confidence": "high",
      "summary": "Mobile lab loading and main-thread responsiveness miss the good performance range.",
      "evidence": "Lighthouse measured LCP 3.7 s, TBT 1,350 ms, max potential FID 740 ms, and a performance score of 0.64; the trace independently recorded 309 ms TBT and a 189 ms longest task.",
      "artifacts": [
        "evidence/home-lighthouse.json",
        "evidence/lighthouse-summary.json",
        "evidence/home-trace-summary.json"
      ],
      "suggestedFix": "Profile the LCP dependency and interaction tasks, prioritize the LCP image, and split or defer long JavaScript work using the performance guidance.",
      "effort": "large"
    },
    {
      "id": "BBC-007",
      "pathId": "home",
      "url": "https://www.bbc.co.uk/",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-main-thread",
      "guidanceId": "break-up-long-tasks",
      "guidanceCategory": "performance",
      "severity": "medium",
      "confidence": "high",
      "summary": "Large script execution tasks block the main thread.",
      "evidence": "Trace evidence contains three long tasks (189, 182, and 88 ms); Lighthouse reports 1,350 ms total blocking time and 14.3 s time to interactive.",
      "artifacts": [
        "evidence/home-trace-summary.json",
        "evidence/lighthouse-summary.json"
      ],
      "suggestedFix": "Break long work into schedulable chunks, defer below-fold component hydration, and remove unnecessary startup execution.",
      "effort": "large"
    },
    {
      "id": "BBC-008",
      "pathId": "home",
      "url": "https://www.bbc.co.uk/",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-resource-delivery",
      "guidanceId": "optimize-image-priority",
      "guidanceCategory": "performance",
      "severity": "medium",
      "confidence": "high",
      "summary": "The homepage has a broad startup dependency and script payload.",
      "evidence": "HAR recorded 97 requests and 1.40 MB transferred, including 67 scripts (698 KB); several high-priority parser-initiated bundles were listed, while DOM confirmation shows the core bundles are async modules, so the issue is breadth and cost rather than a claim that those modules block parsing.",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har",
        "evidence/home-dom.json"
      ],
      "suggestedFix": "Reduce initial component bundles, defer non-critical features and analytics, and preserve explicit LCP image priority.",
      "effort": "large"
    },
    {
      "id": "BBC-009",
      "pathId": "home",
      "url": "https://www.bbc.co.uk/",
      "principleId": "follow-best-practices",
      "principleCheckId": "browser-platform-hygiene",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "severity": "low",
      "confidence": "high",
      "summary": "Chrome reports browser inspector issues on load.",
      "evidence": "Lighthouse best-practices scored 0.77 and the inspector-issues audit failed, despite the document otherwise using a valid doctype and charset.",
      "artifacts": [
        "evidence/home-lighthouse.json",
        "evidence/lighthouse-summary.json"
      ],
      "suggestedFix": "Resolve the concrete DevTools Issues-panel entries and add regression monitoring for browser deprecations and policy issues.",
      "effort": "small"
    },
    {
      "id": "BBC-010",
      "pathId": "home",
      "url": "https://www.bbc.co.uk/",
      "principleId": "be-private-and-secure",
      "principleCheckId": "data-minimisation-and-third-parties",
      "guidanceId": "privacy",
      "guidanceCategory": "privacy",
      "severity": "high",
      "confidence": "high",
      "summary": "Tracking and analytics requests run on a first visit while the banner says additional cookies are off by default.",
      "evidence": "The tracker capture observed 16 non-page origins and an active scorecardresearch tracker; the HAR attributes 95 of 97 requests and 1.28 MB to origins other than www.bbc.co.uk (including BBC-owned CDNs), and cookies include long-lived Chartbeat/analytics identifiers.",
      "artifacts": [
        "evidence/home-trackers.json",
        "evidence/home-cookies.json",
        "evidence/home-summary.json",
        "evidence/home-mobile.png"
      ],
      "suggestedFix": "Block non-essential measurement until affirmative consent, minimize identifiers and retention, batch essential analytics, and document why every pre-consent endpoint is necessary.",
      "effort": "large"
    },
    {
      "id": "BBC-011",
      "pathId": "signin",
      "url": "https://account.bbc.com/auth",
      "principleId": "be-private-and-secure",
      "principleCheckId": "in-context-permissions-and-modern-auth",
      "guidanceId": "passkeys",
      "guidanceCategory": "identity",
      "severity": "medium",
      "confidence": "high",
      "summary": "The sign-in entry offers username/password or Google but no phishing-resistant passkey path.",
      "evidence": "The live sign-in probe found a username form with correct autocomplete and no passkey or PublicKeyCredential affordance; the page text offers Continue with Google as the alternative.",
      "artifacts": [
        "evidence/signin-probe.json",
        "evidence/signin-mobile.png"
      ],
      "suggestedFix": "Add passkey authentication and registration as a first-class option while retaining accessible account recovery and existing fallbacks.",
      "effort": "large"
    },
    {
      "id": "BBC-012",
      "pathId": "article",
      "url": "https://www.bbc.co.uk/news/articles/c20d4j4v9g9o",
      "principleId": "be-trustworthy",
      "principleCheckId": "no-dark-patterns",
      "guidanceId": "search-hidden-content",
      "guidanceCategory": "user-experience",
      "severity": "medium",
      "confidence": "high",
      "summary": "An unsolicited personalization sign-in promotion interrupts article reading before the user asks to personalize.",
      "evidence": "The mobile article capture shows “Get the news, your way” as a centered modal over dimmed article content, with the already-large cookie decision surface still behind it.",
      "artifacts": [
        "evidence/article-mobile.png"
      ],
      "suggestedFix": "Trigger personalization only after an explicit request or a non-blocking contextual cue, keep “Maybe later” equally prominent, and remember dismissal.",
      "effort": "small"
    },
    {
      "id": "BBC-013",
      "pathId": "home",
      "url": "https://www.bbc.co.uk/",
      "principleId": "be-sustainable",
      "principleCheckId": "optimised-assets",
      "guidanceId": "deliver-optimized-decorative-images",
      "guidanceCategory": "performance",
      "severity": "medium",
      "confidence": "high",
      "summary": "Several images are oversized or eagerly loaded below the fold.",
      "evidence": "The image audit found 6 images over twice their displayed dimensions and 11 below-fold images without lazy loading. The HAR confirms modern WebP delivery for sampled large images, so format is not the concern.",
      "artifacts": [
        "evidence/home-images.json",
        "evidence/home-summary.json"
      ],
      "suggestedFix": "Tighten responsive image candidate widths and lazy-load non-critical below-fold imagery while preserving eager loading and fetch priority for the LCP image.",
      "effort": "medium"
    },
    {
      "id": "BBC-014",
      "pathId": "home",
      "url": "https://www.bbc.co.uk/",
      "principleId": "be-sustainable",
      "principleCheckId": "no-wasteful-work",
      "guidanceId": "deprioritize-background-fetches",
      "guidanceCategory": "performance",
      "severity": "medium",
      "confidence": "high",
      "summary": "The initial experience performs disproportionate background script and measurement work.",
      "evidence": "HAR recorded 67 scripts and multiple analytics origins; trace and layout evidence recorded repeated long tasks after content appeared.",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home-trace-summary.json",
        "evidence/home-trackers.json"
      ],
      "suggestedFix": "Conditionally load feature bundles, delay background measurement until idle and consent, and stop work when the page is hidden.",
      "effort": "large"
    },
    {
      "id": "BBC-015",
      "pathId": "home",
      "url": "https://www.bbc.co.uk/",
      "principleId": "be-memory-efficient",
      "principleCheckId": "no-leak-under-repeated-interaction",
      "guidanceId": "manage-recurring-intervals",
      "guidanceCategory": "javascript",
      "severity": "medium",
      "confidence": "low",
      "summary": "Repeated global-menu interaction correlates with substantial retained-heap growth and needs leak-trace confirmation.",
      "evidence": "After ten menu open/escape cycles, the heap summary grew from 689,702 nodes / 38.9 MB self-size to 887,218 nodes / 52.2 MB. Separate page processes add noise, so this is a low-confidence leak signal, not a proven retained path.",
      "artifacts": [
        "evidence/heap-baseline.json",
        "evidence/heap-post-menu.json"
      ],
      "suggestedFix": "Reproduce in one controlled baseline/target/final session, force collection between snapshots, and inspect retained paths for menu DOM, listeners, timers and caches before changing code.",
      "effort": "medium"
    }
  ],
  "taskList": [
    {
      "id": "TASK-001",
      "title": "Remove pre-consent tracking and minimize first-visit analytics",
      "priority": 1,
      "findingIds": [
        "BBC-010",
        "BBC-014"
      ],
      "guidanceId": "privacy",
      "status": "open"
    },
    {
      "id": "TASK-002",
      "title": "Reduce startup JavaScript and break up long main-thread tasks",
      "priority": 2,
      "findingIds": [
        "BBC-006",
        "BBC-007",
        "BBC-008"
      ],
      "guidanceId": "break-up-long-tasks",
      "status": "open"
    },
    {
      "id": "TASK-003",
      "title": "Stop stacking first-visit consent and personalization interruptions",
      "priority": 3,
      "findingIds": [
        "BBC-004",
        "BBC-012"
      ],
      "guidanceId": "light-dismiss-a-dialog",
      "status": "open"
    },
    {
      "id": "TASK-004",
      "title": "Respect dark mode and reduced-motion preferences",
      "priority": 4,
      "findingIds": [
        "BBC-001",
        "BBC-002"
      ],
      "guidanceId": "dark-mode",
      "status": "open"
    },
    {
      "id": "TASK-005",
      "title": "Add passkey authentication",
      "priority": 5,
      "findingIds": [
        "BBC-011"
      ],
      "guidanceId": "passkeys",
      "status": "open"
    },
    {
      "id": "TASK-006",
      "title": "Use native dialog/popover primitives for overlays",
      "priority": 6,
      "findingIds": [
        "BBC-005"
      ],
      "guidanceId": "declarative-dialog-popover-control",
      "status": "open"
    },
    {
      "id": "TASK-007",
      "title": "Right-size and defer non-critical images",
      "priority": 7,
      "findingIds": [
        "BBC-013"
      ],
      "guidanceId": "deliver-optimized-decorative-images",
      "status": "open"
    },
    {
      "id": "TASK-008",
      "title": "Confirm or dismiss the repeated-menu heap-growth signal",
      "priority": 8,
      "findingIds": [
        "BBC-015"
      ],
      "guidanceId": "manage-recurring-intervals",
      "status": "open"
    },
    {
      "id": "TASK-009",
      "title": "Resolve Chrome inspector issues",
      "priority": 9,
      "findingIds": [
        "BBC-009"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "TASK-010",
      "title": "Introduce preference-safe View Transitions for major state changes",
      "priority": 10,
      "findingIds": [
        "BBC-003"
      ],
      "guidanceId": "same-document-transitions",
      "status": "open"
    }
  ],
  "budget": {
    "wallClockSeconds": 1800,
    "pathCount": 7,
    "auditPasses": 1
  },
  "agent": "pi",
  "runId": "2026-07-20T11-57-55-367Z"
}
