{
  "url": "https://play.google.com",
  "auditedAt": "2026-07-21T06:51:37.307Z",
  "mode": "report",
  "status": "completed",
  "statusDetail": "Atomic coverage complete across four representative public catalogue templates plus an error state.",
  "page": {
    "appType": "hybrid",
    "framework": "Google internal PlayStoreUi",
    "notes": "Server-rendered catalogue and product content enhanced with client-side interaction; https://play.google.com redirects to /store/games."
  },
  "evidenceUsed": [
    "screenshot",
    "dom",
    "layout-metrics",
    "evaluate-probe",
    "discoverability",
    "headers",
    "cookies",
    "trackers",
    "images",
    "secrets",
    "har",
    "trace",
    "heap-summary",
    "lighthouse"
  ],
  "guidanceConsulted": [
    "accessibility",
    "accessible-error-announcement",
    "adapt-scrollbar-to-contrast-preferences",
    "agentic-forms",
    "agentic-javascript-tools",
    "anchor-positioning-tab-underline",
    "animate-element-entry-exit",
    "animate-to-from-top-layer",
    "animate-to-intrinsic-sizes",
    "animated-select-picker",
    "apply-webgl-shaders",
    "autofill-address-form",
    "autofill-highlight-inputs",
    "autofill-payment-form",
    "autofill-sign-in-form",
    "autofill-sign-up-form",
    "batch-analytics-events",
    "brand-consistent-forms",
    "branded-select-styling",
    "break-up-long-tasks",
    "calculate-event-differentials",
    "calculate-total-foreground-time",
    "calculate-with-intrinsic-sizes",
    "capture-location-agnostic-data",
    "carousel-slide-effects",
    "carousel-snap-highlights",
    "child-state-based-styling",
    "complex-shapes",
    "component-specific-light-dark-theme",
    "conditional-async-dependencies",
    "consistent-cross-document-transitions",
    "content-based-styling",
    "coordinate-global-events",
    "cross-document-transitions",
    "css",
    "css-layout",
    "custom-select-picker-layouts",
    "customize-scrollbar-color-and-thickness",
    "dark-mode",
    "declarative-dialog-popover-control",
    "defer-rendering-heavy-content",
    "defer-work-until-scroll-ends",
    "deliver-optimized-decorative-images",
    "deprioritize-background-fetches",
    "design-token-reactivity",
    "detect-initial-visibility-state",
    "directional-navigation-transitions",
    "dynamic-sibling-animations",
    "dynamic-sibling-styling",
    "efficient-background-processing",
    "export-html-media-from-canvas",
    "expose-canvas-content-to-browser-features",
    "faster-spa-view-transitions",
    "flicker-free-client-side-ab-testing",
    "fluid-scaling",
    "form-fields-automatically-fit-contents",
    "format-human-readable-durations",
    "forms",
    "full-session-analytics",
    "group-element-transitions",
    "highlight-text-ranges",
    "html",
    "identify-heavy-scripts",
    "identify-inp-causes",
    "improve-next-page-load-performance",
    "improve-text-layout-and-legibility",
    "individual-transform-properties",
    "interactions-in-complex-layouts",
    "interactive-content-in-3d-scenes",
    "interactive-content-reveal",
    "interest-triggered-action-previews",
    "interest-triggered-tooltips",
    "language-detection",
    "language-model",
    "light-dismiss-a-dialog",
    "manage-recurring-intervals",
    "model-partial-time-concepts",
    "move-dom-element-without-losing-state",
    "navigation-drawer",
    "optimize-image-priority",
    "optimize-preload-priority",
    "optimize-script-priority",
    "overflow-clipping-control",
    "parallax-scroll-effects",
    "passkey-authentication",
    "passkey-conditional-create",
    "passkey-management",
    "passkey-reauthentication",
    "passkey-registration",
    "passkeys",
    "performance",
    "persistent-app-tours",
    "persistent-toast-notifications",
    "persistent-top-layer-ui",
    "physics-based-easing",
    "platform-controls-dismiss-dialog",
    "position-aware-tooltips",
    "precise-text-alignment",
    "prevent-text-wrapping",
    "privacy",
    "pull-to-reveal",
    "reduce-style-repetition",
    "required-field-feedback",
    "resilient-context-menus-and-nested-dropdowns",
    "resolution-optimized-pseudo-elements",
    "rich-media-picker",
    "same-document-transitions",
    "schedule-tasks-by-priority",
    "scroll-entry-exit-effects",
    "scroll-position-aware-elements",
    "scroll-progress-indicator",
    "scroll-snap-realtime-feedback",
    "scroll-snap-state-sync",
    "scroll-target-on-load",
    "scrollability-affordance-hints",
    "scrollytelling",
    "search-hidden-content",
    "security",
    "select-menu-interaction",
    "sequence-distributed-events",
    "shaped-cutouts",
    "shrinking-header-on-scroll",
    "size-aware-styling",
    "soft-edge-content-fade",
    "stabilize-reactive-state",
    "stack-drill-down",
    "style-parent-with-has",
    "support-global-calendar-systems",
    "swipe-to-remove",
    "translator",
    "validate-input-after-interaction",
    "visually-stable-font-fallbacks",
    "visually-stable-mixed-fonts",
    "visually-texture-content",
    "webmcp"
  ],
  "artifacts": [
    {
      "type": "screenshot",
      "path": "evidence/apps-mobile.png",
      "caption": "apps mobile",
      "condition": "viewport: 360x800",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/error-404-mobile.png",
      "caption": "error 404 mobile",
      "condition": "viewport: 360x800",
      "findingIds": [
        "F014"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-cookies.json",
      "caption": "home cookies",
      "findingIds": [
        "F013"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-dark.png",
      "caption": "home dark",
      "condition": "prefers-color-scheme: dark",
      "findingIds": [
        "F001"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-desktop.png",
      "caption": "home desktop",
      "findingIds": [
        "F001"
      ]
    },
    {
      "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": [
        "F016"
      ]
    },
    {
      "type": "dom",
      "path": "evidence/home-dom.json",
      "caption": "home dom",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/home-headers.json",
      "caption": "home headers",
      "findingIds": [
        "F013"
      ]
    },
    {
      "type": "heap",
      "path": "evidence/home-heap-baseline.json",
      "caption": "home heap baseline",
      "findingIds": [
        "F017"
      ]
    },
    {
      "type": "heap",
      "path": "evidence/home-heap-post.json",
      "caption": "home heap post",
      "findingIds": [
        "F017"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-images.json",
      "caption": "home images",
      "findingIds": [
        "F005",
        "F009",
        "F015"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/home-layout-mobile.json",
      "caption": "home layout mobile",
      "condition": "viewport: 360x800",
      "findingIds": [
        "F009"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-links-meta.json",
      "caption": "home links meta",
      "findingIds": [
        "F011"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-mobile.png",
      "caption": "home mobile",
      "condition": "viewport: 360x800",
      "findingIds": [
        "F003"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-platform-probe.json",
      "caption": "home platform probe",
      "findingIds": [
        "F002",
        "F003",
        "F004",
        "F016"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-reduced-motion.json",
      "caption": "home reduced motion",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/home-secrets.json",
      "caption": "home secrets",
      "findingIds": []
    },
    {
      "type": "har-summary",
      "path": "evidence/home-summary.json",
      "caption": "home summary",
      "findingIds": [
        "F007",
        "F012",
        "F015"
      ]
    },
    {
      "type": "trace-summary",
      "path": "evidence/home-trace-summary.json",
      "caption": "home trace summary",
      "findingIds": [
        "F006"
      ]
    },
    {
      "type": "trace",
      "path": "evidence/home-trace.json",
      "caption": "home trace",
      "findingIds": [
        "F006"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-trackers.json",
      "caption": "home trackers",
      "findingIds": [
        "F012"
      ]
    },
    {
      "type": "har",
      "path": "evidence/home.har",
      "caption": "home",
      "findingIds": [
        "F007",
        "F012"
      ]
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse-home.json",
      "caption": "lighthouse home",
      "findingIds": [
        "F004",
        "F006",
        "F007",
        "F008",
        "F009",
        "F010",
        "F011",
        "F015"
      ]
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse-product.json",
      "caption": "lighthouse product",
      "findingIds": [
        "F006",
        "F008",
        "F010",
        "F011"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/product-discoverability-crawler.png",
      "caption": "product discoverability crawler",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/product-discoverability-rendered.png",
      "caption": "product discoverability rendered",
      "findingIds": []
    },
    {
      "type": "discoverability",
      "path": "evidence/product-discoverability.json",
      "caption": "product discoverability",
      "findingIds": [
        "F016"
      ]
    },
    {
      "type": "dom",
      "path": "evidence/product-dom.json",
      "caption": "product dom",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/product-install-flow.png",
      "caption": "product install flow",
      "findingIds": []
    },
    {
      "type": "layout",
      "path": "evidence/product-layout-mobile.json",
      "caption": "product layout mobile",
      "condition": "viewport: 360x800",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/product-meta-probe.json",
      "caption": "product meta probe",
      "findingIds": [
        "F011"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/product-mobile.png",
      "caption": "product mobile",
      "condition": "viewport: 360x800",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/robots-sitemap.json",
      "caption": "robots sitemap",
      "findingIds": [
        "F011"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/search-mobile.png",
      "caption": "search mobile",
      "condition": "viewport: 360x800",
      "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": "a screenshot or computed background under an emulated prefers-color-scheme: dark condition will reveal whether surfaces re-tint; the page CSS / a color-scheme declaration is corroborating evidence. The model chooses the method.",
      "evidence": "Direct DOM, screenshot, Lighthouse, network, layout, or heap evidence for the representative paths supports Honours prefers-color-scheme: a usable dark mode exists and is driven by the user's preference (color-scheme / prefers-color-scheme / light-dark()), not hard-coded light only.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-dark.png",
        "evidence/home-desktop.png"
      ],
      "findingIds": [
        "F001"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-reduced-motion",
      "status": "pass",
      "confidence": "high",
      "method": "a transition video, or an in-page probe of getAnimations()/computed animation under an emulated prefers-reduced-motion: reduce condition, can show whether motion stops. The model chooses.",
      "evidence": "With prefers-reduced-motion: reduce emulated, matchMedia returned true and document.getAnimations() returned no active animation; live CSS also contains a reduced-motion rule.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-contrast",
      "status": "pass",
      "confidence": "high",
      "method": "a screenshot under emulated prefers-contrast: more / forced-colors, or an axe/contrast probe, can show whether controls and text survive. The model chooses.",
      "evidence": "Lighthouse contrast passed on listing and detail; live CSS contains prefers-contrast/forced-colors handling and controls remain legible in screenshots.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "view-transitions",
      "status": "issues",
      "confidence": "high",
      "method": "a transition video of a route/state change shows whether it animates; the page source / ::view-transition usage corroborates. The model chooses.",
      "evidence": "Direct DOM, screenshot, Lighthouse, network, layout, or heap evidence for the representative paths supports State and route changes use View Transitions (including same-document, cross-document and scroll-driven/staggered) rather than instant, jarring swaps.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json"
      ],
      "findingIds": [
        "F002"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "scroll-driven-animations",
      "status": "pass",
      "confidence": "high",
      "method": "source/CSS inspection for animation-timeline: scroll()/view(); a long-task / scroll-handler probe can flag the main-thread anti-pattern. The model chooses.",
      "evidence": "Live CSS contains animation-timeline/scroll-timeline and the trace shows no scroll-linked long-task pattern.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "physical-gestures",
      "status": "pass",
      "confidence": "high",
      "method": "CSS inspection for scroll-snap / overscroll-behavior / physics-based easing vs custom pointermove listeners. The model chooses.",
      "evidence": "Horizontal shelves use native scrolling in the rendered mobile layouts; no custom pointer-driven gesture failure was observed across listing/search/detail.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "scroll-state-aware-chrome",
      "status": "pass",
      "confidence": "high",
      "method": "a transition video of scrolling, or CSS inspection for scroll-state container queries. The model chooses.",
      "evidence": "Mobile captures show persistent, compact top and bottom navigation that preserves orientation across listing, search, and detail without obscuring the main CTA.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "anchored-positioning",
      "status": "pass",
      "confidence": "high",
      "method": "CSS inspection for anchor-name / position-anchor / position-try on overlays; a screenshot of an open overlay near a viewport edge can show drift. The model chooses.",
      "evidence": "No required tooltip or open edge-sensitive overlay drift was observed in the representative listing, search, and product states.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "directs-attention",
      "status": "pass",
      "confidence": "high",
      "method": "CSS inspection for ::highlight / scroll-marker; a transition video can show whether attention is cued after navigation. The model chooses.",
      "evidence": "Active section tint, search back control, product hero hierarchy, and persistent bottom navigation clearly signal location and next action across captures.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "no-intrusive-interruptions",
      "status": "pass",
      "confidence": "high",
      "method": "a screenshot on load, or a DOM probe for full-viewport overlays present before interaction. The model chooses.",
      "evidence": "All entry screenshots show content immediately with no consent wall, popup, or interstitial obscuring it.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "semantic-dismissible-primitives",
      "status": "pass",
      "confidence": "high",
      "method": "DOM/source inspection for popover / <dialog> / <details> vs custom overlay divs with manual dismiss handling. The model chooses.",
      "evidence": "No modal or transient overlay is opened on load; the product and listing core tasks use ordinary links and buttons rather than custom blocking overlays.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "reduced-chrome",
      "status": "pass",
      "confidence": "high",
      "method": "a screenshot plus layout metrics can show the proportion of the viewport given to chrome vs content. The model chooses.",
      "evidence": "Screenshots devote the viewport to app shelves or product content; compact global navigation is the only persistent chrome.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "responsive-no-horizontal-scroll",
      "status": "pass",
      "confidence": "high",
      "method": "layout metrics (scrollWidth vs innerWidth) and a screenshot at an emulated narrow mobile viewport reveal overflow. The model chooses.",
      "evidence": "360x800 layout metrics report scrollWidth=clientWidth=360 and zero horizontal overflow on both listing and product detail.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "component-level-responsiveness",
      "status": "issues",
      "confidence": "high",
      "method": "CSS inspection for @container / container-type; a computed-style probe of the same component in a wide vs narrow container shows whether it adapts. The model chooses.",
      "evidence": "Direct DOM, screenshot, Lighthouse, network, layout, or heap evidence for the representative paths supports Components adapt to their container with container queries (incl. anchored container queries) and content/state-based styling where reused at different sizes, not only global viewport breakpoints.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json",
        "evidence/home-mobile.png"
      ],
      "findingIds": [
        "F003"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "input-modality-aware",
      "status": "pass",
      "confidence": "high",
      "method": "a focus probe (focus an element, read the computed outline) or an axe target-size check; a screenshot of a focused control corroborates. The model chooses.",
      "evidence": "Lighthouse target-size passed; 287 focusable controls were inspected and keyboard focus produced a visible 1px auto outline.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-purpose-and-primary-action",
      "status": "pass",
      "confidence": "high",
      "method": "screenshot the first viewport and key scrolled states; inspect heading structure, nav labels, button text, and visual hierarchy; a task walkthrough can show whether the next action is obvious. The model chooses.",
      "evidence": "Games/apps headings, app cards, search results, and the product Install CTA communicate purpose and next action clearly in first-viewport captures.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "primary-flow-completion",
      "status": "pass",
      "confidence": "high",
      "method": "run the flow manually with screenshots/DOM snapshots at each step; compare expected vs actual path length; inspect form requirements, navigation continuity, and blockers. The model chooses.",
      "evidence": "The audit traversed listing to product detail and reached a prominent Install action without a dead end or unrelated upsell.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-system-state-and-recovery",
      "status": "pass",
      "confidence": "high",
      "method": "exercise network delay/failure, invalid input, empty data and success states; screenshot the state messaging and recovery controls; inspect whether browser history and focus remain sensible. The model chooses.",
      "evidence": "The unknown-route screenshot provides no search/home recovery action, unlike the working templates.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "good-core-web-vitals",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse reports LCP/CLS/TBT directly and the model may run it; layout metrics + a layout-shift observer + a long-task observer (the evidence primitives) give the same signal first-party. The model chooses.",
      "evidence": "Direct DOM, screenshot, Lighthouse, network, layout, or heap evidence for the representative paths supports Core Web Vitals are in the good range: LCP is fast, interaction latency (INP) is low, and CLS is minimal; work is prioritised and deferred sensibly.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/lighthouse-product.json",
        "evidence/home-trace-summary.json",
        "evidence/home-trace.json"
      ],
      "findingIds": [
        "F006"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "visual-stability",
      "status": "issues",
      "confidence": "high",
      "method": "the layout primitive's CLS observer captures shifts; a transition video of the first seconds shows content jumping. The model chooses.",
      "evidence": "Direct DOM, screenshot, Lighthouse, network, layout, or heap evidence for the representative paths supports No cumulative layout shift from late content (images, banners, fonts) that arrives without reserved space.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-layout-mobile.json",
        "evidence/home-images.json",
        "evidence/lighthouse-home.json"
      ],
      "findingIds": [
        "F009"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-main-thread",
      "status": "pass",
      "confidence": "high",
      "method": "the layout primitive records long tasks; a heap summary shows the object population; Lighthouse reports TBT. The model chooses.",
      "evidence": "Trace recorded two long tasks, longest 96.69ms and TBT 62.75ms; Lighthouse TBT was 600ms on cold listing, covered by the core-vitals performance finding rather than a separate main-thread finding.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-resource-delivery",
      "status": "issues",
      "confidence": "high",
      "method": "a HAR summary can reveal cache headers, redirects, render-blocking candidates, weight offenders and dependency shape; a trace/Lighthouse insight report can corroborate LCP discovery, render-blocking, font-display and document latency. The model chooses.",
      "evidence": "Direct DOM, screenshot, Lighthouse, network, layout, or heap evidence for the representative paths supports Critical resources are delivered efficiently: cache headers are useful, render-blocking chains are short, fonts do not block or shift text, HTTP delivery is modern, and network dependency trees do not delay the main content.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home.har",
        "evidence/home-summary.json",
        "evidence/lighthouse-home.json"
      ],
      "findingIds": [
        "F007"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "trim-unused-and-duplicate-code",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse/trace/code-coverage style evidence can flag unused JS/CSS, duplicated JavaScript and legacy code; a HAR summary shows third-party byte cost and request count. The model chooses.",
      "evidence": "Direct DOM, screenshot, Lighthouse, network, layout, or heap evidence for the representative paths supports The page does not ship large unused or duplicated JavaScript/CSS, avoidable legacy bundles, or third-party code that dominates the load without user value.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/lighthouse-product.json"
      ],
      "findingIds": [
        "F008"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "names-roles-labels",
      "status": "issues",
      "confidence": "high",
      "method": "axe-core (injectable via the evaluate primitive) or Lighthouse's a11y audits enumerate these; a DOM probe of the accessibility-relevant attributes is a first-party alternative. The model chooses.",
      "evidence": "Direct DOM, screenshot, Lighthouse, network, layout, or heap evidence for the representative paths supports Interactive elements have accessible names, correct roles, and form fields have labels; images have alt text where meaningful; canvas/expressive content is exposed to assistive technology.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/home-platform-probe.json",
        "evidence/home-images.json"
      ],
      "findingIds": [
        "F004",
        "F005"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "sufficient-contrast",
      "status": "pass",
      "confidence": "high",
      "method": "axe contrast rules, a Lighthouse contrast audit, or an in-page probe computing contrast ratios from computed colours. The model chooses.",
      "evidence": "Lighthouse color-contrast audits passed on listing and product detail; text and controls remain visually distinct in mobile captures.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "structure-and-focus",
      "status": "pass",
      "confidence": "high",
      "method": "axe/Lighthouse structural audits; a focus-walk probe (tab through, read activeElement + computed outline) is a first-party alternative. The model chooses.",
      "evidence": "Product detail has one H1, focus is visible, and Lighthouse heading-order passed; listing landmark/name defects are recorded under names-roles-labels.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "legible-text",
      "status": "pass",
      "confidence": "high",
      "method": "a screenshot of body and heading text, plus CSS inspection for text-wrap / text alignment / font fallback handling. The model chooses.",
      "evidence": "Desktop/mobile screenshots show readable type, sensible line lengths, and controlled truncation without clipping core labels.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "zoom-reflow-targets-and-media",
      "status": "pass",
      "confidence": "high",
      "method": "Lighthouse/axe target-size, meta-viewport and media-caption audits are useful signals; screenshots at narrow and zoomed conditions plus DOM/media inspection can corroborate. The model chooses.",
      "evidence": "Viewport allows normal scaling, 360px reflow has no overflow, Lighthouse target-size and product video-caption audits pass.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "no-console-errors",
      "status": "pass",
      "confidence": "high",
      "method": "capture Runtime/Log CDP events, or a probe that reads collected errors; Lighthouse reports this too. The model chooses.",
      "evidence": "Lighthouse errors-in-console passed on both listing and product detail.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "sound-document-and-assets",
      "status": "pass",
      "confidence": "high",
      "method": "a DOM/source probe for doctype/charset/img dimensions; CSS inspection for repetition; Lighthouse best-practices audits cover the rest. The model chooses.",
      "evidence": "DOM reports HTML doctype, UTF-8 and viewport; Lighthouse image aspect-ratio and responsive-size audits pass. Missing intrinsic attributes are addressed under visual stability.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "browser-platform-hygiene",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse best-practices audits and DevTools inspector/deprecation signals can surface these; DOM/source probes can verify paste handlers and prompt timing. The model chooses.",
      "evidence": "Lighthouse directly reports deprecated API, missing source maps, Inspector issues and BFCache blockers.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/lighthouse-product.json"
      ],
      "findingIds": [
        "F010"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "title-and-description",
      "status": "pass",
      "confidence": "high",
      "method": "a DOM probe reads <title> and meta[name=description]; Lighthouse SEO audits cover the same ground. The model chooses.",
      "evidence": "Listing and product probes show descriptive unique titles and meta descriptions, also present in raw no-JS HTML.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "crawlable-and-mobile-friendly",
      "status": "pass",
      "confidence": "high",
      "method": "a DOM probe for anchor hrefs, viewport meta, and robots; Lighthouse SEO audits corroborate. The model chooses.",
      "evidence": "Links use real href values, viewport meta is present, robots.txt is valid, and discoverability found 88-100% raw-content coverage.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "canonical-and-indexing-signals",
      "status": "issues",
      "confidence": "high",
      "method": "inspect response status and headers, <link rel=canonical>, hreflang links, robots meta, robots.txt and sitemap.xml; Lighthouse SEO audits cover several of these. The model chooses.",
      "evidence": "Lighthouse canonical failed on both key templates and live canonicals add a locale query not present in final URLs.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/lighthouse-product.json",
        "evidence/home-links-meta.json",
        "evidence/product-meta-probe.json",
        "evidence/robots-sitemap.json"
      ],
      "findingIds": [
        "F011"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "structured-and-shareable-metadata",
      "status": "pass",
      "confidence": "high",
      "method": "inspect JSON-LD/microdata and social preview tags against visible content; Lighthouse has a manual structured-data audit, and ad-hoc probes can parse schema.org blocks. The model chooses.",
      "evidence": "Listing has Open Graph title/description; product has Open Graph image and one JSON-LD block matching visible Roblox content.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "secure-transport-and-headers",
      "status": "issues",
      "confidence": "high",
      "method": "inspect response headers / page protocol via an evaluate probe or the network layer; Lighthouse best-practices flags HTTPS and CSP issues. The model chooses.",
      "evidence": "Direct DOM, screenshot, Lighthouse, network, layout, or heap evidence for the representative paths supports Served over HTTPS with a sensible Content-Security-Policy and secure, SameSite cookies; no mixed content or obvious transport/header smells.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-cookies.json",
        "evidence/home-headers.json"
      ],
      "findingIds": [
        "F013"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "data-minimisation-and-third-parties",
      "status": "issues",
      "confidence": "high",
      "method": "inspect network requests and third-party origins; a probe of analytics/beacon calls. The model chooses.",
      "evidence": "Direct DOM, screenshot, Lighthouse, network, layout, or heap evidence for the representative paths supports No over-collection of user data, no leaky third parties, and analytics/background data collection is minimised and batched rather than chatty or session-wide by default.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-trackers.json",
        "evidence/home-summary.json",
        "evidence/home.har"
      ],
      "findingIds": [
        "F012"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "in-context-permissions-and-modern-auth",
      "status": "pass",
      "confidence": "high",
      "method": "a probe for permission requests fired on load; source inspection for passkey / WebAuthn / navigator.credentials usage in auth flows. The model chooses.",
      "evidence": "No permission prompt appeared on load in any capture; account/auth itself was not invoked and no coercive password flow was observed.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "defensive-browser-policies",
      "status": "pass",
      "confidence": "high",
      "method": "inspect response headers and browser security state; Lighthouse/DevTools security audits can corroborate HSTS, clickjacking, Trusted Types, origin isolation and third-party cookie findings. The model chooses.",
      "evidence": "HTTPS, HSTS, nosniff, SAMEORIGIN, Permissions-Policy and Trusted Types enforcement are present; weaker CSP/cookie details are linked under secure transport.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "progressive-enhancement",
      "status": "pass",
      "confidence": "high",
      "method": "load with scripting disabled or compare a no-JS fetch of the HTML against the rendered page; check for Baseline-aware fallbacks in source. The model chooses.",
      "evidence": "Discoverability raw fetch retains 88% of listing words and 100% of product words with title/description/H1 available without JavaScript.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "resilient-runtime-behaviour",
      "status": "pass",
      "confidence": "high",
      "method": "exercise menus near viewport edges with a screenshot; a probe of async/visibility behaviour. The model chooses.",
      "evidence": "Listing, search and detail loaded stably at 360px; no clipped menus, blank shell, or fragile initial state appeared.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "offline-and-installable",
      "status": "not-applicable",
      "confidence": "high",
      "method": "a probe for a service worker registration and a web app manifest; test behaviour offline. The model chooses.",
      "evidence": "Google Play is an intrinsically network-backed marketplace; offline installation and local catalogue freshness are not meaningful for this audited anonymous web surface.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json"
      ],
      "reason": "Google Play is an intrinsically network-backed marketplace; offline installation and local catalogue freshness are not meaningful for this audited anonymous web surface."
    },
    {
      "principleId": "be-resilient",
      "checkId": "network-and-http-failure-states",
      "status": "issues",
      "confidence": "high",
      "method": "simulate failed fetches/offline mode or inspect representative 404/500 routes; screenshots and DOM snapshots of error/loading/empty states show whether recovery is possible. The model chooses.",
      "evidence": "The tested unknown route returns an unbranded dead-end 404 with no recovery control.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/error-404-mobile.png"
      ],
      "findingIds": [
        "F014"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "lang-dir-and-logical-properties",
      "status": "pass",
      "confidence": "high",
      "method": "a DOM probe for <html lang>/dir and CSS inspection for logical vs physical properties. The model chooses.",
      "evidence": "DOM reports lang=en-US and dir=ltr; live CSS uses logical inline/block properties.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "locale-aware-data",
      "status": "pass",
      "confidence": "high",
      "method": "source inspection for Intl.* usage vs hand-rolled formatting; a probe of rendered dates/numbers under a different locale. The model chooses.",
      "evidence": "The UK-localised app shelf and GBP prices demonstrate locale-sensitive catalogue rendering rather than hard-coded generic values.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "time-zone-correctness",
      "status": "not-applicable",
      "confidence": "high",
      "method": "source inspection for time-zone-aware date handling vs naive local Date math. The model chooses.",
      "evidence": "The representative catalogue, search, and product surfaces display no schedules, events, or time-zone-sensitive values.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json"
      ],
      "reason": "The representative catalogue, search, and product surfaces display no schedules, events, or time-zone-sensitive values."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "no-dark-patterns",
      "status": "pass",
      "confidence": "high",
      "method": "a screenshot of consent/upsell/cancel flows; source inspection for declarative button actions vs misleading controls. The model chooses.",
      "evidence": "No consent wall, disguised ad, confirmshaming, or forced-continuity prompt appeared; the free product shows price state and Install plainly.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "humane-error-handling",
      "status": "not-applicable",
      "confidence": "high",
      "method": "exercise a form, submit invalid input, and observe timing and clarity of errors via a screenshot or a :user-invalid / aria-invalid probe. The model chooses.",
      "evidence": "No user-input form is present in the anonymous listing, search-results, or product-detail templates exercised.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json"
      ],
      "reason": "No user-input form is present in the anonymous listing, search-results, or product-detail templates exercised."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "trustworthy-input-assistance",
      "status": "not-applicable",
      "confidence": "high",
      "method": "source/DOM inspection for autocomplete attributes on form fields; a probe of autofill affordances. The model chooses.",
      "evidence": "No address, payment, sign-in, sign-up, or other editable form fields are present in the audited anonymous surfaces.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json"
      ],
      "reason": "No address, payment, sign-in, sign-up, or other editable form fields are present in the audited anonymous surfaces."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "safe-commercial-and-account-flows",
      "status": "not-applicable",
      "confidence": "high",
      "method": "walkthrough checkout/subscription/auth/account flows when present; screenshot pricing, confirmation, cancellation and reauthentication states; inspect passkey/autocomplete support for sign-in and payment. The model chooses.",
      "evidence": "The selected Roblox item is free and the signed-in account/payment/cancellation surfaces were outside this anonymous public-catalogue scope.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json"
      ],
      "reason": "The selected Roblox item is free and the signed-in account/payment/cancellation surfaces were outside this anonymous public-catalogue scope."
    },
    {
      "principleId": "be-sustainable",
      "checkId": "optimised-assets",
      "status": "issues",
      "confidence": "high",
      "method": "inspect transferred image bytes vs displayed size; source inspection for modern formats and resolution handling. The model chooses.",
      "evidence": "Direct DOM, screenshot, Lighthouse, network, layout, or heap evidence for the representative paths supports Images and decorative assets are optimised and served at appropriate resolutions; decorative pseudo-element imagery and heavy decorative images are resolution-optimised rather than oversized.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home-images.json",
        "evidence/lighthouse-home.json"
      ],
      "findingIds": [
        "F015"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "no-wasteful-work",
      "status": "pass",
      "confidence": "high",
      "method": "a long-task / network probe for background fetches and processing while idle or backgrounded. The model chooses.",
      "evidence": "Trace settled to two bounded long tasks and no autoplay work was observed in the idle listing state; avoidable bytes are addressed under asset and third-party checks.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "third-party-and-media-budget",
      "status": "pass",
      "confidence": "high",
      "method": "a HAR summary shows third-party bytes, font/media weight and caching; screenshots/video reveal autoplay and decorative media; trace/layout evidence shows whether media/animation keeps work running. The model chooses.",
      "evidence": "HAR quantifies 3.99MB third-party transfer, but most is Google-hosted app imagery/framework; disproportionate tracking and asset costs are captured in dedicated privacy/asset findings.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "structured-agent-capabilities",
      "status": "issues",
      "confidence": "high",
      "method": "source inspection for WebMCP / agentic-tool registration and agent-readable affordances. The model chooses.",
      "evidence": "Direct DOM, screenshot, Lighthouse, network, layout, or heap evidence for the representative paths supports Where it makes sense, the site exposes structured, safe capabilities to agents via WebMCP tools, agentic forms, and agentic JavaScript tools rather than leaving agents to scrape and guess.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-discoverability.json",
        "evidence/product-discoverability.json",
        "evidence/home-platform-probe.json"
      ],
      "findingIds": [
        "F016"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "on-device-inference",
      "status": "not-applicable",
      "confidence": "high",
      "method": "source inspection for built-in AI (language model / summariser) usage. The model chooses.",
      "evidence": "The store catalogue does not present a summarisation, generation, or similar inference task where built-in on-device AI would add proportionate value.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json"
      ],
      "reason": "The store catalogue does not present a summarisation, generation, or similar inference task where built-in on-device AI would add proportionate value."
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-leak-under-repeated-interaction",
      "status": "pass",
      "confidence": "medium",
      "method": "compare heap snapshots for retained growth - a baseline, then one taken after repeating the interaction with `--interact` about 10x (the memory-tracer methodology: baseline -> repeat -> post -> compare). Performance.getMetrics (JSHeapUsedSize, Nodes) across the same before/after window is corroboration. If Chrome DevTools MCP is available, follow i",
      "evidence": "After ten full-list scroll down/up cycles, heap self size rose only 0.76MB (1.5%) and node count 0.8%, not evidence of unbounded retained growth.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-heap-baseline.json",
        "evidence/home-heap-post.json"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "bounded-footprint",
      "status": "issues",
      "confidence": "high",
      "method": "a single `heap` summary's totals (nodeCount, totalSelfSizeBytes, constructor population) plus Performance.getMetrics (Nodes, JSHeapUsedSize) give the current footprint to judge against the page's purpose. Chrome DevTools MCP heap snapshots and memlab snapshot analysis can provide the same memory distribution when available. Read summaries or derive",
      "evidence": "Direct DOM, screenshot, Lighthouse, network, layout, or heap evidence for the representative paths supports Heap size and DOM node count are reasonable for what the page is; the footprint is proportionate rather than bloated.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-heap-baseline.json",
        "evidence/home-heap-post.json"
      ],
      "findingIds": [
        "F017"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-detached-dom-or-unbounded-listeners",
      "status": "pass",
      "confidence": "high",
      "method": "the `heap` summary by constructor (Detached* nodes) compared across a before/after pair shows a growing detached-DOM population; an `evaluate` probe can sample listener/timer counts (e.g. getEventListeners-style counting, or instrumenting addEventListener/setInterval) before and after the repeated interaction to spot growth. Chrome DevTools MCP hea",
      "evidence": "Neither heap summary lists a Detached* constructor and repeated scrolling produced only modest aggregate growth.",
      "pathIds": [
        "games-listing",
        "apps-listing",
        "product-detail",
        "search-results"
      ],
      "artifacts": [
        "evidence/home-heap-baseline.json",
        "evidence/home-heap-post.json"
      ]
    }
  ],
  "principleOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F001"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F002"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F003"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "be-fast-and-stable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F006",
        "F009",
        "F007",
        "F008"
      ]
    },
    {
      "principleId": "be-inclusive",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F004",
        "F005"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F010"
      ]
    },
    {
      "principleId": "be-discoverable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F011"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F013",
        "F012"
      ]
    },
    {
      "principleId": "be-resilient",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F014"
      ]
    },
    {
      "principleId": "be-internationalised",
      "expectation": "contextual",
      "status": "pass"
    },
    {
      "principleId": "be-trustworthy",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "be-sustainable",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F015"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F016"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F017"
      ]
    }
  ],
  "paths": [
    {
      "id": "games-listing",
      "description": "Entry redirect and primary Games listing; represents catalogue shelves, global navigation, preferences, performance and responsive behavior.",
      "url": "https://play.google.com/store/games",
      "conditions": [
        "desktop",
        "viewport: 360x800",
        "prefers-color-scheme: dark",
        "prefers-reduced-motion: reduce",
        "keyboard focus",
        "no JavaScript crawler"
      ],
      "result": "issues"
    },
    {
      "id": "apps-listing",
      "description": "Apps listing; represents the second major catalogue taxonomy and verifies shared listing behavior.",
      "url": "https://play.google.com/store/apps",
      "conditions": [
        "viewport: 360x800"
      ],
      "result": "issues"
    },
    {
      "id": "product-detail",
      "description": "Roblox detail; represents product metadata, media, pricing state and the primary Install intent.",
      "url": "https://play.google.com/store/apps/details?id=com.roblox.client",
      "conditions": [
        "viewport: 360x800",
        "no JavaScript crawler"
      ],
      "result": "issues"
    },
    {
      "id": "search-results",
      "description": "Weather app search; represents discovery results and search navigation.",
      "url": "https://play.google.com/store/search?q=weather&c=apps",
      "conditions": [
        "viewport: 360x800"
      ],
      "result": "pass"
    },
    {
      "id": "error-state",
      "description": "Unknown URL; represents HTTP failure and recovery behavior.",
      "url": "https://play.google.com/this-route-does-not-exist-atomic-audit",
      "conditions": [
        "viewport: 360x800"
      ],
      "result": "issues"
    }
  ],
  "findings": [
    {
      "id": "F001",
      "severity": "medium",
      "confidence": "high",
      "summary": "The public store remains light when the user requests dark mode.",
      "evidence": "The dark-condition screenshot is pixel-identical in layout and white surfaces to the default desktop capture; the CSS probe found a dark query, but it does not retint this surface.",
      "suggestedFix": "Apply color-scheme: light dark and theme surface, text, border, and browser-control colors from prefers-color-scheme, verifying listing and detail templates.",
      "effort": "medium",
      "pathId": "games-listing",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-color-scheme",
      "guidanceId": "dark-mode",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/home-dark.png",
        "evidence/home-desktop.png"
      ]
    },
    {
      "id": "F002",
      "severity": "low",
      "confidence": "high",
      "summary": "Route changes do not use View Transitions.",
      "evidence": "The live CSS probe found no view-transition rules while navigation between Games, Apps, search, and product detail is cross-document.",
      "suggestedFix": "Add cross-document View Transitions with a reduced-motion fallback, using stable names only for continuity-critical elements.",
      "effort": "medium",
      "pathId": "games-listing",
      "principleId": "implement-natural-interactions",
      "principleCheckId": "view-transitions",
      "guidanceId": "cross-document-transitions",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/home-platform-probe.json"
      ]
    },
    {
      "id": "F003",
      "severity": "medium",
      "confidence": "high",
      "summary": "The responsive templates do not use component queries.",
      "evidence": "The page adapts at 360px without overflow, but the complete live CSS probe found no @container rules, so reused shelves depend on viewport-level styling.",
      "suggestedFix": "Define containment on shelf/card hosts and use size container queries for card density, labels, and controls, retaining viewport fallbacks.",
      "effort": "medium",
      "pathId": "games-listing",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "component-level-responsiveness",
      "guidanceId": "size-aware-styling",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/home-platform-probe.json",
        "evidence/home-mobile.png"
      ]
    },
    {
      "id": "F004",
      "severity": "medium",
      "confidence": "high",
      "summary": "Listing pages lack a main landmark and contain an accessible-name mismatch.",
      "evidence": "Lighthouse found label-content-name-mismatch and landmark-one-main on the games listing; the DOM probe counted zero main landmarks.",
      "suggestedFix": "Wrap primary catalogue content in <main> and align each control accessible name with its visible label.",
      "effort": "small",
      "pathId": "games-listing",
      "principleId": "be-inclusive",
      "principleCheckId": "names-roles-labels",
      "guidanceId": "accessibility",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/home-platform-probe.json"
      ]
    },
    {
      "id": "F005",
      "severity": "low",
      "confidence": "high",
      "summary": "One decorative account image has no explicit alt decision.",
      "evidence": "The images primitive found one of 100 images without alt: the anonymous account avatar PNG.",
      "suggestedFix": "Use alt=\"\" when decorative or a concise accessible name when the avatar conveys account state.",
      "effort": "trivial",
      "pathId": "games-listing",
      "principleId": "be-inclusive",
      "principleCheckId": "names-roles-labels",
      "guidanceId": "accessibility",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/home-images.json"
      ]
    },
    {
      "id": "F006",
      "severity": "high",
      "confidence": "high",
      "summary": "Cold-load performance is poor on both key templates.",
      "evidence": "Lighthouse measured games-listing LCP 7.3s, CLS 0.157, TBT 600ms and score 0.37; product-detail LCP was 12.4s and score 0.57. The first-party trace still measured LCP 2.08s and two long tasks, confirming sensitivity to conditions.",
      "suggestedFix": "Profile the LCP request chain, remove redirects from the canonical entry URL, prioritize the actual LCP asset, and defer non-critical scripts and media.",
      "effort": "large",
      "pathId": "games-listing",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "good-core-web-vitals",
      "guidanceId": "performance",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/lighthouse-product.json",
        "evidence/home-trace-summary.json",
        "evidence/home-trace.json"
      ]
    },
    {
      "id": "F007",
      "severity": "high",
      "confidence": "high",
      "summary": "The entry load ships a large and slow resource graph.",
      "evidence": "HAR recorded 93 requests and 4.73MB transferred, including 2.25MB images and 1.33MB scripts; Lighthouse saw 10,255KiB, a 1.61s root response, and 1.59s redirect savings.",
      "suggestedFix": "Link directly to /store/games, reduce document payload, prioritize only above-fold imagery, and defer recaptcha, feedback, analytics, and offscreen promotional media until needed.",
      "effort": "large",
      "pathId": "games-listing",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-resource-delivery",
      "guidanceId": "optimize-image-priority",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/home.har",
        "evidence/home-summary.json",
        "evidence/lighthouse-home.json"
      ]
    },
    {
      "id": "F008",
      "severity": "medium",
      "confidence": "high",
      "summary": "Large amounts of CSS and JavaScript are unused during the initial view.",
      "evidence": "Lighthouse estimated 773KiB unused JavaScript and 166KiB unused CSS on the listing, and 529KiB unused JavaScript on product detail.",
      "suggestedFix": "Split route and feature bundles, conditionally load feedback/recaptcha and commercial modules, and remove duplicated or legacy code.",
      "effort": "large",
      "pathId": "games-listing",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "trim-unused-and-duplicate-code",
      "guidanceId": "identify-heavy-scripts",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/lighthouse-product.json"
      ]
    },
    {
      "id": "F009",
      "severity": "medium",
      "confidence": "high",
      "summary": "The games listing shifts materially during load.",
      "evidence": "Lighthouse measured CLS 0.157 and the 360px layout observer measured 0.083 across six shifts; all 100 inspected images omit width/height attributes.",
      "suggestedFix": "Reserve image geometry with width/height or aspect-ratio and use stable font fallbacks for late content.",
      "effort": "medium",
      "pathId": "games-listing",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "visual-stability",
      "guidanceId": "visually-stable-font-fallbacks",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/home-layout-mobile.json",
        "evidence/home-images.json",
        "evidence/lighthouse-home.json"
      ]
    },
    {
      "id": "F010",
      "severity": "medium",
      "confidence": "high",
      "summary": "Deprecated APIs, missing source maps, and BFCache blockers remain.",
      "evidence": "Lighthouse reported one deprecated-API warning, missing source maps for large first-party JavaScript, Inspector issues, and four BFCache failure reasons on both primary templates.",
      "suggestedFix": "Remove the deprecated API, resolve DevTools Issues and BFCache blockers, and publish production source maps under the intended access policy.",
      "effort": "medium",
      "pathId": "games-listing",
      "principleId": "follow-best-practices",
      "principleCheckId": "browser-platform-hygiene",
      "guidanceId": "html",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/lighthouse-product.json"
      ]
    },
    {
      "id": "F011",
      "severity": "medium",
      "confidence": "high",
      "summary": "Canonical signals are invalid in Lighthouse despite canonical elements being present.",
      "evidence": "Both Lighthouse runs failed the canonical audit; probes show canonicals adding hl=en_US while the audited final URLs omit that locale parameter. robots.txt points to real indexed sitemap indexes, while /sitemap.xml itself is 404.",
      "suggestedFix": "Choose one canonical locale URL per page, ensure it resolves consistently, and test canonical/hreflang pairs against the final response URL.",
      "effort": "small",
      "pathId": "games-listing",
      "principleId": "be-discoverable",
      "principleCheckId": "canonical-and-indexing-signals",
      "guidanceId": "html",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/lighthouse-product.json",
        "evidence/home-links-meta.json",
        "evidence/product-meta-probe.json",
        "evidence/robots-sitemap.json"
      ]
    },
    {
      "id": "F012",
      "severity": "high",
      "confidence": "high",
      "summary": "The anonymous catalogue has a broad tracking footprint.",
      "evidence": "Tracker capture found 10 third-party origins and Google Analytics, Tag Manager, DoubleClick, and region1 Analytics. HAR attributed 85 of 93 requests and 3.99MB to third-party origins.",
      "suggestedFix": "Minimise anonymous telemetry, delay analytics until justified, consolidate and batch events, and remove advertising/feedback dependencies that are not needed for the core browse task.",
      "effort": "large",
      "pathId": "games-listing",
      "principleId": "be-private-and-secure",
      "principleCheckId": "data-minimisation-and-third-parties",
      "guidanceId": "privacy",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/home-trackers.json",
        "evidence/home-summary.json",
        "evidence/home.har"
      ]
    },
    {
      "id": "F013",
      "severity": "high",
      "confidence": "high",
      "summary": "Cookies and CSP weaken otherwise strong transport security.",
      "evidence": "Cookie audit found six cookies without Secure, all seven with SameSite=None, and two analytics cookies lasting 400 days. CSP allows unsafe-inline and unsafe-eval; Referrer-Policy is absent.",
      "suggestedFix": "Mark all HTTPS cookies Secure, select the narrowest SameSite setting, shorten analytics retention, remove unsafe-eval/unsafe-inline through nonce/hash migration, and send a strict Referrer-Policy.",
      "effort": "medium",
      "pathId": "games-listing",
      "principleId": "be-private-and-secure",
      "principleCheckId": "secure-transport-and-headers",
      "guidanceId": "security",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/home-cookies.json",
        "evidence/home-headers.json"
      ]
    },
    {
      "id": "F014",
      "severity": "medium",
      "confidence": "high",
      "summary": "Unknown routes provide no path back or recovery action.",
      "evidence": "The exercised 404 route shows only “The requested URL was not found on this server” with no Google Play navigation, search, or home link.",
      "suggestedFix": "Serve a branded 404 template with search, Home/Store links, preserved global navigation, and an accessible status heading.",
      "effort": "small",
      "pathId": "error-state",
      "principleId": "be-resilient",
      "principleCheckId": "network-and-http-failure-states",
      "guidanceId": "persistent-toast-notifications",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/error-404-mobile.png"
      ]
    },
    {
      "id": "F015",
      "severity": "medium",
      "confidence": "high",
      "summary": "Media delivery is heavy and intrinsic image sizing is absent.",
      "evidence": "Lighthouse measured a 10,255KiB listing payload; HAR attributed 2.25MB to 46 images, while the images probe found width/height absent on all 100 rendered images and 10 legacy-format resources.",
      "suggestedFix": "Use responsive modern formats, explicit intrinsic dimensions, and strict shelf/media budgets; avoid loading promotional artwork outside the initial viewport.",
      "effort": "large",
      "pathId": "games-listing",
      "principleId": "be-sustainable",
      "principleCheckId": "optimised-assets",
      "guidanceId": "deliver-optimized-decorative-images",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home-images.json",
        "evidence/lighthouse-home.json"
      ]
    },
    {
      "id": "F016",
      "severity": "low",
      "confidence": "high",
      "summary": "The marketplace exposes content to crawlers but no explicit structured agent tools were detected.",
      "evidence": "Discoverability is strong (88% listing and 100% product raw-HTML coverage), but the DOM/CSS/platform probes found no WebMCP or agent-tool registration for search, product inspection, or install intent.",
      "suggestedFix": "For safe agentic commerce, expose narrow read-only search/product tools and an explicitly confirmed install-intent tool with human approval.",
      "effort": "large",
      "pathId": "games-listing",
      "principleId": "be-agent-ready",
      "principleCheckId": "structured-agent-capabilities",
      "guidanceId": "webmcp",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/home-discoverability.json",
        "evidence/product-discoverability.json",
        "evidence/home-platform-probe.json"
      ]
    },
    {
      "id": "F017",
      "severity": "medium",
      "confidence": "high",
      "summary": "The initial listing has a large in-memory footprint for a catalogue viewport.",
      "evidence": "The baseline heap summary contained 985,374 nodes and 51.6MB self size. After repeated full-list scrolling it reached 993,109 nodes and 52.35MB; growth was modest, but the starting footprint is high.",
      "suggestedFix": "Virtualise or content-visibility-gate long shelves, release below-fold models, and conditionally initialize non-core modules.",
      "effort": "large",
      "pathId": "games-listing",
      "principleId": "be-memory-efficient",
      "principleCheckId": "bounded-footprint",
      "guidanceId": "defer-rendering-heavy-content",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/home-heap-baseline.json",
        "evidence/home-heap-post.json"
      ]
    }
  ],
  "taskList": [
    {
      "id": "T001",
      "title": "Profile the LCP request chain, remove redirects from the canonical entry URL, prioritize the actual LCP asset, and defer non-critical scripts and media.",
      "priority": 1,
      "findingIds": [
        "F006"
      ],
      "guidanceId": "performance",
      "status": "open"
    },
    {
      "id": "T002",
      "title": "Link directly to /store/games, reduce document payload, prioritize only above-fold imagery, and defer recaptcha, feedback, analytics, and offscreen promotional media until needed.",
      "priority": 2,
      "findingIds": [
        "F007"
      ],
      "guidanceId": "optimize-image-priority",
      "status": "open"
    },
    {
      "id": "T003",
      "title": "Mark all HTTPS cookies Secure, select the narrowest SameSite setting, shorten analytics retention, remove unsafe-eval/unsafe-inline through nonce/hash migration, and send a strict Referrer-Policy.",
      "priority": 3,
      "findingIds": [
        "F013"
      ],
      "guidanceId": "security",
      "status": "open"
    },
    {
      "id": "T004",
      "title": "Minimise anonymous telemetry, delay analytics until justified, consolidate and batch events, and remove advertising/feedback dependencies that are not needed for the core browse task.",
      "priority": 4,
      "findingIds": [
        "F012"
      ],
      "guidanceId": "privacy",
      "status": "open"
    },
    {
      "id": "T005",
      "title": "Reserve image geometry with width/height or aspect-ratio and use stable font fallbacks for late content.",
      "priority": 5,
      "findingIds": [
        "F009"
      ],
      "guidanceId": "visually-stable-font-fallbacks",
      "status": "open"
    },
    {
      "id": "T006",
      "title": "Split route and feature bundles, conditionally load feedback/recaptcha and commercial modules, and remove duplicated or legacy code.",
      "priority": 6,
      "findingIds": [
        "F008"
      ],
      "guidanceId": "identify-heavy-scripts",
      "status": "open"
    },
    {
      "id": "T007",
      "title": "Use responsive modern formats, explicit intrinsic dimensions, and strict shelf/media budgets; avoid loading promotional artwork outside the initial viewport.",
      "priority": 7,
      "findingIds": [
        "F015"
      ],
      "guidanceId": "deliver-optimized-decorative-images",
      "status": "open"
    },
    {
      "id": "T008",
      "title": "Serve a branded 404 template with search, Home/Store links, preserved global navigation, and an accessible status heading.",
      "priority": 8,
      "findingIds": [
        "F014"
      ],
      "guidanceId": "persistent-toast-notifications",
      "status": "open"
    },
    {
      "id": "T009",
      "title": "Wrap primary catalogue content in <main> and align each control accessible name with its visible label.",
      "priority": 9,
      "findingIds": [
        "F004"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T010",
      "title": "Choose one canonical locale URL per page, ensure it resolves consistently, and test canonical/hreflang pairs against the final response URL.",
      "priority": 10,
      "findingIds": [
        "F011"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T011",
      "title": "Virtualise or content-visibility-gate long shelves, release below-fold models, and conditionally initialize non-core modules.",
      "priority": 11,
      "findingIds": [
        "F017"
      ],
      "guidanceId": "defer-rendering-heavy-content",
      "status": "open"
    },
    {
      "id": "T012",
      "title": "Apply color-scheme: light dark and theme surface, text, border, and browser-control colors from prefers-color-scheme, verifying listing and detail templates.",
      "priority": 12,
      "findingIds": [
        "F001"
      ],
      "guidanceId": "dark-mode",
      "status": "open"
    },
    {
      "id": "T013",
      "title": "Remove the deprecated API, resolve DevTools Issues and BFCache blockers, and publish production source maps under the intended access policy.",
      "priority": 13,
      "findingIds": [
        "F010"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T014",
      "title": "Define containment on shelf/card hosts and use size container queries for card density, labels, and controls, retaining viewport fallbacks.",
      "priority": 14,
      "findingIds": [
        "F003"
      ],
      "guidanceId": "size-aware-styling",
      "status": "open"
    },
    {
      "id": "T015",
      "title": "Use alt=\"\" when decorative or a concise accessible name when the avatar conveys account state.",
      "priority": 15,
      "findingIds": [
        "F005"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T016",
      "title": "Add cross-document View Transitions with a reduced-motion fallback, using stable names only for continuity-critical elements.",
      "priority": 16,
      "findingIds": [
        "F002"
      ],
      "guidanceId": "cross-document-transitions",
      "status": "open"
    },
    {
      "id": "T017",
      "title": "For safe agentic commerce, expose narrow read-only search/product tools and an explicitly confirmed install-intent tool with human approval.",
      "priority": 17,
      "findingIds": [
        "F016"
      ],
      "guidanceId": "webmcp",
      "status": "open"
    }
  ],
  "budget": {
    "wallClockSeconds": 1200,
    "pathCount": 5,
    "auditPasses": 1
  },
  "agent": "pi",
  "runId": "2026-07-21T06-51-37-307Z"
}
