{
  "url": "https://scratch.mit.edu",
  "auditedAt": "2026-07-24T00:33:57.126Z",
  "mode": "report",
  "status": "completed",
  "statusDetail": "Coverage-complete representative audit of seven public/guest paths. Authenticated account, moderation, studio-detail, profile, payment/donation completion, and project-save/share states were not covered because they require credentials, user mutation, or duplicate inspected templates.",
  "page": {
    "appType": "hybrid",
    "framework": "React-based SPA/hybrid surfaces plus Scratch editor VM/canvas",
    "notes": "Public content is client-rendered into #app. Homepage/listing/project/editor/join templates were sampled."
  },
  "evidenceUsed": [
    "screenshot",
    "video",
    "dom",
    "evaluate-probe",
    "layout-metrics",
    "trace",
    "har",
    "discoverability",
    "headers",
    "cookies",
    "trackers",
    "secrets",
    "images",
    "lighthouse",
    "heap-summary",
    "curl robots/sitemap"
  ],
  "guidanceConsulted": [
    "accessibility",
    "accessible-error-announcement",
    "language-detection",
    "language-model",
    "summarizer",
    "translator",
    "css",
    "highlight-text-ranges",
    "css-layout",
    "animated-select-picker",
    "autofill-address-form",
    "autofill-highlight-inputs",
    "autofill-payment-form",
    "autofill-sign-in-form",
    "autofill-sign-up-form",
    "brand-consistent-forms",
    "branded-select-styling",
    "custom-select-picker-layouts",
    "form-fields-automatically-fit-contents",
    "forms",
    "required-field-feedback",
    "rich-media-picker",
    "select-menu-interaction",
    "validate-input-after-interaction",
    "html",
    "passkey-authentication",
    "passkey-conditional-create",
    "passkey-management",
    "passkey-reauthentication",
    "passkey-registration",
    "passkeys",
    "batch-analytics-events",
    "break-up-long-tasks",
    "calculate-total-foreground-time",
    "conditional-async-dependencies",
    "defer-rendering-heavy-content",
    "defer-work-until-scroll-ends",
    "deprioritize-background-fetches",
    "detect-initial-visibility-state",
    "efficient-background-processing",
    "faster-spa-view-transitions",
    "full-session-analytics",
    "identify-heavy-scripts",
    "identify-inp-causes",
    "improve-next-page-load-performance",
    "interactions-in-complex-layouts",
    "optimize-image-priority",
    "optimize-preload-priority",
    "optimize-script-priority",
    "performance",
    "resolution-optimized-pseudo-elements",
    "schedule-tasks-by-priority",
    "sequence-distributed-events",
    "privacy",
    "security",
    "adapt-scrollbar-to-contrast-preferences",
    "anchor-positioning-tab-underline",
    "animate-element-entry-exit",
    "animate-to-from-top-layer",
    "animate-to-intrinsic-sizes",
    "apply-webgl-shaders",
    "calculate-event-differentials",
    "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",
    "consistent-cross-document-transitions",
    "content-based-styling",
    "coordinate-global-events",
    "cross-document-transitions",
    "customize-scrollbar-color-and-thickness",
    "dark-mode",
    "declarative-button-actions",
    "declarative-dialog-popover-control",
    "deliver-optimized-decorative-images",
    "design-token-reactivity",
    "directional-navigation-transitions",
    "dynamic-sibling-animations",
    "dynamic-sibling-styling",
    "export-html-media-from-canvas",
    "expose-canvas-content-to-browser-features",
    "flicker-free-client-side-ab-testing",
    "fluid-scaling",
    "format-human-readable-durations",
    "group-element-transitions",
    "improve-text-layout-and-legibility",
    "individual-transform-properties",
    "interactive-content-in-3d-scenes",
    "interactive-content-reveal",
    "interest-triggered-action-previews",
    "interest-triggered-tooltips",
    "light-dismiss-a-dialog",
    "manage-recurring-intervals",
    "model-partial-time-concepts",
    "move-dom-element-without-losing-state",
    "navigation-drawer",
    "overflow-clipping-control",
    "parallax-scroll-effects",
    "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",
    "pull-to-reveal",
    "reduce-style-repetition",
    "resilient-context-menus-and-nested-dropdowns",
    "same-document-transitions",
    "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",
    "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",
    "visually-stable-font-fallbacks",
    "visually-stable-mixed-fonts",
    "visually-texture-content",
    "agentic-forms",
    "agentic-javascript-tools",
    "webmcp"
  ],
  "artifacts": [
    {
      "type": "screenshot",
      "path": "evidence/home-dark.png",
      "caption": "home dark",
      "findingIds": [
        "F01"
      ]
    },
    {
      "type": "other",
      "path": "evidence/preferences-ui-probe.json",
      "caption": "preferences ui probe",
      "findingIds": [
        "F01"
      ]
    },
    {
      "type": "video",
      "path": "evidence/reduced-motion-carousel.mp4",
      "caption": "reduced motion carousel",
      "findingIds": []
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse-home-summary.json",
      "caption": "lighthouse home summary",
      "findingIds": [
        "F02",
        "F09",
        "F10",
        "F13",
        "F14",
        "F15",
        "F16",
        "F17",
        "F18",
        "F20"
      ]
    },
    {
      "type": "other",
      "path": "evidence/images.json",
      "caption": "images",
      "findingIds": [
        "F02",
        "F09",
        "F14",
        "F15",
        "F16",
        "F19",
        "F32"
      ]
    },
    {
      "type": "other",
      "path": "evidence/editor-accessibility-probe.json",
      "caption": "editor accessibility probe",
      "findingIds": [
        "F02",
        "F09",
        "F14",
        "F15",
        "F16"
      ]
    },
    {
      "type": "video",
      "path": "evidence/home-to-explore.mp4",
      "caption": "home to explore",
      "findingIds": [
        "F03"
      ]
    },
    {
      "type": "other",
      "path": "evidence/platform-probe.json",
      "caption": "platform probe",
      "findingIds": [
        "F04",
        "F05",
        "F08",
        "F18",
        "F20",
        "F22",
        "F23",
        "F29",
        "F30"
      ]
    },
    {
      "type": "dom",
      "path": "evidence/home-dom.json",
      "caption": "home dom",
      "findingIds": [
        "F04",
        "F05",
        "F08",
        "F18",
        "F20",
        "F22",
        "F23",
        "F29",
        "F30"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-desktop.png",
      "caption": "home desktop",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/project.png",
      "caption": "project",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/editor.png",
      "caption": "editor",
      "findingIds": [
        "F07",
        "F11",
        "F17"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-mobile.png",
      "caption": "home mobile",
      "findingIds": []
    },
    {
      "type": "layout",
      "path": "evidence/home-mobile-layout.json",
      "caption": "home mobile layout",
      "findingIds": [
        "F10"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/join.png",
      "caption": "join",
      "findingIds": [
        "F06",
        "F26",
        "F31"
      ]
    },
    {
      "type": "other",
      "path": "evidence/join-page-probe.json",
      "caption": "join page probe",
      "findingIds": [
        "F06",
        "F26",
        "F31"
      ]
    },
    {
      "type": "other",
      "path": "evidence/join-validation-probe.json",
      "caption": "join validation probe",
      "findingIds": [
        "F06",
        "F26",
        "F31"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/ideas.png",
      "caption": "ideas",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/project-mobile.png",
      "caption": "project mobile",
      "findingIds": [
        "F07",
        "F17"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/project-mobile-layout.json",
      "caption": "project mobile layout",
      "findingIds": [
        "F07",
        "F17"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/editor-mobile-layout.json",
      "caption": "editor mobile layout",
      "findingIds": [
        "F07",
        "F11",
        "F17"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/404.png",
      "caption": "404",
      "findingIds": []
    },
    {
      "type": "trace-summary",
      "path": "evidence/home-trace-summary.json",
      "caption": "home trace summary",
      "findingIds": [
        "F10"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-summary.json",
      "caption": "home summary",
      "findingIds": [
        "F12",
        "F13",
        "F19",
        "F25",
        "F32",
        "F33",
        "F34"
      ]
    },
    {
      "type": "har",
      "path": "evidence/home.har",
      "caption": "home",
      "findingIds": [
        "F12",
        "F13",
        "F25",
        "F33",
        "F34"
      ]
    },
    {
      "type": "other",
      "path": "evidence/recon.json",
      "caption": "recon",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/explore-probe.json",
      "caption": "explore probe",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/project-probe.json",
      "caption": "project probe",
      "findingIds": []
    },
    {
      "type": "discoverability",
      "path": "evidence/discoverability-home.json",
      "caption": "discoverability home",
      "findingIds": [
        "F21",
        "F28"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/discoverability-home-rendered.png",
      "caption": "discoverability home rendered",
      "findingIds": [
        "F21",
        "F28"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/discoverability-home-crawler.png",
      "caption": "discoverability home crawler",
      "findingIds": [
        "F21",
        "F28"
      ]
    },
    {
      "type": "discoverability",
      "path": "evidence/discoverability-project.json",
      "caption": "discoverability project",
      "findingIds": [
        "F21",
        "F28"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/discoverability-project-rendered.png",
      "caption": "discoverability project rendered",
      "findingIds": [
        "F21",
        "F28"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/discoverability-project-crawler.png",
      "caption": "discoverability project crawler",
      "findingIds": [
        "F21",
        "F28"
      ]
    },
    {
      "type": "other",
      "path": "evidence/robots.txt",
      "caption": "robots",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/sitemap.xml",
      "caption": "sitemap",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/headers.json",
      "caption": "headers",
      "findingIds": [
        "F24",
        "F25",
        "F27"
      ]
    },
    {
      "type": "other",
      "path": "evidence/cookies.json",
      "caption": "cookies",
      "findingIds": [
        "F24",
        "F25",
        "F27"
      ]
    },
    {
      "type": "other",
      "path": "evidence/trackers.json",
      "caption": "trackers",
      "findingIds": [
        "F24",
        "F25",
        "F27"
      ]
    },
    {
      "type": "other",
      "path": "evidence/secrets.json",
      "caption": "secrets",
      "findingIds": [
        "F24",
        "F25",
        "F27"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/explore.png",
      "caption": "explore",
      "findingIds": []
    },
    {
      "type": "heap",
      "path": "evidence/editor-heap-baseline.heapsnapshot",
      "caption": "editor heap baseline",
      "findingIds": []
    },
    {
      "type": "heap",
      "path": "evidence/editor-heap-post.heapsnapshot",
      "caption": "editor heap post",
      "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": "Dark emulation + computed style",
      "evidence": "The dark-condition screenshot is visually identical to the default; the computed probe reports colorScheme \"normal\" under a matching dark query.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dark.png",
        "evidence/preferences-ui-probe.json"
      ],
      "findingIds": [
        "F01"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-reduced-motion",
      "status": "pass",
      "confidence": "high",
      "method": "Active evidence review for respects-reduced-motion",
      "evidence": "Reduced-motion carousel recording produced one static frame over 3 seconds and the animation probe reported no running animations.",
      "artifacts": [
        "evidence/reduced-motion-carousel.mp4"
      ],
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-contrast",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse contrast + CSS preference inspection",
      "evidence": "Lighthouse reports color-contrast failures; the inspected CSS/probe exposed no high-contrast adaptation for the affected content.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home-summary.json",
        "evidence/images.json",
        "evidence/editor-accessibility-probe.json"
      ],
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "view-transitions",
      "status": "issues",
      "confidence": "high",
      "method": "Recorded primary route transition",
      "evidence": "The recorded Home to Explore journey shows navigation/loading frames without a continuity transition.",
      "pathIds": [
        "home",
        "explore"
      ],
      "artifacts": [
        "evidence/home-to-explore.mp4"
      ],
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "scroll-driven-animations",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and feature applicability review across representative paths",
      "evidence": "No scroll-linked storytelling, parallax, or reveal interaction was present on the representative templates, so there is no scroll-driven effect to implement.",
      "reason": "No scroll-linked storytelling, parallax, or reveal interaction was present on the representative templates, so there is no scroll-driven effect to implement.",
      "pathIds": [
        "home",
        "explore",
        "project",
        "editor",
        "ideas",
        "join"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "physical-gestures",
      "status": "issues",
      "confidence": "high",
      "method": "Rendered CSS and carousel DOM inspection",
      "evidence": "The DOM/CSS capture contains Slick transform-driven carousel rules and custom arrow controls, with no scroll-snap evidence.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/home-dom.json"
      ],
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "scroll-state-aware-chrome",
      "status": "issues",
      "confidence": "high",
      "method": "Screenshot + CSS inspection",
      "evidence": "Screenshots and captured CSS show fixed/static navigation and scripted carousels but no scroll-state query, progress indicator, or responsive header state.",
      "pathIds": [
        "home",
        "project"
      ],
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/home-dom.json"
      ],
      "findingIds": [
        "F05"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "anchored-positioning",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and feature applicability review across representative paths",
      "evidence": "No tooltip/popover/menu whose placement could be meaningfully tested was exposed in the representative guest paths.",
      "reason": "No tooltip/popover/menu whose placement could be meaningfully tested was exposed in the representative guest paths.",
      "pathIds": [
        "home",
        "explore",
        "project",
        "editor",
        "ideas",
        "join"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "directs-attention",
      "status": "pass",
      "confidence": "high",
      "method": "Active evidence review for directs-attention",
      "evidence": "Screenshots show persistent labelled navigation, visually dominant primary actions, project title/context, and explicit editor tutorial controls.",
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/project.png",
        "evidence/editor.png"
      ],
      "pathIds": [
        "home",
        "project",
        "editor"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "no-intrusive-interruptions",
      "status": "pass",
      "confidence": "high",
      "method": "Active evidence review for no-intrusive-interruptions",
      "evidence": "The donation banner pushes rather than overlays content, is clearly labelled, and exposes a visible 32x32 dismiss control on desktop and mobile.",
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-mobile.png",
        "evidence/home-mobile-layout.json"
      ],
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "semantic-dismissible-primitives",
      "status": "issues",
      "confidence": "high",
      "method": "Join dialog DOM probe",
      "evidence": "The join surface reports one role=dialog but zero native dialog elements across the inspected UI.",
      "pathIds": [
        "join"
      ],
      "artifacts": [
        "evidence/join.png",
        "evidence/join-page-probe.json",
        "evidence/join-validation-probe.json"
      ],
      "findingIds": [
        "F06"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "reduced-chrome",
      "status": "pass",
      "confidence": "high",
      "method": "Active evidence review for reduced-chrome",
      "evidence": "Landing, project, ideas, and editor screenshots devote the principal region to creation/discovery content with restrained navigation chrome.",
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/project.png",
        "evidence/ideas.png",
        "evidence/editor.png"
      ],
      "pathIds": [
        "home",
        "project",
        "ideas",
        "editor"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "responsive-no-horizontal-scroll",
      "status": "issues",
      "confidence": "high",
      "method": "360px layouts and screenshots",
      "evidence": "Layout measured 130px horizontal overflow on the project page and 664px on the editor; the editor layout viewport expanded to 1024px.",
      "pathIds": [
        "project",
        "editor"
      ],
      "artifacts": [
        "evidence/project-mobile.png",
        "evidence/project-mobile-layout.json",
        "evidence/editor-mobile-layout.json",
        "evidence/editor.png"
      ],
      "findingIds": [
        "F07"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "component-level-responsiveness",
      "status": "issues",
      "confidence": "high",
      "method": "CSS rule inspection",
      "evidence": "The CSS capture contains repeated 480/768/942px media tiers and fixed .inner widths; the probe found zero CSS container rules.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/home-dom.json"
      ],
      "findingIds": [
        "F08"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "input-modality-aware",
      "status": "issues",
      "confidence": "high",
      "method": "Focus/target probe + Lighthouse",
      "evidence": "Lighthouse target-size fails; the UI probe measured visible controls as small as 32x32 and text links around 14-18px high.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home-summary.json",
        "evidence/images.json",
        "evidence/editor-accessibility-probe.json"
      ],
      "findingIds": [
        "F09"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-purpose-and-primary-action",
      "status": "pass",
      "confidence": "high",
      "method": "Active evidence review for clear-purpose-and-primary-action",
      "evidence": "The landing H1 states the purpose and Start Creating/Join are prominent; project exposes start/See inside; editor opens with a Getting Started tutorial.",
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/project.png",
        "evidence/editor.png"
      ],
      "pathIds": [
        "home",
        "project",
        "editor"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "primary-flow-completion",
      "status": "pass",
      "confidence": "high",
      "method": "Active evidence review for primary-flow-completion",
      "evidence": "The guest Create link reached a functional editor with blocks, stage, start/stop controls and tutorial; Join reached a clear multi-step first screen.",
      "artifacts": [
        "evidence/home-to-explore.mp4",
        "evidence/editor.png",
        "evidence/join.png"
      ],
      "pathIds": [
        "home",
        "editor",
        "join"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-system-state-and-recovery",
      "status": "pass",
      "confidence": "high",
      "method": "Active evidence review for clear-system-state-and-recovery",
      "evidence": "Empty Join submission produced three visible Required messages; the invalid-route screen explains the failure and offers search recovery.",
      "artifacts": [
        "evidence/join.png",
        "evidence/join-page-probe.json",
        "evidence/join-validation-probe.json",
        "evidence/404.png"
      ],
      "pathIds": [
        "join",
        "not-found"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "good-core-web-vitals",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse + layout observer",
      "evidence": "Lighthouse measured LCP 10.9s, CLS 0.781, and TBT 290ms; the independent mobile layout observer measured CLS 0.834.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home-summary.json",
        "evidence/home-trace-summary.json",
        "evidence/home-mobile-layout.json"
      ],
      "findingIds": [
        "F10"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "visual-stability",
      "status": "pass",
      "confidence": "high",
      "method": "Active evidence review for visual-stability",
      "evidence": "Direct visual, DOM, Lighthouse, network, interaction, or responsive inspection across the representative paths found the expected outcome with no contrary signal.",
      "artifacts": [
        "evidence/home-desktop.png"
      ],
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-main-thread",
      "status": "issues",
      "confidence": "high",
      "method": "Layout long-task observers",
      "evidence": "The 360px editor layout capture recorded 723ms and 153ms long tasks after load; the project page recorded a 711ms task.",
      "pathIds": [
        "home",
        "project",
        "editor"
      ],
      "artifacts": [
        "evidence/editor-mobile-layout.json",
        "evidence/editor.png",
        "evidence/lighthouse-home-summary.json",
        "evidence/home-trace-summary.json",
        "evidence/home-mobile-layout.json"
      ],
      "findingIds": [
        "F11"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-resource-delivery",
      "status": "issues",
      "confidence": "high",
      "method": "HAR/trace/Lighthouse",
      "evidence": "HAR recorded 43 requests and 4.24MB transferred, including 1.29MB splash.intl.js and an 830KB thumbnail; parser-inserted styles/scripts begin at high priority.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har",
        "evidence/lighthouse-home-summary.json",
        "evidence/home-trace-summary.json",
        "evidence/home-mobile-layout.json"
      ],
      "findingIds": [
        "F12"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "trim-unused-and-duplicate-code",
      "status": "issues",
      "confidence": "high",
      "method": "HAR + Lighthouse diagnostics",
      "evidence": "HAR shows 1.97MB script transfer; Lighthouse flags large scripts without source maps and the locale bundle alone is 1.29MB.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har",
        "evidence/lighthouse-home-summary.json"
      ],
      "findingIds": [
        "F13"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "names-roles-labels",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse, image, and editor semantic probes",
      "evidence": "The image audit found 17 of 18 images without alt; Lighthouse found unnamed links; editor canvases have no role, accessible name, or fallback content.",
      "pathIds": [
        "home",
        "editor"
      ],
      "artifacts": [
        "evidence/lighthouse-home-summary.json",
        "evidence/images.json",
        "evidence/editor-accessibility-probe.json"
      ],
      "findingIds": [
        "F14"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "sufficient-contrast",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse accessibility audit",
      "evidence": "Lighthouse accessibility audit reports color-contrast failures on the landing surface.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home-summary.json",
        "evidence/images.json",
        "evidence/editor-accessibility-probe.json"
      ],
      "findingIds": [
        "F16"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "structure-and-focus",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse structural/focus audits",
      "evidence": "Lighthouse reports aria-hidden slides containing focusable links, skipped heading order, and malformed definition-list structure.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home-summary.json",
        "evidence/images.json",
        "evidence/editor-accessibility-probe.json"
      ],
      "findingIds": [
        "F15"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "legible-text",
      "status": "pass",
      "confidence": "high",
      "method": "Active evidence review for legible-text",
      "evidence": "Visual review across desktop/mobile found readable line lengths, clear hierarchy, and no clipped body copy on the landing, ideas, and Join templates.",
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-mobile-layout.json",
        "evidence/ideas.png",
        "evidence/join.png"
      ],
      "pathIds": [
        "home",
        "ideas",
        "join"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "zoom-reflow-targets-and-media",
      "status": "issues",
      "confidence": "high",
      "method": "Mobile layout + Lighthouse target audit",
      "evidence": "The editor has 664px overflow at a 360px visual viewport, project has 130px, and Lighthouse target-size fails.",
      "pathIds": [
        "home",
        "project",
        "editor"
      ],
      "artifacts": [
        "evidence/project-mobile.png",
        "evidence/project-mobile-layout.json",
        "evidence/editor-mobile-layout.json",
        "evidence/editor.png",
        "evidence/lighthouse-home-summary.json"
      ],
      "findingIds": [
        "F17"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "no-console-errors",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse console capture",
      "evidence": "Lighthouse captured 404 console/network errors for /fonts/slick.woff and /fonts/slick.ttf.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home-summary.json"
      ],
      "findingIds": [
        "F18"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "sound-document-and-assets",
      "status": "issues",
      "confidence": "high",
      "method": "DOM/image/Lighthouse inspection",
      "evidence": "All 18 audited images lack width/height attributes; Lighthouse reports incorrectly displayed gallery aspect ratios.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/images.json",
        "evidence/home-summary.json",
        "evidence/platform-probe.json",
        "evidence/home-dom.json"
      ],
      "findingIds": [
        "F19"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "browser-platform-hygiene",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse deprecation/source-map audits",
      "evidence": "Lighthouse reports deprecated Shared Storage usage in polyfill.min.js and missing maps for large first-party bundles.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home-summary.json"
      ],
      "findingIds": [
        "F20"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "title-and-description",
      "status": "pass",
      "confidence": "high",
      "method": "Active evidence review for title-and-description",
      "evidence": "Home, Explore, and project probes returned route-specific descriptive titles and meta descriptions.",
      "artifacts": [
        "evidence/recon.json",
        "evidence/explore-probe.json",
        "evidence/project-probe.json"
      ],
      "pathIds": [
        "home",
        "explore",
        "project"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "crawlable-and-mobile-friendly",
      "status": "issues",
      "confidence": "high",
      "method": "Discoverability, link and viewport probes",
      "evidence": "Discoverability measured only 3% raw-content coverage on home and 1% on the project, both empty #app shells; crawler screenshots are blank.",
      "pathIds": [
        "home",
        "project"
      ],
      "artifacts": [
        "evidence/discoverability-home.json",
        "evidence/discoverability-home-rendered.png",
        "evidence/discoverability-home-crawler.png",
        "evidence/discoverability-project.json",
        "evidence/discoverability-project-rendered.png",
        "evidence/discoverability-project-crawler.png",
        "evidence/platform-probe.json",
        "evidence/home-dom.json"
      ],
      "findingIds": [
        "F21"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "canonical-and-indexing-signals",
      "status": "issues",
      "confidence": "high",
      "method": "HTTP/robots/sitemap/DOM probes",
      "evidence": "The platform probe found no canonical URL, while sitemap.xml exists and the public pages return 200.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/home-dom.json",
        "evidence/robots.txt",
        "evidence/sitemap.xml"
      ],
      "findingIds": [
        "F22"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "structured-and-shareable-metadata",
      "status": "issues",
      "confidence": "high",
      "method": "Metadata DOM probe",
      "evidence": "The metadata probe found Open Graph tags but zero JSON-LD blocks; public project content is a rich CreativeWork-like entity.",
      "pathIds": [
        "home",
        "project"
      ],
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/home-dom.json"
      ],
      "findingIds": [
        "F23"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "secure-transport-and-headers",
      "status": "issues",
      "confidence": "high",
      "method": "Header/cookie/secrets probes",
      "evidence": "Headers show no CSP or nosniff; all three cookies lack Secure and two analytics cookies use SameSite=None for 400 days.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json",
        "evidence/trackers.json",
        "evidence/secrets.json"
      ],
      "findingIds": [
        "F24"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "data-minimisation-and-third-parties",
      "status": "issues",
      "confidence": "high",
      "method": "Tracker/cookie/HAR probes",
      "evidence": "Tracker evidence records Google Tag Manager and Google Analytics; HAR attributes about 300KB to tag-manager scripts and cookies persist 400 days.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json",
        "evidence/trackers.json",
        "evidence/secrets.json",
        "evidence/home-summary.json",
        "evidence/home.har"
      ],
      "findingIds": [
        "F25"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "in-context-permissions-and-modern-auth",
      "status": "issues",
      "confidence": "high",
      "method": "Join/auth DOM inspection",
      "evidence": "The inspected Join flow asks for password and confirmation with autocomplete disabled; inspected app signals exposed no WebAuthn/passkey path.",
      "pathIds": [
        "join"
      ],
      "artifacts": [
        "evidence/join.png",
        "evidence/join-page-probe.json",
        "evidence/join-validation-probe.json"
      ],
      "findingIds": [
        "F26"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "defensive-browser-policies",
      "status": "issues",
      "confidence": "high",
      "method": "Security header probe",
      "evidence": "Headers include HSTS and SAMEORIGIN, but omit CSP/frame-ancestors policy, Referrer-Policy, Permissions-Policy, and nosniff.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json",
        "evidence/trackers.json",
        "evidence/secrets.json"
      ],
      "findingIds": [
        "F27"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "progressive-enhancement",
      "status": "issues",
      "confidence": "high",
      "method": "Raw HTML/rendered comparison",
      "evidence": "Raw HTML has an empty #app and only 1-3% of rendered words; crawler screenshots show a blank shell.",
      "pathIds": [
        "home",
        "project"
      ],
      "artifacts": [
        "evidence/discoverability-home.json",
        "evidence/discoverability-home-rendered.png",
        "evidence/discoverability-home-crawler.png",
        "evidence/discoverability-project.json",
        "evidence/discoverability-project-rendered.png",
        "evidence/discoverability-project-crawler.png"
      ],
      "findingIds": [
        "F28"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "resilient-runtime-behaviour",
      "status": "pass",
      "confidence": "high",
      "method": "Active evidence review for resilient-runtime-behaviour",
      "evidence": "Project/player, editor tutorial, listing, and Join dialog rendered without cut-off overlays at desktop; repeated tutorial close/open remained operable.",
      "artifacts": [
        "evidence/project.png",
        "evidence/editor.png",
        "evidence/explore.png",
        "evidence/editor-heap-baseline.heapsnapshot",
        "evidence/editor-heap-post.heapsnapshot",
        "evidence/editor-accessibility-probe.json"
      ],
      "pathIds": [
        "project",
        "editor",
        "explore",
        "join"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "offline-and-installable",
      "status": "issues",
      "confidence": "high",
      "method": "Manifest/service-worker probe",
      "evidence": "The platform probe found no manifest and no controlling service worker on the landing surface.",
      "pathIds": [
        "home",
        "editor"
      ],
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/home-dom.json"
      ],
      "findingIds": [
        "F29"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "network-and-http-failure-states",
      "status": "pass",
      "confidence": "high",
      "method": "Active evidence review for network-and-http-failure-states",
      "evidence": "A deliberately invalid route returned a clear illustrated error, explanation, and search field rather than a blank shell.",
      "artifacts": [
        "evidence/404.png"
      ],
      "pathIds": [
        "not-found"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "lang-dir-and-logical-properties",
      "status": "issues",
      "confidence": "high",
      "method": "DOM and rendered CSS inspection",
      "evidence": "HTML uses lang=en-GB, but captured CSS repeatedly uses left/right, float:left/right, margin-left/right and fixed directional placement, with no dir declaration.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/home-dom.json"
      ],
      "findingIds": [
        "F30"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "locale-aware-data",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and feature applicability review across representative paths",
      "evidence": "The audited guest surfaces showed no dates, currency, numbers, or calendar data whose locale formatting could be judged.",
      "reason": "The audited guest surfaces showed no dates, currency, numbers, or calendar data whose locale formatting could be judged.",
      "pathIds": [
        "home",
        "explore",
        "project",
        "editor",
        "ideas",
        "join"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "time-zone-correctness",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and feature applicability review across representative paths",
      "evidence": "No scheduled event or time-zone-sensitive workflow was present in the audited guest surfaces.",
      "reason": "No scheduled event or time-zone-sensitive workflow was present in the audited guest surfaces.",
      "pathIds": [
        "home",
        "explore",
        "project",
        "editor",
        "ideas",
        "join"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "no-dark-patterns",
      "status": "pass",
      "confidence": "high",
      "method": "Active evidence review for no-dark-patterns",
      "evidence": "Landing donation is labelled and dismissible; Join says the account is free and its first step contains no preselected consent or disguised action.",
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/join.png"
      ],
      "pathIds": [
        "home",
        "join"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "humane-error-handling",
      "status": "pass",
      "confidence": "high",
      "method": "Active evidence review for humane-error-handling",
      "evidence": "After an empty Next action, Join displayed contextual Required messages beside all three relevant inputs without blame or destructive state loss.",
      "artifacts": [
        "evidence/join.png",
        "evidence/join-page-probe.json",
        "evidence/join-validation-probe.json"
      ],
      "pathIds": [
        "join"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "trustworthy-input-assistance",
      "status": "issues",
      "confidence": "high",
      "method": "Join form attribute probe",
      "evidence": "The Join probe reports autocomplete=\"off\" for username, password, and password confirmation.",
      "pathIds": [
        "join"
      ],
      "artifacts": [
        "evidence/join.png",
        "evidence/join-page-probe.json",
        "evidence/join-validation-probe.json"
      ],
      "findingIds": [
        "F31"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "safe-commercial-and-account-flows",
      "status": "pass",
      "confidence": "high",
      "method": "Active evidence review for safe-commercial-and-account-flows",
      "evidence": "The audited signup entry states “It’s free”, asks only username/password on the first step, and presents one predictable Next action; authenticated account management was excluded.",
      "artifacts": [
        "evidence/join.png",
        "evidence/join-page-probe.json",
        "evidence/join-validation-probe.json"
      ],
      "pathIds": [
        "join"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "optimised-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Image audit + HAR",
      "evidence": "Image audit found 14 oversized images, 15 legacy-format images, 16 without srcset, and 15 below-fold images not lazy-loaded.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/images.json",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F32"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "no-wasteful-work",
      "status": "issues",
      "confidence": "high",
      "method": "HAR/trackers/trace",
      "evidence": "HAR records 4.24MB on load, 21 cross-origin requests, large below-fold thumbnails, and analytics collection before interaction.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har",
        "evidence/headers.json",
        "evidence/cookies.json",
        "evidence/trackers.json",
        "evidence/secrets.json",
        "evidence/lighthouse-home-summary.json",
        "evidence/home-trace-summary.json",
        "evidence/home-mobile-layout.json"
      ],
      "findingIds": [
        "F33"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "third-party-and-media-budget",
      "status": "issues",
      "confidence": "high",
      "method": "HAR summary + trackers",
      "evidence": "2.54MB of 4.24MB transferred cross-origin; image payload is 2.26MB and tag-manager scripts add about 300KB.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har",
        "evidence/headers.json",
        "evidence/cookies.json",
        "evidence/trackers.json",
        "evidence/secrets.json"
      ],
      "findingIds": [
        "F34"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "structured-agent-capabilities",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and feature applicability review across representative paths",
      "evidence": "This emerging capability is contextual; Scratch exposes no declared agent-facing surface, so absence is an opportunity rather than a failure.",
      "reason": "This emerging capability is contextual; Scratch exposes no declared agent-facing surface, so absence is an opportunity rather than a failure.",
      "pathIds": [
        "home",
        "explore",
        "project",
        "editor",
        "ideas",
        "join"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "on-device-inference",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and feature applicability review across representative paths",
      "evidence": "No summarisation/language-model feature is part of the representative core journey, so on-device inference is not applicable.",
      "reason": "No summarisation/language-model feature is part of the representative core journey, so on-device inference is not applicable.",
      "pathIds": [
        "home",
        "explore",
        "project",
        "editor",
        "ideas",
        "join"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-leak-under-repeated-interaction",
      "status": "pass",
      "confidence": "medium",
      "method": "Active evidence review for no-leak-under-repeated-interaction",
      "evidence": "After 10 tutorial close/open cycles, heap self-size rose from 97,187,667 to 98,592,843 bytes (1.45%); this bounded warm-up-sized delta does not establish unbounded retention.",
      "artifacts": [
        "evidence/editor-heap-baseline.heapsnapshot",
        "evidence/editor-heap-post.heapsnapshot",
        "evidence/editor-accessibility-probe.json"
      ],
      "pathIds": [
        "editor"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "bounded-footprint",
      "status": "pass",
      "confidence": "medium",
      "method": "Active evidence review for bounded-footprint",
      "evidence": "The complex visual editor used about 89MB JS heap, 2,067 live DOM elements, and a 97.2MB heap snapshot; substantial but proportionate to blocks, canvas, tutorial, media, and VM UI.",
      "artifacts": [
        "evidence/editor-heap-baseline.heapsnapshot",
        "evidence/editor-heap-post.heapsnapshot",
        "evidence/editor-accessibility-probe.json"
      ],
      "pathIds": [
        "editor"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-detached-dom-or-unbounded-listeners",
      "status": "pass",
      "confidence": "medium",
      "method": "Active evidence review for no-detached-dom-or-unbounded-listeners",
      "evidence": "Before/after heap summaries contained no Detached* constructor among retained top constructors; repeated interaction caused only a small bounded total delta.",
      "artifacts": [
        "evidence/editor-heap-baseline.heapsnapshot",
        "evidence/editor-heap-post.heapsnapshot",
        "evidence/editor-accessibility-probe.json"
      ],
      "pathIds": [
        "editor"
      ]
    }
  ],
  "principleOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F01",
        "F02"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F03",
        "F04"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F05"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F06"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F07",
        "F08",
        "F09"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "be-fast-and-stable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F10",
        "F11",
        "F12",
        "F13"
      ]
    },
    {
      "principleId": "be-inclusive",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F14",
        "F16",
        "F15",
        "F17"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F18",
        "F19",
        "F20"
      ]
    },
    {
      "principleId": "be-discoverable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F21",
        "F22",
        "F23"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F24",
        "F25",
        "F26",
        "F27"
      ]
    },
    {
      "principleId": "be-resilient",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F28",
        "F29"
      ]
    },
    {
      "principleId": "be-internationalised",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F30"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F31"
      ]
    },
    {
      "principleId": "be-sustainable",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F32",
        "F33",
        "F34"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "expectation": "contextual",
      "status": "not-applicable",
      "reason": "This emerging capability is contextual; Scratch exposes no declared agent-facing surface, so absence is an opportunity rather than a failure. No summarisation/language-model feature is part of the representative core journey, so on-device inference is not applicable."
    },
    {
      "principleId": "be-memory-efficient",
      "expectation": "default",
      "status": "pass"
    }
  ],
  "paths": [
    {
      "id": "home",
      "description": "Public landing and discovery surface; tested desktop, 360px mobile, dark/reduced-motion preferences, keyboard focus, load performance, privacy, crawler rendering, and primary create navigation.",
      "url": "https://scratch.mit.edu/",
      "conditions": [
        "desktop",
        "viewport: 360x800",
        "prefers-color-scheme: dark",
        "prefers-reduced-motion: reduce",
        "keyboard focus",
        "JavaScript disabled crawler"
      ],
      "result": "issues"
    },
    {
      "id": "explore",
      "description": "Representative project-listing template selected from primary navigation.",
      "url": "https://scratch.mit.edu/explore/projects/all",
      "conditions": [
        "desktop",
        "route transition from home"
      ],
      "result": "issues"
    },
    {
      "id": "project",
      "description": "Representative public project-detail and interactive player template, selected from the featured list.",
      "url": "https://scratch.mit.edu/projects/1312717956/",
      "conditions": [
        "desktop",
        "viewport: 360x800",
        "JavaScript disabled crawler"
      ],
      "result": "issues"
    },
    {
      "id": "editor",
      "description": "Primary creation journey and highest-risk long-lived app surface; tutorial opened and its close/open interaction repeated for memory evidence.",
      "url": "https://scratch.mit.edu/projects/editor/?tutorial=getStarted",
      "conditions": [
        "desktop",
        "viewport: 360x800",
        "10 repeated tutorial close/open cycles"
      ],
      "result": "issues"
    },
    {
      "id": "ideas",
      "description": "Representative learning/content landing template selected from primary navigation.",
      "url": "https://scratch.mit.edu/ideas",
      "conditions": [
        "desktop"
      ],
      "result": "pass"
    },
    {
      "id": "join",
      "description": "Representative account creation flow; inspected first step and submitted it empty to observe validation and recovery.",
      "url": "https://scratch.mit.edu/join",
      "conditions": [
        "desktop",
        "invalid empty submission"
      ],
      "result": "issues"
    },
    {
      "id": "not-found",
      "description": "Deliberately invalid URL used to inspect HTTP/error recovery.",
      "url": "https://scratch.mit.edu/definitely-not-a-real-page-atomic-audit",
      "conditions": [
        "desktop"
      ],
      "result": "pass"
    }
  ],
  "findings": [
    {
      "id": "F01",
      "severity": "medium",
      "confidence": "high",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-color-scheme",
      "guidanceId": "dark-mode",
      "guidanceCategory": "user-experience",
      "summary": "The interface does not honor the system dark-color preference.",
      "evidence": "The dark-condition screenshot is visually identical to the default; the computed probe reports colorScheme \"normal\" under a matching dark query.",
      "suggestedFix": "Declare color-scheme and provide tested dark surface/text tokens with prefers-color-scheme or light-dark().",
      "artifacts": [
        "evidence/home-dark.png",
        "evidence/preferences-ui-probe.json"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://scratch.mit.edu/"
    },
    {
      "id": "F02",
      "severity": "medium",
      "confidence": "high",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-contrast",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "summary": "Some text fails minimum contrast and there is no contrast-specific adaptation.",
      "evidence": "Lighthouse reports color-contrast failures; the inspected CSS/probe exposed no high-contrast adaptation for the affected content.",
      "suggestedFix": "Correct failing color pairs and test forced-colors/prefers-contrast with visible system-color fallbacks.",
      "artifacts": [
        "evidence/lighthouse-home-summary.json",
        "evidence/images.json",
        "evidence/editor-accessibility-probe.json"
      ],
      "effort": "small",
      "pathId": "home",
      "url": "https://scratch.mit.edu/"
    },
    {
      "id": "F03",
      "severity": "low",
      "confidence": "high",
      "principleId": "implement-natural-interactions",
      "principleCheckId": "view-transitions",
      "guidanceId": "cross-document-transitions",
      "guidanceCategory": "user-experience",
      "summary": "Primary route changes are abrupt full-document swaps.",
      "evidence": "The recorded Home to Explore journey shows navigation/loading frames without a continuity transition.",
      "suggestedFix": "Use same-origin cross-document View Transitions with reduced-motion-safe fallback for primary navigation.",
      "artifacts": [
        "evidence/home-to-explore.mp4"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://scratch.mit.edu/"
    },
    {
      "id": "F04",
      "severity": "low",
      "confidence": "high",
      "principleId": "implement-natural-interactions",
      "principleCheckId": "physical-gestures",
      "guidanceId": "carousel-slide-effects",
      "guidanceCategory": "user-experience",
      "summary": "Carousels use legacy scripted transforms rather than native snapping/gesture semantics.",
      "evidence": "The DOM/CSS capture contains Slick transform-driven carousel rules and custom arrow controls, with no scroll-snap evidence.",
      "suggestedFix": "Progressively replace scripted carousel movement with overflow scrolling, scroll-snap, and semantic controls.",
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/home-dom.json"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://scratch.mit.edu/"
    },
    {
      "id": "F05",
      "severity": "low",
      "confidence": "high",
      "principleId": "provide-guided-navigation",
      "principleCheckId": "scroll-state-aware-chrome",
      "guidanceId": "shrinking-header-on-scroll",
      "guidanceCategory": "user-experience",
      "summary": "Site chrome remains static rather than communicating scroll position.",
      "evidence": "Screenshots and captured CSS show fixed/static navigation and scripted carousels but no scroll-state query, progress indicator, or responsive header state.",
      "suggestedFix": "Use a lightweight scroll-state-aware header or progress affordance where long listing/detail pages benefit.",
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/home-dom.json"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://scratch.mit.edu/"
    },
    {
      "id": "F06",
      "severity": "low",
      "confidence": "high",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "semantic-dismissible-primitives",
      "guidanceId": "declarative-dialog-popover-control",
      "guidanceCategory": "user-experience",
      "summary": "Account onboarding uses a custom dialog layer instead of the native dialog primitive.",
      "evidence": "The join surface reports one role=dialog but zero native dialog elements across the inspected UI.",
      "suggestedFix": "Use <dialog> for the modal flow, preserving focus trapping, Escape close, and return focus through the platform.",
      "artifacts": [
        "evidence/join.png",
        "evidence/join-page-probe.json",
        "evidence/join-validation-probe.json"
      ],
      "effort": "medium",
      "pathId": "join",
      "url": "https://scratch.mit.edu/join"
    },
    {
      "id": "F07",
      "severity": "high",
      "confidence": "high",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "responsive-no-horizontal-scroll",
      "guidanceId": "css-layout",
      "guidanceCategory": "css-layout",
      "summary": "Primary project/editor surfaces force desktop widths on a 360px device.",
      "evidence": "Layout measured 130px horizontal overflow on the project page and 664px on the editor; the editor layout viewport expanded to 1024px.",
      "suggestedFix": "Provide a deliberate compact editor/player layout, avoid minimum desktop widths, and verify every archetype at 360px.",
      "artifacts": [
        "evidence/project-mobile.png",
        "evidence/project-mobile-layout.json",
        "evidence/editor-mobile-layout.json",
        "evidence/editor.png"
      ],
      "effort": "large",
      "pathId": "editor",
      "url": "https://scratch.mit.edu/projects/editor/?tutorial=getStarted"
    },
    {
      "id": "F08",
      "severity": "medium",
      "confidence": "high",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "component-level-responsiveness",
      "guidanceId": "size-aware-styling",
      "guidanceCategory": "user-experience",
      "summary": "Reusable components rely on viewport breakpoints and fixed-width tiers.",
      "evidence": "The CSS capture contains repeated 480/768/942px media tiers and fixed .inner widths; the probe found zero CSS container rules.",
      "suggestedFix": "Introduce container-type on reusable panels/cards and adapt internals with @container rather than page-wide width tiers.",
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/home-dom.json"
      ],
      "effort": "large",
      "pathId": "home",
      "url": "https://scratch.mit.edu/"
    },
    {
      "id": "F09",
      "severity": "medium",
      "confidence": "high",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "input-modality-aware",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "summary": "Multiple controls and links are too small or too tightly spaced for touch.",
      "evidence": "Lighthouse target-size fails; the UI probe measured visible controls as small as 32x32 and text links around 14-18px high.",
      "suggestedFix": "Raise interactive hit areas to at least 44x44 CSS px with adequate spacing while retaining visible :focus-visible styles.",
      "artifacts": [
        "evidence/lighthouse-home-summary.json",
        "evidence/images.json",
        "evidence/editor-accessibility-probe.json"
      ],
      "effort": "small",
      "pathId": "home",
      "url": "https://scratch.mit.edu/"
    },
    {
      "id": "F10",
      "severity": "critical",
      "confidence": "high",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "good-core-web-vitals",
      "guidanceId": "identify-inp-causes",
      "guidanceCategory": "performance",
      "summary": "The landing page is slow and highly unstable under lab load.",
      "evidence": "Lighthouse measured LCP 10.9s, CLS 0.781, and TBT 290ms; the independent mobile layout observer measured CLS 0.834.",
      "suggestedFix": "Profile the LCP/shift chain, reserve banner/content space, prioritize the LCP resource, and defer non-critical work.",
      "artifacts": [
        "evidence/lighthouse-home-summary.json",
        "evidence/home-trace-summary.json",
        "evidence/home-mobile-layout.json"
      ],
      "effort": "large",
      "pathId": "home",
      "url": "https://scratch.mit.edu/"
    },
    {
      "id": "F11",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-main-thread",
      "guidanceId": "break-up-long-tasks",
      "guidanceCategory": "performance",
      "summary": "The interactive editor blocks the main thread with long tasks.",
      "evidence": "The 360px editor layout capture recorded 723ms and 153ms long tasks after load; the project page recorded a 711ms task.",
      "suggestedFix": "Split startup and editor initialization work, yield with scheduler APIs, and move suitable processing off-thread.",
      "artifacts": [
        "evidence/editor-mobile-layout.json",
        "evidence/editor.png"
      ],
      "effort": "large",
      "pathId": "editor",
      "url": "https://scratch.mit.edu/projects/editor/?tutorial=getStarted"
    },
    {
      "id": "F12",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-resource-delivery",
      "guidanceId": "optimize-image-priority",
      "guidanceCategory": "performance",
      "summary": "The landing page ships a heavy, poorly prioritized resource set.",
      "evidence": "HAR recorded 43 requests and 4.24MB transferred, including 1.29MB splash.intl.js and an 830KB thumbnail; parser-inserted styles/scripts begin at high priority.",
      "suggestedFix": "Split locale/code payloads, defer non-critical scripts, responsive-load thumbnails, and confirm critical resource ordering.",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har"
      ],
      "effort": "large",
      "pathId": "home",
      "url": "https://scratch.mit.edu/"
    },
    {
      "id": "F13",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "trim-unused-and-duplicate-code",
      "guidanceId": "identify-heavy-scripts",
      "guidanceCategory": "performance",
      "summary": "Large first-party and analytics scripts dominate startup.",
      "evidence": "HAR shows 1.97MB script transfer; Lighthouse flags large scripts without source maps and the locale bundle alone is 1.29MB.",
      "suggestedFix": "Measure code coverage, split per-route/per-locale bundles, remove legacy/polyfill code for modern clients, and defer analytics.",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har",
        "evidence/lighthouse-home-summary.json"
      ],
      "effort": "large",
      "pathId": "home",
      "url": "https://scratch.mit.edu/"
    },
    {
      "id": "F14",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-inclusive",
      "principleCheckId": "names-roles-labels",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "summary": "Key visual and interactive content lacks robust accessible equivalents.",
      "evidence": "The image audit found 17 of 18 images without alt; Lighthouse found unnamed links; editor canvases have no role, accessible name, or fallback content.",
      "suggestedFix": "Give meaningful image links accessible names, keep decorative alt empty deliberately, and expose canvas/editor state and actions semantically.",
      "artifacts": [
        "evidence/lighthouse-home-summary.json",
        "evidence/images.json",
        "evidence/editor-accessibility-probe.json"
      ],
      "effort": "large",
      "pathId": "home",
      "url": "https://scratch.mit.edu/"
    },
    {
      "id": "F15",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-inclusive",
      "principleCheckId": "structure-and-focus",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "summary": "Hidden carousel slides remain focusable and document structure is invalid.",
      "evidence": "Lighthouse reports aria-hidden slides containing focusable links, skipped heading order, and malformed definition-list structure.",
      "suggestedFix": "Remove descendants of hidden slides from the tab order/inert them, and repair heading and list semantics.",
      "artifacts": [
        "evidence/lighthouse-home-summary.json",
        "evidence/images.json",
        "evidence/editor-accessibility-probe.json"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://scratch.mit.edu/"
    },
    {
      "id": "F16",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-inclusive",
      "principleCheckId": "sufficient-contrast",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "summary": "Some foreground/background combinations fail WCAG contrast.",
      "evidence": "Lighthouse accessibility audit reports color-contrast failures on the landing surface.",
      "suggestedFix": "Adjust the failing design tokens to meet 4.5:1 for normal text and 3:1 for large text/UI.",
      "artifacts": [
        "evidence/lighthouse-home-summary.json",
        "evidence/images.json",
        "evidence/editor-accessibility-probe.json"
      ],
      "effort": "small",
      "pathId": "home",
      "url": "https://scratch.mit.edu/"
    },
    {
      "id": "F17",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-inclusive",
      "principleCheckId": "zoom-reflow-targets-and-media",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "summary": "Reflow and touch-target support is incomplete.",
      "evidence": "The editor has 664px overflow at a 360px visual viewport, project has 130px, and Lighthouse target-size fails.",
      "suggestedFix": "Build reflow states rather than a scaled desktop canvas and enlarge/space touch targets.",
      "artifacts": [
        "evidence/editor-mobile-layout.json",
        "evidence/editor.png",
        "evidence/project-mobile.png",
        "evidence/project-mobile-layout.json",
        "evidence/lighthouse-home-summary.json"
      ],
      "effort": "large",
      "pathId": "editor",
      "url": "https://scratch.mit.edu/projects/editor/?tutorial=getStarted"
    },
    {
      "id": "F18",
      "severity": "medium",
      "confidence": "high",
      "principleId": "follow-best-practices",
      "principleCheckId": "no-console-errors",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "summary": "The landing page logs failed font requests.",
      "evidence": "Lighthouse captured 404 console/network errors for /fonts/slick.woff and /fonts/slick.ttf.",
      "suggestedFix": "Correct or remove the stale Slick font-face URLs and keep production console/network error-free.",
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/home-dom.json",
        "evidence/lighthouse-home-summary.json"
      ],
      "effort": "small",
      "pathId": "home",
      "url": "https://scratch.mit.edu/"
    },
    {
      "id": "F19",
      "severity": "medium",
      "confidence": "high",
      "principleId": "follow-best-practices",
      "principleCheckId": "sound-document-and-assets",
      "guidanceId": "optimize-image-priority",
      "guidanceCategory": "performance",
      "summary": "Image dimensions, aspect ratios, and delivery are unsound.",
      "evidence": "All 18 audited images lack width/height attributes; Lighthouse reports incorrectly displayed gallery aspect ratios.",
      "suggestedFix": "Emit intrinsic dimensions/aspect-ratio, use object-fit intentionally, and provide responsive sources.",
      "artifacts": [
        "evidence/images.json",
        "evidence/home-summary.json"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://scratch.mit.edu/"
    },
    {
      "id": "F20",
      "severity": "low",
      "confidence": "high",
      "principleId": "follow-best-practices",
      "principleCheckId": "browser-platform-hygiene",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "summary": "Deprecated APIs and missing production source maps reduce platform hygiene.",
      "evidence": "Lighthouse reports deprecated Shared Storage usage in polyfill.min.js and missing maps for large first-party bundles.",
      "suggestedFix": "Remove the deprecated path and publish matching production source maps where policy permits.",
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/home-dom.json",
        "evidence/lighthouse-home-summary.json"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://scratch.mit.edu/"
    },
    {
      "id": "F21",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-discoverable",
      "principleCheckId": "crawlable-and-mobile-friendly",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "summary": "Public content is effectively empty to crawlers that do not execute JavaScript.",
      "evidence": "Discoverability measured only 3% raw-content coverage on home and 1% on the project, both empty #app shells; crawler screenshots are blank.",
      "suggestedFix": "Server-render or statically emit meaningful headings, project metadata/content, and crawlable links before hydration.",
      "artifacts": [
        "evidence/discoverability-home.json",
        "evidence/discoverability-home-rendered.png",
        "evidence/discoverability-home-crawler.png",
        "evidence/discoverability-project.json",
        "evidence/discoverability-project-rendered.png",
        "evidence/discoverability-project-crawler.png"
      ],
      "effort": "large",
      "pathId": "home",
      "url": "https://scratch.mit.edu/"
    },
    {
      "id": "F22",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-discoverable",
      "principleCheckId": "canonical-and-indexing-signals",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "summary": "Canonical indexing signals are incomplete.",
      "evidence": "The platform probe found no canonical URL, while sitemap.xml exists and the public pages return 200.",
      "suggestedFix": "Emit self-referencing canonical URLs and keep route-level canonical/robots/sitemap signals consistent.",
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/home-dom.json"
      ],
      "effort": "small",
      "pathId": "home",
      "url": "https://scratch.mit.edu/"
    },
    {
      "id": "F23",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-discoverable",
      "principleCheckId": "structured-and-shareable-metadata",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "summary": "Rich project entities are not expressed as structured data.",
      "evidence": "The metadata probe found Open Graph tags but zero JSON-LD blocks; public project content is a rich CreativeWork-like entity.",
      "suggestedFix": "Add accurate schema.org JSON-LD for public projects/organization while retaining route-specific Open Graph metadata.",
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/home-dom.json"
      ],
      "effort": "medium",
      "pathId": "project",
      "url": "https://scratch.mit.edu/projects/1312717956/"
    },
    {
      "id": "F24",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-private-and-secure",
      "principleCheckId": "secure-transport-and-headers",
      "guidanceId": "security",
      "guidanceCategory": "security",
      "summary": "Transport is HTTPS, but core response and cookie defenses are missing.",
      "evidence": "Headers show no CSP or nosniff; all three cookies lack Secure and two analytics cookies use SameSite=None for 400 days.",
      "suggestedFix": "Deploy a tested CSP and nosniff, and set Secure plus the narrowest viable SameSite/retention policy on every cookie.",
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json",
        "evidence/trackers.json",
        "evidence/secrets.json"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://scratch.mit.edu/"
    },
    {
      "id": "F25",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-private-and-secure",
      "principleCheckId": "data-minimisation-and-third-parties",
      "guidanceId": "privacy",
      "guidanceCategory": "privacy",
      "summary": "A child-focused site loads Google tracking on first visit.",
      "evidence": "Tracker evidence records Google Tag Manager and Google Analytics; HAR attributes about 300KB to tag-manager scripts and cookies persist 400 days.",
      "suggestedFix": "Minimize first-load analytics, shorten retention, avoid identifiers until justified consent/context, and batch only essential measurements.",
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json",
        "evidence/trackers.json",
        "evidence/secrets.json",
        "evidence/home-summary.json",
        "evidence/home.har"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://scratch.mit.edu/"
    },
    {
      "id": "F26",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-private-and-secure",
      "principleCheckId": "in-context-permissions-and-modern-auth",
      "guidanceId": "passkeys",
      "guidanceCategory": "passkeys",
      "summary": "Account flows present password-only UI with no visible phishing-resistant option.",
      "evidence": "The inspected Join flow asks for password and confirmation with autocomplete disabled; inspected app signals exposed no WebAuthn/passkey path.",
      "suggestedFix": "Offer passkeys/WebAuthn for sign-in and use correct autocomplete tokens as a fallback password path.",
      "artifacts": [
        "evidence/join.png",
        "evidence/join-page-probe.json",
        "evidence/join-validation-probe.json"
      ],
      "effort": "large",
      "pathId": "join",
      "url": "https://scratch.mit.edu/join"
    },
    {
      "id": "F27",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-private-and-secure",
      "principleCheckId": "defensive-browser-policies",
      "guidanceId": "security",
      "guidanceCategory": "security",
      "summary": "Several browser-enforced defensive policies are absent.",
      "evidence": "Headers include HSTS and SAMEORIGIN, but omit CSP/frame-ancestors policy, Referrer-Policy, Permissions-Policy, and nosniff.",
      "suggestedFix": "Add restrictive Referrer-Policy and Permissions-Policy and mature CSP toward frame-ancestors/Trusted Types where compatible.",
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json",
        "evidence/trackers.json",
        "evidence/secrets.json"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://scratch.mit.edu/"
    },
    {
      "id": "F28",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-resilient",
      "principleCheckId": "progressive-enhancement",
      "guidanceId": "stabilize-reactive-state",
      "guidanceCategory": "user-experience",
      "summary": "Core public content depends entirely on JavaScript.",
      "evidence": "Raw HTML has an empty #app and only 1-3% of rendered words; crawler screenshots show a blank shell.",
      "suggestedFix": "Ship meaningful public content and links in server HTML, then hydrate enhancements.",
      "artifacts": [
        "evidence/discoverability-home.json",
        "evidence/discoverability-home-rendered.png",
        "evidence/discoverability-home-crawler.png",
        "evidence/discoverability-project.json",
        "evidence/discoverability-project-rendered.png",
        "evidence/discoverability-project-crawler.png"
      ],
      "effort": "large",
      "pathId": "home",
      "url": "https://scratch.mit.edu/"
    },
    {
      "id": "F29",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-resilient",
      "principleCheckId": "offline-and-installable",
      "guidanceId": "conditional-async-dependencies",
      "guidanceCategory": "performance",
      "summary": "The app-like creation experience is neither installable nor offline-capable.",
      "evidence": "The platform probe found no manifest and no controlling service worker on the landing surface.",
      "suggestedFix": "Add a web app manifest and a conservative service worker with an offline shell/fallback for editor startup and saved local work.",
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/home-dom.json"
      ],
      "effort": "large",
      "pathId": "editor",
      "url": "https://scratch.mit.edu/projects/editor/?tutorial=getStarted"
    },
    {
      "id": "F30",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-internationalised",
      "principleCheckId": "lang-dir-and-logical-properties",
      "guidanceId": "translator",
      "guidanceCategory": "built-in-ai",
      "summary": "Language is declared, but layout CSS is heavily physical and not bidi-ready.",
      "evidence": "HTML uses lang=en-GB, but captured CSS repeatedly uses left/right, float:left/right, margin-left/right and fixed directional placement, with no dir declaration.",
      "suggestedFix": "Adopt logical properties and test a dir=rtl locale while preserving correct per-locale lang/dir.",
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/home-dom.json"
      ],
      "effort": "large",
      "pathId": "home",
      "url": "https://scratch.mit.edu/"
    },
    {
      "id": "F31",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-trustworthy",
      "principleCheckId": "trustworthy-input-assistance",
      "guidanceId": "autofill-sign-up-form",
      "guidanceCategory": "forms",
      "summary": "Signup explicitly disables helpful autofill.",
      "evidence": "The Join probe reports autocomplete=\"off\" for username, password, and password confirmation.",
      "suggestedFix": "Use username, new-password, and new-password autocomplete tokens so password managers can assist safely.",
      "artifacts": [
        "evidence/join.png",
        "evidence/join-page-probe.json",
        "evidence/join-validation-probe.json"
      ],
      "effort": "small",
      "pathId": "join",
      "url": "https://scratch.mit.edu/join"
    },
    {
      "id": "F32",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-sustainable",
      "principleCheckId": "optimised-assets",
      "guidanceId": "deliver-optimized-decorative-images",
      "guidanceCategory": "user-experience",
      "summary": "Most image bytes are oversized legacy PNGs with no responsive delivery.",
      "evidence": "Image audit found 14 oversized images, 15 legacy-format images, 16 without srcset, and 15 below-fold images not lazy-loaded.",
      "suggestedFix": "Generate AVIF/WebP variants and responsive srcset/sizes, reserve dimensions, and lazy-load below-fold thumbnails.",
      "artifacts": [
        "evidence/images.json",
        "evidence/home-summary.json"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://scratch.mit.edu/"
    },
    {
      "id": "F33",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-sustainable",
      "principleCheckId": "no-wasteful-work",
      "guidanceId": "deprioritize-background-fetches",
      "guidanceCategory": "performance",
      "summary": "Non-essential bytes and tracking work execute during initial load.",
      "evidence": "HAR records 4.24MB on load, 21 cross-origin requests, large below-fold thumbnails, and analytics collection before interaction.",
      "suggestedFix": "Defer below-fold media and analytics, fetch only visible cards, and prioritize user-visible work.",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har"
      ],
      "effort": "large",
      "pathId": "home",
      "url": "https://scratch.mit.edu/"
    },
    {
      "id": "F34",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-sustainable",
      "principleCheckId": "third-party-and-media-budget",
      "guidanceId": "efficient-background-processing",
      "guidanceCategory": "performance",
      "summary": "Third-party and media cost is disproportionate for the landing view.",
      "evidence": "2.54MB of 4.24MB transferred cross-origin; image payload is 2.26MB and tag-manager scripts add about 300KB.",
      "suggestedFix": "Set per-template byte/request budgets, serve right-sized thumbnails, and remove or delay low-value third-party code.",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://scratch.mit.edu/"
    }
  ],
  "taskList": [
    {
      "id": "T01",
      "title": "Make public content server-rendered and progressively enhanced",
      "priority": 1,
      "findingIds": [
        "F21",
        "F28",
        "F22",
        "F23"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T02",
      "title": "Fix LCP/CLS and cut startup payloads",
      "priority": 2,
      "findingIds": [
        "F10",
        "F12",
        "F13",
        "F32",
        "F33",
        "F34"
      ],
      "guidanceId": "optimize-image-priority",
      "status": "open"
    },
    {
      "id": "T03",
      "title": "Create compact responsive project and editor layouts",
      "priority": 3,
      "findingIds": [
        "F07",
        "F08",
        "F17"
      ],
      "guidanceId": "css-layout",
      "status": "open"
    },
    {
      "id": "T04",
      "title": "Repair accessible names, carousel focus, structure, contrast, and targets",
      "priority": 4,
      "findingIds": [
        "F02",
        "F09",
        "F14",
        "F15",
        "F16"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T05",
      "title": "Harden headers, cookies, and child-focused analytics privacy",
      "priority": 5,
      "findingIds": [
        "F24",
        "F25",
        "F27"
      ],
      "guidanceId": "privacy",
      "status": "open"
    },
    {
      "id": "T06",
      "title": "Break up editor/project long tasks",
      "priority": 6,
      "findingIds": [
        "F11"
      ],
      "guidanceId": "break-up-long-tasks",
      "status": "open"
    },
    {
      "id": "T07",
      "title": "Add preference-aware theme and modern interaction affordances",
      "priority": 7,
      "findingIds": [
        "F01",
        "F03",
        "F04",
        "F05"
      ],
      "guidanceId": "dark-mode",
      "status": "open"
    },
    {
      "id": "T08",
      "title": "Modernize account and modal semantics",
      "priority": 8,
      "findingIds": [
        "F06",
        "F26",
        "F31"
      ],
      "guidanceId": "forms",
      "status": "open"
    },
    {
      "id": "T09",
      "title": "Clean production asset and browser hygiene errors",
      "priority": 9,
      "findingIds": [
        "F18",
        "F19",
        "F20"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T10",
      "title": "Make the app installable with a safe offline fallback",
      "priority": 10,
      "findingIds": [
        "F29"
      ],
      "guidanceId": "conditional-async-dependencies",
      "status": "open"
    },
    {
      "id": "T11",
      "title": "Replace physical layout properties and test RTL",
      "priority": 11,
      "findingIds": [
        "F30"
      ],
      "guidanceId": "translator",
      "status": "open"
    }
  ],
  "budget": {
    "wallClockSeconds": 900,
    "pathCount": 7,
    "auditPasses": 1
  },
  "agent": "pi",
  "runId": "2026-07-24T00-33-57-126Z"
}
