diff options
Diffstat (limited to 'prototypes/live-rules/results')
| -rw-r--r-- | prototypes/live-rules/results/2026-09-22-linux-aarch64/browser-checks.json | 215 | ||||
| -rw-r--r-- | prototypes/live-rules/results/2026-09-22-linux-aarch64/desktop.png | bin | 0 -> 150506 bytes | |||
| -rw-r--r-- | prototypes/live-rules/results/2026-09-22-linux-aarch64/mobile.png | bin | 0 -> 123520 bytes | |||
| -rw-r--r-- | prototypes/live-rules/results/2026-09-22-linux-aarch64/storage-and-replay.json | 503 |
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 Binary files differnew file mode 100644 index 0000000..5318b55 --- /dev/null +++ b/prototypes/live-rules/results/2026-09-22-linux-aarch64/desktop.png 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 Binary files differnew file mode 100644 index 0000000..2f11c77 --- /dev/null +++ b/prototypes/live-rules/results/2026-09-22-linux-aarch64/mobile.png 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" + } +} |
