{ "utc": "2026-09-22T14:04:57.852Z", "checks": [ "authored browser input commits fractional state", "bounded evaluation renders the exact authored expression", "code replacement preserves state and changes binding result", "browser Wasm reuses completed bindings", "discarding records preserves the browser snapshot", "browser API publishes no partial scene after budget exhaustion", "raising the budget recovers the browser snapshot", "configured UI keeps committed state while withholding incomplete display", "UI distinguishes display limit from event rollback", "normal configuration reloads to a clean blank work", "no uncaught browser errors" ], "api": { "before": { "states": { "x": 3 }, "views": [ { "id": "label", "type": "text", "prefix": "", "x": 40, "y": 60, "value": 10 } ], "tick": 0, "revision": 1, "displayError": null, "lastError": 0, "errorMessage": "", "errorLine": null, "lastOps": 0, "successfulEvents": 0, "held": [], "lastEvent": null, "lastFailure": null, "memory": { "linearBytes": 65536, "reservedEngineBytes": 20272, "programReservedBytes": 9392, "instructionBytes": 16, "handlerBytes": 12, "activeIRBytes": 252, "activeStateBytes": 8, "stagingReservedBytes": 9392, "evalStackBytes": 512 } }, "warm": { "cacheEntries": 32, "historyEntries": 8, "workLimit": 2048, "work": 6, "instructions": 0, "cacheHits": 3, "reservedBytes": 1200 }, "forgotten": { "states": { "x": 3 }, "views": [ { "id": "label", "type": "text", "prefix": "", "x": 40, "y": 60, "value": 10 } ], "tick": 0, "revision": 1, "displayError": null, "lastError": 0, "errorMessage": "", "errorLine": null, "lastOps": 0, "successfulEvents": 0, "held": [], "lastEvent": null, "lastFailure": null, "memory": { "linearBytes": 65536, "reservedEngineBytes": 20272, "programReservedBytes": 9392, "instructionBytes": 16, "handlerBytes": 12, "activeIRBytes": 252, "activeStateBytes": 8, "stagingReservedBytes": 9392, "evalStackBytes": 512 } }, "limited": { "states": { "x": 3 }, "views": [], "tick": 0, "revision": 1, "displayError": { "code": 101, "line": 3, "message": "표시 계산의 작업량 한도를 넘었습니다. 한도를 늘리거나 표시식을 줄이세요." }, "lastError": 101, "errorMessage": "표시 계산의 작업량 한도를 넘었습니다. 한도를 늘리거나 표시식을 줄이세요.", "errorLine": 3, "lastOps": 0, "successfulEvents": 0, "held": [], "lastEvent": null, "lastFailure": null, "memory": { "linearBytes": 65536, "reservedEngineBytes": 20272, "programReservedBytes": 9392, "instructionBytes": 16, "handlerBytes": 12, "activeIRBytes": 252, "activeStateBytes": 8, "stagingReservedBytes": 9392, "evalStackBytes": 512 } }, "limitStats": { "cacheEntries": 32, "historyEntries": 8, "workLimit": 1, "work": 1, "instructions": 0, "cacheHits": 0, "reservedBytes": 1200 }, "recovered": { "states": { "x": 3 }, "views": [ { "id": "label", "type": "text", "prefix": "", "x": 40, "y": 60, "value": 10 } ], "tick": 0, "revision": 1, "displayError": null, "lastError": 0, "errorMessage": "", "errorLine": null, "lastOps": 0, "successfulEvents": 0, "held": [], "lastEvent": null, "lastFailure": null, "memory": { "linearBytes": 65536, "reservedEngineBytes": 20272, "programReservedBytes": 9392, "instructionBytes": 16, "handlerBytes": 12, "activeIRBytes": 252, "activeStateBytes": 8, "stagingReservedBytes": 9392, "evalStackBytes": 512 } } }, "limitedUi": { "states": { "x": 3.25 }, "views": [], "tick": 0, "revision": 1, "displayError": { "code": 101, "line": 3, "message": "표시 계산의 작업량 한도를 넘었습니다. 한도를 늘리거나 표시식을 줄이세요." }, "lastError": 101, "errorMessage": "표시 계산의 작업량 한도를 넘었습니다. 한도를 늘리거나 표시식을 줄이세요.", "errorLine": 3, "lastOps": 0, "successfulEvents": 2, "held": [], "lastEvent": { "name": "next", "phase": "up", "source": "pointer:1", "status": 0, "line": null, "ops": 0 }, "lastFailure": null, "memory": { "linearBytes": 65536, "reservedEngineBytes": 20272, "programReservedBytes": 9392, "instructionBytes": 16, "handlerBytes": 12, "activeIRBytes": 252, "activeStateBytes": 8, "stagingReservedBytes": 9392, "evalStackBytes": 512 }, "ready": true, "source": "state x = 3\ninput next = KeyN\ntext label(40, 60, (x + 1) * (x + 2) / 2)\non next.down { x = x + 0.25 }\n", "appliedSource": "state x = 3\ninput next = KeyN\ntext label(40, 60, (x + 1) * (x + 2) / 2)\non next.down { x = x + 0.25 }\n", "dirty": false, "running": false, "droppedTicks": 0, "diagnostic": "코드를 적용했습니다. 같은 이름의 상태는 유지됩니다." }, "message": "표시 오류 · 3행 · 표시 계산의 작업량 한도를 넘었습니다. 한도를 늘리거나 표시식을 줄이세요. — 이번 장면을 표시하지 않았습니다. 상태 변경은 유지됩니다.", "errors": [], "uiLimitSetup": "Test-only module response overrides default workLimit to 1; production files are unchanged.", "screenshot": "output/playwright/pure-evaluation-limit.png", "browser": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/151.0.0.0 Safari/537.36", "qaSourceSha256": "262d97f0aa409eb68bdfe8aa3e82ad037e6b10681f8b5025e59d148ee49564e1" }