{
  "method": "Source inspection with jsdom (no script execution) and esbuild; actual Chromium interactions in isolated contexts with all external requests blocked except the exact pinned Three.js module (read from the cached copy). Each original is served from a dedicated loopback origin with no access to app storage.",
  "three": {
    "url": "https://cdn.jsdelivr.net/npm/three@0.170.0/build/three.module.js",
    "sha256": "ce1fa418de16a19495a9f72495580e3015d7745c296d3ce0485897f902ddedfb",
    "cached": true
  },
  "source": [
    {
      "id": "glass-crane",
      "sha256Matches": true,
      "completeHtmlDelivered": true,
      "title": "Origami Crane in Glass — SVG Illustration",
      "viewport": true,
      "duplicateIds": [],
      "missingSvgReferences": [],
      "scriptParseErrors": [],
      "externalUrls": []
    },
    {
      "id": "procedural-globe",
      "sha256Matches": true,
      "completeHtmlDelivered": true,
      "title": "Procedural Globe — AcceleratedLogic",
      "viewport": true,
      "duplicateIds": [],
      "missingSvgReferences": [],
      "scriptParseErrors": [],
      "externalUrls": [
        "https://cdn.jsdelivr.net.",
        "https://cdn.jsdelivr.net/npm/three@0.170.0/build/three.module.js"
      ]
    },
    {
      "id": "floating-islands",
      "sha256Matches": true,
      "completeHtmlDelivered": true,
      "title": "Arcane Skies — Crystal Run",
      "viewport": true,
      "duplicateIds": [],
      "missingSvgReferences": [],
      "scriptParseErrors": [],
      "externalUrls": [
        "https://cdn.jsdelivr.net/npm/three@0.170.0/build/three.module.js"
      ]
    },
    {
      "id": "task-board",
      "sha256Matches": true,
      "completeHtmlDelivered": true,
      "title": "Task Board",
      "viewport": true,
      "duplicateIds": [],
      "missingSvgReferences": [],
      "scriptParseErrors": [],
      "externalUrls": []
    }
  ],
  "browser": [
    {
      "id": "glass-crane",
      "checks": [
        {
          "name": "SVG has an accessible title and visible nonzero dimensions",
          "passed": true
        }
      ],
      "uncaughtErrors": [],
      "consoleErrors": [],
      "blockedRequests": [],
      "controls": [],
      "screenshot": "glass-crane.png",
      "visibleText": "PAPER & GLASS\n\nA single folded crane suspended in a hand-blown sphere — twenty-four facets, one continuous crease path, and light doing the rest.\n\nSVG · NO DEPENDENCIES"
    },
    {
      "id": "procedural-globe",
      "checks": [
        {
          "name": "A rendered canvas has a WebGL2 context",
          "passed": true
        },
        {
          "name": "Rotation-speed slider responds to input",
          "passed": true
        },
        {
          "name": "Globe accepts pointer drag without an exception",
          "passed": true
        },
        {
          "name": "Zoom buttons change the displayed zoom and Reset restores it",
          "passed": true
        },
        {
          "name": "Blocked CDN displays a useful failure message and retry control",
          "passed": true
        }
      ],
      "uncaughtErrors": [],
      "consoleErrors": [],
      "blockedRequests": [],
      "controls": [
        {
          "tag": "BUTTON",
          "id": "zoomOut",
          "type": "submit",
          "label": "Zoom out"
        },
        {
          "tag": "BUTTON",
          "id": "zoomIn",
          "type": "submit",
          "label": "Zoom in"
        },
        {
          "tag": "BUTTON",
          "id": "reset",
          "type": "submit",
          "label": "Reset the view to its default orientation and distance"
        },
        {
          "tag": "INPUT",
          "id": "speed",
          "type": "range",
          "label": ""
        },
        {
          "tag": "BUTTON",
          "id": "retry",
          "type": "submit",
          "label": "Try again"
        }
      ],
      "screenshot": "procedural-globe.png",
      "visibleText": "PROCEDURAL GLOBE\n\nContinents are synthesised from layered noise in the browser — no map data, no images, no tiles.\n\nThree.js r170 · WebGL\n−\n+\n100%\nReset\nROTATION SPEED\n100%\n\nDrag to spin · scroll to zoom · arrow keys, plus and minus work when the globe is focused.\n\nView reset"
    },
    {
      "id": "floating-islands",
      "checks": [
        {
          "name": "A rendered canvas has a WebGL2 context",
          "passed": true
        },
        {
          "name": "Game accepts WASD, jump and camera input without an exception",
          "passed": true
        },
        {
          "name": "Player physics stays finite during an actual running animation frame",
          "passed": false,
          "detail": "Non-finite player state: {\"verticalVelocity\":\"NaN\",\"verticalPosition\":\"NaN\",\"finite\":false,\"paused\":false}"
        },
        {
          "name": "Pause and Resume controls respond",
          "passed": true
        },
        {
          "name": "Restart key resets the visible score and crystal count",
          "passed": true
        }
      ],
      "uncaughtErrors": [],
      "consoleErrors": [],
      "blockedRequests": [],
      "controls": [
        {
          "tag": "BUTTON",
          "id": "jump",
          "type": "submit",
          "label": "Jump"
        },
        {
          "tag": "BUTTON",
          "id": "restart",
          "type": "submit",
          "label": "Resume"
        }
      ],
      "screenshot": "floating-islands.png",
      "visibleText": "VITALITY\n♥\n♥\n♥\n♥\n♥\nCRYSTALS\n0/10\nSCORE\n0\nSKY\nDay\nCollect every crystal!\nMove WASD  ·  Jump Space  ·  Look drag mouse  ·  Zoom scroll  ·  Pause P  ·  Restart R\nCollect every crystal on the floating islands — dodge the elemental turrets!"
    },
    {
      "id": "task-board",
      "checks": [],
      "uncaughtErrors": [],
      "consoleErrors": [],
      "blockedRequests": [],
      "controls": [
        {
          "tag": "INPUT",
          "id": "task-search",
          "type": "text",
          "label": ""
        },
        {
          "tag": "BUTTON",
          "id": "reset-demo",
          "type": "button",
          "label": "Reset demo"
        },
        {
          "tag": "INPUT",
          "id": "task-title",
          "type": "text",
          "label": ""
        },
        {
          "tag": "BUTTON",
          "id": "add-task",
          "type": "submit",
          "label": "Add task"
        },
        {
          "tag": "BUTTON",
          "id": "",
          "type": "button",
          "label": "Move task \"Plan launch\" forward to Doing"
        },
        {
          "tag": "BUTTON",
          "id": "",
          "type": "button",
          "label": "Delete task \"Plan launch\""
        },
        {
          "tag": "BUTTON",
          "id": "",
          "type": "button",
          "label": "Move task \"Build prototype\" forward to Done"
        },
        {
          "tag": "BUTTON",
          "id": "",
          "type": "button",
          "label": "Delete task \"Build prototype\""
        },
        {
          "tag": "BUTTON",
          "id": "",
          "type": "button",
          "label": "Task \"Write brief\" is in Done and cannot move forward"
        },
        {
          "tag": "BUTTON",
          "id": "",
          "type": "button",
          "label": "Delete task \"Write brief\""
        }
      ],
      "screenshot": "task-board.png",
      "visibleText": "Task Board\n\nA small, keyboard-friendly board. Tasks move forward through To do, Doing, and Done.\n\nSEARCH TASKS\nReset demo\n\nSearch matches task titles, ignoring case.\n\nTASK TITLE\n\nNew tasks are added to the To do column.\n\nAdd task\nBoard columns\nTo do\n0\n\nNothing here yet\nAdd a task to start To do.\n\nDoing\n0\n\nNothing here yet\nAdd a task to start Doing.\n\nDone\n0\n\nNothing here yet\nAdd a task to start Done.\n\nTask board ready with 0 tasks."
    }
  ],
  "taskBoard": [
    {
      "name": "Three seed cards and required titles exist",
      "passed": true
    },
    {
      "name": "Add task stores untrusted text literally",
      "passed": true
    },
    {
      "name": "Case-insensitive search and clearing work",
      "passed": true
    },
    {
      "name": "Normal cards survive reload",
      "passed": true
    },
    {
      "name": "Task title is required",
      "passed": true
    },
    {
      "name": "Move forward puts a To do card in Doing",
      "passed": true
    },
    {
      "name": "Move forward reaches Done and cannot advance past Done",
      "passed": true
    },
    {
      "name": "Nonmatching search displays an empty state",
      "passed": true
    },
    {
      "name": "Delete removes only its selected card",
      "passed": true
    },
    {
      "name": "Cancel reset preserves current cards",
      "passed": true
    },
    {
      "name": "Confirm reset restores exactly three seed cards",
      "passed": true
    },
    {
      "name": "Deleting all cards persists an intentional empty board",
      "passed": true
    },
    {
      "name": "Blocked storage retains an in-memory edit without uncaught errors",
      "passed": true
    },
    {
      "name": "Quota failure retains an in-memory edit without uncaught errors",
      "passed": true
    },
    {
      "name": "Malformed saved JSON recovers to seed cards",
      "passed": true
    },
    {
      "name": "Mobile task form remains inside a 390-pixel viewport",
      "passed": true
    }
  ],
  "gamePhysics": {
    "verticalVelocity": "NaN",
    "verticalPosition": "NaN",
    "finite": false,
    "paused": false
  },
  "taskBoardSummary": {
    "passed": 16,
    "failed": 0,
    "total": 16
  }
}
