{
  "date": "2026-10-19",
  "status": "passed",
  "prototype": "wasm-v03",
  "baseVersion": "0.10.0",
  "experimental": true,
  "abandonable": true,
  "nmos": "Preserved Orao32 151-opcode CPU ported to Wasm; JS reference kept for explicit escape",
  "build": {
    "prototype": "wasm-v03",
    "experimental": true,
    "abandonable": true,
    "baseVersion": "0.10.0",
    "license": "GPL-3.0-or-later",
    "wasmBytes": 33445,
    "sha256": "bd56d92939bd698580981ee40f9d1bce1c8a5b8512589d0263a8d7d695f78661",
    "memoryBytes": 16777216,
    "cpuStride": 224,
    "globalBytes": 104,
    "legacyStride": 48,
    "legacyOpcodes": 151,
    "imports": [
      {
        "module": "orao32",
        "name": "read",
        "kind": "function"
      },
      {
        "module": "orao32",
        "name": "write",
        "kind": "function"
      }
    ],
    "reference": {
      "cpu832.js": "783d7819500c1ee440673aaeeb584e27d0bb5abc6a15ca65cf0d06d1df4d329b",
      "fast-cpu.js": "014a38471e0d9f2db3ba2b867accb4538f92e8fa9073aa791fb051f1c1856022",
      "kernel-machine.js": "a627c3f45ec5f32f800bb4f626d4a594df8e54af62c323612465fb3014aa4562",
      "gui-machine.js": "c2beee95f144a909e259f2c9a4ca3ddcb00eab2ba2e19afd1d910eff7448ff98",
      "gui-protocol.js": "e9c9633e4dd70963231b4e03a6a7533776280bc68201f5dfe6b82488332999da",
      "firmware.js": "4a51bfe714ad4d059b88ad3f40c2ec78d67dbfae6054dded191ed7dc8af549f8",
      "vendor/orao32/core.js": "01266dc7d663c2b07cdf0cd6d59b53301112d36e702ae64c3714586bf3617f18",
      "vendor/orao32/rom.js": "5e5803870cbde5b6002f536dcf9e1f28550ddc7108573b4e614bdccd21e17e76"
    },
    "compiler": "rustc 1.95.0 (59807616e 2026-04-14)",
    "flags": [
      "--edition=2021",
      "--crate-type=cdylib",
      "--target=wasm32-unknown-unknown",
      "-O",
      "-C",
      "panic=abort",
      "-C",
      "lto=fat",
      "-C",
      "codegen-units=1",
      "-C",
      "strip=symbols",
      "-C",
      "link-arg=--initial-memory=16777216",
      "-C",
      "link-arg=--max-memory=16777216"
    ]
  },
  "reports": {
    "cpu": {
      "date": "2026-10-19",
      "status": "passed",
      "cases": 8202,
      "busEventsCompared": 38830,
      "allOpcodes": 256,
      "modeAndWidthCombinations": 16,
      "interruptSequences": 10,
      "comparison": "Every register and byte event versus v0.10 fast/reference interpreter; 8/16/32-bit widths, decimal arithmetic, bank/page wrap, fallback instructions, IRQ/NMI/RTI/WAI; final RAM/video/ROM hashes"
    },
    "system": {
      "date": "2026-10-19",
      "status": "passed",
      "checks": [
        {
          "name": "Native/user memory decoder boundaries and GUI state/snapshot protection match",
          "passed": true,
          "evidence": {
            "cases": 792
          }
        },
        {
          "name": "Two active native cores preserve shared-bus RMW ownership and waits",
          "passed": true,
          "evidence": {
            "waitCycles": 133331
          }
        },
        {
          "name": "Native kernel scheduling, private process RAM and editor-to-printer IPC match",
          "passed": true,
          "evidence": {
            "messages": 1,
            "text": "WASM IPC TEST\n"
          }
        },
        {
          "name": "Explicit JS escape path remains available without rebuilding firmware",
          "passed": true
        }
      ]
    },
    "lockstep": {
      "date": "2026-10-19",
      "status": "passed",
      "scope": "Exact deterministic event/register/memory comparison, not real-chip conformance",
      "checks": [
        {
          "name": "First 1500 bus events match individually",
          "passed": true
        },
        {
          "name": "First complete native frame, all CPU registers, bus clocks and memory match",
          "passed": true
        },
        {
          "name": "Croatian input",
          "passed": true
        },
        {
          "name": "Backspace",
          "passed": true
        },
        {
          "name": "Pointer",
          "passed": true
        }
      ],
      "elapsedMs": 41959.021499999995,
      "wasmStats": {
        "events": 100424266,
        "calls": 2679714,
        "jsEvents": 2677234,
        "barriers": {
          "0": 2480,
          "2": 3266,
          "4": 402897,
          "5": 2051650,
          "6": 155667,
          "8": 63754
        }
      }
    },
    "gui": {
      "date": "2026-10-19",
      "status": "passed",
      "checks": [
        {
          "name": "Input availability belongs to the immutable latch, so late events cannot become phantom pointer moves",
          "passed": true,
          "evidence": {
            "lateEventRetained": true,
            "phantomEvent": false
          }
        },
        {
          "name": "Native boot and C3 retained scene reproduce the released v0.8 initial pixels",
          "passed": true,
          "evidence": {
            "hash": "f946262e6b4cc624e2782c65740998a9a433ed0e0c87a5f0adedb0c698ff924b",
            "transport": {
              "enqueued": 30,
              "consumed": 30,
              "commits": 1,
              "highWater": 7,
              "errors": 0,
              "queued": 0,
              "sceneBuilds": 1
            }
          }
        },
        {
          "name": "Pointer-only transactions retain the compiled scene and handle every screen edge",
          "passed": true,
          "evidence": {
            "sceneBuilds": 1,
            "recordsPerMove": 1
          }
        },
        {
          "name": "Croatian typing, Backspace and menu updates remain pixel-correct",
          "passed": true,
          "evidence": {
            "hash": "cad51046048dd223b1819634e9690869d8977b7fa99842c0f1e16cb2111c2ea8"
          }
        },
        {
          "name": "Existing BOS client calls create isolated retained objects and replace shorter text",
          "passed": true,
          "evidence": {
            "handles": [
              9,
              10
            ]
          }
        },
        {
          "name": "C3 pause creates bounded queue pressure while C0 scheduling and GUI calls progress",
          "passed": true,
          "evidence": {
            "enqueued": 224,
            "consumed": 192,
            "commits": 19,
            "highWater": 43,
            "errors": 0
          }
        },
        {
          "name": "Uncommitted packets never present a partial frame; producer cannot edit ready payload",
          "passed": true,
          "evidence": {
            "readyPayloadImmutable": true,
            "partialFrameVisible": false
          }
        },
        {
          "name": "User CPUs, address aliases and C0 cannot overwrite the C3-owned scene",
          "passed": true,
          "evidence": {
            "denied": 26
          }
        },
        {
          "name": "WAIT deadlines, process migration and window cleanup preserve ownership",
          "passed": true,
          "evidence": {
            "hash": "7a5ad78ad997e57909472a36a320ca09985fedb4ba67b3dd7d1c24bce79a92a3"
          }
        },
        {
          "name": "F12 text/GUI transitions drain queued work and restore retained state",
          "passed": true,
          "evidence": {
            "hash": "7a5ad78ad997e57909472a36a320ca09985fedb4ba67b3dd7d1c24bce79a92a3"
          }
        },
        {
          "name": "Two Orao32 reservations leave C0/C3 running with no user threads",
          "passed": true,
          "evidence": {
            "guestCycles": [
              20588,
              20588
            ]
          }
        }
      ],
      "transport": {
        "enqueued": 276,
        "consumed": 276,
        "commits": 56,
        "highWater": 43,
        "errors": 0,
        "queued": 0,
        "sceneBuilds": 19
      }
    },
    "capacity": {
      "date": "2026-10-19",
      "status": "passed",
      "checks": [
        {
          "name": "All sixteen windows and sixty-four client objects fit the retained scene",
          "passed": true,
          "count": 402
        },
        {
          "name": "Final cursor primitives remain intact at maximum window quota",
          "passed": true
        },
        {
          "name": "Native renderer consumes 32-bit cached object indices without wraparound",
          "passed": true
        }
      ],
      "maxJobs": 512
    },
    "raster": {
      "date": "2026-10-19",
      "status": "passed",
      "description": "Native C3 rasterizer versus independent composition, partial glyphs, 1–79 pixel spans, full palette, zeros, mixed changes, icons and exact output-write counts",
      "seed": "0x8322026",
      "checks": [
        {
          "case": 0,
          "width": 1,
          "left": 64,
          "changed": 16,
          "pixelWrites": 16,
          "passed": true
        },
        {
          "case": 1,
          "width": 2,
          "left": 65,
          "changed": 32,
          "pixelWrites": 32,
          "passed": true
        },
        {
          "case": 2,
          "width": 3,
          "left": 66,
          "changed": 48,
          "pixelWrites": 48,
          "passed": true
        },
        {
          "case": 3,
          "width": 4,
          "left": 67,
          "changed": 64,
          "pixelWrites": 64,
          "passed": true
        },
        {
          "case": 4,
          "width": 5,
          "left": 68,
          "changed": 64,
          "pixelWrites": 64,
          "passed": true
        },
        {
          "case": 5,
          "width": 7,
          "left": 69,
          "changed": 112,
          "pixelWrites": 112,
          "passed": true
        },
        {
          "case": 6,
          "width": 8,
          "left": 70,
          "changed": 127,
          "pixelWrites": 127,
          "passed": true
        },
        {
          "case": 7,
          "width": 9,
          "left": 71,
          "changed": 143,
          "pixelWrites": 143,
          "passed": true
        },
        {
          "case": 8,
          "width": 15,
          "left": 64,
          "changed": 208,
          "pixelWrites": 208,
          "passed": true
        },
        {
          "case": 9,
          "width": 16,
          "left": 65,
          "changed": 256,
          "pixelWrites": 256,
          "passed": true
        },
        {
          "case": 10,
          "width": 17,
          "left": 66,
          "changed": 272,
          "pixelWrites": 272,
          "passed": true
        },
        {
          "case": 11,
          "width": 31,
          "left": 67,
          "changed": 495,
          "pixelWrites": 495,
          "passed": true
        },
        {
          "case": 12,
          "width": 32,
          "left": 68,
          "changed": 496,
          "pixelWrites": 496,
          "passed": true
        },
        {
          "case": 13,
          "width": 33,
          "left": 69,
          "changed": 528,
          "pixelWrites": 528,
          "passed": true
        },
        {
          "case": 14,
          "width": 63,
          "left": 70,
          "changed": 1001,
          "pixelWrites": 1001,
          "passed": true
        },
        {
          "case": 15,
          "width": 79,
          "left": 71,
          "changed": 1258,
          "pixelWrites": 1258,
          "passed": true
        },
        {
          "case": 16,
          "width": 1,
          "left": 64,
          "changed": 0,
          "pixelWrites": 0,
          "passed": true
        },
        {
          "case": 17,
          "width": 2,
          "left": 65,
          "changed": 32,
          "pixelWrites": 32,
          "passed": true
        },
        {
          "case": 18,
          "width": 3,
          "left": 66,
          "changed": 48,
          "pixelWrites": 48,
          "passed": true
        },
        {
          "case": 19,
          "width": 4,
          "left": 67,
          "changed": 64,
          "pixelWrites": 64,
          "passed": true
        },
        {
          "case": 20,
          "width": 5,
          "left": 68,
          "changed": 48,
          "pixelWrites": 48,
          "passed": true
        },
        {
          "case": 21,
          "width": 7,
          "left": 69,
          "changed": 106,
          "pixelWrites": 106,
          "passed": true
        },
        {
          "case": 22,
          "width": 8,
          "left": 70,
          "changed": 128,
          "pixelWrites": 128,
          "passed": true
        },
        {
          "case": 23,
          "width": 9,
          "left": 71,
          "changed": 143,
          "pixelWrites": 143,
          "passed": true
        },
        {
          "case": 24,
          "width": 15,
          "left": 64,
          "changed": 240,
          "pixelWrites": 240,
          "passed": true
        },
        {
          "case": 25,
          "width": 16,
          "left": 65,
          "changed": 256,
          "pixelWrites": 256,
          "passed": true
        },
        {
          "case": 26,
          "width": 17,
          "left": 66,
          "changed": 270,
          "pixelWrites": 270,
          "passed": true
        },
        {
          "case": 27,
          "width": 31,
          "left": 67,
          "changed": 496,
          "pixelWrites": 496,
          "passed": true
        },
        {
          "case": 28,
          "width": 32,
          "left": 68,
          "changed": 489,
          "pixelWrites": 489,
          "passed": true
        },
        {
          "case": 29,
          "width": 33,
          "left": 69,
          "changed": 528,
          "pixelWrites": 528,
          "passed": true
        },
        {
          "case": 30,
          "width": 63,
          "left": 70,
          "changed": 1005,
          "pixelWrites": 1005,
          "passed": true
        },
        {
          "case": 31,
          "width": 79,
          "left": 71,
          "changed": 1259,
          "pixelWrites": 1259,
          "passed": true
        },
        {
          "case": 32,
          "width": 1,
          "left": 64,
          "changed": 0,
          "pixelWrites": 0,
          "passed": true
        },
        {
          "case": 33,
          "width": 2,
          "left": 65,
          "changed": 27,
          "pixelWrites": 27,
          "passed": true
        },
        {
          "case": 34,
          "width": 3,
          "left": 66,
          "changed": 48,
          "pixelWrites": 48,
          "passed": true
        },
        {
          "case": 35,
          "width": 4,
          "left": 67,
          "changed": 64,
          "pixelWrites": 64,
          "passed": true
        },
        {
          "case": 36,
          "width": 5,
          "left": 68,
          "changed": 74,
          "pixelWrites": 74,
          "passed": true
        },
        {
          "case": 37,
          "width": 7,
          "left": 69,
          "changed": 112,
          "pixelWrites": 112,
          "passed": true
        },
        {
          "case": 38,
          "width": 8,
          "left": 70,
          "changed": 127,
          "pixelWrites": 127,
          "passed": true
        },
        {
          "case": 39,
          "width": 9,
          "left": 71,
          "changed": 144,
          "pixelWrites": 144,
          "passed": true
        },
        {
          "case": 40,
          "width": 15,
          "left": 64,
          "changed": 224,
          "pixelWrites": 224,
          "passed": true
        },
        {
          "case": 41,
          "width": 16,
          "left": 65,
          "changed": 256,
          "pixelWrites": 256,
          "passed": true
        },
        {
          "case": 42,
          "width": 17,
          "left": 66,
          "changed": 269,
          "pixelWrites": 269,
          "passed": true
        },
        {
          "case": 43,
          "width": 31,
          "left": 67,
          "changed": 493,
          "pixelWrites": 493,
          "passed": true
        },
        {
          "case": 44,
          "width": 32,
          "left": 68,
          "changed": 464,
          "pixelWrites": 464,
          "passed": true
        },
        {
          "case": 45,
          "width": 33,
          "left": 69,
          "changed": 470,
          "pixelWrites": 470,
          "passed": true
        },
        {
          "case": 46,
          "width": 63,
          "left": 70,
          "changed": 1005,
          "pixelWrites": 1005,
          "passed": true
        },
        {
          "case": 47,
          "width": 79,
          "left": 71,
          "changed": 1260,
          "pixelWrites": 1260,
          "passed": true
        },
        {
          "case": 48,
          "width": 1,
          "left": 64,
          "changed": 16,
          "pixelWrites": 16,
          "passed": true
        },
        {
          "case": 49,
          "width": 2,
          "left": 65,
          "changed": 32,
          "pixelWrites": 32,
          "passed": true
        },
        {
          "case": 50,
          "width": 3,
          "left": 66,
          "changed": 48,
          "pixelWrites": 48,
          "passed": true
        },
        {
          "case": 51,
          "width": 4,
          "left": 67,
          "changed": 64,
          "pixelWrites": 64,
          "passed": true
        },
        {
          "case": 52,
          "width": 5,
          "left": 68,
          "changed": 64,
          "pixelWrites": 64,
          "passed": true
        },
        {
          "case": 53,
          "width": 7,
          "left": 69,
          "changed": 112,
          "pixelWrites": 112,
          "passed": true
        },
        {
          "case": 54,
          "width": 8,
          "left": 70,
          "changed": 128,
          "pixelWrites": 128,
          "passed": true
        },
        {
          "case": 55,
          "width": 9,
          "left": 71,
          "changed": 143,
          "pixelWrites": 143,
          "passed": true
        },
        {
          "case": 56,
          "width": 15,
          "left": 64,
          "changed": 208,
          "pixelWrites": 208,
          "passed": true
        },
        {
          "case": 57,
          "width": 16,
          "left": 65,
          "changed": 253,
          "pixelWrites": 253,
          "passed": true
        },
        {
          "case": 58,
          "width": 17,
          "left": 66,
          "changed": 271,
          "pixelWrites": 271,
          "passed": true
        },
        {
          "case": 59,
          "width": 31,
          "left": 67,
          "changed": 494,
          "pixelWrites": 494,
          "passed": true
        },
        {
          "case": 60,
          "width": 32,
          "left": 68,
          "changed": 492,
          "pixelWrites": 492,
          "passed": true
        },
        {
          "case": 61,
          "width": 33,
          "left": 69,
          "changed": 528,
          "pixelWrites": 528,
          "passed": true
        },
        {
          "case": 62,
          "width": 63,
          "left": 70,
          "changed": 1007,
          "pixelWrites": 1007,
          "passed": true
        },
        {
          "case": 63,
          "width": 79,
          "left": 71,
          "changed": 1260,
          "pixelWrites": 1260,
          "passed": true
        }
      ]
    },
    "guests": {
      "date": "2026-10-19",
      "status": "passed",
      "scope": "Original NMOS executes in Wasm; exact guest/native scheduling for 0.5 emulated seconds after each reservation",
      "checks": [
        {
          "name": "1 original-ROM Orao32 instance(s): exact guest registers, memory, sound edges and native bus timing",
          "passed": true,
          "cycles": [
            502287,
            0
          ]
        },
        {
          "name": "2 original-ROM Orao32 instance(s): exact guest registers, memory, sound edges and native bus timing",
          "passed": true,
          "cycles": [
            1005337,
            503051
          ]
        }
      ]
    },
    "controls": {
      "date": "2026-10-19",
      "status": "passed",
      "checks": [
        {
          "name": "Pause performs no emulated work",
          "passed": true
        },
        {
          "name": "Runtime JS escape and return to Wasm preserve registers, clocks and all memory",
          "passed": true
        },
        {
          "name": "Reset rebinds shared memory and reproduces a fresh JS reset",
          "passed": true
        },
        {
          "name": "Additional memory hooks force the audited JS decoder path",
          "passed": true
        },
        {
          "name": "Unexpected trap stops execution visibly without silently continuing partial state",
          "passed": true
        }
      ]
    },
    "browser": {
      "date": "2026-10-19",
      "status": "passed",
      "checks": [
        {
          "name": "Prototype is clearly labelled experimental and removable",
          "passed": true
        },
        {
          "name": "Actual Wasm backend is instantiated with browser-visible fallback counters",
          "passed": true
        },
        {
          "name": "Existing C0/C3 firmware draws full 1024x768 framebuffer through Wasm",
          "passed": true
        },
        {
          "name": "Native Croatian input retains protected scratchpad bytes",
          "passed": true
        },
        {
          "name": "Existing fullscreen and Escape exit work with prototype",
          "passed": true
        },
        {
          "name": "Existing native GUI client still uses owner-checked BOS services",
          "passed": true
        },
        {
          "name": "F12 text mode rebinds the shared output buffer at 640x480",
          "passed": true
        },
        {
          "name": "F12 returns to the protected native desktop at 1024x768",
          "passed": true
        },
        {
          "name": "JS reference is independently selectable on same prototype page",
          "passed": true
        },
        {
          "name": "Both engines produce byte-identical initial browser framebuffer",
          "passed": true
        },
        {
          "name": "file:// initializes embedded Wasm without network fetch",
          "passed": true
        },
        {
          "name": "Missing Wasm support starts the unchanged JS reference with visible explanation",
          "passed": true
        },
        {
          "name": "No browser script errors, missing dependencies or host text drawing",
          "passed": true
        }
      ],
      "errors": [],
      "requests": [],
      "initialFrameSHA256": "f946262e6b4cc624e2782c65740998a9a433ed0e0c87a5f0adedb0c698ff924b"
    },
    "nmos": {
      "date": "2026-10-19",
      "status": "passed",
      "scope": "Exact port of the preserved Orao32 instruction model; no new opcodes or hardware claims",
      "checks": [
        {
          "name": "All 256 opcode bytes, flags, stack/bank edges and illegal-opcode errors match on direct and host-device paths",
          "passed": true,
          "cases": 6144,
          "illegalCases": 2520
        },
        {
          "name": "Exhaustive binary and NMOS decimal ADC/SBC, including invalid BCD, match all flags and results",
          "passed": true,
          "cases": 524288
        },
        {
          "name": "IRQ/NMI entry, stack wrapping, flags and vectors match",
          "passed": true,
          "cases": 12
        }
      ]
    },
    "legacy-devices": {
      "date": "2026-10-19",
      "status": "passed",
      "checks": [
        {
          "name": "Direct Wasm preserves keyboard matrix, tape reads, changed VRAM bounds and 256 cycle-exact speaker edges across sound-buffer flush",
          "passed": true
        },
        {
          "name": "Pause, resume and reset preserve original ROM, cycles and core reservation",
          "passed": true
        },
        {
          "name": "Optional floppy-card read transfers a complete sector through original JS devices while every 6502 instruction runs in Wasm",
          "passed": true
        }
      ]
    },
    "legacy-browser": {
      "date": "2026-10-19",
      "status": "passed",
      "checks": [
        {
          "name": "Original ROM starts from the actual C1 control and executes 6502 instructions in Wasm",
          "passed": true
        },
        {
          "name": "Two actual Wasm Orao32 instances reserve C1/C2 without consuming C0/C3",
          "passed": true
        },
        {
          "name": "Real browser keydown/keyup passes through native C0 focus routing to the original Orao32 keyboard matrix",
          "passed": true
        },
        {
          "name": "Pause/resume/reset/stop controls preserve reservation and release application cores",
          "passed": true
        }
      ],
      "errors": []
    },
    "homepage": {
      "date": "2026-10-19",
      "status": "passed",
      "checks": [
        {
          "name": "1440px homepage retains carousel and exposes current Wasm/JS/doc links",
          "passed": true
        },
        {
          "name": "390px homepage retains carousel and exposes current Wasm/JS/doc links",
          "passed": true
        },
        {
          "name": "Homepage starts actual v03 Wasm with v0.10 firmware on mobile",
          "passed": true
        },
        {
          "name": "1440px Wasm manual and all evidence links resolve",
          "passed": true
        },
        {
          "name": "390px Wasm manual and all evidence links resolve",
          "passed": true
        }
      ]
    }
  },
  "benchmark": "benchmark.json",
  "deterministicBuild": true,
  "hostWorker": false,
  "hostParallelCores": false,
  "publication": "Local development; no ZIP or remote deployment"
}
