aboutsummaryrefslogtreecommitdiffstats
path: root/prototypes/live-rules/results
diff options
context:
space:
mode:
Diffstat (limited to 'prototypes/live-rules/results')
-rw-r--r--prototypes/live-rules/results/2026-09-22-linux-aarch64/browser-checks.json215
-rw-r--r--prototypes/live-rules/results/2026-09-22-linux-aarch64/desktop.pngbin0 -> 150506 bytes
-rw-r--r--prototypes/live-rules/results/2026-09-22-linux-aarch64/mobile.pngbin0 -> 123520 bytes
-rw-r--r--prototypes/live-rules/results/2026-09-22-linux-aarch64/storage-and-replay.json503
4 files changed, 718 insertions, 0 deletions
diff --git a/prototypes/live-rules/results/2026-09-22-linux-aarch64/browser-checks.json b/prototypes/live-rules/results/2026-09-22-linux-aarch64/browser-checks.json
new file mode 100644
index 0000000..efb9ec7
--- /dev/null
+++ b/prototypes/live-rules/results/2026-09-22-linux-aarch64/browser-checks.json
@@ -0,0 +1,215 @@
+{
+ "recordedUtc": "2026-09-22T10:20:31.347Z",
+ "browser": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/151.0.0.0 Safari/537.36",
+ "checks": [
+ "initial state is paused",
+ "Space goes through keyboard input once while paused",
+ "ground rule rejects a second airborne jump",
+ "draft changes do not execute before Apply",
+ "applying rules preserves exact simulation progress",
+ "old decision retains and displays its revision",
+ "pointer input uses new rule and accepts second jump",
+ "third jump is rejected",
+ "disabled rule explains rejection",
+ "explicit reset restores rules and state",
+ "Space in form controls never dispatches a jump",
+ "Space on the jump button does not double dispatch",
+ "keyboard repeat does not add a second request",
+ "running advances and pause freezes simulation",
+ "maximum-height double jump remains inside the scene",
+ "visible history is bounded to eight rows",
+ "browser instance retains fixed 64 KiB linear memory",
+ "research panel shows logical layout separately",
+ "390px viewport has no horizontal overflow",
+ "narrow view keeps the dinosaur large enough to inspect",
+ "narrow viewport controls remain usable",
+ "missing Wasm has an actionable error and disabled controls",
+ "no uncaught page errors"
+ ],
+ "before": {
+ "ready": true,
+ "tick": 8,
+ "y": 6020,
+ "vy": 560,
+ "distance": 32,
+ "obstacleX": 768,
+ "passed": 0,
+ "hits": 0,
+ "jumps": 1,
+ "running": 0,
+ "revision": 0,
+ "reason": 3,
+ "source": 1,
+ "inputs": 2,
+ "accepted": 1,
+ "mode": 0,
+ "impulse": 10,
+ "enabled": 1,
+ "grounded": 0,
+ "obstacleHeight": 48,
+ "draftDirty": false,
+ "droppedTicks": 0,
+ "renderCount": 11,
+ "wasmMemoryBytes": 65536,
+ "logicalBytes": 396,
+ "decisionTick": 8,
+ "decisionRevision": 0,
+ "decisionNodes": [
+ 1,
+ 1,
+ 0,
+ 1,
+ 0,
+ 0
+ ]
+ },
+ "applied": {
+ "ready": true,
+ "tick": 8,
+ "y": 6020,
+ "vy": 560,
+ "distance": 32,
+ "obstacleX": 768,
+ "passed": 0,
+ "hits": 0,
+ "jumps": 1,
+ "running": 0,
+ "revision": 1,
+ "reason": 3,
+ "source": 1,
+ "inputs": 2,
+ "accepted": 1,
+ "mode": 1,
+ "impulse": 10,
+ "enabled": 1,
+ "grounded": 0,
+ "obstacleHeight": 48,
+ "draftDirty": false,
+ "droppedTicks": 0,
+ "renderCount": 12,
+ "wasmMemoryBytes": 65536,
+ "logicalBytes": 396,
+ "decisionTick": 8,
+ "decisionRevision": 0,
+ "decisionNodes": [
+ 1,
+ 1,
+ 0,
+ 1,
+ 0,
+ 0
+ ]
+ },
+ "second": {
+ "ready": true,
+ "tick": 8,
+ "y": 6020,
+ "vy": 1000,
+ "distance": 32,
+ "obstacleX": 768,
+ "passed": 0,
+ "hits": 0,
+ "jumps": 2,
+ "running": 0,
+ "revision": 1,
+ "reason": 1,
+ "source": 1,
+ "inputs": 3,
+ "accepted": 2,
+ "mode": 1,
+ "impulse": 10,
+ "enabled": 1,
+ "grounded": 0,
+ "obstacleHeight": 48,
+ "draftDirty": false,
+ "droppedTicks": 0,
+ "renderCount": 13,
+ "wasmMemoryBytes": 65536,
+ "logicalBytes": 396,
+ "decisionTick": 8,
+ "decisionRevision": 1,
+ "decisionNodes": [
+ 1,
+ 1,
+ 0,
+ 1,
+ 1,
+ 1
+ ]
+ },
+ "high": {
+ "ready": true,
+ "tick": 57,
+ "y": 44945,
+ "vy": 5,
+ "distance": 228,
+ "obstacleX": 572,
+ "passed": 0,
+ "hits": 0,
+ "jumps": 2,
+ "running": 0,
+ "revision": 1,
+ "reason": 1,
+ "source": 1,
+ "inputs": 2,
+ "accepted": 2,
+ "mode": 1,
+ "impulse": 16,
+ "enabled": 1,
+ "grounded": 0,
+ "obstacleHeight": 48,
+ "draftDirty": false,
+ "droppedTicks": 0,
+ "renderCount": 92,
+ "wasmMemoryBytes": 65536,
+ "logicalBytes": 396,
+ "decisionTick": 28,
+ "decisionRevision": 1,
+ "decisionNodes": [
+ 1,
+ 1,
+ 0,
+ 1,
+ 1,
+ 1
+ ]
+ },
+ "mobile": {
+ "viewport": 390,
+ "content": 390
+ },
+ "errors": [],
+ "screenshots": [
+ {
+ "file": "desktop.png",
+ "sha256": "ae02e473b472816dccf147e1d7b0a45135ffbc10fbef97002a7f0697303a7fbb"
+ },
+ {
+ "file": "mobile.png",
+ "sha256": "a3295e68fdaff2064d9076c0e136a80062abd0dd58ef770aa9b7c7dff356926d"
+ }
+ ],
+ "playwrightCliVersion": "0.1.21",
+ "files": {
+ "qa-browser.js": {
+ "sha256": "50d4293d41d5aa63b404c3e22fdc1349008765365fac8cdafe01dfdf858893da",
+ "bytes": 7554
+ },
+ "web/app.js": {
+ "sha256": "b3dcd10fa4e4ab56dff200e9238c640e6dbea5fa7b624328d7d421ee8744e778",
+ "bytes": 14358
+ },
+ "web/index.html": {
+ "sha256": "28630577d3faa81b61fec95723d421e1cac9a576452d909342cfd054d3dea385",
+ "bytes": 13396
+ },
+ "web/style.css": {
+ "sha256": "b399be728d8f2bfb1964903e11e69a9bccbc83c9d90ecfd6783110c7a0702923",
+ "bytes": 16606
+ },
+ "web/core.wasm": {
+ "sha256": "ea0789dcbb0cc2d6a17e049f4568374d242b44dafe7f996673538f3bd6dafed5",
+ "bytes": 32544
+ }
+ }
+}
diff --git a/prototypes/live-rules/results/2026-09-22-linux-aarch64/desktop.png b/prototypes/live-rules/results/2026-09-22-linux-aarch64/desktop.png
new file mode 100644
index 0000000..5318b55
--- /dev/null
+++ b/prototypes/live-rules/results/2026-09-22-linux-aarch64/desktop.png
Binary files differ
diff --git a/prototypes/live-rules/results/2026-09-22-linux-aarch64/mobile.png b/prototypes/live-rules/results/2026-09-22-linux-aarch64/mobile.png
new file mode 100644
index 0000000..2f11c77
--- /dev/null
+++ b/prototypes/live-rules/results/2026-09-22-linux-aarch64/mobile.png
Binary files differ
diff --git a/prototypes/live-rules/results/2026-09-22-linux-aarch64/storage-and-replay.json b/prototypes/live-rules/results/2026-09-22-linux-aarch64/storage-and-replay.json
new file mode 100644
index 0000000..aab0d2a
--- /dev/null
+++ b/prototypes/live-rules/results/2026-09-22-linux-aarch64/storage-and-replay.json
@@ -0,0 +1,503 @@
+{
+ "recordedUtc": "2026-09-22T10:21:30.811Z",
+ "host": {
+ "platform": "linux",
+ "release": "6.18.39+rpt-rpi-2712",
+ "arch": "arm64",
+ "node": "v24.20.0"
+ },
+ "scope": "Declared Zig type layouts and actual Wasm memory capacity; excludes JS/DOM/renderer, code pages and RSS. No latency or throughput measurement.",
+ "imports": [],
+ "storage": {
+ "layoutBytes": {
+ "rules": 16,
+ "state": 68,
+ "decision": 24,
+ "history": 264,
+ "engine": 372,
+ "graph": 24,
+ "logicalTotal": 396
+ },
+ "wasmLinearMemoryBytes": 65536,
+ "note": "Type-layout sizes; constant graph may be compiled into code. Not browser heap or RSS."
+ },
+ "trace": [
+ {
+ "command": "jump",
+ "state": {
+ "tick": 0,
+ "y": 0,
+ "vy": 1000,
+ "distance": 0,
+ "obstacleX": 800,
+ "passed": 0,
+ "hits": 0,
+ "jumpsUsed": 1,
+ "running": 0,
+ "revision": 0,
+ "lastReason": 1,
+ "lastSource": 2,
+ "totalInputs": 1,
+ "acceptedJumps": 1,
+ "mode": 0,
+ "impulse": 10,
+ "enabled": 1,
+ "grounded": 0,
+ "obstacleHeight": 48
+ },
+ "decision": {
+ "tick": 0,
+ "revision": 0,
+ "y": 0,
+ "jumps": 0,
+ "nodes": [
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1
+ ]
+ },
+ "history": [
+ {
+ "tick": 0,
+ "kind": 1,
+ "detail": 2,
+ "revision": 0
+ }
+ ]
+ },
+ {
+ "command": "step 8",
+ "state": {
+ "tick": 8,
+ "y": 6020,
+ "vy": 560,
+ "distance": 32,
+ "obstacleX": 768,
+ "passed": 0,
+ "hits": 0,
+ "jumpsUsed": 1,
+ "running": 0,
+ "revision": 0,
+ "lastReason": 1,
+ "lastSource": 2,
+ "totalInputs": 1,
+ "acceptedJumps": 1,
+ "mode": 0,
+ "impulse": 10,
+ "enabled": 1,
+ "grounded": 0,
+ "obstacleHeight": 48
+ },
+ "decision": {
+ "tick": 0,
+ "revision": 0,
+ "y": 0,
+ "jumps": 0,
+ "nodes": [
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1
+ ]
+ },
+ "history": [
+ {
+ "tick": 0,
+ "kind": 1,
+ "detail": 2,
+ "revision": 0
+ }
+ ]
+ },
+ {
+ "command": "jump",
+ "state": {
+ "tick": 8,
+ "y": 6020,
+ "vy": 560,
+ "distance": 32,
+ "obstacleX": 768,
+ "passed": 0,
+ "hits": 0,
+ "jumpsUsed": 1,
+ "running": 0,
+ "revision": 0,
+ "lastReason": 3,
+ "lastSource": 2,
+ "totalInputs": 2,
+ "acceptedJumps": 1,
+ "mode": 0,
+ "impulse": 10,
+ "enabled": 1,
+ "grounded": 0,
+ "obstacleHeight": 48
+ },
+ "decision": {
+ "tick": 8,
+ "revision": 0,
+ "y": 6020,
+ "jumps": 1,
+ "nodes": [
+ 1,
+ 1,
+ 0,
+ 1,
+ 0,
+ 0
+ ]
+ },
+ "history": [
+ {
+ "tick": 8,
+ "kind": 2,
+ "detail": 3,
+ "revision": 0
+ },
+ {
+ "tick": 0,
+ "kind": 1,
+ "detail": 2,
+ "revision": 0
+ }
+ ]
+ },
+ {
+ "command": "rules double 12 on",
+ "state": {
+ "tick": 8,
+ "y": 6020,
+ "vy": 560,
+ "distance": 32,
+ "obstacleX": 768,
+ "passed": 0,
+ "hits": 0,
+ "jumpsUsed": 1,
+ "running": 0,
+ "revision": 1,
+ "lastReason": 3,
+ "lastSource": 2,
+ "totalInputs": 2,
+ "acceptedJumps": 1,
+ "mode": 1,
+ "impulse": 12,
+ "enabled": 1,
+ "grounded": 0,
+ "obstacleHeight": 48
+ },
+ "decision": {
+ "tick": 8,
+ "revision": 0,
+ "y": 6020,
+ "jumps": 1,
+ "nodes": [
+ 1,
+ 1,
+ 0,
+ 1,
+ 0,
+ 0
+ ]
+ },
+ "history": [
+ {
+ "tick": 8,
+ "kind": 3,
+ "detail": 1,
+ "revision": 1
+ },
+ {
+ "tick": 8,
+ "kind": 2,
+ "detail": 3,
+ "revision": 0
+ },
+ {
+ "tick": 0,
+ "kind": 1,
+ "detail": 2,
+ "revision": 0
+ }
+ ]
+ },
+ {
+ "command": "jump",
+ "state": {
+ "tick": 8,
+ "y": 6020,
+ "vy": 1200,
+ "distance": 32,
+ "obstacleX": 768,
+ "passed": 0,
+ "hits": 0,
+ "jumpsUsed": 2,
+ "running": 0,
+ "revision": 1,
+ "lastReason": 1,
+ "lastSource": 2,
+ "totalInputs": 3,
+ "acceptedJumps": 2,
+ "mode": 1,
+ "impulse": 12,
+ "enabled": 1,
+ "grounded": 0,
+ "obstacleHeight": 48
+ },
+ "decision": {
+ "tick": 8,
+ "revision": 1,
+ "y": 6020,
+ "jumps": 1,
+ "nodes": [
+ 1,
+ 1,
+ 0,
+ 1,
+ 1,
+ 1
+ ]
+ },
+ "history": [
+ {
+ "tick": 8,
+ "kind": 1,
+ "detail": 2,
+ "revision": 1
+ },
+ {
+ "tick": 8,
+ "kind": 3,
+ "detail": 1,
+ "revision": 1
+ },
+ {
+ "tick": 8,
+ "kind": 2,
+ "detail": 3,
+ "revision": 0
+ },
+ {
+ "tick": 0,
+ "kind": 1,
+ "detail": 2,
+ "revision": 0
+ }
+ ]
+ },
+ {
+ "command": "step 60",
+ "state": {
+ "tick": 68,
+ "y": 0,
+ "vy": 0,
+ "distance": 272,
+ "obstacleX": 528,
+ "passed": 0,
+ "hits": 0,
+ "jumpsUsed": 0,
+ "running": 0,
+ "revision": 1,
+ "lastReason": 1,
+ "lastSource": 2,
+ "totalInputs": 3,
+ "acceptedJumps": 2,
+ "mode": 1,
+ "impulse": 12,
+ "enabled": 1,
+ "grounded": 1,
+ "obstacleHeight": 48
+ },
+ "decision": {
+ "tick": 8,
+ "revision": 1,
+ "y": 6020,
+ "jumps": 1,
+ "nodes": [
+ 1,
+ 1,
+ 0,
+ 1,
+ 1,
+ 1
+ ]
+ },
+ "history": [
+ {
+ "tick": 56,
+ "kind": 4,
+ "detail": 0,
+ "revision": 1
+ },
+ {
+ "tick": 8,
+ "kind": 1,
+ "detail": 2,
+ "revision": 1
+ },
+ {
+ "tick": 8,
+ "kind": 3,
+ "detail": 1,
+ "revision": 1
+ },
+ {
+ "tick": 8,
+ "kind": 2,
+ "detail": 3,
+ "revision": 0
+ },
+ {
+ "tick": 0,
+ "kind": 1,
+ "detail": 2,
+ "revision": 0
+ }
+ ]
+ }
+ ],
+ "finalState": {
+ "state": {
+ "tick": 68,
+ "y": 0,
+ "vy": 0,
+ "distance": 272,
+ "obstacleX": 528,
+ "passed": 0,
+ "hits": 0,
+ "jumpsUsed": 0,
+ "running": 0,
+ "revision": 1,
+ "lastReason": 1,
+ "lastSource": 2,
+ "totalInputs": 3,
+ "acceptedJumps": 2,
+ "mode": 1,
+ "impulse": 12,
+ "enabled": 1,
+ "grounded": 1,
+ "obstacleHeight": 48
+ },
+ "decision": {
+ "tick": 8,
+ "revision": 1,
+ "y": 6020,
+ "jumps": 1,
+ "nodes": [
+ 1,
+ 1,
+ 0,
+ 1,
+ 1,
+ 1
+ ]
+ },
+ "history": [
+ {
+ "tick": 56,
+ "kind": 4,
+ "detail": 0,
+ "revision": 1
+ },
+ {
+ "tick": 8,
+ "kind": 1,
+ "detail": 2,
+ "revision": 1
+ },
+ {
+ "tick": 8,
+ "kind": 3,
+ "detail": 1,
+ "revision": 1
+ },
+ {
+ "tick": 8,
+ "kind": 2,
+ "detail": 3,
+ "revision": 0
+ },
+ {
+ "tick": 0,
+ "kind": 1,
+ "detail": 2,
+ "revision": 0
+ }
+ ]
+ },
+ "build": {
+ "built_utc": "2026-09-22T10:01:20.063882+00:00",
+ "zig_version": "0.15.2",
+ "flags": [
+ "-target",
+ "wasm32-freestanding",
+ "-O",
+ "ReleaseSafe",
+ "-fno-entry",
+ "-rdynamic",
+ "--export-memory",
+ "--stack",
+ "16384",
+ "--initial-memory=65536",
+ "--max-memory=65536"
+ ],
+ "source_sha256": "d9fdba86e700605b053586d95ccdfb47cbe87070717182fb1c2ab7b45221ad2b",
+ "wasm_sha256": "ea0789dcbb0cc2d6a17e049f4568374d242b44dafe7f996673538f3bd6dafed5",
+ "wasm_file_bytes": 32544,
+ "native_test_output": "1/11 core.test.edits preserve complete simulation state and latest observation...OK\n2/11 core.test.invalid edits and oversized advance are atomic...OK\n3/11 core.test.pause, step, and ground-only jump handle input before integration...OK\n4/11 core.test.double jump, disable, mode changes, and impulse apply at input boundaries...OK\n5/11 core.test.all input sources share transition behavior and retain provenance...OK\n6/11 core.test.fixed history overwrites oldest entry and handles invalid access...OK\n7/11 core.test.decision is pre-input state and remains at its original revision...OK\n8/11 core.test.graph truth table agrees with a direct permission predicate...OK\n9/11 core.test.replay includes respawns and produces identical complete engine state...OK\n10/11 core.test.collisions do not reset progress and each obstacle is counted once...OK\n11/11 core.test.counters wrap explicitly and memory accounting has no overlapping total...OK\nAll 11 tests passed.\n"
+ },
+ "files": {
+ "core.zig": {
+ "bytes": 17914,
+ "sha256": "d9fdba86e700605b053586d95ccdfb47cbe87070717182fb1c2ab7b45221ad2b"
+ },
+ "web/core.wasm": {
+ "bytes": 32544,
+ "sha256": "ea0789dcbb0cc2d6a17e049f4568374d242b44dafe7f996673538f3bd6dafed5"
+ },
+ "runtime.mjs": {
+ "bytes": 3939,
+ "sha256": "9d01626245d1e0c6261a28a9ecacb04c56c67dfcb901958526d3ccb234bef159"
+ },
+ "cli.mjs": {
+ "bytes": 2998,
+ "sha256": "6b39eebef35b5c19db01dee4d254ad667e42a5633c840b29d84607f37e98ef8f"
+ },
+ "adapter.test.mjs": {
+ "bytes": 3701,
+ "sha256": "6f81dc74cd2e2b38390e7bcca4c4757e8a50b58ef65194eab871192c4e86cf66"
+ },
+ "measure.mjs": {
+ "bytes": 2810,
+ "sha256": "4125f3e98d3d941bd1a61c389a91d3a1e0cd7e1bc14c6fedd87094ae6f0948dd"
+ },
+ "manage.py": {
+ "bytes": 3559,
+ "sha256": "d9f1b13e635e15dff526a2f082144570e13bc18e73d9d85da1c1804de82a3e32"
+ },
+ "qa-browser.js": {
+ "bytes": 7554,
+ "sha256": "50d4293d41d5aa63b404c3e22fdc1349008765365fac8cdafe01dfdf858893da"
+ },
+ "web/app.js": {
+ "bytes": 14358,
+ "sha256": "b3dcd10fa4e4ab56dff200e9238c640e6dbea5fa7b624328d7d421ee8744e778"
+ },
+ "web/index.html": {
+ "bytes": 13396,
+ "sha256": "28630577d3faa81b61fec95723d421e1cac9a576452d909342cfd054d3dea385"
+ },
+ "web/style.css": {
+ "bytes": 16606,
+ "sha256": "b399be728d8f2bfb1964903e11e69a9bccbc83c9d90ecfd6783110c7a0702923"
+ }
+ },
+ "adapterTests": {
+ "command": "node prototypes/live-rules/adapter.test.mjs",
+ "exitCode": 0,
+ "output": "✔ the actual Wasm preserves airborne state through a rule change, then permits the second jump (9.168858ms)\n✔ bad CLI edits and malformed numeric input cannot silently coerce into a different rule (1.968798ms)\n✔ keyboard, pointer and terminal requests give the same simulation result (2.355835ms)\n✔ paused input has an inspectable decision; advance cannot move paused state (2.338743ms)\n✔ bounded history and fixed linear memory survive repeated play and edits (4.602115ms)\n✔ replaying the same CLI operations produces identical snapshots and journal (3.481058ms)\nℹ tests 6\nℹ suites 0\nℹ pass 6\nℹ fail 0\nℹ cancelled 0\nℹ skipped 0\nℹ todo 0\nℹ duration_ms 32.277966\n"
+ }
+}