{
  "id": "03",
  "title": "GLASSBOX",
  "recordedAt": "2026-09-03T05:11:07.372Z",
  "method": "Browser skill; actual browser interactions and read-only rendered DOM observations",
  "localUrl": "http://localhost:43103",
  "checks": [
    {
      "name": "Timeline restores a midpoint drawing and locals",
      "passed": true,
      "observation": {
        "diagnostic": null,
        "locals": [
          {
            "name": "seeds",
            "value": "240"
          },
          {
            "name": "turn",
            "value": "137.5"
          },
          {
            "name": "n",
            "value": "120"
          }
        ],
        "output": "—",
        "shapes": "120 shapes",
        "snapshot": "IN THE PAST",
        "stack": "0120\n1240",
        "state": "PAUSED",
        "steps": "7,936 steps",
        "timeline": "7,936 / 15,863 instructions"
      }
    },
    {
      "name": "Latest snapshot restores the completed canvas and output",
      "passed": true,
      "observation": {
        "diagnostic": null,
        "locals": [
          {
            "name": "seeds",
            "value": "240"
          },
          {
            "name": "turn",
            "value": "137.5"
          },
          {
            "name": "n",
            "value": "240"
          }
        ],
        "output": "240",
        "shapes": "240 shapes",
        "snapshot": "LATEST",
        "stack": "An empty stack. A finished program.",
        "state": "COMPLETE",
        "steps": "15,863 steps",
        "timeline": "15,863 / 15,863 instructions"
      }
    },
    {
      "name": "Intentional off-by-one program visibly produces six bars",
      "passed": true,
      "observation": {
        "diagnostic": null,
        "locals": [
          {
            "name": "bars",
            "value": "5"
          },
          {
            "name": "i",
            "value": "6"
          }
        ],
        "output": "6",
        "shapes": "6 shapes",
        "snapshot": "LATEST",
        "stack": "An empty stack. A finished program.",
        "state": "COMPLETE",
        "steps": "248 steps",
        "timeline": "248 / 248 instructions"
      }
    },
    {
      "name": "Debugger exposes i = bars = 5 before the extra iteration",
      "passed": true,
      "observation": {
        "diagnostic": null,
        "locals": [
          {
            "name": "bars",
            "value": "5"
          },
          {
            "name": "i",
            "value": "5"
          }
        ],
        "output": "—",
        "shapes": "5 shapes",
        "snapshot": "LATEST",
        "stack": "Step an instruction to see its operands.",
        "state": "BREAKPOINT",
        "steps": "200 steps",
        "timeline": "200 / 200 instructions"
      }
    },
    {
      "name": "Actual LE bytecode yields true at the erroneous boundary",
      "passed": true,
      "observation": {
        "diagnostic": null,
        "locals": [
          {
            "name": "bars",
            "value": "5"
          },
          {
            "name": "i",
            "value": "5"
          }
        ],
        "output": "—",
        "shapes": "5 shapes",
        "snapshot": "LATEST",
        "stack": "0true",
        "state": "PAUSED",
        "steps": "204 steps",
        "timeline": "204 / 204 instructions"
      }
    },
    {
      "name": "Editing <= to < fixes the actual sample through the compiler",
      "passed": true,
      "observation": {
        "diagnostic": null,
        "locals": [
          {
            "name": "bars",
            "value": "5"
          },
          {
            "name": "i",
            "value": "5"
          }
        ],
        "output": "5",
        "shapes": "5 shapes",
        "snapshot": "LATEST",
        "stack": "An empty stack. A finished program.",
        "state": "COMPLETE",
        "steps": "210 steps",
        "timeline": "210 / 210 instructions"
      }
    },
    {
      "name": "Invalid source clears stale output and reports exact location",
      "passed": true,
      "observation": {
        "diagnostic": "!\nPARSER · LINE 2, COLUMN 9\nExpected an expression, found “;”.\n\nTry a number, true / false, a variable, or a function call.",
        "locals": [],
        "output": "—",
        "shapes": "0 shapes",
        "snapshot": "LATEST",
        "stack": "Step an instruction to see its operands.",
        "state": "SOURCE ERROR",
        "steps": "Waiting",
        "timeline": "0 / 0 instructions"
      }
    },
    {
      "name": "Diagnostic click moves the editor caret to the error",
      "passed": true,
      "observation": "Ln 2, Col 9"
    },
    {
      "name": "A corrected syntax error recompiles and executes",
      "passed": true,
      "observation": {
        "diagnostic": null,
        "locals": [
          {
            "name": "x",
            "value": "10"
          },
          {
            "name": "y",
            "value": "5"
          }
        ],
        "output": "15",
        "shapes": "0 shapes",
        "snapshot": "LATEST",
        "stack": "An empty stack. A finished program.",
        "state": "COMPLETE",
        "steps": "13 steps",
        "timeline": "13 / 13 instructions"
      }
    },
    {
      "name": "A real infinite loop stops at exactly 60000 instructions",
      "passed": true,
      "observation": {
        "diagnostic": "!\nRUNTIME · LINE 12, COLUMN 3\nInstruction budget reached — execution stopped safely.\n\nThe VM stops at 60,000 instructions. Check the loop condition and make sure its variables change.",
        "locals": [
          {
            "name": "ticks",
            "value": "2882"
          }
        ],
        "output": "—",
        "shapes": "193 shapes",
        "snapshot": "LATEST",
        "stack": "Step an instruction to see its operands.",
        "state": "STOPPED SAFELY",
        "steps": "60,000 steps",
        "timeline": "60,000 / 60,000 instructions"
      }
    },
    {
      "name": "Budget failure can reset with no stale drawing or error",
      "passed": true,
      "observation": {
        "diagnostic": null,
        "locals": [],
        "output": "—",
        "shapes": "0 shapes",
        "snapshot": "LATEST",
        "stack": "Step an instruction to see its operands.",
        "state": "READY",
        "steps": "0 steps",
        "timeline": "0 / 0 instructions"
      }
    },
    {
      "name": "Repairing the loop condition finishes normally",
      "passed": true,
      "observation": {
        "diagnostic": null,
        "locals": [
          {
            "name": "ticks",
            "value": "240"
          }
        ],
        "output": "240",
        "shapes": "16 shapes",
        "snapshot": "LATEST",
        "stack": "An empty stack. A finished program.",
        "state": "COMPLETE",
        "steps": "5,489 steps",
        "timeline": "5,489 / 5,489 instructions"
      }
    },
    {
      "name": "Pause stops an animated run after it has drawn visible output",
      "passed": true,
      "observation": {
        "diagnostic": null,
        "locals": [
          {
            "name": "seeds",
            "value": "240"
          },
          {
            "name": "turn",
            "value": "137.5"
          },
          {
            "name": "n",
            "value": "17"
          },
          {
            "name": "angle",
            "value": "40.79707"
          },
          {
            "name": "radius",
            "value": "65.96969"
          },
          {
            "name": "x",
            "value": "254.0931"
          },
          {
            "name": "y",
            "value": "322.87756"
          }
        ],
        "output": "—",
        "shapes": "18 shapes",
        "snapshot": "LATEST",
        "stack": "00",
        "state": "PAUSED",
        "steps": "1,193 steps",
        "timeline": "1,193 / 1,193 instructions"
      }
    },
    {
      "name": "Paused state remains unchanged between interactions",
      "passed": true,
      "observation": {
        "diagnostic": null,
        "locals": [
          {
            "name": "seeds",
            "value": "240"
          },
          {
            "name": "turn",
            "value": "137.5"
          },
          {
            "name": "n",
            "value": "17"
          },
          {
            "name": "angle",
            "value": "40.79707"
          },
          {
            "name": "radius",
            "value": "65.96969"
          },
          {
            "name": "x",
            "value": "254.0931"
          },
          {
            "name": "y",
            "value": "322.87756"
          }
        ],
        "output": "—",
        "shapes": "18 shapes",
        "snapshot": "LATEST",
        "stack": "00",
        "state": "PAUSED",
        "steps": "1,193 steps",
        "timeline": "1,193 / 1,193 instructions"
      }
    },
    {
      "name": "Run resumes a paused state to the correct final result",
      "passed": true,
      "observation": {
        "diagnostic": null,
        "locals": [
          {
            "name": "seeds",
            "value": "240"
          },
          {
            "name": "turn",
            "value": "137.5"
          },
          {
            "name": "n",
            "value": "240"
          }
        ],
        "output": "240",
        "shapes": "240 shapes",
        "snapshot": "LATEST",
        "stack": "An empty stack. A finished program.",
        "state": "COMPLETE",
        "steps": "15,863 steps",
        "timeline": "15,863 / 15,863 instructions"
      }
    },
    {
      "name": "Auto-run off compiles without executing",
      "passed": true,
      "observation": {
        "diagnostic": null,
        "locals": [],
        "output": "—",
        "shapes": "0 shapes",
        "snapshot": "LATEST",
        "stack": "Step an instruction to see its operands.",
        "state": "READY",
        "steps": "0 steps",
        "timeline": "0 / 0 instructions"
      }
    },
    {
      "name": "F9 executes one opcode from the keyboard",
      "passed": true,
      "observation": {
        "diagnostic": null,
        "locals": [],
        "output": "—",
        "shapes": "0 shapes",
        "snapshot": "LATEST",
        "stack": "Step an instruction to see its operands.",
        "state": "PAUSED",
        "steps": "1 steps",
        "timeline": "1 / 1 instructions"
      }
    },
    {
      "name": "Keyboard run executes the edited program",
      "passed": true,
      "observation": {
        "diagnostic": null,
        "locals": [
          {
            "name": "amount",
            "value": "7"
          }
        ],
        "output": "42",
        "shapes": "0 shapes",
        "snapshot": "LATEST",
        "stack": "An empty stack. A finished program.",
        "state": "COMPLETE",
        "steps": "10 steps",
        "timeline": "10 / 10 instructions"
      }
    },
    {
      "name": "Guided tour shows actual lexer output",
      "passed": true,
      "observation": {
        "title": "Give every symbol a name.",
        "tokens": "119 TOKENS"
      }
    },
    {
      "name": "Guided tour advances to the real AST",
      "passed": true,
      "observation": {
        "title": "Discover the relationships.",
        "nodes": "68 NODES"
      }
    },
    {
      "name": "Guided tour reaches its edit handoff with a computed sunflower",
      "passed": true,
      "observation": {
        "stages": [
          {
            "title": "Start with an idea.",
            "elapsedMs": 13,
            "representation": "119 TOKENS"
          },
          {
            "title": "Give every symbol a name.",
            "elapsedMs": 1621,
            "representation": "119 TOKENS"
          },
          {
            "title": "Discover the relationships.",
            "elapsedMs": 3445,
            "representation": "68 NODES"
          },
          {
            "title": "Turn meaning into instructions.",
            "elapsedMs": 5268,
            "representation": "84 OPS"
          },
          {
            "title": "Let the machine make its mark.",
            "elapsedMs": 7095,
            "representation": "84 OPS"
          }
        ],
        "final": {
          "diagnostic": null,
          "locals": [
            {
              "name": "seeds",
              "value": "240"
            },
            {
              "name": "turn",
              "value": "137.5"
            },
            {
              "name": "n",
              "value": "240"
            }
          ],
          "output": "240",
          "shapes": "240 shapes",
          "snapshot": "LATEST",
          "stack": "An empty stack. A finished program.",
          "state": "COMPLETE",
          "steps": "15,863 steps",
          "timeline": "15,863 / 15,863 instructions"
        }
      }
    },
    {
      "name": "Harmonic weave executes its real function calls",
      "passed": true,
      "observation": {
        "diagnostic": null,
        "locals": [
          {
            "name": "frequency",
            "value": "3"
          },
          {
            "name": "phase",
            "value": "0.8"
          },
          {
            "name": "px",
            "value": "320"
          },
          {
            "name": "py",
            "value": "489.29604"
          },
          {
            "name": "i",
            "value": "361"
          }
        ],
        "output": "3",
        "shapes": "360 shapes",
        "snapshot": "LATEST",
        "stack": "An empty stack. A finished program.",
        "state": "COMPLETE",
        "steps": "26,674 steps",
        "timeline": "26,674 / 26,674 instructions"
      }
    },
    {
      "name": "Recursive canopy completes 255 real branches",
      "passed": true,
      "observation": {
        "diagnostic": null,
        "locals": [
          {
            "name": "spread",
            "value": "25"
          }
        ],
        "output": "255 branches. One function.",
        "shapes": "255 shapes",
        "snapshot": "LATEST",
        "stack": "An empty stack. A finished program.",
        "state": "COMPLETE",
        "steps": "24,256 steps",
        "timeline": "24,256 / 24,256 instructions"
      }
    },
    {
      "name": "A suspended recursive run exposes selectable call-frame locals",
      "passed": true,
      "observation": {
        "active": [
          {
            "name": "spread",
            "value": "25"
          },
          {
            "name": "x",
            "value": "494.70662"
          },
          {
            "name": "y",
            "value": "268.59304"
          },
          {
            "name": "size",
            "value": "18.91678"
          },
          {
            "name": "angle",
            "value": "-40"
          },
          {
            "name": "depth",
            "value": "2"
          },
          {
            "name": "nx",
            "value": "509.19771"
          },
          {
            "name": "ny",
            "value": "256.43357"
          }
        ],
        "main": [
          {
            "name": "spread",
            "value": "25"
          }
        ]
      }
    },
    {
      "name": "Recursive snapshot resume reproduces the final drawing",
      "passed": true,
      "observation": {
        "diagnostic": null,
        "locals": [
          {
            "name": "spread",
            "value": "25"
          }
        ],
        "output": "255 branches. One function.",
        "shapes": "255 shapes",
        "snapshot": "LATEST",
        "stack": "An empty stack. A finished program.",
        "state": "COMPLETE",
        "steps": "24,256 steps",
        "timeline": "24,256 / 24,256 instructions"
      }
    },
    {
      "name": "Nested orbital loops produce 657 points",
      "passed": true,
      "observation": {
        "diagnostic": null,
        "locals": [
          {
            "name": "orbits",
            "value": "9"
          },
          {
            "name": "ring",
            "value": "9"
          }
        ],
        "output": "9",
        "shapes": "657 shapes",
        "snapshot": "LATEST",
        "stack": "An empty stack. A finished program.",
        "state": "COMPLETE",
        "steps": "52,724 steps",
        "timeline": "52,724 / 52,724 instructions"
      }
    },
    {
      "name": "Boolean branches produce the signal garden",
      "passed": true,
      "observation": {
        "diagnostic": null,
        "locals": [
          {
            "name": "threshold",
            "value": "0.1"
          },
          {
            "name": "row",
            "value": "23"
          }
        ],
        "output": "Logic leaves a pattern.",
        "shapes": "529 shapes",
        "snapshot": "LATEST",
        "stack": "An empty stack. A finished program.",
        "state": "COMPLETE",
        "steps": "32,071 steps",
        "timeline": "32,071 / 32,071 instructions"
      }
    },
    {
      "name": "Phone layout fits the viewport without horizontal page overflow",
      "passed": true,
      "observation": {
        "clientWidth": 373,
        "documentWidth": 373,
        "height": 844,
        "sourceWidth": 291.232666015625,
        "width": 390
      }
    },
    {
      "name": "Source editing and recompilation work on a phone layout",
      "passed": true,
      "observation": {
        "diagnostic": null,
        "locals": [
          {
            "name": "seeds",
            "value": "240"
          },
          {
            "name": "turn",
            "value": "127"
          },
          {
            "name": "n",
            "value": "240"
          }
        ],
        "output": "240",
        "shapes": "240 shapes",
        "snapshot": "LATEST",
        "stack": "An empty stack. A finished program.",
        "state": "COMPLETE",
        "steps": "15,863 steps",
        "timeline": "15,863 / 15,863 instructions"
      }
    },
    {
      "name": "Language guide remains within the phone viewport",
      "passed": true,
      "observation": {
        "clientWidth": 322,
        "scrollWidth": 322,
        "width": 339.33160400390625
      }
    },
    {
      "name": "Keyboard-accessible architecture diagram links all five real modules",
      "passed": true,
      "observation": [
        {
          "href": "./src/language/lexer.js",
          "text": "01 / LEXERCharacters → tokensSpans, literals, operators, and helpful lexical diagnostics.lexer.js ↗"
        },
        {
          "href": "./src/language/parser.js",
          "text": "02 / PARSERTokens → syntax treeRecursive descent with explicit operator precedence.parser.js ↗"
        },
        {
          "href": "./src/language/compiler.js",
          "text": "03 / COMPILERSyntax → bytecodeLexical name resolution, jump patching, function entry points.compiler.js ↗"
        },
        {
          "href": "./src/language/vm.js",
          "text": "04 / VIRTUAL MACHINEBytecode → stateExplicit operand stack, lexical scopes, and bounded execution.vm.js ↗"
        },
        {
          "href": "./src/renderer.js",
          "text": "05 / RENDERERDrawing log → pixelsThe same immutable drawing log powers the live canvas and time travel.renderer.js ↗"
        }
      ]
    },
    {
      "name": "Escape closes the guide and restores keyboard focus",
      "passed": true,
      "observation": {
        "focus": "open-guide"
      }
    },
    {
      "name": "Guided pipeline finishes under 45 seconds",
      "passed": true,
      "observation": {
        "timing": "11.2 SEC / YOUR TURN",
        "stages": [
          {
            "title": "Start with an idea.",
            "elapsedMs": 13,
            "representation": "119 TOKENS"
          },
          {
            "title": "Give every symbol a name.",
            "elapsedMs": 1621,
            "representation": "119 TOKENS"
          },
          {
            "title": "Discover the relationships.",
            "elapsedMs": 3445,
            "representation": "68 NODES"
          },
          {
            "title": "Turn meaning into instructions.",
            "elapsedMs": 5268,
            "representation": "84 OPS"
          },
          {
            "title": "Let the machine make its mark.",
            "elapsedMs": 7095,
            "representation": "84 OPS"
          }
        ],
        "result": {
          "diagnostic": null,
          "locals": [
            {
              "name": "seeds",
              "value": "240"
            },
            {
              "name": "turn",
              "value": "137.5"
            },
            {
              "name": "n",
              "value": "240"
            }
          ],
          "output": "240",
          "shapes": "240 shapes",
          "snapshot": "LATEST",
          "stack": "An empty stack. A finished program.",
          "state": "COMPLETE",
          "steps": "15,863 steps",
          "timeline": "15,863 / 15,863 instructions"
        }
      }
    },
    {
      "name": "Breakpoint before first draw describes the actual canvas",
      "passed": true,
      "observation": {
        "state": {
          "diagnostic": null,
          "locals": [
            {
              "name": "seeds",
              "value": "240"
            },
            {
              "name": "turn",
              "value": "137.5"
            },
            {
              "name": "n",
              "value": "0"
            },
            {
              "name": "angle",
              "value": "0"
            },
            {
              "name": "radius",
              "value": "0"
            },
            {
              "name": "x",
              "value": "320"
            },
            {
              "name": "y",
              "value": "320"
            }
          ],
          "output": "—",
          "shapes": "0 shapes",
          "snapshot": "LATEST",
          "stack": "Step an instruction to see its operands.",
          "state": "BREAKPOINT",
          "steps": "58 steps",
          "timeline": "58 / 58 instructions"
        },
        "canvasMessage": "No shapes drawn yet."
      }
    },
    {
      "name": "Final build draws exactly one circle from a source-line step",
      "passed": true,
      "observation": {
        "diagnostic": null,
        "locals": [
          {
            "name": "seeds",
            "value": "240"
          },
          {
            "name": "turn",
            "value": "137.5"
          },
          {
            "name": "n",
            "value": "0"
          },
          {
            "name": "angle",
            "value": "0"
          },
          {
            "name": "radius",
            "value": "0"
          },
          {
            "name": "x",
            "value": "320"
          },
          {
            "name": "y",
            "value": "320"
          }
        ],
        "output": "—",
        "shapes": "1 shape",
        "snapshot": "LATEST",
        "stack": "Step an instruction to see its operands.",
        "state": "PAUSED",
        "steps": "69 steps",
        "timeline": "69 / 69 instructions"
      }
    },
    {
      "name": "Keyboard breakpoint navigation keeps code and gutter aligned",
      "passed": true,
      "observation": {
        "codeY": 409.5399475097656,
        "focus": "Set breakpoint on line 17",
        "gutterScroll": 0,
        "numberY": 409.3923950195313,
        "sourceScroll": 0
      }
    },
    {
      "name": "Restore resets editor and gutter together",
      "passed": true,
      "observation": {
        "codeY": 367.6215515136719,
        "gutterScroll": 0,
        "numberY": 367.6215515136719,
        "sourceScroll": 0
      }
    },
    {
      "name": "Final debugger correction executes five iterations",
      "passed": true,
      "observation": {
        "diagnostic": null,
        "locals": [
          {
            "name": "bars",
            "value": "5"
          },
          {
            "name": "i",
            "value": "5"
          }
        ],
        "output": "5",
        "shapes": "5 shapes",
        "snapshot": "LATEST",
        "stack": "An empty stack. A finished program.",
        "state": "COMPLETE",
        "steps": "210 steps",
        "timeline": "210 / 210 instructions"
      }
    },
    {
      "name": "Final build enforces the instruction guardrail",
      "passed": true,
      "observation": {
        "diagnostic": "!\nRUNTIME · LINE 12, COLUMN 3\nInstruction budget reached — execution stopped safely.\n\nThe VM stops at 60,000 instructions. Check the loop condition and make sure its variables change.",
        "locals": [
          {
            "name": "ticks",
            "value": "2882"
          }
        ],
        "output": "—",
        "shapes": "193 shapes",
        "snapshot": "LATEST",
        "stack": "Step an instruction to see its operands.",
        "state": "STOPPED SAFELY",
        "steps": "60,000 steps",
        "timeline": "60,000 / 60,000 instructions"
      }
    }
  ]
}
