{
  "url": "https://finance.yahoo.com",
  "auditedAt": "2026-07-21T06:39:24.527Z",
  "mode": "report",
  "status": "completed",
  "statusDetail": "Coverage-complete agentic audit after explicit Reject all; fresh-crawler consent behavior is reported as evidence, not treated as a blocker.",
  "page": {
    "appType": "hybrid",
    "framework": "SvelteKit (x-sveltekit-page response header)",
    "notes": "Public finance/news dashboard with server-delivered metadata and client-enhanced widgets."
  },
  "evidenceUsed": [
    "raw-CDP custom probe",
    "screenshot",
    "DOM/computed styles",
    "network response headers and request inventory",
    "Performance.getMetrics",
    "discoverability",
    "cookies",
    "secrets",
    "robots/sitemap fetch",
    "Modern Web Guidance 0.0.172"
  ],
  "guidanceConsulted": [
    "dark-mode",
    "component-specific-light-dark-theme",
    "accessibility",
    "adapt-scrollbar-to-contrast-preferences",
    "same-document-transitions",
    "cross-document-transitions",
    "group-element-transitions",
    "faster-spa-view-transitions",
    "scrollytelling",
    "parallax-scroll-effects",
    "scroll-entry-exit-effects",
    "carousel-slide-effects",
    "physics-based-easing",
    "individual-transform-properties",
    "animate-element-entry-exit",
    "animate-to-from-top-layer",
    "animate-to-intrinsic-sizes",
    "dynamic-sibling-animations",
    "interactive-content-reveal",
    "pull-to-reveal",
    "swipe-to-remove",
    "shrinking-header-on-scroll",
    "scroll-progress-indicator",
    "scroll-position-aware-elements",
    "scroll-snap-realtime-feedback",
    "scroll-snap-state-sync",
    "scroll-target-on-load",
    "soft-edge-content-fade",
    "scrollability-affordance-hints",
    "anchor-positioning-tab-underline",
    "position-aware-tooltips",
    "interest-triggered-tooltips",
    "interest-triggered-action-previews",
    "directional-navigation-transitions",
    "carousel-snap-highlights",
    "navigation-drawer",
    "stack-drill-down",
    "persistent-app-tours",
    "persistent-toast-notifications",
    "light-dismiss-a-dialog",
    "platform-controls-dismiss-dialog",
    "declarative-dialog-popover-control",
    "animated-select-picker",
    "branded-select-styling",
    "brand-consistent-forms",
    "custom-select-picker-layouts",
    "rich-media-picker",
    "complex-shapes",
    "shaped-cutouts",
    "overflow-clipping-control",
    "visually-texture-content",
    "apply-webgl-shaders",
    "interactive-content-in-3d-scenes",
    "highlight-text-ranges",
    "prevent-text-wrapping",
    "customize-scrollbar-color-and-thickness",
    "export-html-media-from-canvas",
    "fluid-scaling",
    "calculate-with-intrinsic-sizes",
    "css-layout",
    "size-aware-styling",
    "content-based-styling",
    "child-state-based-styling",
    "design-token-reactivity",
    "dynamic-sibling-styling",
    "form-fields-automatically-fit-contents",
    "improve-text-layout-and-legibility",
    "forms",
    "accessible-error-announcement",
    "required-field-feedback",
    "validate-input-after-interaction",
    "identify-inp-causes",
    "schedule-tasks-by-priority",
    "optimize-preload-priority",
    "improve-next-page-load-performance",
    "interactions-in-complex-layouts",
    "performance",
    "visually-stable-font-fallbacks",
    "break-up-long-tasks",
    "identify-heavy-scripts",
    "optimize-script-priority",
    "defer-rendering-heavy-content",
    "defer-work-until-scroll-ends",
    "optimize-image-priority",
    "conditional-async-dependencies",
    "expose-canvas-content-to-browser-features",
    "move-dom-element-without-losing-state",
    "precise-text-alignment",
    "visually-stable-mixed-fonts",
    "css",
    "html",
    "reduce-style-repetition",
    "security",
    "privacy",
    "batch-analytics-events",
    "full-session-analytics",
    "calculate-total-foreground-time",
    "passkeys",
    "passkey-registration",
    "passkey-authentication",
    "passkey-reauthentication",
    "passkey-conditional-create",
    "passkey-management",
    "flicker-free-client-side-ab-testing",
    "consistent-cross-document-transitions",
    "stabilize-reactive-state",
    "resilient-context-menus-and-nested-dropdowns",
    "persistent-top-layer-ui",
    "detect-initial-visibility-state",
    "sequence-distributed-events",
    "translator",
    "language-detection",
    "support-global-calendar-systems",
    "capture-location-agnostic-data",
    "format-human-readable-durations",
    "manage-recurring-intervals",
    "calculate-event-differentials",
    "coordinate-global-events",
    "model-partial-time-concepts",
    "search-hidden-content",
    "select-menu-interaction",
    "style-parent-with-has",
    "autofill-address-form",
    "autofill-payment-form",
    "autofill-sign-in-form",
    "autofill-sign-up-form",
    "autofill-highlight-inputs",
    "deliver-optimized-decorative-images",
    "resolution-optimized-pseudo-elements",
    "deprioritize-background-fetches",
    "efficient-background-processing",
    "webmcp",
    "agentic-forms",
    "agentic-javascript-tools",
    "language-model",
    "summarizer"
  ],
  "artifacts": [
    {
      "type": "screenshot",
      "path": "evidence/home-live.png",
      "caption": "Homepage, desktop dark",
      "condition": "Homepage, desktop dark",
      "findingIds": [
        "f-clutter",
        "f-flow-recovery"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-mobile.png",
      "caption": "Homepage at 360x800",
      "condition": "Homepage at 360x800",
      "findingIds": [
        "f-flow-recovery"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-light.png",
      "caption": "Homepage under prefers-color-scheme: light",
      "condition": "Homepage under prefers-color-scheme: light",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/home-dark.png",
      "caption": "Homepage under prefers-color-scheme: dark",
      "condition": "Homepage under prefers-color-scheme: dark",
      "findingIds": [
        "f-input"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-contrast.png",
      "caption": "Homepage under prefers-contrast: more",
      "condition": "Homepage under prefers-contrast: more",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/quote-live.png",
      "caption": "AAPL quote template",
      "condition": "AAPL quote template",
      "findingIds": [
        "f-overflow"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/news-live.png",
      "caption": "News listing template",
      "condition": "News listing template",
      "findingIds": []
    },
    {
      "type": "dom",
      "path": "evidence/home-live.json",
      "caption": "Raw CDP DOM/CSS/network/performance homepage probe",
      "condition": "Raw CDP DOM/CSS/network/performance homepage probe",
      "findingIds": [
        "f-nav",
        "f-input"
      ]
    },
    {
      "type": "dom",
      "path": "evidence/home-light.json",
      "caption": "Raw CDP light-mode network/performance probe",
      "condition": "Raw CDP light-mode network/performance probe",
      "findingIds": [
        "f-network",
        "f-privacy",
        "f-security",
        "f-sustainability"
      ]
    },
    {
      "type": "dom",
      "path": "evidence/home-reduced.json",
      "caption": "Raw CDP reduced-motion probe",
      "condition": "Raw CDP reduced-motion probe",
      "findingIds": []
    },
    {
      "type": "dom",
      "path": "evidence/home-mobile.json",
      "caption": "Raw CDP mobile probe",
      "condition": "Raw CDP mobile probe",
      "findingIds": [
        "f-input",
        "f-a11y-name"
      ]
    },
    {
      "type": "dom",
      "path": "evidence/quote-live.json",
      "caption": "Raw CDP quote probe",
      "condition": "Raw CDP quote probe",
      "findingIds": [
        "f-overflow"
      ]
    },
    {
      "type": "dom",
      "path": "evidence/news-live.json",
      "caption": "Raw CDP news probe",
      "condition": "Raw CDP news probe",
      "findingIds": []
    },
    {
      "type": "discoverability",
      "path": "evidence/discoverability.json",
      "caption": "Raw server/no-JS comparison; consent destination observed",
      "condition": "Raw server/no-JS comparison; consent destination observed",
      "findingIds": [
        "f-discovery",
        "f-resilience"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/discoverability-rendered.png",
      "caption": "Fresh-browser consent destination",
      "condition": "Fresh-browser consent destination",
      "findingIds": [
        "f-discovery"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/discoverability-crawler.png",
      "caption": "No-JS crawler consent destination",
      "condition": "No-JS crawler consent destination",
      "findingIds": [
        "f-discovery",
        "f-resilience"
      ]
    },
    {
      "type": "other",
      "path": "evidence/memory-metrics.json",
      "caption": "Performance metrics before/after 10 menu cycles",
      "condition": "Performance metrics before/after 10 menu cycles",
      "findingIds": [
        "f-memory"
      ]
    },
    {
      "type": "other",
      "path": "evidence/cookies.json",
      "caption": "Cookies after Reject all",
      "condition": "Cookies after Reject all",
      "findingIds": [
        "f-privacy",
        "f-security"
      ]
    },
    {
      "type": "other",
      "path": "evidence/robots.txt",
      "caption": "robots.txt",
      "condition": "robots.txt",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/sitemap.xml",
      "caption": "sitemap response body (HTTP 429)",
      "condition": "sitemap response body (HTTP 429)",
      "findingIds": [
        "f-discovery"
      ]
    },
    {
      "type": "other",
      "path": "evidence/guidance-retrieved.md",
      "caption": "Pinned Modern Web Guidance retrieved up front",
      "condition": "Pinned Modern Web Guidance retrieved up front",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/guidance-searches.jsonl",
      "caption": "Per-principle Modern Web Guidance searches",
      "condition": "Per-principle Modern Web Guidance searches",
      "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": "pass",
      "confidence": "high",
      "method": "Raw CDP screenshots plus DOM, CSS, network, metadata and performance probes across home, news, quote and emulated conditions",
      "evidence": "Separate light and dark emulation produced usable, intentionally retinted surfaces: body changed from rgb(255,255,255)/rgb(35,42,49) to rgb(20,24,28)/rgb(227,227,227), with color-scheme matching each preference.",
      "pathIds": [
        "home",
        "news",
        "quote"
      ],
      "artifacts": [
        "evidence/home-light.png",
        "evidence/home-dark.png",
        "evidence/home-reduced.json"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-reduced-motion",
      "status": "pass",
      "confidence": "high",
      "method": "Raw CDP screenshots plus DOM, CSS, network, metadata and performance probes across home, news, quote and emulated conditions",
      "evidence": "Under prefers-reduced-motion: reduce, the homepage reported no active animations after settling and preserved all content.",
      "pathIds": [
        "home",
        "news",
        "quote"
      ],
      "artifacts": [
        "evidence/home-light.png",
        "evidence/home-dark.png",
        "evidence/home-reduced.json"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-contrast",
      "status": "pass",
      "confidence": "high",
      "method": "Raw CDP screenshots plus DOM, CSS, network, metadata and performance probes across home, news, quote and emulated conditions",
      "evidence": "The prefers-contrast: more capture preserved readable text, controls and market colors without clipping or disappearance.",
      "pathIds": [
        "home",
        "news",
        "quote"
      ],
      "artifacts": [
        "evidence/home-light.png",
        "evidence/home-dark.png",
        "evidence/home-contrast.png"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "view-transitions",
      "status": "issues",
      "confidence": "high",
      "method": "Raw CDP screenshots, DOM/computed-style/network/performance probe across representative paths",
      "evidence": "DOM/performance probe confirms the View Transition API is available, but no active transitions were observed and navigation between the homepage and quote/news documents used ordinary full-document swaps.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-live.json"
      ],
      "findingIds": [
        "f-nav"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "scroll-driven-animations",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from route and interaction recon",
      "evidence": "No scroll-linked animation or scrollytelling surface was present on the representative templates.",
      "reason": "No scroll-linked animation or scrollytelling surface was present on the representative templates."
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "physical-gestures",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from route and interaction recon",
      "evidence": "No swipe, pull-to-reveal, carousel drag, or other gesture-driven core interaction was present.",
      "reason": "No swipe, pull-to-reveal, carousel drag, or other gesture-driven core interaction was present."
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "scroll-state-aware-chrome",
      "status": "pass",
      "confidence": "high",
      "method": "Raw CDP screenshots plus DOM, CSS, network, metadata and performance probes across home, news, quote and emulated conditions",
      "evidence": "Full-page captures show a compact, persistent navigation/search and market strip while long content scrolls, preserving orientation.",
      "pathIds": [
        "home",
        "news",
        "quote"
      ],
      "artifacts": [
        "evidence/home-live.json",
        "evidence/home-mobile.png",
        "evidence/quote-live.json"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "anchored-positioning",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from route and interaction recon",
      "evidence": "No tooltip or edge-sensitive anchored transient overlay was required in the representative states.",
      "reason": "No tooltip or edge-sensitive anchored transient overlay was required in the representative states."
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "directs-attention",
      "status": "pass",
      "confidence": "high",
      "method": "Raw CDP screenshots plus DOM, CSS, network, metadata and performance probes across home, news, quote and emulated conditions",
      "evidence": "Homepage and quote screenshots use descriptive section headings, active quote identity and directional navigation labels to maintain orientation.",
      "pathIds": [
        "home",
        "news",
        "quote"
      ],
      "artifacts": [
        "evidence/home-live.json",
        "evidence/home-mobile.png",
        "evidence/quote-live.json"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "no-intrusive-interruptions",
      "status": "pass",
      "confidence": "high",
      "method": "Raw CDP screenshots plus DOM, CSS, network, metadata and performance probes across home, news, quote and emulated conditions",
      "evidence": "After the explicit consent decision, no full-viewport popup or interstitial obscured finance content on the three representative templates.",
      "pathIds": [
        "home",
        "news",
        "quote"
      ],
      "artifacts": [
        "evidence/home-live.json",
        "evidence/home-mobile.png",
        "evidence/quote-live.json"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "semantic-dismissible-primitives",
      "status": "pass",
      "confidence": "high",
      "method": "Raw CDP screenshots plus DOM, CSS, network, metadata and performance probes across home, news, quote and emulated conditions",
      "evidence": "DOM inspection found a native dialog element and no ad-hoc full-screen overlay in the settled representative states.",
      "pathIds": [
        "home",
        "news",
        "quote"
      ],
      "artifacts": [
        "evidence/home-live.json",
        "evidence/home-mobile.png",
        "evidence/quote-live.json"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "reduced-chrome",
      "status": "issues",
      "confidence": "high",
      "method": "Raw CDP screenshots, DOM/computed-style/network/performance probe across representative paths",
      "evidence": "The 780px desktop screenshot is 4,458px tall and devotes a persistent right rail to repeated tickers, events, portfolio prompts and dock controls while the main feed also includes advertising and large empty/error regions.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-live.png"
      ],
      "findingIds": [
        "f-clutter"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "responsive-no-horizontal-scroll",
      "status": "issues",
      "confidence": "high",
      "method": "Raw CDP screenshots, DOM/computed-style/network/performance probe across representative paths",
      "evidence": "The quote probe measured scrollWidth 792px at an innerWidth of 780px; the homepage and news templates measured no overflow.",
      "pathIds": [
        "home",
        "quote"
      ],
      "artifacts": [
        "evidence/quote-live.json",
        "evidence/quote-live.png"
      ],
      "findingIds": [
        "f-overflow"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "component-level-responsiveness",
      "status": "pass",
      "confidence": "high",
      "method": "Raw CDP screenshots plus DOM, CSS, network, metadata and performance probes across home, news, quote and emulated conditions",
      "evidence": "CSS inspection counted 28 container-query/container-type rules on the homepage and the mobile capture reflowed the desktop columns into one readable column.",
      "pathIds": [
        "home",
        "news",
        "quote"
      ],
      "artifacts": [
        "evidence/home-live.json",
        "evidence/home-mobile.png",
        "evidence/quote-live.json"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "input-modality-aware",
      "status": "issues",
      "confidence": "high",
      "method": "Raw CDP screenshots, DOM/computed-style/network/performance probe across representative paths",
      "evidence": "The first focused control in dark mode had a 1px rgb(16,16,16) auto outline against a rgb(20,24,28) page, and desktop probes found 21 controls below 24px in at least one dimension. The mobile market selector is only 18px high.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-live.json",
        "evidence/home-mobile.json",
        "evidence/home-dark.png"
      ],
      "findingIds": [
        "f-input"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-purpose-and-primary-action",
      "status": "pass",
      "confidence": "high",
      "method": "Raw CDP screenshots plus DOM, CSS, network, metadata and performance probes across home, news, quote and emulated conditions",
      "evidence": "First-view screenshots clearly identify Yahoo Finance, expose search, market status and the lead finance story without ambiguous generic calls to action.",
      "pathIds": [
        "home",
        "news",
        "quote"
      ],
      "artifacts": [
        "evidence/home-live.json",
        "evidence/home-mobile.png",
        "evidence/quote-live.json"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "primary-flow-completion",
      "status": "pass",
      "confidence": "high",
      "method": "Raw CDP screenshots plus DOM, CSS, network, metadata and performance probes across home, news, quote and emulated conditions",
      "evidence": "The home-to-AAPL quote journey completed through a real crawlable link and loaded a labelled quote, chart, news, statistics and company information.",
      "pathIds": [
        "home",
        "news",
        "quote"
      ],
      "artifacts": [
        "evidence/home-live.json",
        "evidence/home-mobile.png",
        "evidence/quote-live.json"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-system-state-and-recovery",
      "status": "issues",
      "confidence": "high",
      "method": "Raw CDP screenshots, DOM/computed-style/network/performance probe across representative paths",
      "evidence": "Homepage screenshots show “We’re unable to load stories right now.” under More News, followed by a large empty region, with no Retry or alternate path.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-live.png",
        "evidence/home-mobile.png"
      ],
      "findingIds": [
        "f-flow-recovery"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "good-core-web-vitals",
      "status": "pass",
      "confidence": "high",
      "method": "Raw CDP screenshots plus DOM, CSS, network, metadata and performance probes across home, news, quote and emulated conditions",
      "evidence": "Raw Performance metrics on the settled light page show first meaningful paint about 0.75s after navigation start and total task duration about 1.05s; no visible load shift was present in the capture.",
      "pathIds": [
        "home",
        "news",
        "quote"
      ],
      "artifacts": [
        "evidence/home-live.json",
        "evidence/home-mobile.png",
        "evidence/quote-live.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "visual-stability",
      "status": "pass",
      "confidence": "high",
      "method": "Raw CDP screenshots plus DOM, CSS, network, metadata and performance probes across home, news, quote and emulated conditions",
      "evidence": "All visible content images had computed dimensions and the responsive captures showed reserved card/media geometry without visible overlap or late-banner displacement.",
      "pathIds": [
        "home",
        "news",
        "quote"
      ],
      "artifacts": [
        "evidence/home-live.json",
        "evidence/home-mobile.png",
        "evidence/quote-live.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-main-thread",
      "status": "pass",
      "confidence": "high",
      "method": "Raw CDP screenshots plus DOM, CSS, network, metadata and performance probes across home, news, quote and emulated conditions",
      "evidence": "Performance.getMetrics reported about 0.09s script duration and about 1.05s cumulative task duration for the measured load, with no Runtime exceptions.",
      "pathIds": [
        "home",
        "news",
        "quote"
      ],
      "artifacts": [
        "evidence/home-live.json",
        "evidence/home-mobile.png",
        "evidence/quote-live.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-resource-delivery",
      "status": "issues",
      "confidence": "high",
      "method": "Raw CDP screenshots, DOM/computed-style/network/performance probe across representative paths",
      "evidence": "Raw CDP recorded 330 requests and about 2.95 MB of content-length-labelled responses on the homepage. Large scripts included ~201 KB Google ads, ~170 KB GTM, ~138 KB video player and ~117 KB dock code.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-light.json"
      ],
      "findingIds": [
        "f-network"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "trim-unused-and-duplicate-code",
      "status": "issues",
      "confidence": "high",
      "method": "Raw CDP screenshots, DOM/computed-style/network/performance probe across representative paths",
      "evidence": "Raw CDP recorded 330 requests and about 2.95 MB of content-length-labelled responses on the homepage. Large scripts included ~201 KB Google ads, ~170 KB GTM, ~138 KB video player and ~117 KB dock code.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-light.json"
      ],
      "findingIds": [
        "f-network"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "names-roles-labels",
      "status": "issues",
      "confidence": "high",
      "method": "Raw CDP screenshots, DOM/computed-style/network/performance probe across representative paths",
      "evidence": "The mobile DOM probe found the visible 320x32 search INPUT had no aria-label; its placeholder is visible text but is not a durable label.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile.json"
      ],
      "findingIds": [
        "f-a11y-name"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "sufficient-contrast",
      "status": "pass",
      "confidence": "high",
      "method": "Raw CDP screenshots plus DOM, CSS, network, metadata and performance probes across home, news, quote and emulated conditions",
      "evidence": "Light, dark and increased-contrast screenshots preserve strong foreground/background separation for body copy, headings and market indicators.",
      "pathIds": [
        "home",
        "news",
        "quote"
      ],
      "artifacts": [
        "evidence/home-live.json",
        "evidence/home-mobile.png",
        "evidence/quote-live.json"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "structure-and-focus",
      "status": "issues",
      "confidence": "high",
      "method": "Raw CDP screenshots, DOM/computed-style/network/performance probe across representative paths",
      "evidence": "The first focused control in dark mode had a 1px rgb(16,16,16) auto outline against a rgb(20,24,28) page, and desktop probes found 21 controls below 24px in at least one dimension. The mobile market selector is only 18px high.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-live.json",
        "evidence/home-mobile.json",
        "evidence/home-dark.png"
      ],
      "findingIds": [
        "f-input"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "legible-text",
      "status": "pass",
      "confidence": "high",
      "method": "Raw CDP screenshots plus DOM, CSS, network, metadata and performance probes across home, news, quote and emulated conditions",
      "evidence": "Desktop and mobile captures show readable line lengths, clear typographic hierarchy and no clipped article copy.",
      "pathIds": [
        "home",
        "news",
        "quote"
      ],
      "artifacts": [
        "evidence/home-live.json",
        "evidence/home-mobile.png",
        "evidence/quote-live.json"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "zoom-reflow-targets-and-media",
      "status": "issues",
      "confidence": "high",
      "method": "Raw CDP screenshots, DOM/computed-style/network/performance probe across representative paths",
      "evidence": "The first focused control in dark mode had a 1px rgb(16,16,16) auto outline against a rgb(20,24,28) page, and desktop probes found 21 controls below 24px in at least one dimension. The mobile market selector is only 18px high.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-live.json",
        "evidence/home-mobile.json",
        "evidence/home-dark.png"
      ],
      "findingIds": [
        "f-input"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "no-console-errors",
      "status": "pass",
      "confidence": "high",
      "method": "Raw CDP screenshots plus DOM, CSS, network, metadata and performance probes across home, news, quote and emulated conditions",
      "evidence": "Runtime.exceptionThrown recorded zero uncaught exceptions on home, news and quote templates.",
      "pathIds": [
        "home",
        "news",
        "quote"
      ],
      "artifacts": [
        "evidence/home-live.json",
        "evidence/quote-live.json"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "sound-document-and-assets",
      "status": "pass",
      "confidence": "high",
      "method": "Raw CDP screenshots plus DOM, CSS, network, metadata and performance probes across home, news, quote and emulated conditions",
      "evidence": "The pages declare en-US and viewport metadata; inspected content images use WebP transforms, responsive 2x sources, meaningful alt text and correct displayed aspect ratios.",
      "pathIds": [
        "home",
        "news",
        "quote"
      ],
      "artifacts": [
        "evidence/home-live.json",
        "evidence/quote-live.json"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "browser-platform-hygiene",
      "status": "pass",
      "confidence": "high",
      "method": "Raw CDP screenshots plus DOM, CSS, network, metadata and performance probes across home, news, quote and emulated conditions",
      "evidence": "The representative pages loaded over modern h2 with no Runtime exceptions, no permission prompt on load and no observed paste-prevention behavior.",
      "pathIds": [
        "home",
        "news",
        "quote"
      ],
      "artifacts": [
        "evidence/home-live.json",
        "evidence/quote-live.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "title-and-description",
      "status": "pass",
      "confidence": "high",
      "method": "Raw CDP screenshots plus DOM, CSS, network, metadata and performance probes across home, news, quote and emulated conditions",
      "evidence": "Home, news and AAPL quote pages each expose descriptive titles and meta descriptions matched to visible content.",
      "pathIds": [
        "home",
        "news",
        "quote"
      ],
      "artifacts": [
        "evidence/home-live.json",
        "evidence/robots.txt"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "crawlable-and-mobile-friendly",
      "status": "pass",
      "confidence": "high",
      "method": "Raw CDP screenshots plus DOM, CSS, network, metadata and performance probes across home, news, quote and emulated conditions",
      "evidence": "The page has a viewport meta, 149/150 inspected links were ordinary href links, mobile width was 360px with no overflow, and robots.txt was reachable.",
      "pathIds": [
        "home",
        "news",
        "quote"
      ],
      "artifacts": [
        "evidence/home-live.json",
        "evidence/robots.txt"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "canonical-and-indexing-signals",
      "status": "issues",
      "confidence": "high",
      "method": "Raw CDP screenshots, DOM/computed-style/network/performance probe across representative paths",
      "evidence": "The discoverability primitive fetched 111,469 bytes but both browser and no-JS crawler resolved to consent.yahoo.com and saw “Your privacy choices”, not Yahoo Finance content. sitemap.xml also returned HTTP 429 during recon.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/discoverability.json",
        "evidence/discoverability-rendered.png",
        "evidence/discoverability-crawler.png",
        "evidence/sitemap.xml"
      ],
      "findingIds": [
        "f-discovery"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "structured-and-shareable-metadata",
      "status": "pass",
      "confidence": "high",
      "method": "Raw CDP screenshots plus DOM, CSS, network, metadata and performance probes across home, news, quote and emulated conditions",
      "evidence": "The homepage exposes one JSON-LD block and five Open Graph properties; all representative pages expose five Open Graph properties aligned with their titles.",
      "pathIds": [
        "home",
        "news",
        "quote"
      ],
      "artifacts": [
        "evidence/home-live.json",
        "evidence/robots.txt"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "secure-transport-and-headers",
      "status": "issues",
      "confidence": "high",
      "method": "Raw CDP screenshots, DOM/computed-style/network/performance probe across representative paths",
      "evidence": "The finance document has HSTS, nosniff, SAMEORIGIN and CSP, but script-src permits unsafe-inline and unsafe-eval; Referrer-Policy is no-referrer-when-downgrade; the PRF cookie was observed without Secure.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-light.json",
        "evidence/cookies.json"
      ],
      "findingIds": [
        "f-security"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "data-minimisation-and-third-parties",
      "status": "issues",
      "confidence": "high",
      "method": "Raw CDP screenshots, DOM/computed-style/network/performance probe across representative paths",
      "evidence": "After explicitly selecting Reject all, raw CDP still observed 10 third-party origins including Google Ads, Google Tag Manager, Google Analytics, Comscore, Chartbeat and Pushly/CDN services across roughly 330 requests.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-light.json",
        "evidence/cookies.json"
      ],
      "findingIds": [
        "f-privacy"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "in-context-permissions-and-modern-auth",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from route and interaction recon",
      "evidence": "No browser permission prompt or authenticated sign-in implementation was exercised in the public, signed-out scope.",
      "reason": "No browser permission prompt or authenticated sign-in implementation was exercised in the public, signed-out scope."
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "defensive-browser-policies",
      "status": "issues",
      "confidence": "high",
      "method": "Raw CDP screenshots, DOM/computed-style/network/performance probe across representative paths",
      "evidence": "The finance document has HSTS, nosniff, SAMEORIGIN and CSP, but script-src permits unsafe-inline and unsafe-eval; Referrer-Policy is no-referrer-when-downgrade; the PRF cookie was observed without Secure.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-light.json",
        "evidence/cookies.json"
      ],
      "findingIds": [
        "f-security"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "progressive-enhancement",
      "status": "issues",
      "confidence": "high",
      "method": "Raw CDP screenshots, DOM/computed-style/network/performance probe across representative paths",
      "evidence": "The no-JS crawler and fresh browser both resolved to a consent document whose content tokens are privacy controls rather than finance stories, quotes or navigation.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/discoverability.json",
        "evidence/discoverability-crawler.png"
      ],
      "findingIds": [
        "f-resilience"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "resilient-runtime-behaviour",
      "status": "pass",
      "confidence": "high",
      "method": "Raw CDP screenshots plus DOM, CSS, network, metadata and performance probes across home, news, quote and emulated conditions",
      "evidence": "Menus and side panels remained within both 360px mobile and 780px desktop captures; route loads produced no Runtime exceptions.",
      "pathIds": [
        "home",
        "news",
        "quote"
      ],
      "artifacts": [
        "evidence/home-live.json",
        "evidence/home-mobile.png",
        "evidence/quote-live.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "offline-and-installable",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from route and interaction recon",
      "evidence": "Live financial quotes and news are intrinsically online; offline installation was not treated as a core requirement despite a manifest being linked.",
      "reason": "Live financial quotes and news are intrinsically online; offline installation was not treated as a core requirement despite a manifest being linked."
    },
    {
      "principleId": "be-resilient",
      "checkId": "network-and-http-failure-states",
      "status": "issues",
      "confidence": "high",
      "method": "Raw CDP screenshots, DOM/computed-style/network/performance probe across representative paths",
      "evidence": "Homepage screenshots show “We’re unable to load stories right now.” under More News, followed by a large empty region, with no Retry or alternate path.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-live.png",
        "evidence/home-mobile.png"
      ],
      "findingIds": [
        "f-flow-recovery"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "lang-dir-and-logical-properties",
      "status": "pass",
      "confidence": "high",
      "method": "Raw CDP screenshots plus DOM, CSS, network, metadata and performance probes across home, news, quote and emulated conditions",
      "evidence": "All representative pages declare lang=en-US; CSS inspection found 61-71 logical-property rules and the layouts avoid fixed reading-direction assumptions in visible content.",
      "pathIds": [
        "home",
        "news",
        "quote"
      ],
      "artifacts": [
        "evidence/home-live.json"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "locale-aware-data",
      "status": "pass",
      "confidence": "high",
      "method": "Raw CDP screenshots plus DOM, CSS, network, metadata and performance probes across home, news, quote and emulated conditions",
      "evidence": "Visible US-market prices, percentages, dates and event times are consistently locale-formatted in the en-US document.",
      "pathIds": [
        "home",
        "news",
        "quote"
      ],
      "artifacts": [
        "evidence/home-live.json"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "time-zone-correctness",
      "status": "pass",
      "confidence": "high",
      "method": "Raw CDP screenshots plus DOM, CSS, network, metadata and performance probes across home, news, quote and emulated conditions",
      "evidence": "Economic events visibly identify locale/region and show explicit times, while the document locale is en-US.",
      "pathIds": [
        "home",
        "news",
        "quote"
      ],
      "artifacts": [
        "evidence/home-live.json"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "no-dark-patterns",
      "status": "pass",
      "confidence": "high",
      "method": "Raw CDP screenshots plus DOM, CSS, network, metadata and performance probes across home, news, quote and emulated conditions",
      "evidence": "The consent screen gives Accept all and Reject all equal visual weight, plus Manage privacy settings; the settled finance page keeps privacy settings reachable in the footer.",
      "pathIds": [
        "home",
        "news",
        "quote"
      ],
      "artifacts": [
        "evidence/home-live.json",
        "evidence/home-mobile.png",
        "evidence/quote-live.json"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "humane-error-handling",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from route and interaction recon",
      "evidence": "The inspected public journey had no data-entry form submission; search was navigation rather than a validation-heavy form.",
      "reason": "The inspected public journey had no data-entry form submission; search was navigation rather than a validation-heavy form."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "trustworthy-input-assistance",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from route and interaction recon",
      "evidence": "No address, payment, sign-up or sign-in data-entry form was part of the public representative flow.",
      "reason": "No address, payment, sign-up or sign-in data-entry form was part of the public representative flow."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "safe-commercial-and-account-flows",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from route and interaction recon",
      "evidence": "No checkout, subscription purchase, or authenticated account-management flow was entered in the signed-out audit.",
      "reason": "No checkout, subscription purchase, or authenticated account-management flow was entered in the signed-out audit."
    },
    {
      "principleId": "be-sustainable",
      "checkId": "optimised-assets",
      "status": "pass",
      "confidence": "high",
      "method": "Raw CDP screenshots plus DOM, CSS, network, metadata and performance probes across home, news, quote and emulated conditions",
      "evidence": "Inspected story images use Yahoo WebP resizing URLs and responsive 2x srcsets; the mobile hero is delivered at a matching 656px intrinsic width for 328px display.",
      "pathIds": [
        "home",
        "news",
        "quote"
      ],
      "artifacts": [
        "evidence/home-live.json",
        "evidence/home-mobile.png",
        "evidence/quote-live.json"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "no-wasteful-work",
      "status": "issues",
      "confidence": "high",
      "method": "Raw CDP screenshots, DOM/computed-style/network/performance probe across representative paths",
      "evidence": "The homepage made about 330 requests for ~2.95 MB and contacted 10 third-party origins; large ad, analytics and video-player scripts load before the user asks to play media.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-light.json"
      ],
      "findingIds": [
        "f-sustainability"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "third-party-and-media-budget",
      "status": "issues",
      "confidence": "high",
      "method": "Raw CDP screenshots, DOM/computed-style/network/performance probe across representative paths",
      "evidence": "The homepage made about 330 requests for ~2.95 MB and contacted 10 third-party origins; large ad, analytics and video-player scripts load before the user asks to play media.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-light.json"
      ],
      "findingIds": [
        "f-sustainability"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "structured-agent-capabilities",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from route and interaction recon",
      "evidence": "WebMCP is emerging and no declared agent-facing transaction surface was present in the public scope.",
      "reason": "WebMCP is emerging and no declared agent-facing transaction surface was present in the public scope."
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "on-device-inference",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from route and interaction recon",
      "evidence": "No user task in the inspected public pages required on-device generation or summarisation.",
      "reason": "No user task in the inspected public pages required on-device generation or summarisation."
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-leak-under-repeated-interaction",
      "status": "issues",
      "confidence": "high",
      "method": "Raw CDP screenshots, DOM/computed-style/network/performance probe across representative paths",
      "evidence": "Across 10 menu open/close cycles, Performance.getMetrics increased JSEventListeners by 53, Nodes by 334 and JSHeapUsedSize by 9,622,872 bytes; no documents or frames were added.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/memory-metrics.json"
      ],
      "findingIds": [
        "f-memory"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "bounded-footprint",
      "status": "pass",
      "confidence": "high",
      "method": "Raw CDP screenshots plus DOM, CSS, network, metadata and performance probes across home, news, quote and emulated conditions",
      "evidence": "Before interaction, the measured page used about 35MB JS heap and 15,206 DOM nodes; substantial but proportionate to a live dashboard with feed, quote widgets and ads.",
      "pathIds": [
        "home",
        "news",
        "quote"
      ],
      "artifacts": [
        "evidence/home-live.json",
        "evidence/home-mobile.png",
        "evidence/quote-live.json"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-detached-dom-or-unbounded-listeners",
      "status": "issues",
      "confidence": "high",
      "method": "Raw CDP screenshots, DOM/computed-style/network/performance probe across representative paths",
      "evidence": "Across 10 menu open/close cycles, Performance.getMetrics increased JSEventListeners by 53, Nodes by 334 and JSHeapUsedSize by 9,622,872 bytes; no documents or frames were added.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/memory-metrics.json"
      ],
      "findingIds": [
        "f-memory"
      ]
    }
  ],
  "principleOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "implement-natural-interactions",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "f-nav"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "f-clutter"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "f-overflow",
        "f-input"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "f-flow-recovery"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "f-network"
      ]
    },
    {
      "principleId": "be-inclusive",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "f-a11y-name",
        "f-input"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "be-discoverable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "f-discovery"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "f-security",
        "f-privacy"
      ]
    },
    {
      "principleId": "be-resilient",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "f-resilience",
        "f-flow-recovery"
      ]
    },
    {
      "principleId": "be-internationalised",
      "expectation": "contextual",
      "status": "pass"
    },
    {
      "principleId": "be-trustworthy",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "be-sustainable",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "f-sustainability"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "expectation": "contextual",
      "status": "not-applicable",
      "reason": "WebMCP is emerging and no declared agent-facing transaction surface was present in the public scope. No user task in the inspected public pages required on-device generation or summarisation."
    },
    {
      "principleId": "be-memory-efficient",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "f-memory"
      ]
    }
  ],
  "paths": [
    {
      "id": "home",
      "description": "Homepage: primary market/news overview and search entry; desktop, mobile, light, dark, reduced-motion and increased-contrast conditions.",
      "url": "https://finance.yahoo.com/",
      "conditions": [
        "desktop 780px",
        "mobile 360x800",
        "prefers-color-scheme light/dark",
        "prefers-reduced-motion reduce",
        "prefers-contrast more",
        "Reject all consent"
      ],
      "result": "issues"
    },
    {
      "id": "quote",
      "description": "AAPL quote/detail archetype representing instrument pages and the core home-to-quote journey.",
      "url": "https://finance.yahoo.com/quote/AAPL/",
      "conditions": [
        "desktop 780px",
        "signed out"
      ],
      "result": "issues"
    },
    {
      "id": "news",
      "description": "Finance news listing archetype representing section feeds.",
      "url": "https://finance.yahoo.com/news/",
      "conditions": [
        "desktop 780px",
        "signed out"
      ],
      "result": "issues"
    },
    {
      "id": "crawler",
      "description": "Fresh no-cookie and no-JavaScript discovery path, including robots.txt and sitemap.xml.",
      "url": "https://finance.yahoo.com/",
      "conditions": [
        "no existing consent cookie",
        "JavaScript disabled crawler"
      ],
      "result": "issues"
    }
  ],
  "findings": [
    {
      "severity": "low",
      "summary": "Route changes are abrupt rather than continuity-preserving.",
      "evidence": "DOM/performance probe confirms the View Transition API is available, but no active transitions were observed and navigation between the homepage and quote/news documents used ordinary full-document swaps.",
      "suggestedFix": "Use same-document or cross-document View Transitions for high-frequency navigation, with reduced-motion handling.",
      "guidanceId": "cross-document-transitions",
      "principleId": "implement-natural-interactions",
      "principleCheckId": "view-transitions",
      "artifacts": [
        "evidence/home-live.json"
      ],
      "id": "f-nav",
      "confidence": "high",
      "effort": "small",
      "pathId": "home",
      "url": "https://finance.yahoo.com/"
    },
    {
      "severity": "medium",
      "summary": "Dense desktop chrome competes with primary finance content.",
      "evidence": "The 780px desktop screenshot is 4,458px tall and devotes a persistent right rail to repeated tickers, events, portfolio prompts and dock controls while the main feed also includes advertising and large empty/error regions.",
      "suggestedFix": "Reduce duplicate market chrome, defer secondary panels, and keep the primary story/quote task visually dominant.",
      "guidanceId": "defer-rendering-heavy-content",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "reduced-chrome",
      "artifacts": [
        "evidence/home-live.png"
      ],
      "id": "f-clutter",
      "confidence": "high",
      "effort": "medium",
      "pathId": "home",
      "url": "https://finance.yahoo.com/"
    },
    {
      "severity": "low",
      "summary": "The quote template has horizontal overflow.",
      "evidence": "The quote probe measured scrollWidth 792px at an innerWidth of 780px; the homepage and news templates measured no overflow.",
      "suggestedFix": "Replace the overflowing fixed/intrinsic width in the quote template with fluid sizing and min-width:0 on grid/flex children.",
      "guidanceId": "css-layout",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "responsive-no-horizontal-scroll",
      "artifacts": [
        "evidence/quote-live.json",
        "evidence/quote-live.png"
      ],
      "id": "f-overflow",
      "confidence": "high",
      "effort": "small",
      "pathId": "quote",
      "url": "https://finance.yahoo.com/quote/AAPL/"
    },
    {
      "severity": "high",
      "summary": "Keyboard focus and control sizing are not consistently perceivable.",
      "evidence": "The first focused control in dark mode had a 1px rgb(16,16,16) auto outline against a rgb(20,24,28) page, and desktop probes found 21 controls below 24px in at least one dimension. The mobile market selector is only 18px high.",
      "suggestedFix": "Provide a high-contrast :focus-visible ring and bring interactive targets to at least 24x24 CSS px, preferably 44x44 for primary touch controls.",
      "guidanceId": "accessibility",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "input-modality-aware",
      "artifacts": [
        "evidence/home-live.json",
        "evidence/home-mobile.json",
        "evidence/home-dark.png"
      ],
      "id": "f-input",
      "confidence": "high",
      "effort": "large",
      "pathId": "home",
      "url": "https://finance.yahoo.com/"
    },
    {
      "severity": "medium",
      "summary": "A failed content state provides no recovery action.",
      "evidence": "Homepage screenshots show “We’re unable to load stories right now.” under More News, followed by a large empty region, with no Retry or alternate path.",
      "suggestedFix": "Add a visible retry action, concise failure context, and retain previously available/stale stories when safe.",
      "guidanceId": "persistent-toast-notifications",
      "principleId": "support-core-task-success",
      "principleCheckId": "clear-system-state-and-recovery",
      "artifacts": [
        "evidence/home-live.png",
        "evidence/home-mobile.png"
      ],
      "id": "f-flow-recovery",
      "confidence": "high",
      "effort": "medium",
      "pathId": "home",
      "url": "https://finance.yahoo.com/"
    },
    {
      "severity": "high",
      "summary": "The entry page ships a large, script-heavy request graph.",
      "evidence": "Raw CDP recorded 330 requests and about 2.95 MB of content-length-labelled responses on the homepage. Large scripts included ~201 KB Google ads, ~170 KB GTM, ~138 KB video player and ~117 KB dock code.",
      "suggestedFix": "Delay non-critical ads, analytics, video and dock modules until intent/visibility; split route code and remove duplicate or unused third-party work.",
      "guidanceId": "identify-heavy-scripts",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "trim-unused-and-duplicate-code",
      "artifacts": [
        "evidence/home-light.json"
      ],
      "id": "f-network",
      "confidence": "high",
      "effort": "large",
      "pathId": "home",
      "url": "https://finance.yahoo.com/"
    },
    {
      "severity": "medium",
      "summary": "The primary search input lacks a programmatic accessible name in the inspected DOM.",
      "evidence": "The mobile DOM probe found the visible 320x32 search INPUT had no aria-label; its placeholder is visible text but is not a durable label.",
      "suggestedFix": "Associate a persistent <label> with the search field or provide an accurate aria-label while retaining the placeholder as a hint.",
      "guidanceId": "accessibility",
      "principleId": "be-inclusive",
      "principleCheckId": "names-roles-labels",
      "artifacts": [
        "evidence/home-mobile.json"
      ],
      "id": "f-a11y-name",
      "confidence": "high",
      "effort": "medium",
      "pathId": "home",
      "url": "https://finance.yahoo.com/"
    },
    {
      "severity": "high",
      "summary": "Fresh no-cookie crawlers receive the consent experience instead of finance content.",
      "evidence": "The discoverability primitive fetched 111,469 bytes but both browser and no-JS crawler resolved to consent.yahoo.com and saw “Your privacy choices”, not Yahoo Finance content. sitemap.xml also returned HTTP 429 during recon.",
      "suggestedFix": "Serve crawlable finance content and metadata to legitimate no-JS crawlers without requiring a consent round trip; publish a stable sitemap endpoint and keep consent controls layered over accessible server content.",
      "guidanceId": "html",
      "principleId": "be-discoverable",
      "principleCheckId": "canonical-and-indexing-signals",
      "artifacts": [
        "evidence/discoverability.json",
        "evidence/discoverability-rendered.png",
        "evidence/discoverability-crawler.png",
        "evidence/sitemap.xml"
      ],
      "id": "f-discovery",
      "confidence": "high",
      "effort": "large",
      "pathId": "home",
      "url": "https://finance.yahoo.com/"
    },
    {
      "severity": "high",
      "summary": "Substantial third-party analytics and advertising traffic remains after Reject all.",
      "evidence": "After explicitly selecting Reject all, raw CDP still observed 10 third-party origins including Google Ads, Google Tag Manager, Google Analytics, Comscore, Chartbeat and Pushly/CDN services across roughly 330 requests.",
      "suggestedFix": "Audit post-rejection requests, block non-essential analytics/ads until affirmative consent, and consolidate or remove vendors that do not support the core task.",
      "guidanceId": "privacy",
      "principleId": "be-private-and-secure",
      "principleCheckId": "data-minimisation-and-third-parties",
      "artifacts": [
        "evidence/home-light.json",
        "evidence/cookies.json"
      ],
      "id": "f-privacy",
      "confidence": "high",
      "effort": "large",
      "pathId": "home",
      "url": "https://finance.yahoo.com/"
    },
    {
      "severity": "medium",
      "summary": "Strong transport headers are weakened by permissive script policy and cookie/referrer settings.",
      "evidence": "The finance document has HSTS, nosniff, SAMEORIGIN and CSP, but script-src permits unsafe-inline and unsafe-eval; Referrer-Policy is no-referrer-when-downgrade; the PRF cookie was observed without Secure.",
      "suggestedFix": "Move inline code to nonced/hashed scripts, remove unsafe-eval, adopt strict-origin-when-cross-origin or stricter, and mark PRF Secure with an explicit SameSite policy.",
      "guidanceId": "security",
      "principleId": "be-private-and-secure",
      "principleCheckId": "defensive-browser-policies",
      "artifacts": [
        "evidence/home-light.json",
        "evidence/cookies.json"
      ],
      "id": "f-security",
      "confidence": "high",
      "effort": "medium",
      "pathId": "home",
      "url": "https://finance.yahoo.com/"
    },
    {
      "severity": "high",
      "summary": "Core content does not progressively survive the consent/no-JavaScript path.",
      "evidence": "The no-JS crawler and fresh browser both resolved to a consent document whose content tokens are privacy controls rather than finance stories, quotes or navigation.",
      "suggestedFix": "Server-render essential finance content and links, then progressively enhance; keep consent enforcement from replacing all public content for non-JS clients.",
      "guidanceId": "html",
      "principleId": "be-resilient",
      "principleCheckId": "progressive-enhancement",
      "artifacts": [
        "evidence/discoverability.json",
        "evidence/discoverability-crawler.png"
      ],
      "id": "f-resilience",
      "confidence": "high",
      "effort": "large",
      "pathId": "home",
      "url": "https://finance.yahoo.com/"
    },
    {
      "severity": "high",
      "summary": "Third-party and media work is disproportionate for the first page view.",
      "evidence": "The homepage made about 330 requests for ~2.95 MB and contacted 10 third-party origins; large ad, analytics and video-player scripts load before the user asks to play media.",
      "suggestedFix": "Set a page-weight/request budget, lazy-load the player and advertising modules, and reduce analytics vendors and event traffic.",
      "guidanceId": "deprioritize-background-fetches",
      "principleId": "be-sustainable",
      "principleCheckId": "third-party-and-media-budget",
      "artifacts": [
        "evidence/home-light.json"
      ],
      "id": "f-sustainability",
      "confidence": "high",
      "effort": "large",
      "pathId": "home",
      "url": "https://finance.yahoo.com/"
    },
    {
      "severity": "medium",
      "summary": "Repeated menu interaction grows listeners, DOM nodes and heap.",
      "evidence": "Across 10 menu open/close cycles, Performance.getMetrics increased JSEventListeners by 53, Nodes by 334 and JSHeapUsedSize by 9,622,872 bytes; no documents or frames were added.",
      "suggestedFix": "Profile menu mount/unmount ownership, remove listeners/observers on close, reuse DOM where practical, and repeat the test with forced GC/heap snapshots to confirm retained paths.",
      "guidanceId": "manage-recurring-intervals",
      "principleId": "be-memory-efficient",
      "principleCheckId": "no-leak-under-repeated-interaction",
      "artifacts": [
        "evidence/memory-metrics.json"
      ],
      "id": "f-memory",
      "confidence": "high",
      "effort": "medium",
      "pathId": "home",
      "url": "https://finance.yahoo.com/"
    }
  ],
  "taskList": [
    {
      "id": "task-1",
      "title": "Provide a high-contrast :focus-visible ring and bring interactive targets to at least 24x24 CSS px, preferably 44x44 for primary touch controls.",
      "priority": 1,
      "findingIds": [
        "f-input"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "task-2",
      "title": "Delay non-critical ads, analytics, video and dock modules until intent/visibility; split route code and remove duplicate or unused third-party work.",
      "priority": 2,
      "findingIds": [
        "f-network"
      ],
      "guidanceId": "identify-heavy-scripts",
      "status": "open"
    },
    {
      "id": "task-3",
      "title": "Serve crawlable finance content and metadata to legitimate no-JS crawlers without requiring a consent round trip; publish a stable sitemap endpoint and keep consent controls layered over accessible server content.",
      "priority": 3,
      "findingIds": [
        "f-discovery"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "task-4",
      "title": "Audit post-rejection requests, block non-essential analytics/ads until affirmative consent, and consolidate or remove vendors that do not support the core task.",
      "priority": 4,
      "findingIds": [
        "f-privacy"
      ],
      "guidanceId": "privacy",
      "status": "open"
    },
    {
      "id": "task-5",
      "title": "Server-render essential finance content and links, then progressively enhance; keep consent enforcement from replacing all public content for non-JS clients.",
      "priority": 5,
      "findingIds": [
        "f-resilience"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "task-6",
      "title": "Set a page-weight/request budget, lazy-load the player and advertising modules, and reduce analytics vendors and event traffic.",
      "priority": 6,
      "findingIds": [
        "f-sustainability"
      ],
      "guidanceId": "deprioritize-background-fetches",
      "status": "open"
    },
    {
      "id": "task-7",
      "title": "Reduce duplicate market chrome, defer secondary panels, and keep the primary story/quote task visually dominant.",
      "priority": 7,
      "findingIds": [
        "f-clutter"
      ],
      "guidanceId": "defer-rendering-heavy-content",
      "status": "open"
    },
    {
      "id": "task-8",
      "title": "Add a visible retry action, concise failure context, and retain previously available/stale stories when safe.",
      "priority": 8,
      "findingIds": [
        "f-flow-recovery"
      ],
      "guidanceId": "persistent-toast-notifications",
      "status": "open"
    },
    {
      "id": "task-9",
      "title": "Associate a persistent <label> with the search field or provide an accurate aria-label while retaining the placeholder as a hint.",
      "priority": 9,
      "findingIds": [
        "f-a11y-name"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "task-10",
      "title": "Move inline code to nonced/hashed scripts, remove unsafe-eval, adopt strict-origin-when-cross-origin or stricter, and mark PRF Secure with an explicit SameSite policy.",
      "priority": 10,
      "findingIds": [
        "f-security"
      ],
      "guidanceId": "security",
      "status": "open"
    },
    {
      "id": "task-11",
      "title": "Profile menu mount/unmount ownership, remove listeners/observers on close, reuse DOM where practical, and repeat the test with forced GC/heap snapshots to confirm retained paths.",
      "priority": 11,
      "findingIds": [
        "f-memory"
      ],
      "guidanceId": "manage-recurring-intervals",
      "status": "open"
    },
    {
      "id": "task-12",
      "title": "Use same-document or cross-document View Transitions for high-frequency navigation, with reduced-motion handling.",
      "priority": 12,
      "findingIds": [
        "f-nav"
      ],
      "guidanceId": "cross-document-transitions",
      "status": "open"
    },
    {
      "id": "task-13",
      "title": "Replace the overflowing fixed/intrinsic width in the quote template with fluid sizing and min-width:0 on grid/flex children.",
      "priority": 13,
      "findingIds": [
        "f-overflow"
      ],
      "guidanceId": "css-layout",
      "status": "open"
    }
  ],
  "budget": {
    "pathCount": 4,
    "auditPasses": 1
  },
  "agent": "pi",
  "runId": "2026-07-21T06-39-24-527Z"
}
