{
  "schemaVersion": 1,
  "isExample": false,
  "product": "PixelCtrlpanel · R.M.T Room LV1",
  "buildId": "px-54c6825277ed",
  "builtAt": "2026-09-06T13:27:46.948Z",
  "project": "PixelCtrlpanel",
  "commit": "54c117f48dadc19bbba931f7a39eadfc7be0502b",
  "sourceDirty": false,
  "mock": true,
  "generatedAt": "2026-09-06T13:45:03.046Z",
  "appUrl": "https://beta1.ctrlpanelai.com/",
  "reviewUrl": "https://beta1.ctrlpanelai.com/review/",
  "originalBeta1Url": "https://beta1.ctrlpanelai.com/",
  "publicAccessFollowup": null,
  "sourceRepository": "https://github.com/Yads89/PixelCtrlpanel",
  "reviewedSnapshot": "8d9328edfac81b16df99a6baeb7205a460960f6d",
  "p1Regression": {
    "buildId": "px-54c6825277ed",
    "commit": "54c117f48dadc19bbba931f7a39eadfc7be0502b",
    "testedAt": "2026-09-06T13:39:47.659445+00:00",
    "status": "FIXED_IN_TESTS",
    "scope": "CuXi independent regression and actual browser UI; not the missing 13 reviewer tests.",
    "reviewedCommit": "8d9328edfac81b16df99a6baeb7205a460960f6d",
    "operatorStartCommit": "21439e43609e7253e1d0fbfcb303428c9f8447b8",
    "sourceComparison": {
      "src/ui.css": {
        "reviewedBlob": "cc191799e0d0e62b57861d8470689992a551b7c0",
        "operatorStartBlob": "cc191799e0d0e62b57861d8470689992a551b7c0",
        "currentBlob": "cc191799e0d0e62b57861d8470689992a551b7c0"
      },
      "src/simulation.ts": {
        "reviewedBlob": "125faeef8c09197a04daf4a5cfb5ba9c1420f6b1",
        "operatorStartBlob": "125faeef8c09197a04daf4a5cfb5ba9c1420f6b1",
        "currentBlob": "b7e0a0d7823f6ce0c0589917b646d311b442eaea"
      },
      "src/geometry.ts": {
        "reviewedBlob": "0789d852bee2df1eb23575eb835e1a02a10883fd",
        "operatorStartBlob": "0789d852bee2df1eb23575eb835e1a02a10883fd",
        "currentBlob": "0789d852bee2df1eb23575eb835e1a02a10883fd"
      },
      "src/storage.ts": {
        "reviewedBlob": "9fecd0c3bf3197110935559de3d4e2bfff97a610",
        "operatorStartBlob": "9fecd0c3bf3197110935559de3d4e2bfff97a610",
        "currentBlob": "9fecd0c3bf3197110935559de3d4e2bfff97a610"
      },
      "src/navigation.ts": {
        "reviewedBlob": "6106617e7600f29a2d40d4884af55c9dc3df58d6",
        "operatorStartBlob": "6106617e7600f29a2d40d4884af55c9dc3df58d6",
        "currentBlob": "fff1aa05d1aa57f065b5190485a9120e14366231"
      },
      "src/types.ts": {
        "reviewedBlob": "ae8994b608b76f2d12320f13515d73c27ad3b3be",
        "operatorStartBlob": "ae8994b608b76f2d12320f13515d73c27ad3b3be",
        "currentBlob": "ae8994b608b76f2d12320f13515d73c27ad3b3be"
      },
      "src/domain.ts": {
        "reviewedBlob": "9541f20ed54f9788fc7e98ea95805d286eb88244",
        "operatorStartBlob": "9541f20ed54f9788fc7e98ea95805d286eb88244",
        "currentBlob": "7a651de07765ab6726cd90f014e798cbf6c40a33"
      },
      "src/editor.ts": {
        "reviewedBlob": "bb8b433a948850e4906d91f1c8acb93e096f1f8a",
        "operatorStartBlob": "bb8b433a948850e4906d91f1c8acb93e096f1f8a",
        "currentBlob": "bb8b433a948850e4906d91f1c8acb93e096f1f8a"
      },
      "src/style.css": {
        "reviewedBlob": "f91fcfe79a14b15760a527f6c2da01a3896e65d1",
        "operatorStartBlob": "f91fcfe79a14b15760a527f6c2da01a3896e65d1",
        "currentBlob": "f91fcfe79a14b15760a527f6c2da01a3896e65d1"
      },
      "src/main.ts": {
        "reviewedBlob": "a36a6606ff370f0742b475d2f4dfae1c6cf16f4a",
        "operatorStartBlob": "a36a6606ff370f0742b475d2f4dfae1c6cf16f4a",
        "currentBlob": "65fb086d1e453dca7c6375b76b8a731cdac401d2"
      },
      "src/tasks.ts": {
        "reviewedBlob": "eb3109f478ee0ef872c53d9e8948e814f296b63e",
        "operatorStartBlob": "eb3109f478ee0ef872c53d9e8948e814f296b63e",
        "currentBlob": "eb3109f478ee0ef872c53d9e8948e814f296b63e"
      },
      "src/seed.ts": {
        "reviewedBlob": "121f0f46adf08cea9257bb88eed7bf01eb62cfc7",
        "operatorStartBlob": "121f0f46adf08cea9257bb88eed7bf01eb62cfc7",
        "currentBlob": "121f0f46adf08cea9257bb88eed7bf01eb62cfc7"
      },
      "src/review.ts": {
        "reviewedBlob": "6b6191012bb1ed66f8064bb990c5035fd3e895f4",
        "operatorStartBlob": "6b6191012bb1ed66f8064bb990c5035fd3e895f4",
        "currentBlob": "6b6191012bb1ed66f8064bb990c5035fd3e895f4"
      },
      "src/renderer.ts": {
        "reviewedBlob": "0c7cab0a769015c0f82625b5a9f470669658f94d",
        "operatorStartBlob": "0c7cab0a769015c0f82625b5a9f470669658f94d",
        "currentBlob": "0c7cab0a769015c0f82625b5a9f470669658f94d"
      }
    },
    "before": {
      "kind": "CuXi independent diagnostic; not reviewer supplied regression",
      "placement": null,
      "layout": null,
      "slot": {
        "approach": {
          "x": 5,
          "y": -1
        },
        "exit": {
          "x": 5,
          "y": -1
        },
        "anchor": {
          "x": 5.5,
          "y": 0.5
        },
        "facing": "N",
        "z": 0.35
      },
      "crossings": [
        {
          "phase": "ENTER_INTERACTION",
          "from": {
            "x": 5.5,
            "y": -0.16666666666666669
          },
          "to": {
            "x": 5.5,
            "y": 0
          },
          "a": {
            "x": 5,
            "y": -1
          },
          "b": {
            "x": 5,
            "y": 0
          },
          "edgeOpen": false
        },
        {
          "phase": "EXIT_INTERACTION",
          "from": {
            "x": 5.5,
            "y": 0
          },
          "to": {
            "x": 5.5,
            "y": -0.16666666666666663
          },
          "a": {
            "x": 5,
            "y": 0
          },
          "b": {
            "x": 5,
            "y": -1
          },
          "edgeOpen": false
        }
      ],
      "coins": 50,
      "xp": 40,
      "floorTiles": 128,
      "rooms": 2
    },
    "unit": {
      "command": "npm run test:unit",
      "total": 7,
      "passed": 7,
      "cases": [
        {
          "name": "[E04 E05 N04 N06 N11 R04 R05 R06] P1-01: N shared-wall approaches rejected from both rooms without moving avatar",
          "status": "PASS",
          "testedAt": "2026-09-06T13:28:20.939Z"
        },
        {
          "name": "[G04 E05 N04 N11 R06 R08] P1-01: N expansion keeps both sofa seats and four rotations usable through the doorway",
          "status": "PASS",
          "testedAt": "2026-09-06T13:28:20.939Z"
        },
        {
          "name": "[E04 E05 N04 N06 N11 R04 R05 R06] P1-01: E shared-wall approaches rejected from both rooms without moving avatar",
          "status": "PASS",
          "testedAt": "2026-09-06T13:28:20.939Z"
        },
        {
          "name": "[G04 E05 N04 N11 R06 R08] P1-01: E expansion keeps both sofa seats and four rotations usable through the doorway",
          "status": "PASS",
          "testedAt": "2026-09-06T13:28:20.939Z"
        },
        {
          "name": "[E04 E05 N04 N06 N11 R04 R05 R06] P1-01: W shared-wall approaches rejected from both rooms without moving avatar",
          "status": "PASS",
          "testedAt": "2026-09-06T13:28:20.939Z"
        },
        {
          "name": "[G04 E05 N04 N11 R06 R08] P1-01: W expansion keeps both sofa seats and four rotations usable through the doorway",
          "status": "PASS",
          "testedAt": "2026-09-06T13:28:20.939Z"
        },
        {
          "name": "[S04 S05 R06] P1-01: old cross-wall save enters recovery and preserves raw data without writes or deletion",
          "status": "PASS",
          "testedAt": "2026-09-06T13:28:20.939Z"
        }
      ]
    },
    "e2e": {
      "command": "npm run test:e2e",
      "total": 4,
      "passed": 4,
      "cases": [
        {
          "name": "[E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI N: reject shared-wall sofa, then enter and exit valid sofa through doorway",
          "status": "PASS",
          "durationMs": 32720
        },
        {
          "name": "[E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI E: reject shared-wall sofa, then enter and exit valid sofa through doorway",
          "status": "PASS",
          "durationMs": 36486
        },
        {
          "name": "[E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI W: reject shared-wall sofa, then enter and exit valid sofa through doorway",
          "status": "PASS",
          "durationMs": 35345
        },
        {
          "name": "[S04 S05 R06] P1-01 UI: invalid legacy cross-wall save preserves raw export and disables writes",
          "status": "PASS",
          "durationMs": 2016
        }
      ]
    },
    "motionEvidence": [
      "p1-motion-n.json",
      "p1-motion-e.json",
      "p1-motion-w.json"
    ],
    "invariants": [
      "Every sofa seat validated; approach/exit/anchor stay in furniture room",
      "Every crossed interaction/walking edge checked without bypassing shared walls",
      "N/E/W and four rotations, both seats: valid motion through existing two-tile doorway",
      "50 coins, 40 XP, 128 tiles, one avatar and only one additional room per save",
      "Invalid old save retained byte-for-byte and raw export available"
    ],
    "reviewerRegressionStatus": "BLOCKED"
  },
  "reviewerRegression": {
    "buildId": "px-54c6825277ed",
    "status": "BLOCKED",
    "command": "node --experimental-strip-types --test audit-regression.test.mjs",
    "testedAt": null,
    "checkedAt": "2026-09-06T13:39:47.659445+00:00",
    "reason": "Paket PIXELCTRLPANEL_REVIEW_8d9328e dan dua skrip audit belum ditemukan di workspace; path telah diminta kepada pengguna. Tidak ada tes pengganti yang diklaim sebagai 13 tes reviewer.",
    "expectedReviewedCommit": "8d9328edfac81b16df99a6baeb7205a460960f6d",
    "counts": null,
    "attemptedAt": "2026-09-06T13:39:47.659445+00:00",
    "exitCode": 1,
    "output": "Could not find 'audit-regression.test.mjs'",
    "missingFiles": [
      "HASIL_REVIEW.txt",
      "SOURCE_PROVENANCE.json",
      "cross-wall-probe.json",
      "audit-regression.test.mjs",
      "audit-cross-wall-probe.mjs"
    ]
  },
  "webReader": {
    "buildId": "px-54c6825277ed",
    "testedAt": "2026-09-06T13:42:42.626773+00:00",
    "command": "web.run open https://beta1.ctrlpanelai.com/review/",
    "status": "BLOCKED",
    "observed": "Pembaca web sesi CuXi menolak URL beta1 sebagai not safe to open. Smoke browser anonim dan probe HTTPS independen dilaporkan terpisah; sesi ChatGPT pengguna belum diuji."
  },
  "performanceComparison": {
    "buildId": "px-54c6825277ed",
    "commit": "54c117f48dadc19bbba931f7a39eadfc7be0502b",
    "generatedAt": "2026-09-06T13:40:55.510514+00:00",
    "status": "PASS",
    "targetMinimumFps": 30,
    "userDeviceStatus": "NOT_MEASURED",
    "interpretation": [
      "Baseline was measured after P1 fix and before performance patch, not the older 26.7/27.9 FPS run.",
      "Before and after are explicitly identified different runtime builds. All current screenshots match the after build.",
      "Avoidable work was proven by executed call-count profiles: idle clones 3571 to 0; identical save writes 148 to 0; unchanged editor validation calls 518 to 0.",
      "FPS improved in these samples; shared VPS load and software rendering prevent attributing the entire difference to this patch. Before baseline already met 30 FPS.",
      "Precise coverage/wrappers add overhead; candidate counts are separate from unwrapped FPS measurements. No frame outliers discarded or target lowered."
    ],
    "before": {
      "fps": {
        "buildId": "px-0b97f0e16e18",
        "measuredAt": "2026-09-06T13:26:27.950Z",
        "command": "npm run test:e2e",
        "browser": "153.0.8010.12",
        "viewport": {
          "width": 1440,
          "height": 900
        },
        "hardware": {
          "cpu": "AMD EPYC Processor (with IBPB)",
          "logicalCpus": 12,
          "memoryBytes": 50514534400,
          "os": "linux 6.8.0-138-generic"
        },
        "rendering": {
          "devices": [
            {
              "vendorId": 65535,
              "deviceId": 65535,
              "vendorString": "Google Inc. (Google)",
              "deviceString": "ANGLE (Google, Vulkan 1.3.0 (SwiftShader Device (Subzero) (0x0000C0DE)), SwiftShader driver-5.0.0)",
              "driverVendor": "SwANGLE",
              "driverVersion": "5.0.0"
            }
          ],
          "featureStatus": {
            "2d_canvas": "unavailable_software",
            "direct_rendering_display_compositor": "disabled_off_ok",
            "gpu_compositing": "disabled_software",
            "multiple_raster_threads": "enabled_on",
            "opengl": "disabled_off",
            "rasterization": "disabled_software",
            "raw_draw": "disabled_off_ok",
            "skia_graphite": "disabled_off",
            "trees_in_viz": "disabled_off",
            "video_decode": "disabled_software",
            "video_encode": "disabled_software",
            "vulkan": "disabled_off",
            "webgl": "unavailable_software",
            "webgpu": "unavailable_software",
            "webgpu_on_vk_via_gl_interop": "disabled_off",
            "webnn": "unavailable_software"
          }
        },
        "environment": "Chromium headless, shared Ubuntu VPS; software rendering as reported by SystemInfo. No frame outliers discarded. Four >=60s samples.",
        "userDeviceStatus": "NOT_MEASURED",
        "scenarios": [
          {
            "scenario": "walking",
            "startedAt": "2026-09-06T13:22:14.584Z",
            "durationMs": 62550,
            "viewport": {
              "width": 1440,
              "height": 900
            },
            "cycles": 21,
            "samples": 2129,
            "meanFps": 34.18065172820498,
            "frameTimeP50Ms": 33.299999999995634,
            "frameTimeP95Ms": 50,
            "frameTimeP99Ms": 83.40000000000146,
            "maxFrameMs": 916.6000000000058,
            "over16_67Ms": 1760,
            "over33_34Ms": 586,
            "over50Ms": 84,
            "over100Ms": 13,
            "profileP95Ms": {
              "simulation": 0.5,
              "draw": 1.7000000476837158,
              "ui": 0.6000000238418579
            },
            "loadBefore": [
              2.7,
              2.26,
              2.02
            ],
            "loadAfter": [
              3.43,
              2.57,
              2.14
            ],
            "freeMemoryBytes": 44497485824,
            "status": "PASS"
          },
          {
            "scenario": "interactions",
            "startedAt": "2026-09-06T13:23:18.081Z",
            "durationMs": 62142,
            "viewport": {
              "width": 1440,
              "height": 900
            },
            "cycles": 9,
            "samples": 2077,
            "meanFps": 33.605097231516005,
            "frameTimeP50Ms": 33.29999999999927,
            "frameTimeP95Ms": 50,
            "frameTimeP99Ms": 99.90000000000146,
            "maxFrameMs": 233.29999999999563,
            "over16_67Ms": 1758,
            "over33_34Ms": 592,
            "over50Ms": 99,
            "over100Ms": 11,
            "profileP95Ms": {
              "simulation": 1.7999999523162842,
              "draw": 1.7999999523162842,
              "ui": 0.5
            },
            "loadBefore": [
              3.43,
              2.57,
              2.14
            ],
            "loadAfter": [
              3.41,
              2.74,
              2.23
            ],
            "freeMemoryBytes": 44572008448,
            "status": "PASS"
          },
          {
            "scenario": "editor",
            "startedAt": "2026-09-06T13:24:21.540Z",
            "durationMs": 61101,
            "viewport": {
              "width": 1440,
              "height": 900
            },
            "cycles": 24,
            "samples": 1838,
            "meanFps": 30.170765217933713,
            "frameTimeP50Ms": 33.29999999999927,
            "frameTimeP95Ms": 66.59999999999854,
            "frameTimeP99Ms": 133.29999999999563,
            "maxFrameMs": 316.6999999999971,
            "over16_67Ms": 1616,
            "over33_34Ms": 611,
            "over50Ms": 115,
            "over100Ms": 26,
            "profileP95Ms": {
              "simulation": 0.10000002384185791,
              "draw": 3.200000047683716,
              "ui": 1.600000023841858
            },
            "loadBefore": [
              3.41,
              2.74,
              2.23
            ],
            "loadAfter": [
              3.36,
              2.88,
              2.31
            ],
            "freeMemoryBytes": 44554178560,
            "status": "PASS"
          },
          {
            "scenario": "two-rooms",
            "startedAt": "2026-09-06T13:25:23.972Z",
            "durationMs": 63951,
            "viewport": {
              "width": 1440,
              "height": 900
            },
            "cycles": 15,
            "samples": 2097,
            "meanFps": 32.891950647957316,
            "frameTimeP50Ms": 33.29999999999927,
            "frameTimeP95Ms": 50.099999999998545,
            "frameTimeP99Ms": 99.90000000000146,
            "maxFrameMs": 550,
            "over16_67Ms": 1780,
            "over33_34Ms": 634,
            "over50Ms": 107,
            "over100Ms": 16,
            "profileP95Ms": {
              "simulation": 0.8000000715255737,
              "draw": 1.6999999284744263,
              "ui": 0.5
            },
            "loadBefore": [
              3.36,
              2.88,
              2.31
            ],
            "loadAfter": [
              3.74,
              3.11,
              2.43
            ],
            "freeMemoryBytes": 44578127872,
            "status": "PASS"
          }
        ],
        "status": "PASS"
      },
      "candidates": {
        "buildId": "px-0b97f0e16e18",
        "commit": "d3ae2a34dd790cb2493a26f510d91ec90e1c0dda",
        "label": "before",
        "measuredAt": "2026-09-06T13:20:45.314Z",
        "command": "node tools/perf-candidates.mjs before",
        "browser": "153.0.8010.12",
        "viewport": {
          "width": 1440,
          "height": 900
        },
        "hardware": {
          "cpu": "AMD EPYC Processor (with IBPB)",
          "logicalCpus": 12,
          "os": "linux 6.8.0-138-generic"
        },
        "environment": "Headless Chromium on shared VPS. Fresh local static preview PID; fresh synthetic browser storage. Precise coverage and API wrappers add overhead; use these results for call counts, not FPS comparisons.",
        "userDeviceStatus": "NOT_MEASURED",
        "scenarios": [
          {
            "scenario": "idle",
            "startedAt": "2026-09-06T13:18:43.401Z",
            "durationMs": 60036,
            "counters": {
              "stateCloneCalls": 3571,
              "stateCloneMs": 519.4999977350235,
              "storageWrites": 148,
              "identicalStorageWrites": 148,
              "storageWriteMs": 39.40000021457672
            },
            "functions": [
              {
                "role": "reduce",
                "functionName": "w",
                "callCount": 3573
              }
            ],
            "loadBefore": [
              2.27,
              2.08,
              1.91
            ],
            "loadAfter": [
              2.34,
              2.13,
              1.94
            ]
          },
          {
            "scenario": "editor-idle",
            "startedAt": "2026-09-06T13:19:45.213Z",
            "durationMs": 60044,
            "counters": {
              "stateCloneCalls": 0,
              "stateCloneMs": 0,
              "storageWrites": 0,
              "identicalStorageWrites": 0,
              "storageWriteMs": 0
            },
            "functions": [
              {
                "role": "validateLayout",
                "functionName": "ae",
                "callCount": 518
              }
            ],
            "loadBefore": [
              2.34,
              2.13,
              1.94
            ],
            "loadAfter": [
              2.64,
              2.28,
              2
            ]
          }
        ]
      }
    },
    "after": {
      "fps": {
        "buildId": "px-54c6825277ed",
        "measuredAt": "2026-09-06T13:37:39.447Z",
        "command": "npm run test:e2e",
        "browser": "153.0.8010.12",
        "viewport": {
          "width": 1440,
          "height": 900
        },
        "hardware": {
          "cpu": "AMD EPYC Processor (with IBPB)",
          "logicalCpus": 12,
          "memoryBytes": 50514534400,
          "os": "linux 6.8.0-138-generic"
        },
        "rendering": {
          "devices": [
            {
              "vendorId": 65535,
              "deviceId": 65535,
              "vendorString": "Google Inc. (Google)",
              "deviceString": "ANGLE (Google, Vulkan 1.3.0 (SwiftShader Device (Subzero) (0x0000C0DE)), SwiftShader driver-5.0.0)",
              "driverVendor": "SwANGLE",
              "driverVersion": "5.0.0"
            }
          ],
          "featureStatus": {
            "2d_canvas": "unavailable_software",
            "direct_rendering_display_compositor": "disabled_off_ok",
            "gpu_compositing": "disabled_software",
            "multiple_raster_threads": "enabled_on",
            "opengl": "disabled_off",
            "rasterization": "disabled_software",
            "raw_draw": "disabled_off_ok",
            "skia_graphite": "disabled_off",
            "trees_in_viz": "disabled_off",
            "video_decode": "disabled_software",
            "video_encode": "disabled_software",
            "vulkan": "disabled_off",
            "webgl": "unavailable_software",
            "webgpu": "unavailable_software",
            "webgpu_on_vk_via_gl_interop": "disabled_off",
            "webnn": "unavailable_software"
          }
        },
        "environment": "Chromium headless, shared Ubuntu VPS; software rendering as reported by SystemInfo. No frame outliers discarded. Four >=60s samples.",
        "userDeviceStatus": "NOT_MEASURED",
        "scenarios": [
          {
            "scenario": "walking",
            "startedAt": "2026-09-06T13:33:29.654Z",
            "durationMs": 62032,
            "viewport": {
              "width": 1440,
              "height": 900
            },
            "cycles": 21,
            "samples": 2330,
            "meanFps": 37.76184109229447,
            "frameTimeP50Ms": 33.19999999999709,
            "frameTimeP95Ms": 49.899999999999636,
            "frameTimeP99Ms": 66.69999999999709,
            "maxFrameMs": 266.6999999999971,
            "over16_67Ms": 1916,
            "over33_34Ms": 464,
            "over50Ms": 42,
            "over100Ms": 7,
            "profileP95Ms": {
              "simulation": 0.20000004768371582,
              "draw": 1.100000023841858,
              "ui": 0.5
            },
            "loadBefore": [
              4.59,
              3.92,
              2.97
            ],
            "loadAfter": [
              4.28,
              3.91,
              3.03
            ],
            "freeMemoryBytes": 44533477376,
            "status": "PASS"
          },
          {
            "scenario": "interactions",
            "startedAt": "2026-09-06T13:34:32.746Z",
            "durationMs": 61274,
            "viewport": {
              "width": 1440,
              "height": 900
            },
            "cycles": 9,
            "samples": 2120,
            "meanFps": 34.794482776703795,
            "frameTimeP50Ms": 33.299999999995634,
            "frameTimeP95Ms": 50,
            "frameTimeP99Ms": 100,
            "maxFrameMs": 450,
            "over16_67Ms": 1771,
            "over33_34Ms": 527,
            "over50Ms": 85,
            "over100Ms": 18,
            "profileP95Ms": {
              "simulation": 0.8999999761581421,
              "draw": 1.2000000476837158,
              "ui": 0.5
            },
            "loadBefore": [
              4.42,
              3.95,
              3.04
            ],
            "loadAfter": [
              4.26,
              3.99,
              3.11
            ],
            "freeMemoryBytes": 44535554048,
            "status": "PASS"
          },
          {
            "scenario": "editor",
            "startedAt": "2026-09-06T13:35:35.168Z",
            "durationMs": 62175,
            "viewport": {
              "width": 1440,
              "height": 900
            },
            "cycles": 27,
            "samples": 2178,
            "meanFps": 35.1554555521033,
            "frameTimeP50Ms": 33.299999999995634,
            "frameTimeP95Ms": 50,
            "frameTimeP99Ms": 83.29999999999927,
            "maxFrameMs": 283.40000000000146,
            "over16_67Ms": 1790,
            "over33_34Ms": 588,
            "over50Ms": 73,
            "over100Ms": 9,
            "profileP95Ms": {
              "simulation": 0.10000002384185791,
              "draw": 2.5,
              "ui": 0.6000000238418579
            },
            "loadBefore": [
              4.26,
              3.99,
              3.11
            ],
            "loadAfter": [
              4.5,
              4.07,
              3.2
            ],
            "freeMemoryBytes": 44551757824,
            "status": "PASS"
          },
          {
            "scenario": "two-rooms",
            "startedAt": "2026-09-06T13:36:38.663Z",
            "durationMs": 60748,
            "viewport": {
              "width": 1440,
              "height": 900
            },
            "cycles": 15,
            "samples": 2218,
            "meanFps": 36.677768113219834,
            "frameTimeP50Ms": 33.299999999995634,
            "frameTimeP95Ms": 50,
            "frameTimeP99Ms": 66.69999999999982,
            "maxFrameMs": 166.59999999999854,
            "over16_67Ms": 1808,
            "over33_34Ms": 545,
            "over50Ms": 49,
            "over100Ms": 7,
            "profileP95Ms": {
              "simulation": 0.2999999523162842,
              "draw": 1,
              "ui": 0.5
            },
            "loadBefore": [
              4.5,
              4.07,
              3.2
            ],
            "loadAfter": [
              3.85,
              3.96,
              3.21
            ],
            "freeMemoryBytes": 44525293568,
            "status": "PASS"
          }
        ],
        "status": "PASS"
      },
      "candidates": {
        "buildId": "px-54c6825277ed",
        "commit": "54c117f48dadc19bbba931f7a39eadfc7be0502b",
        "label": "after",
        "measuredAt": "2026-09-06T13:40:33.071Z",
        "command": "node tools/perf-candidates.mjs after",
        "browser": "153.0.8010.12",
        "viewport": {
          "width": 1440,
          "height": 900
        },
        "hardware": {
          "cpu": "AMD EPYC Processor (with IBPB)",
          "logicalCpus": 12,
          "os": "linux 6.8.0-138-generic"
        },
        "environment": "Headless Chromium on shared VPS. Fresh local static preview PID; fresh synthetic browser storage. Precise coverage and API wrappers add overhead; use these results for call counts, not FPS comparisons.",
        "userDeviceStatus": "NOT_MEASURED",
        "scenarios": [
          {
            "scenario": "idle",
            "startedAt": "2026-09-06T13:38:31.270Z",
            "durationMs": 60006,
            "counters": {
              "stateCloneCalls": 0,
              "stateCloneMs": 0,
              "storageWrites": 0,
              "identicalStorageWrites": 0,
              "storageWriteMs": 0
            },
            "functions": [
              {
                "role": "reduce",
                "functionName": "w",
                "callCount": 3395
              }
            ],
            "loadBefore": [
              2.61,
              3.59,
              3.13
            ],
            "loadAfter": [
              3.34,
              3.69,
              3.19
            ]
          },
          {
            "scenario": "editor-idle",
            "startedAt": "2026-09-06T13:39:32.959Z",
            "durationMs": 60059,
            "counters": {
              "stateCloneCalls": 0,
              "stateCloneMs": 0,
              "storageWrites": 0,
              "identicalStorageWrites": 0,
              "storageWriteMs": 0
            },
            "functions": [],
            "loadBefore": [
              3.15,
              3.65,
              3.18
            ],
            "loadAfter": [
              2.63,
              3.43,
              3.14
            ]
          }
        ]
      }
    }
  },
  "previewExpiresAt": "2026-09-13T07:34:00Z",
  "mode": "public-mock",
  "dataSource": "synthetic-only",
  "productionIntegration": false,
  "realAiCalls": false,
  "milestones": [
    {
      "id": "M0",
      "status": "PASS",
      "description": "Discovery dan perlindungan perubahan existing"
    },
    {
      "id": "M1",
      "status": "PASS",
      "description": "Geometry, renderer, viewport dan performa"
    },
    {
      "id": "M2",
      "status": "PASS",
      "description": "Navigation dan interaksi"
    },
    {
      "id": "M3",
      "status": "PASS",
      "description": "Editor"
    },
    {
      "id": "M4",
      "status": "PASS",
      "description": "Mock economy dan save"
    },
    {
      "id": "M5",
      "status": "PASS",
      "description": "Connected expansion N/E/W"
    },
    {
      "id": "M6",
      "status": "PASS",
      "description": "Preview publik dan bukti terisolasi"
    }
  ],
  "coverage": {
    "schemaVersion": 1,
    "kind": "actual-current-build-results",
    "packageVersion": "1.1",
    "testCaseCount": 77,
    "allowedStatuses": [
      "PASS",
      "FAIL",
      "BLOCKED",
      "NOT_RUN"
    ],
    "cases": [
      {
        "id": "A01",
        "title": "Baca instruksi repo dan status worktree",
        "expected": "Instruksi existing dipertahankan; perubahan pengguna tidak dihapus",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 11
        },
        "status": "PASS",
        "observed": "PASS: Applicable AGENTS preserved; clean start and read instructions recorded in private discovery",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:42:55.339Z",
        "testRefs": [
          "Applicable AGENTS preserved; clean start and read instructions recorded in private discovery"
        ],
        "commands": [
          "node tools/ops-checks.mjs .local/p1-01-before"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "A02",
        "title": "Inventaris toolchain dan deployment",
        "expected": "Runtime, lockfile, module path, serta command aktual tercatat, bukan asumsi",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 12
        },
        "status": "PASS",
        "observed": "PASS: Actual Node/npm/lockfile/module/build/deploy inventory",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:42:55.339Z",
        "testRefs": [
          "Actual Node/npm/lockfile/module/build/deploy inventory"
        ],
        "commands": [
          "node tools/ops-checks.mjs .local/p1-01-before"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "A03",
        "title": "Bandingkan perubahan terhadap allowlist",
        "expected": "Hanya modul preview dan konfigurasi preview yang disetujui berubah",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 13
        },
        "status": "PASS",
        "observed": "PASS: Change allowlist: isolated module and protected production baseline",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:42:55.339Z",
        "testRefs": [
          "Change allowlist: isolated module and protected production baseline"
        ],
        "commands": [
          "node tools/ops-checks.mjs .local/p1-01-before"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "A04",
        "title": "Baseline route privat",
        "expected": "Respons autentikasi produksi sebelum/sesudah deploy tetap sesuai baseline",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 14
        },
        "status": "PASS",
        "observed": "PASS: Production anonymous routes: actual external baseline before/after publication",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:42:55.339Z",
        "testRefs": [
          "Production anonymous routes: actual external baseline before/after publication"
        ],
        "commands": [
          "node tools/ops-checks.mjs .local/p1-01-before"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "G01",
        "title": "Muat seed awal",
        "expected": "Tepat satu room 8x8, 64 tile unik, satu avatar, tiga entity furnitur awal",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 20
        },
        "status": "PASS",
        "observed": "PASS: [G01 G06 G08 S08] M1: derived JSON fixture equals runtime fixture; 64 cells, cross and access valid · PASS: [G01 N05 N09 N11 C01 C02 C03 C07 C08 C10 S01 R03 R06 R08] M1-M4: ordinary UI real-time two tasks, sofa, relax and reload",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:23.568Z",
        "testRefs": [
          "tests/domain.test.ts: [G01 G06 G08 S08] M1: derived JSON fixture equals runtime fixture; 64 cells, cross and access valid",
          "[G01 N05 N09 N11 C01 C02 C03 C07 C08 C10 S01 R03 R06 R08] M1-M4: ordinary UI real-time two tasks, sofa, relax and reload"
        ],
        "commands": [
          "npm run test:unit",
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "G02",
        "title": "Top view versus isometrik",
        "expected": "Menggunakan world state yang sama; perpindahan objek muncul konsisten",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 21
        },
        "status": "PASS",
        "observed": "PASS: [G02 G07 N12 E10 E11 R01 R02 P08] shared view state, walls, ghost cancel, keyboard and inventory lifecycle",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:23.568Z",
        "testRefs": [
          "[G02 G07 N12 E10 E11 R01 R02 P08] shared view state, walls, ghost cancel, keyboard and inventory lifecycle"
        ],
        "commands": [
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "G03",
        "title": "Round-trip proyeksi/invers",
        "expected": "Tile center kembali ke world point semula pada zoom/pan berbeda",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 22
        },
        "status": "PASS",
        "observed": "PASS: [G03] GEO-01: known projection, inverse, negative coordinates and height · PASS: [G03 G05] actual renderer camera round-trip and wall coordinates with pan/zoom",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:20.939Z",
        "testRefs": [
          "tests/domain.test.ts: [G03] GEO-01: known projection, inverse, negative coordinates and height",
          "tests/domain.test.ts: [G03 G05] actual renderer camera round-trip and wall coordinates with pan/zoom"
        ],
        "commands": [
          "npm run test:unit"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "G04",
        "title": "Rotasi aset 0/90/180/270/360",
        "expected": "Mask, ukuran, approach, exit, anchor, dan facing konsisten; 360 kembali identik",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 23
        },
        "status": "PASS",
        "observed": "PASS: [G04 E05 N04 N11 R06 R08] P1-01: N expansion keeps both sofa seats and four rotations usable through the doorway · PASS: [G04 E05 N04 N11 R06 R08] P1-01: E expansion keeps both sofa seats and four rotations usable through the doorway · PASS: [G04 E05 N04 N11 R06 R08] P1-01: W expansion keeps both sofa seats and four rotations usable through the doorway · PASS: [G04] GEO-03: four cell/continuous rotations preserve anchors outside footprint · PASS: [E08 G04] NAV/EDIT: blocked exit rejects editor; four sofa rotations expose reachable slots · PASS: [G04 G08] official asset contract: masks, both seats, continuous anchors and facings at all rotations · PASS: [E02 E08 G04 N11] M3: place-sofa intent survives leaving bed; cancel retains inventory; four orientations · PASS: [G04 E01 N05 N06] rotated workstation/bed use anchors and actual pose screenshots · PASS: Viewed all four workstation, bed and sofa orientations; composite furniture, body orientation and support follow rotation. Geometry and both-seat navigation are checked separately by executed tests.",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:39:47.659445+00:00",
        "testRefs": [
          "tests/domain.test.ts: [G04 E05 N04 N11 R06 R08] P1-01: N expansion keeps both sofa seats and four rotations usable through the doorway",
          "tests/domain.test.ts: [G04 E05 N04 N11 R06 R08] P1-01: E expansion keeps both sofa seats and four rotations usable through the doorway",
          "tests/domain.test.ts: [G04 E05 N04 N11 R06 R08] P1-01: W expansion keeps both sofa seats and four rotations usable through the doorway",
          "tests/domain.test.ts: [G04] GEO-03: four cell/continuous rotations preserve anchors outside footprint",
          "tests/domain.test.ts: [E08 G04] NAV/EDIT: blocked exit rejects editor; four sofa rotations expose reachable slots",
          "tests/domain.test.ts: [G04 G08] official asset contract: masks, both seats, continuous anchors and facings at all rotations",
          "[E02 E08 G04 N11] M3: place-sofa intent survives leaving bed; cancel retains inventory; four orientations",
          "[G04 E01 N05 N06] rotated workstation/bed use anchors and actual pose screenshots",
          "Visual inspection of actual captures"
        ],
        "commands": [
          "npm run test:unit",
          "npm run test:e2e",
          "view_image of current-build browser screenshots"
        ],
        "evidence": [
          "manifest.json",
          "screenshots/workstation-orientation-180.png"
        ],
        "blocker": null
      },
      {
        "id": "G05",
        "title": "Wall coordinate N/E/S/W",
        "expected": "Posisi u/v diproyeksikan pada bidang benar dan tetap saat zoom",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 24
        },
        "status": "PASS",
        "observed": "PASS: [E06 E07 G05 G06] EDIT-01: wall coordinates, doorway reserve, world orientations and approach · PASS: [G03 G05] actual renderer camera round-trip and wall coordinates with pan/zoom",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:20.939Z",
        "testRefs": [
          "tests/domain.test.ts: [E06 E07 G05 G06] EDIT-01: wall coordinates, doorway reserve, world orientations and approach",
          "tests/domain.test.ts: [G03 G05] actual renderer camera round-trip and wall coordinates with pan/zoom"
        ],
        "commands": [
          "npm run test:unit"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "G06",
        "title": "Wall occupancy",
        "expected": "Whiteboard 2x2 mengisi empat slot; tidak mengambil slot lantai",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 25
        },
        "status": "PASS",
        "observed": "PASS: [G01 G06 G08 S08] M1: derived JSON fixture equals runtime fixture; 64 cells, cross and access valid · PASS: [E06 E07 G05 G06] EDIT-01: wall coordinates, doorway reserve, world orientations and approach",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:20.939Z",
        "testRefs": [
          "tests/domain.test.ts: [G01 G06 G08 S08] M1: derived JSON fixture equals runtime fixture; 64 cells, cross and access valid",
          "tests/domain.test.ts: [E06 E07 G05 G06] EDIT-01: wall coordinates, doorway reserve, world orientations and approach"
        ],
        "commands": [
          "npm run test:unit"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "G07",
        "title": "Collision versus gambar",
        "expected": "Transparansi/bayangan tidak menambah footprint; label tidak menjadi obstacle",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 26
        },
        "status": "PASS",
        "observed": "PASS: [N01 N02 N03 G07] NAV-01: paths respect objects, floor, cardinal edges and unreachable targets · PASS: [G02 G07 N12 E10 E11 R01 R02 P08] shared view state, walls, ghost cancel, keyboard and inventory lifecycle",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:23.568Z",
        "testRefs": [
          "tests/domain.test.ts: [N01 N02 N03 G07] NAV-01: paths respect objects, floor, cardinal edges and unreachable targets",
          "[G02 G07 N12 E10 E11 R01 R02 P08] shared view state, walls, ghost cancel, keyboard and inventory lifecycle"
        ],
        "commands": [
          "npm run test:unit",
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "G08",
        "title": "Reserved transit",
        "expected": "Cross dua tile kosong dari furnitur; approach awal dapat dicapai",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 27
        },
        "status": "PASS",
        "observed": "PASS: [G01 G06 G08 S08] M1: derived JSON fixture equals runtime fixture; 64 cells, cross and access valid · PASS: [G04 G08] official asset contract: masks, both seats, continuous anchors and facings at all rotations",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:20.939Z",
        "testRefs": [
          "tests/domain.test.ts: [G01 G06 G08 S08] M1: derived JSON fixture equals runtime fixture; 64 cells, cross and access valid",
          "tests/domain.test.ts: [G04 G08] official asset contract: masks, both seats, continuous anchors and facings at all rotations"
        ],
        "commands": [
          "npm run test:unit"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "N01",
        "title": "Klik tile kosong",
        "expected": "Avatar mengikuti path empat arah, titik kaki berhenti di tile center",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 33
        },
        "status": "PASS",
        "observed": "PASS: [N01 N02 N03 G07] NAV-01: paths respect objects, floor, cardinal edges and unreachable targets · PASS: [N01 N02 N03 N08] redirected walking keeps cardinal collision-free steps and clears reservation · PASS: [N01 N03 N06 N07 E08] M2: bed and board interactions, collision rejection, keyboard walk and editor exit",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:23.568Z",
        "testRefs": [
          "tests/domain.test.ts: [N01 N02 N03 G07] NAV-01: paths respect objects, floor, cardinal edges and unreachable targets",
          "tests/domain.test.ts: [N01 N02 N03 N08] redirected walking keeps cardinal collision-free steps and clears reservation",
          "[N01 N03 N06 N07 E08] M2: bed and board interactions, collision rejection, keyboard walk and editor exit"
        ],
        "commands": [
          "npm run test:unit",
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "N02",
        "title": "Klik di belakang workstation",
        "expected": "Avatar memutari footprint, tidak melintasi meja/kursi",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 34
        },
        "status": "PASS",
        "observed": "PASS: [N01 N02 N03 G07] NAV-01: paths respect objects, floor, cardinal edges and unreachable targets · PASS: [N01 N02 N03 N08] redirected walking keeps cardinal collision-free steps and clears reservation",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:20.939Z",
        "testRefs": [
          "tests/domain.test.ts: [N01 N02 N03 G07] NAV-01: paths respect objects, floor, cardinal edges and unreachable targets",
          "tests/domain.test.ts: [N01 N02 N03 N08] redirected walking keeps cardinal collision-free steps and clears reservation"
        ],
        "commands": [
          "npm run test:unit"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "N03",
        "title": "Target terhalang/di luar ruangan",
        "expected": "Pesan tujuan invalid; tidak teleport atau loop pencarian tanpa akhir",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 35
        },
        "status": "PASS",
        "observed": "PASS: [N01 N02 N03 G07] NAV-01: paths respect objects, floor, cardinal edges and unreachable targets · PASS: [N01 N02 N03 N08] redirected walking keeps cardinal collision-free steps and clears reservation · PASS: [N01 N03 N06 N07 E08] M2: bed and board interactions, collision rejection, keyboard walk and editor exit",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:23.568Z",
        "testRefs": [
          "tests/domain.test.ts: [N01 N02 N03 G07] NAV-01: paths respect objects, floor, cardinal edges and unreachable targets",
          "tests/domain.test.ts: [N01 N02 N03 N08] redirected walking keeps cardinal collision-free steps and clears reservation",
          "[N01 N03 N06 N07 E08] M2: bed and board interactions, collision rejection, keyboard walk and editor exit"
        ],
        "commands": [
          "npm run test:unit",
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "N04",
        "title": "Sisi dinding tertutup",
        "expected": "Dua tile yang bersisian lintas room tidak terhubung di luar doorway",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 36
        },
        "status": "PASS",
        "observed": "PASS: [E04 E05 N04 N06 N11 R04 R05 R06] P1-01: N shared-wall approaches rejected from both rooms without moving avatar · PASS: [G04 E05 N04 N11 R06 R08] P1-01: N expansion keeps both sofa seats and four rotations usable through the doorway · PASS: [E04 E05 N04 N06 N11 R04 R05 R06] P1-01: E shared-wall approaches rejected from both rooms without moving avatar · PASS: [G04 E05 N04 N11 R06 R08] P1-01: E expansion keeps both sofa seats and four rotations usable through the doorway · PASS: [E04 E05 N04 N06 N11 R04 R05 R06] P1-01: W shared-wall approaches rejected from both rooms without moving avatar · PASS: [G04 E05 N04 N11 R06 R08] P1-01: W expansion keeps both sofa seats and four rotations usable through the doorway · PASS: [N04] NAV-01: adjacent room tiles remain separated without a connection · PASS: [N04 R03 R04 R05 R07 R08 R09] ROOM-01/02: N gives 128 cells, two open edges, stable economy, one expansion · PASS: [N04 R03 R04 R05 R07 R08 R09] ROOM-01/02: E gives 128 cells, two open edges, stable economy, one expansion · PASS: [N04 R03 R04 R05 R07 R08 R09] ROOM-01/02: W gives 128 cells, two open edges, stable economy, one expansion · PASS: [N04 R06] all connected-room journeys cross only the doorway with bounded continuous motion · PASS: [E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI N: reject shared-wall sofa, then enter and exit valid sofa through doorway · PASS: [E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI E: reject shared-wall sofa, then enter and exit valid sofa through doorway · PASS: [E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI W: reject shared-wall sofa, then enter and exit valid sofa through doorway",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:23.568Z",
        "testRefs": [
          "tests/domain.test.ts: [E04 E05 N04 N06 N11 R04 R05 R06] P1-01: N shared-wall approaches rejected from both rooms without moving avatar",
          "tests/domain.test.ts: [G04 E05 N04 N11 R06 R08] P1-01: N expansion keeps both sofa seats and four rotations usable through the doorway",
          "tests/domain.test.ts: [E04 E05 N04 N06 N11 R04 R05 R06] P1-01: E shared-wall approaches rejected from both rooms without moving avatar",
          "tests/domain.test.ts: [G04 E05 N04 N11 R06 R08] P1-01: E expansion keeps both sofa seats and four rotations usable through the doorway",
          "tests/domain.test.ts: [E04 E05 N04 N06 N11 R04 R05 R06] P1-01: W shared-wall approaches rejected from both rooms without moving avatar",
          "tests/domain.test.ts: [G04 E05 N04 N11 R06 R08] P1-01: W expansion keeps both sofa seats and four rotations usable through the doorway",
          "tests/domain.test.ts: [N04] NAV-01: adjacent room tiles remain separated without a connection",
          "tests/domain.test.ts: [N04 R03 R04 R05 R07 R08 R09] ROOM-01/02: N gives 128 cells, two open edges, stable economy, one expansion",
          "tests/domain.test.ts: [N04 R03 R04 R05 R07 R08 R09] ROOM-01/02: E gives 128 cells, two open edges, stable economy, one expansion",
          "tests/domain.test.ts: [N04 R03 R04 R05 R07 R08 R09] ROOM-01/02: W gives 128 cells, two open edges, stable economy, one expansion",
          "tests/domain.test.ts: [N04 R06] all connected-room journeys cross only the doorway with bounded continuous motion",
          "[E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI N: reject shared-wall sofa, then enter and exit valid sofa through doorway",
          "[E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI E: reject shared-wall sofa, then enter and exit valid sofa through doorway",
          "[E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI W: reject shared-wall sofa, then enter and exit valid sofa through doorway"
        ],
        "commands": [
          "npm run test:unit",
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "N05",
        "title": "Gunakan workstation",
        "expected": "Approach -> turn -> sit/work; badan dan meja berlapis benar",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 37
        },
        "status": "PASS",
        "observed": "PASS: [N05 N06 N07 N11 S03] use heights, safe exits, board facing and complete sofa cooldown · PASS: [G01 N05 N09 N11 C01 C02 C03 C07 C08 C10 S01 R03 R06 R08] M1-M4: ordinary UI real-time two tasks, sofa, relax and reload · PASS: [N05 N06 N10] visible sitting/sleep body and front/back depth evidence · PASS: [G04 E01 N05 N06] rotated workstation/bed use anchors and actual pose screenshots · PASS: Avatar sits on workstation chair; desk and monitor occlude lower body according to orientation.",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:39:47.659445+00:00",
        "testRefs": [
          "tests/domain.test.ts: [N05 N06 N07 N11 S03] use heights, safe exits, board facing and complete sofa cooldown",
          "[G01 N05 N09 N11 C01 C02 C03 C07 C08 C10 S01 R03 R06 R08] M1-M4: ordinary UI real-time two tasks, sofa, relax and reload",
          "[N05 N06 N10] visible sitting/sleep body and front/back depth evidence",
          "[G04 E01 N05 N06] rotated workstation/bed use anchors and actual pose screenshots",
          "Visual inspection of actual captures"
        ],
        "commands": [
          "npm run test:unit",
          "npm run test:e2e",
          "view_image of current-build browser screenshots"
        ],
        "evidence": [
          "manifest.json",
          "screenshots/workstation-orientation-0.png"
        ],
        "blocker": null
      },
      {
        "id": "N06",
        "title": "Gunakan bed",
        "expected": "Approach -> berbaring -> keluar; kaki kembali ke exit yang valid",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 38
        },
        "status": "PASS",
        "observed": "PASS: [E04 E05 N04 N06 N11 R04 R05 R06] P1-01: N shared-wall approaches rejected from both rooms without moving avatar · PASS: [E04 E05 N04 N06 N11 R04 R05 R06] P1-01: E shared-wall approaches rejected from both rooms without moving avatar · PASS: [E04 E05 N04 N06 N11 R04 R05 R06] P1-01: W shared-wall approaches rejected from both rooms without moving avatar · PASS: [N06 E08 S09] ANIM/NAV: approach -> enter -> bed -> exit, paused motion and reservation cleanup · PASS: [N05 N06 N07 N11 S03] use heights, safe exits, board facing and complete sofa cooldown · PASS: [N01 N03 N06 N07 E08] M2: bed and board interactions, collision rejection, keyboard walk and editor exit · PASS: [N05 N06 N10] visible sitting/sleep body and front/back depth evidence · PASS: [G04 E01 N05 N06] rotated workstation/bed use anchors and actual pose screenshots · PASS: Lying head, torso and legs are visible on mattress along its long axis in all four rotations.",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:39:47.659445+00:00",
        "testRefs": [
          "tests/domain.test.ts: [E04 E05 N04 N06 N11 R04 R05 R06] P1-01: N shared-wall approaches rejected from both rooms without moving avatar",
          "tests/domain.test.ts: [E04 E05 N04 N06 N11 R04 R05 R06] P1-01: E shared-wall approaches rejected from both rooms without moving avatar",
          "tests/domain.test.ts: [E04 E05 N04 N06 N11 R04 R05 R06] P1-01: W shared-wall approaches rejected from both rooms without moving avatar",
          "tests/domain.test.ts: [N06 E08 S09] ANIM/NAV: approach -> enter -> bed -> exit, paused motion and reservation cleanup",
          "tests/domain.test.ts: [N05 N06 N07 N11 S03] use heights, safe exits, board facing and complete sofa cooldown",
          "[N01 N03 N06 N07 E08] M2: bed and board interactions, collision rejection, keyboard walk and editor exit",
          "[N05 N06 N10] visible sitting/sleep body and front/back depth evidence",
          "[G04 E01 N05 N06] rotated workstation/bed use anchors and actual pose screenshots",
          "Visual inspection of actual captures"
        ],
        "commands": [
          "npm run test:unit",
          "npm run test:e2e",
          "view_image of current-build browser screenshots"
        ],
        "evidence": [
          "manifest.json",
          "screenshots/bed-orientation-90.png"
        ],
        "blocker": null
      },
      {
        "id": "N07",
        "title": "Gunakan board",
        "expected": "Avatar tiba pada approach dan menghadap dinding yang benar",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 39
        },
        "status": "PASS",
        "observed": "PASS: [N05 N06 N07 N11 S03] use heights, safe exits, board facing and complete sofa cooldown · PASS: [N01 N03 N06 N07 E08] M2: bed and board interactions, collision rejection, keyboard walk and editor exit",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:23.568Z",
        "testRefs": [
          "tests/domain.test.ts: [N05 N06 N07 N11 S03] use heights, safe exits, board facing and complete sofa cooldown",
          "[N01 N03 N06 N07 E08] M2: bed and board interactions, collision rejection, keyboard walk and editor exit"
        ],
        "commands": [
          "npm run test:unit",
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "N08",
        "title": "Perintah baru saat berjalan",
        "expected": "Tujuan/reservasi lama dibatalkan, path baru valid",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 40
        },
        "status": "PASS",
        "observed": "PASS: [N01 N02 N03 N08] redirected walking keeps cardinal collision-free steps and clears reservation",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:20.939Z",
        "testRefs": [
          "tests/domain.test.ts: [N01 N02 N03 N08] redirected walking keeps cardinal collision-free steps and clears reservation"
        ],
        "commands": [
          "npm run test:unit"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "N09",
        "title": "Perintah kerja saat bersantai",
        "expected": "Job langsung RUNNING, avatar keluar sofa dan berjalan ke workstation",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 41
        },
        "status": "PASS",
        "observed": "PASS: [N09] ANIM: new task visually exits sofa before walking, idle activity cooldown · PASS: [G01 N05 N09 N11 C01 C02 C03 C07 C08 C10 S01 R03 R06 R08] M1-M4: ordinary UI real-time two tasks, sofa, relax and reload",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:23.568Z",
        "testRefs": [
          "tests/domain.test.ts: [N09] ANIM: new task visually exits sofa before walking, idle activity cooldown",
          "[G01 N05 N09 N11 C01 C02 C03 C07 C08 C10 S01 R03 R06 R08] M1-M4: ordinary UI real-time two tasks, sofa, relax and reload"
        ],
        "commands": [
          "npm run test:unit",
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "N10",
        "title": "Depth saat di depan/belakang objek",
        "expected": "Tidak ada furniture selalu menggambar di depan avatar pada semua posisi",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 42
        },
        "status": "PASS",
        "observed": "PASS: [N05 N06 N10] visible sitting/sleep body and front/back depth evidence · PASS: Behind view partially occludes avatar with monitor; front view draws avatar in front. Bed support remains below lying body.",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:39:47.659445+00:00",
        "testRefs": [
          "[N05 N06 N10] visible sitting/sleep body and front/back depth evidence",
          "Visual inspection of actual captures"
        ],
        "commands": [
          "npm run test:e2e",
          "view_image of current-build browser screenshots"
        ],
        "evidence": [
          "manifest.json",
          "screenshots/depth-front.png"
        ],
        "blocker": null
      },
      {
        "id": "N11",
        "title": "Sofa otomatis saat idle",
        "expected": "Setelah syarat demo terpenuhi avatar duduk, selesai, lalu cooldown berlaku",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 43
        },
        "status": "PASS",
        "observed": "PASS: [E04 E05 N04 N06 N11 R04 R05 R06] P1-01: N shared-wall approaches rejected from both rooms without moving avatar · PASS: [G04 E05 N04 N11 R06 R08] P1-01: N expansion keeps both sofa seats and four rotations usable through the doorway · PASS: [E04 E05 N04 N06 N11 R04 R05 R06] P1-01: E shared-wall approaches rejected from both rooms without moving avatar · PASS: [G04 E05 N04 N11 R06 R08] P1-01: E expansion keeps both sofa seats and four rotations usable through the doorway · PASS: [E04 E05 N04 N06 N11 R04 R05 R06] P1-01: W shared-wall approaches rejected from both rooms without moving avatar · PASS: [G04 E05 N04 N11 R06 R08] P1-01: W expansion keeps both sofa seats and four rotations usable through the doorway · PASS: [N05 N06 N07 N11 S03] use heights, safe exits, board facing and complete sofa cooldown · PASS: [E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI N: reject shared-wall sofa, then enter and exit valid sofa through doorway · PASS: [E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI E: reject shared-wall sofa, then enter and exit valid sofa through doorway · PASS: [E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI W: reject shared-wall sofa, then enter and exit valid sofa through doorway · PASS: [G01 N05 N09 N11 C01 C02 C03 C07 C08 C10 S01 R03 R06 R08] M1-M4: ordinary UI real-time two tasks, sofa, relax and reload · PASS: [E02 E08 G04 N11] M3: place-sofa intent survives leaving bed; cancel retains inventory; four orientations · PASS: Seated torso and bent legs visible where orientation permits; sofa back appropriately occludes the body in opposite views. Timing and exits tested separately.",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:39:47.659445+00:00",
        "testRefs": [
          "tests/domain.test.ts: [E04 E05 N04 N06 N11 R04 R05 R06] P1-01: N shared-wall approaches rejected from both rooms without moving avatar",
          "tests/domain.test.ts: [G04 E05 N04 N11 R06 R08] P1-01: N expansion keeps both sofa seats and four rotations usable through the doorway",
          "tests/domain.test.ts: [E04 E05 N04 N06 N11 R04 R05 R06] P1-01: E shared-wall approaches rejected from both rooms without moving avatar",
          "tests/domain.test.ts: [G04 E05 N04 N11 R06 R08] P1-01: E expansion keeps both sofa seats and four rotations usable through the doorway",
          "tests/domain.test.ts: [E04 E05 N04 N06 N11 R04 R05 R06] P1-01: W shared-wall approaches rejected from both rooms without moving avatar",
          "tests/domain.test.ts: [G04 E05 N04 N11 R06 R08] P1-01: W expansion keeps both sofa seats and four rotations usable through the doorway",
          "tests/domain.test.ts: [N05 N06 N07 N11 S03] use heights, safe exits, board facing and complete sofa cooldown",
          "[E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI N: reject shared-wall sofa, then enter and exit valid sofa through doorway",
          "[E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI E: reject shared-wall sofa, then enter and exit valid sofa through doorway",
          "[E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI W: reject shared-wall sofa, then enter and exit valid sofa through doorway",
          "[G01 N05 N09 N11 C01 C02 C03 C07 C08 C10 S01 R03 R06 R08] M1-M4: ordinary UI real-time two tasks, sofa, relax and reload",
          "[E02 E08 G04 N11] M3: place-sofa intent survives leaving bed; cancel retains inventory; four orientations",
          "Visual inspection of actual captures"
        ],
        "commands": [
          "npm run test:unit",
          "npm run test:e2e",
          "view_image of current-build browser screenshots"
        ],
        "evidence": [
          "manifest.json",
          "screenshots/sofa-orientation-90.png"
        ],
        "blocker": null
      },
      {
        "id": "N12",
        "title": "Toggle dinding",
        "expected": "Visual dinding tersembunyi tetapi collision tetap ada",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 44
        },
        "status": "PASS",
        "observed": "PASS: [G02 G07 N12 E10 E11 R01 R02 P08] shared view state, walls, ghost cancel, keyboard and inventory lifecycle · PASS: [N12] hidden front walls remain closed to navigation",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:23.568Z",
        "testRefs": [
          "[G02 G07 N12 E10 E11 R01 R02 P08] shared view state, walls, ghost cancel, keyboard and inventory lifecycle",
          "[N12] hidden front walls remain closed to navigation"
        ],
        "commands": [
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "E01",
        "title": "Pindah workstation",
        "expected": "Desk, chair, dan computer berpindah sebagai composite; anchor ikut",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 50
        },
        "status": "PASS",
        "observed": "PASS: [E01 E02 E03 E06 E07 E09 P08] M3: invalid placement, rotation/cancel, wall reserve, undo/redo and expansion checkpoint · PASS: [G04 E01 N05 N06] rotated workstation/bed use anchors and actual pose screenshots",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:23.568Z",
        "testRefs": [
          "[E01 E02 E03 E06 E07 E09 P08] M3: invalid placement, rotation/cancel, wall reserve, undo/redo and expansion checkpoint",
          "[G04 E01 N05 N06] rotated workstation/bed use anchors and actual pose screenshots"
        ],
        "commands": [
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "E02",
        "title": "Batal draft",
        "expected": "Layout, saldo, dan inventaris tidak berubah",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 51
        },
        "status": "PASS",
        "observed": "PASS: [E02 E03 E04] EDIT-01: invalid drafts do not mutate saved objects; transit and bounds protected · PASS: [E01 E02 E03 E06 E07 E09 P08] M3: invalid placement, rotation/cancel, wall reserve, undo/redo and expansion checkpoint · PASS: [E02 E08 G04 N11] M3: place-sofa intent survives leaving bed; cancel retains inventory; four orientations",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:23.568Z",
        "testRefs": [
          "tests/domain.test.ts: [E02 E03 E04] EDIT-01: invalid drafts do not mutate saved objects; transit and bounds protected",
          "[E01 E02 E03 E06 E07 E09 P08] M3: invalid placement, rotation/cancel, wall reserve, undo/redo and expansion checkpoint",
          "[E02 E08 G04 N11] M3: place-sofa intent survives leaving bed; cancel retains inventory; four orientations"
        ],
        "commands": [
          "npm run test:unit",
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "E03",
        "title": "Letakkan objek di reserved transit/pintu",
        "expected": "Commit ditolak dengan teks sebab yang spesifik",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 52
        },
        "status": "PASS",
        "observed": "PASS: [E02 E03 E04] EDIT-01: invalid drafts do not mutate saved objects; transit and bounds protected · PASS: [P09 S01 S05 E03 E05] Idle checkpoints avoid duplicate writes; changed tasks and drafts still persist and revalidate · PASS: [E01 E02 E03 E06 E07 E09 P08] M3: invalid placement, rotation/cancel, wall reserve, undo/redo and expansion checkpoint",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:23.568Z",
        "testRefs": [
          "tests/domain.test.ts: [E02 E03 E04] EDIT-01: invalid drafts do not mutate saved objects; transit and bounds protected",
          "[P09 S01 S05 E03 E05] Idle checkpoints avoid duplicate writes; changed tasks and drafts still persist and revalidate",
          "[E01 E02 E03 E06 E07 E09 P08] M3: invalid placement, rotation/cancel, wall reserve, undo/redo and expansion checkpoint"
        ],
        "commands": [
          "npm run test:unit",
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "E04",
        "title": "Letakkan objek di luar room/overlap",
        "expected": "Commit ditolak; tidak ada bagian objek hilang keluar batas",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 53
        },
        "status": "PASS",
        "observed": "PASS: [E04 E05 N04 N06 N11 R04 R05 R06] P1-01: N shared-wall approaches rejected from both rooms without moving avatar · PASS: [E04 E05 N04 N06 N11 R04 R05 R06] P1-01: E shared-wall approaches rejected from both rooms without moving avatar · PASS: [E04 E05 N04 N06 N11 R04 R05 R06] P1-01: W shared-wall approaches rejected from both rooms without moving avatar · PASS: [E02 E03 E04] EDIT-01: invalid drafts do not mutate saved objects; transit and bounds protected · PASS: [E04 E05] EDIT-01: overlap, blocked approach and avatar trap rejected · PASS: [E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI N: reject shared-wall sofa, then enter and exit valid sofa through doorway · PASS: [E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI E: reject shared-wall sofa, then enter and exit valid sofa through doorway · PASS: [E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI W: reject shared-wall sofa, then enter and exit valid sofa through doorway",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:23.568Z",
        "testRefs": [
          "tests/domain.test.ts: [E04 E05 N04 N06 N11 R04 R05 R06] P1-01: N shared-wall approaches rejected from both rooms without moving avatar",
          "tests/domain.test.ts: [E04 E05 N04 N06 N11 R04 R05 R06] P1-01: E shared-wall approaches rejected from both rooms without moving avatar",
          "tests/domain.test.ts: [E04 E05 N04 N06 N11 R04 R05 R06] P1-01: W shared-wall approaches rejected from both rooms without moving avatar",
          "tests/domain.test.ts: [E02 E03 E04] EDIT-01: invalid drafts do not mutate saved objects; transit and bounds protected",
          "tests/domain.test.ts: [E04 E05] EDIT-01: overlap, blocked approach and avatar trap rejected",
          "[E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI N: reject shared-wall sofa, then enter and exit valid sofa through doorway",
          "[E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI E: reject shared-wall sofa, then enter and exit valid sofa through doorway",
          "[E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI W: reject shared-wall sofa, then enter and exit valid sofa through doorway"
        ],
        "commands": [
          "npm run test:unit",
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "E05",
        "title": "Blokir approach furnitur wajib",
        "expected": "Commit ditolak walau footprint objek baru tidak overlap",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 54
        },
        "status": "PASS",
        "observed": "PASS: [E04 E05 N04 N06 N11 R04 R05 R06] P1-01: N shared-wall approaches rejected from both rooms without moving avatar · PASS: [G04 E05 N04 N11 R06 R08] P1-01: N expansion keeps both sofa seats and four rotations usable through the doorway · PASS: [E04 E05 N04 N06 N11 R04 R05 R06] P1-01: E shared-wall approaches rejected from both rooms without moving avatar · PASS: [G04 E05 N04 N11 R06 R08] P1-01: E expansion keeps both sofa seats and four rotations usable through the doorway · PASS: [E04 E05 N04 N06 N11 R04 R05 R06] P1-01: W shared-wall approaches rejected from both rooms without moving avatar · PASS: [G04 E05 N04 N11 R06 R08] P1-01: W expansion keeps both sofa seats and four rotations usable through the doorway · PASS: [E04 E05] EDIT-01: overlap, blocked approach and avatar trap rejected · PASS: [E05 C01 C02] blocking required approach has specific cause; success does not award before accept · PASS: [P09 S01 S05 E03 E05] Idle checkpoints avoid duplicate writes; changed tasks and drafts still persist and revalidate · PASS: [E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI N: reject shared-wall sofa, then enter and exit valid sofa through doorway · PASS: [E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI E: reject shared-wall sofa, then enter and exit valid sofa through doorway · PASS: [E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI W: reject shared-wall sofa, then enter and exit valid sofa through doorway",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:23.568Z",
        "testRefs": [
          "tests/domain.test.ts: [E04 E05 N04 N06 N11 R04 R05 R06] P1-01: N shared-wall approaches rejected from both rooms without moving avatar",
          "tests/domain.test.ts: [G04 E05 N04 N11 R06 R08] P1-01: N expansion keeps both sofa seats and four rotations usable through the doorway",
          "tests/domain.test.ts: [E04 E05 N04 N06 N11 R04 R05 R06] P1-01: E shared-wall approaches rejected from both rooms without moving avatar",
          "tests/domain.test.ts: [G04 E05 N04 N11 R06 R08] P1-01: E expansion keeps both sofa seats and four rotations usable through the doorway",
          "tests/domain.test.ts: [E04 E05 N04 N06 N11 R04 R05 R06] P1-01: W shared-wall approaches rejected from both rooms without moving avatar",
          "tests/domain.test.ts: [G04 E05 N04 N11 R06 R08] P1-01: W expansion keeps both sofa seats and four rotations usable through the doorway",
          "tests/domain.test.ts: [E04 E05] EDIT-01: overlap, blocked approach and avatar trap rejected",
          "tests/domain.test.ts: [E05 C01 C02] blocking required approach has specific cause; success does not award before accept",
          "[P09 S01 S05 E03 E05] Idle checkpoints avoid duplicate writes; changed tasks and drafts still persist and revalidate",
          "[E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI N: reject shared-wall sofa, then enter and exit valid sofa through doorway",
          "[E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI E: reject shared-wall sofa, then enter and exit valid sofa through doorway",
          "[E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI W: reject shared-wall sofa, then enter and exit valid sofa through doorway"
        ],
        "commands": [
          "npm run test:unit",
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "E06",
        "title": "Pindah whiteboard",
        "expected": "Snap u/v bekerja; kandidat approach dihitung kembali",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 55
        },
        "status": "PASS",
        "observed": "PASS: [E06 E07 G05 G06] EDIT-01: wall coordinates, doorway reserve, world orientations and approach · PASS: [E01 E02 E03 E06 E07 E09 P08] M3: invalid placement, rotation/cancel, wall reserve, undo/redo and expansion checkpoint",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:23.568Z",
        "testRefs": [
          "tests/domain.test.ts: [E06 E07 G05 G06] EDIT-01: wall coordinates, doorway reserve, world orientations and approach",
          "[E01 E02 E03 E06 E07 E09 P08] M3: invalid placement, rotation/cancel, wall reserve, undo/redo and expansion checkpoint"
        ],
        "commands": [
          "npm run test:unit",
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "E07",
        "title": "Whiteboard di door reserve/out of bounds",
        "expected": "Penempatan ditolak; tidak menghilangkan pintu",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 56
        },
        "status": "PASS",
        "observed": "PASS: [E06 E07 G05 G06] EDIT-01: wall coordinates, doorway reserve, world orientations and approach · PASS: [E01 E02 E03 E06 E07 E09 P08] M3: invalid placement, rotation/cancel, wall reserve, undo/redo and expansion checkpoint",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:23.568Z",
        "testRefs": [
          "tests/domain.test.ts: [E06 E07 G05 G06] EDIT-01: wall coordinates, doorway reserve, world orientations and approach",
          "[E01 E02 E03 E06 E07 E09 P08] M3: invalid placement, rotation/cancel, wall reserve, undo/redo and expansion checkpoint"
        ],
        "commands": [
          "npm run test:unit",
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "E08",
        "title": "Masuk editor ketika avatar duduk",
        "expected": "Avatar keluar dahulu atau editor ditolak dengan alasan; objek tidak berpindah di bawah avatar",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 57
        },
        "status": "PASS",
        "observed": "PASS: [N06 E08 S09] ANIM/NAV: approach -> enter -> bed -> exit, paused motion and reservation cleanup · PASS: [E08 G04] NAV/EDIT: blocked exit rejects editor; four sofa rotations expose reachable slots · PASS: [N01 N03 N06 N07 E08] M2: bed and board interactions, collision rejection, keyboard walk and editor exit · PASS: [E02 E08 G04 N11] M3: place-sofa intent survives leaving bed; cancel retains inventory; four orientations",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:23.568Z",
        "testRefs": [
          "tests/domain.test.ts: [N06 E08 S09] ANIM/NAV: approach -> enter -> bed -> exit, paused motion and reservation cleanup",
          "tests/domain.test.ts: [E08 G04] NAV/EDIT: blocked exit rejects editor; four sofa rotations expose reachable slots",
          "[N01 N03 N06 N07 E08] M2: bed and board interactions, collision rejection, keyboard walk and editor exit",
          "[E02 E08 G04 N11] M3: place-sofa intent survives leaving bed; cancel retains inventory; four orientations"
        ],
        "commands": [
          "npm run test:unit",
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "E09",
        "title": "Undo/redo layout",
        "expected": "Posisi dapat dipulihkan; saldo/ledger tidak ikut di-undo",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 58
        },
        "status": "PASS",
        "observed": "PASS: [E09 E10] EDIT-02: undo/redo affects layout only; cancelling/storing sofa preserves ownership · PASS: [E01 E02 E03 E06 E07 E09 P08] M3: invalid placement, rotation/cancel, wall reserve, undo/redo and expansion checkpoint",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:23.568Z",
        "testRefs": [
          "tests/domain.test.ts: [E09 E10] EDIT-02: undo/redo affects layout only; cancelling/storing sofa preserves ownership",
          "[E01 E02 E03 E06 E07 E09 P08] M3: invalid placement, rotation/cancel, wall reserve, undo/redo and expansion checkpoint"
        ],
        "commands": [
          "npm run test:unit",
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "E10",
        "title": "Sofa kembali ke inventaris",
        "expected": "Jumlah owned tetap satu; dapat ditempatkan lagi tanpa membeli",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 59
        },
        "status": "PASS",
        "observed": "PASS: [E09 E10] EDIT-02: undo/redo affects layout only; cancelling/storing sofa preserves ownership · PASS: [G02 G07 N12 E10 E11 R01 R02 P08] shared view state, walls, ghost cancel, keyboard and inventory lifecycle",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:23.568Z",
        "testRefs": [
          "tests/domain.test.ts: [E09 E10] EDIT-02: undo/redo affects layout only; cancelling/storing sofa preserves ownership",
          "[G02 G07 N12 E10 E11 R01 R02 P08] shared view state, walls, ghost cancel, keyboard and inventory lifecycle"
        ],
        "commands": [
          "npm run test:unit",
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "E11",
        "title": "Delete furnitur awal",
        "expected": "Aksi tidak diizinkan dan dijelaskan; starter essentials tetap ada",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 60
        },
        "status": "PASS",
        "observed": "PASS: [E11] EDIT-02: starter deletion, duplicate sofa and ownership are domain protected · PASS: [G02 G07 N12 E10 E11 R01 R02 P08] shared view state, walls, ghost cancel, keyboard and inventory lifecycle",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:23.568Z",
        "testRefs": [
          "tests/domain.test.ts: [E11] EDIT-02: starter deletion, duplicate sofa and ownership are domain protected",
          "[G02 G07 N12 E10 E11 R01 R02 P08] shared view state, walls, ghost cancel, keyboard and inventory lifecycle"
        ],
        "commands": [
          "npm run test:unit",
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "C01",
        "title": "Mulai task",
        "expected": "Satu job RUNNING, waktu aktif 8 detik, semua token diberi label simulasi",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 66
        },
        "status": "PASS",
        "observed": "PASS: [P09 C01 C02 C07 S02] Idle TICK preserves state identity and still rejects invalid elapsed time · PASS: [E05 C01 C02] blocking required approach has specific cause; success does not award before accept · PASS: [G01 N05 N09 N11 C01 C02 C03 C07 C08 C10 S01 R03 R06 R08] M1-M4: ordinary UI real-time two tasks, sofa, relax and reload",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:23.568Z",
        "testRefs": [
          "tests/domain.test.ts: [P09 C01 C02 C07 S02] Idle TICK preserves state identity and still rejects invalid elapsed time",
          "tests/domain.test.ts: [E05 C01 C02] blocking required approach has specific cause; success does not award before accept",
          "[G01 N05 N09 N11 C01 C02 C03 C07 C08 C10 S01 R03 R06 R08] M1-M4: ordinary UI real-time two tasks, sofa, relax and reload"
        ],
        "commands": [
          "npm run test:unit",
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "C02",
        "title": "Job selesai belum diterima",
        "expected": "State SUCCEEDED, saldo masih belum bertambah",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 67
        },
        "status": "PASS",
        "observed": "PASS: [P09 C01 C02 C07 S02] Idle TICK preserves state identity and still rejects invalid elapsed time · PASS: [E05 C01 C02] blocking required approach has specific cause; success does not award before accept · PASS: [G01 N05 N09 N11 C01 C02 C03 C07 C08 C10 S01 R03 R06 R08] M1-M4: ordinary UI real-time two tasks, sofa, relax and reload",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:23.568Z",
        "testRefs": [
          "tests/domain.test.ts: [P09 C01 C02 C07 S02] Idle TICK preserves state identity and still rejects invalid elapsed time",
          "tests/domain.test.ts: [E05 C01 C02] blocking required approach has specific cause; success does not award before accept",
          "[G01 N05 N09 N11 C01 C02 C03 C07 C08 C10 S01 R03 R06 R08] M1-M4: ordinary UI real-time two tasks, sofa, relax and reload"
        ],
        "commands": [
          "npm run test:unit",
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "C03",
        "title": "Terima dua job berbeda",
        "expected": "Saldo 200 dan XP 40; tepat dua entri reward",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 68
        },
        "status": "PASS",
        "observed": "PASS: [C03 C04 C07 C08] ECON-01/02: two accepts -> purchase -> 50 coins / 40 XP, exact idempotency · PASS: [G01 N05 N09 N11 C01 C02 C03 C07 C08 C10 S01 R03 R06 R08] M1-M4: ordinary UI real-time two tasks, sofa, relax and reload",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:23.568Z",
        "testRefs": [
          "tests/domain.test.ts: [C03 C04 C07 C08] ECON-01/02: two accepts -> purchase -> 50 coins / 40 XP, exact idempotency",
          "[G01 N05 N09 N11 C01 C02 C03 C07 C08 C10 S01 R03 R06 R08] M1-M4: ordinary UI real-time two tasks, sofa, relax and reload"
        ],
        "commands": [
          "npm run test:unit",
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "C04",
        "title": "Terima ulang job yang sama",
        "expected": "Tidak menambah saldo/XP atau entri reward",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 69
        },
        "status": "PASS",
        "observed": "PASS: [C03 C04 C07 C08] ECON-01/02: two accepts -> purchase -> 50 coins / 40 XP, exact idempotency",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:20.939Z",
        "testRefs": [
          "tests/domain.test.ts: [C03 C04 C07 C08] ECON-01/02: two accepts -> purchase -> 50 coins / 40 XP, exact idempotency"
        ],
        "commands": [
          "npm run test:unit"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "C05",
        "title": "Job gagal/cancel",
        "expected": "Tidak menghasilkan koin atau XP",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 70
        },
        "status": "PASS",
        "observed": "PASS: [C05 C06] ECON-01: failure, cancel, early acceptance and insufficient balance never reward · PASS: [C05 S09] M4: task pause in editor and hidden tab, failure/cancel have no reward",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:23.568Z",
        "testRefs": [
          "tests/domain.test.ts: [C05 C06] ECON-01: failure, cancel, early acceptance and insufficient balance never reward",
          "[C05 S09] M4: task pause in editor and hidden tab, failure/cancel have no reward"
        ],
        "commands": [
          "npm run test:unit",
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "C06",
        "title": "Saldo kurang untuk sofa",
        "expected": "Pembelian ditolak tanpa pengurangan uang atau inventaris",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 71
        },
        "status": "PASS",
        "observed": "PASS: [C05 C06] ECON-01: failure, cancel, early acceptance and insufficient balance never reward",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:20.939Z",
        "testRefs": [
          "tests/domain.test.ts: [C05 C06] ECON-01: failure, cancel, early acceptance and insufficient balance never reward"
        ],
        "commands": [
          "npm run test:unit"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "C07",
        "title": "Beli sofa setelah C03",
        "expected": "Saldo 50, XP 40, tepat satu sofa di inventaris",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 72
        },
        "status": "PASS",
        "observed": "PASS: [P09 C01 C02 C07 S02] Idle TICK preserves state identity and still rejects invalid elapsed time · PASS: [C03 C04 C07 C08] ECON-01/02: two accepts -> purchase -> 50 coins / 40 XP, exact idempotency · PASS: [G01 N05 N09 N11 C01 C02 C03 C07 C08 C10 S01 R03 R06 R08] M1-M4: ordinary UI real-time two tasks, sofa, relax and reload",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:23.568Z",
        "testRefs": [
          "tests/domain.test.ts: [P09 C01 C02 C07 S02] Idle TICK preserves state identity and still rejects invalid elapsed time",
          "tests/domain.test.ts: [C03 C04 C07 C08] ECON-01/02: two accepts -> purchase -> 50 coins / 40 XP, exact idempotency",
          "[G01 N05 N09 N11 C01 C02 C03 C07 C08 C10 S01 R03 R06 R08] M1-M4: ordinary UI real-time two tasks, sofa, relax and reload"
        ],
        "commands": [
          "npm run test:unit",
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "C08",
        "title": "Klik Beli/Accept ganda",
        "expected": "Reducer tidak melakukan transaksi duplikat meskipun event berulang",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 73
        },
        "status": "PASS",
        "observed": "PASS: [C03 C04 C07 C08] ECON-01/02: two accepts -> purchase -> 50 coins / 40 XP, exact idempotency · PASS: [G01 N05 N09 N11 C01 C02 C03 C07 C08 C10 S01 R03 R06 R08] M1-M4: ordinary UI real-time two tasks, sofa, relax and reload",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:23.568Z",
        "testRefs": [
          "tests/domain.test.ts: [C03 C04 C07 C08] ECON-01/02: two accepts -> purchase -> 50 coins / 40 XP, exact idempotency",
          "[G01 N05 N09 N11 C01 C02 C03 C07 C08 C10 S01 R03 R06 R08] M1-M4: ordinary UI real-time two tasks, sofa, relax and reload"
        ],
        "commands": [
          "npm run test:unit",
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "C09",
        "title": "Satu job sudah berjalan",
        "expected": "Mulai job kedua ditolak tanpa menghapus job pertama",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 74
        },
        "status": "PASS",
        "observed": "PASS: [C09] ECON-02: only one running job; repeated job IDs do not restart; invalid delta rejected",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:20.939Z",
        "testRefs": [
          "tests/domain.test.ts: [C09] ECON-02: only one running job; repeated job IDs do not restart; invalid delta rejected"
        ],
        "commands": [
          "npm run test:unit"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "C10",
        "title": "Network selama seluruh rangkaian",
        "expected": "Tidak ada request provider AI atau API produksi",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 75
        },
        "status": "PASS",
        "observed": "PASS: [G01 N05 N09 N11 C01 C02 C03 C07 C08 C10 S01 R03 R06 R08] M1-M4: ordinary UI real-time two tasks, sofa, relax and reload",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:23.568Z",
        "testRefs": [
          "[G01 N05 N09 N11 C01 C02 C03 C07 C08 C10 S01 R03 R06 R08] M1-M4: ordinary UI real-time two tasks, sofa, relax and reload"
        ],
        "commands": [
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "S01",
        "title": "Reload sesudah sofa dipasang",
        "expected": "Saldo, XP, owned item, posisi, dan koneksi tetap sama",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 81
        },
        "status": "PASS",
        "observed": "PASS: [P09 S01 S05 E03 E05] Idle checkpoints avoid duplicate writes; changed tasks and drafts still persist and revalidate · PASS: [G01 N05 N09 N11 C01 C02 C03 C07 C08 C10 S01 R03 R06 R08] M1-M4: ordinary UI real-time two tasks, sofa, relax and reload",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:23.568Z",
        "testRefs": [
          "[P09 S01 S05 E03 E05] Idle checkpoints avoid duplicate writes; changed tasks and drafts still persist and revalidate",
          "[G01 N05 N09 N11 C01 C02 C03 C07 C08 C10 S01 R03 R06 R08] M1-M4: ordinary UI real-time two tasks, sofa, relax and reload"
        ],
        "commands": [
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "S02",
        "title": "Reload ketika task berjalan",
        "expected": "Remaining time dipulihkan dari checkpoint; tidak ada hadiah ganda",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 82
        },
        "status": "PASS",
        "observed": "PASS: [P09 C01 C02 C07 S02] Idle TICK preserves state identity and still rejects invalid elapsed time · PASS: [S02] SAVE-01: reload retains remaining active time and never gives offline rewards · PASS: [S02 S03] SAVE/NAV: normal walking saves actual position, interaction saves safe exit · PASS: [S02 S11] M4: mid-job reload keeps remaining time; export is local JSON",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:23.568Z",
        "testRefs": [
          "tests/domain.test.ts: [P09 C01 C02 C07 S02] Idle TICK preserves state identity and still rejects invalid elapsed time",
          "tests/domain.test.ts: [S02] SAVE-01: reload retains remaining active time and never gives offline rewards",
          "tests/domain.test.ts: [S02 S03] SAVE/NAV: normal walking saves actual position, interaction saves safe exit",
          "[S02 S11] M4: mid-job reload keeps remaining time; export is local JSON"
        ],
        "commands": [
          "npm run test:unit",
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "S03",
        "title": "Reload ketika avatar duduk",
        "expected": "Avatar dipulihkan ke titik aman; state job/uang tidak berubah",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 83
        },
        "status": "PASS",
        "observed": "PASS: [S03] SAVE-01: reload recovers avatar from furniture to a valid exit · PASS: [S02 S03] SAVE/NAV: normal walking saves actual position, interaction saves safe exit · PASS: [N05 N06 N07 N11 S03] use heights, safe exits, board facing and complete sofa cooldown · PASS: [S03 S06 S07] sleeping reload is safe; follower cannot tick and no-lock tab never writes",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:23.568Z",
        "testRefs": [
          "tests/domain.test.ts: [S03] SAVE-01: reload recovers avatar from furniture to a valid exit",
          "tests/domain.test.ts: [S02 S03] SAVE/NAV: normal walking saves actual position, interaction saves safe exit",
          "tests/domain.test.ts: [N05 N06 N07 N11 S03] use heights, safe exits, board facing and complete sofa cooldown",
          "[S03 S06 S07] sleeping reload is safe; follower cannot tick and no-lock tab never writes"
        ],
        "commands": [
          "npm run test:unit",
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "S04",
        "title": "JSON save rusak/versi baru",
        "expected": "Pesan recovery; tidak otomatis menghapus seluruh storage origin",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 84
        },
        "status": "PASS",
        "observed": "PASS: [S04 S05 R06] P1-01: old cross-wall save enters recovery and preserves raw data without writes or deletion · PASS: [S04] SAVE-01: malformed, future schema, invalid layout, duplicate ledger and money drift rejected · PASS: [S04 S05 R06] P1-01 UI: invalid legacy cross-wall save preserves raw export and disables writes · PASS: [S04 S10] M4: corrupted/unknown save retained, raw export offered, reset cancel then confirm scoped",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:23.568Z",
        "testRefs": [
          "tests/domain.test.ts: [S04 S05 R06] P1-01: old cross-wall save enters recovery and preserves raw data without writes or deletion",
          "tests/domain.test.ts: [S04] SAVE-01: malformed, future schema, invalid layout, duplicate ledger and money drift rejected",
          "[S04 S05 R06] P1-01 UI: invalid legacy cross-wall save preserves raw export and disables writes",
          "[S04 S10] M4: corrupted/unknown save retained, raw export offered, reset cancel then confirm scoped"
        ],
        "commands": [
          "npm run test:unit",
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "S05",
        "title": "Storage diblokir/quota error",
        "expected": "Mode sesi saja atau save error terlihat, bukan Saved palsu",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 85
        },
        "status": "PASS",
        "observed": "PASS: [S04 S05 R06] P1-01: old cross-wall save enters recovery and preserves raw data without writes or deletion · PASS: [S05] SAVE-01: storage write failure is session-only, never reported persisted · PASS: [P09 S01 S05 E03 E05] Idle checkpoints avoid duplicate writes; changed tasks and drafts still persist and revalidate · PASS: [S04 S05 R06] P1-01 UI: invalid legacy cross-wall save preserves raw export and disables writes · PASS: [S05 S07 S08] M4: denied storage and unavailable locks use explicitly isolated session-only mode · PASS: [S05] M4: quota failure after startup stays visible through transaction/reload",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:23.568Z",
        "testRefs": [
          "tests/domain.test.ts: [S04 S05 R06] P1-01: old cross-wall save enters recovery and preserves raw data without writes or deletion",
          "tests/domain.test.ts: [S05] SAVE-01: storage write failure is session-only, never reported persisted",
          "[P09 S01 S05 E03 E05] Idle checkpoints avoid duplicate writes; changed tasks and drafts still persist and revalidate",
          "[S04 S05 R06] P1-01 UI: invalid legacy cross-wall save preserves raw export and disables writes",
          "[S05 S07 S08] M4: denied storage and unavailable locks use explicitly isolated session-only mode",
          "[S05] M4: quota failure after startup stays visible through transaction/reload"
        ],
        "commands": [
          "npm run test:unit",
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "S06",
        "title": "Dua tab pada origin yang sama",
        "expected": "Satu writer; tab kedua read-only; tidak menggandakan timer/reward",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 86
        },
        "status": "PASS",
        "observed": "PASS: [S06] M4: exclusive writer lock, readonly follower and explicit takeover · PASS: [S03 S06 S07] sleeping reload is safe; follower cannot tick and no-lock tab never writes",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:23.568Z",
        "testRefs": [
          "[S06] M4: exclusive writer lock, readonly follower and explicit takeover",
          "[S03 S06 S07] sleeping reload is safe; follower cannot tick and no-lock tab never writes"
        ],
        "commands": [
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "S07",
        "title": "Browser tanpa Web Locks",
        "expected": "Mode sesi terisolasi dijelaskan dan tidak menulis shared persistent state",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 87
        },
        "status": "PASS",
        "observed": "PASS: [S05 S07 S08] M4: denied storage and unavailable locks use explicitly isolated session-only mode · PASS: [S03 S06 S07] sleeping reload is safe; follower cannot tick and no-lock tab never writes",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:23.568Z",
        "testRefs": [
          "[S05 S07 S08] M4: denied storage and unavailable locks use explicitly isolated session-only mode",
          "[S03 S06 S07] sleeping reload is safe; follower cannot tick and no-lock tab never writes"
        ],
        "commands": [
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "S08",
        "title": "Browser context baru",
        "expected": "Kondisi awal kembali sama, tanpa mengambil progres pengunjung lain",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 88
        },
        "status": "PASS",
        "observed": "PASS: [G01 G06 G08 S08] M1: derived JSON fixture equals runtime fixture; 64 cells, cross and access valid · PASS: [S05 S07 S08] M4: denied storage and unavailable locks use explicitly isolated session-only mode · PASS: [P12 S08 P03] review allowlist is deterministic, frozen, memory-only and rejects fixture URLs",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:23.568Z",
        "testRefs": [
          "tests/domain.test.ts: [G01 G06 G08 S08] M1: derived JSON fixture equals runtime fixture; 64 cells, cross and access valid",
          "[S05 S07 S08] M4: denied storage and unavailable locks use explicitly isolated session-only mode",
          "[P12 S08 P03] review allowlist is deterministic, frozen, memory-only and rejects fixture URLs"
        ],
        "commands": [
          "npm run test:unit",
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "S09",
        "title": "Tab hidden dan editor aktif",
        "expected": "Task mock/animasi pause; kembali tanpa offline reward atau catch-up besar",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 89
        },
        "status": "PASS",
        "observed": "PASS: [N06 E08 S09] ANIM/NAV: approach -> enter -> bed -> exit, paused motion and reservation cleanup · PASS: [C05 S09] M4: task pause in editor and hidden tab, failure/cancel have no reward",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:23.568Z",
        "testRefs": [
          "tests/domain.test.ts: [N06 E08 S09] ANIM/NAV: approach -> enter -> bed -> exit, paused motion and reservation cleanup",
          "[C05 S09] M4: task pause in editor and hidden tab, failure/cancel have no reward"
        ],
        "commands": [
          "npm run test:unit",
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "S10",
        "title": "Reset Demo",
        "expected": "Perlu konfirmasi; hanya key demo yang dihapus; data lain tidak tersentuh",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 90
        },
        "status": "PASS",
        "observed": "PASS: [S04 S10] M4: corrupted/unknown save retained, raw export offered, reset cancel then confirm scoped",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:23.568Z",
        "testRefs": [
          "[S04 S10] M4: corrupted/unknown save retained, raw export offered, reset cancel then confirm scoped"
        ],
        "commands": [
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "S11",
        "title": "Ekspor state",
        "expected": "JSON lokal valid dan tidak memuat kredensial, path server, atau data produksi",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 91
        },
        "status": "PASS",
        "observed": "PASS: [S02 S11] M4: mid-job reload keeps remaining time; export is local JSON",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:23.568Z",
        "testRefs": [
          "[S02 S11] M4: mid-job reload keeps remaining time; export is local JSON"
        ],
        "commands": [
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "R01",
        "title": "Sebelum tambah ruang",
        "expected": "Tiga + tepat pada port N/E/W; sisi S tetap entry utama",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 97
        },
        "status": "PASS",
        "observed": "PASS: [G02 G07 N12 E10 E11 R01 R02 P08] shared view state, walls, ghost cancel, keyboard and inventory lifecycle",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:23.568Z",
        "testRefs": [
          "[G02 G07 N12 E10 E11 R01 R02 P08] shared view state, walls, ghost cancel, keyboard and inventory lifecycle"
        ],
        "commands": [
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "R02",
        "title": "Ghost dan batal",
        "expected": "Ruang baru belum tersimpan; existing layout tidak bergeser",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 98
        },
        "status": "PASS",
        "observed": "PASS: [G02 G07 N12 E10 E11 R01 R02 P08] shared view state, walls, ghost cancel, keyboard and inventory lifecycle",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:23.568Z",
        "testRefs": [
          "[G02 G07 N12 E10 E11 R01 R02 P08] shared view state, walls, ghost cancel, keyboard and inventory lifecycle"
        ],
        "commands": [
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "R03",
        "title": "Tambah sisi E",
        "expected": "Origin (8,0), pintu bersama dua tile, total 128 tile tanpa overlap",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 99
        },
        "status": "PASS",
        "observed": "PASS: [N04 R03 R04 R05 R07 R08 R09] ROOM-01/02: N gives 128 cells, two open edges, stable economy, one expansion · PASS: [N04 R03 R04 R05 R07 R08 R09] ROOM-01/02: E gives 128 cells, two open edges, stable economy, one expansion · PASS: [N04 R03 R04 R05 R07 R08 R09] ROOM-01/02: W gives 128 cells, two open edges, stable economy, one expansion · PASS: [G01 N05 N09 N11 C01 C02 C03 C07 C08 C10 S01 R03 R06 R08] M1-M4: ordinary UI real-time two tasks, sofa, relax and reload · PASS: [R03 R04 R05 R06 R07 R08 R09] M5: expansion N, 128 tiles, shared doorway traversal and reload · PASS: [R03 R04 R05 R06 R07 R08 R09] M5: expansion E, 128 tiles, shared doorway traversal and reload · PASS: [R03 R04 R05 R06 R07 R08 R09] M5: expansion W, 128 tiles, shared doorway traversal and reload",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:23.568Z",
        "testRefs": [
          "tests/domain.test.ts: [N04 R03 R04 R05 R07 R08 R09] ROOM-01/02: N gives 128 cells, two open edges, stable economy, one expansion",
          "tests/domain.test.ts: [N04 R03 R04 R05 R07 R08 R09] ROOM-01/02: E gives 128 cells, two open edges, stable economy, one expansion",
          "tests/domain.test.ts: [N04 R03 R04 R05 R07 R08 R09] ROOM-01/02: W gives 128 cells, two open edges, stable economy, one expansion",
          "[G01 N05 N09 N11 C01 C02 C03 C07 C08 C10 S01 R03 R06 R08] M1-M4: ordinary UI real-time two tasks, sofa, relax and reload",
          "[R03 R04 R05 R06 R07 R08 R09] M5: expansion N, 128 tiles, shared doorway traversal and reload",
          "[R03 R04 R05 R06 R07 R08 R09] M5: expansion E, 128 tiles, shared doorway traversal and reload",
          "[R03 R04 R05 R06 R07 R08 R09] M5: expansion W, 128 tiles, shared doorway traversal and reload"
        ],
        "commands": [
          "npm run test:unit",
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "R04",
        "title": "Tambah sisi N dari seed bersih",
        "expected": "Origin (0,-8), sambungan benar dengan koordinat negatif",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 100
        },
        "status": "PASS",
        "observed": "PASS: [E04 E05 N04 N06 N11 R04 R05 R06] P1-01: N shared-wall approaches rejected from both rooms without moving avatar · PASS: [E04 E05 N04 N06 N11 R04 R05 R06] P1-01: E shared-wall approaches rejected from both rooms without moving avatar · PASS: [E04 E05 N04 N06 N11 R04 R05 R06] P1-01: W shared-wall approaches rejected from both rooms without moving avatar · PASS: [N04 R03 R04 R05 R07 R08 R09] ROOM-01/02: N gives 128 cells, two open edges, stable economy, one expansion · PASS: [N04 R03 R04 R05 R07 R08 R09] ROOM-01/02: E gives 128 cells, two open edges, stable economy, one expansion · PASS: [N04 R03 R04 R05 R07 R08 R09] ROOM-01/02: W gives 128 cells, two open edges, stable economy, one expansion · PASS: [E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI N: reject shared-wall sofa, then enter and exit valid sofa through doorway · PASS: [E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI E: reject shared-wall sofa, then enter and exit valid sofa through doorway · PASS: [E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI W: reject shared-wall sofa, then enter and exit valid sofa through doorway · PASS: [R03 R04 R05 R06 R07 R08 R09] M5: expansion N, 128 tiles, shared doorway traversal and reload · PASS: [R03 R04 R05 R06 R07 R08 R09] M5: expansion E, 128 tiles, shared doorway traversal and reload · PASS: [R03 R04 R05 R06 R07 R08 R09] M5: expansion W, 128 tiles, shared doorway traversal and reload",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:23.568Z",
        "testRefs": [
          "tests/domain.test.ts: [E04 E05 N04 N06 N11 R04 R05 R06] P1-01: N shared-wall approaches rejected from both rooms without moving avatar",
          "tests/domain.test.ts: [E04 E05 N04 N06 N11 R04 R05 R06] P1-01: E shared-wall approaches rejected from both rooms without moving avatar",
          "tests/domain.test.ts: [E04 E05 N04 N06 N11 R04 R05 R06] P1-01: W shared-wall approaches rejected from both rooms without moving avatar",
          "tests/domain.test.ts: [N04 R03 R04 R05 R07 R08 R09] ROOM-01/02: N gives 128 cells, two open edges, stable economy, one expansion",
          "tests/domain.test.ts: [N04 R03 R04 R05 R07 R08 R09] ROOM-01/02: E gives 128 cells, two open edges, stable economy, one expansion",
          "tests/domain.test.ts: [N04 R03 R04 R05 R07 R08 R09] ROOM-01/02: W gives 128 cells, two open edges, stable economy, one expansion",
          "[E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI N: reject shared-wall sofa, then enter and exit valid sofa through doorway",
          "[E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI E: reject shared-wall sofa, then enter and exit valid sofa through doorway",
          "[E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI W: reject shared-wall sofa, then enter and exit valid sofa through doorway",
          "[R03 R04 R05 R06 R07 R08 R09] M5: expansion N, 128 tiles, shared doorway traversal and reload",
          "[R03 R04 R05 R06 R07 R08 R09] M5: expansion E, 128 tiles, shared doorway traversal and reload",
          "[R03 R04 R05 R06 R07 R08 R09] M5: expansion W, 128 tiles, shared doorway traversal and reload"
        ],
        "commands": [
          "npm run test:unit",
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "R05",
        "title": "Tambah sisi W dari seed bersih",
        "expected": "Origin (-8,0), sambungan benar dengan koordinat negatif",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 101
        },
        "status": "PASS",
        "observed": "PASS: [E04 E05 N04 N06 N11 R04 R05 R06] P1-01: N shared-wall approaches rejected from both rooms without moving avatar · PASS: [E04 E05 N04 N06 N11 R04 R05 R06] P1-01: E shared-wall approaches rejected from both rooms without moving avatar · PASS: [E04 E05 N04 N06 N11 R04 R05 R06] P1-01: W shared-wall approaches rejected from both rooms without moving avatar · PASS: [N04 R03 R04 R05 R07 R08 R09] ROOM-01/02: N gives 128 cells, two open edges, stable economy, one expansion · PASS: [N04 R03 R04 R05 R07 R08 R09] ROOM-01/02: E gives 128 cells, two open edges, stable economy, one expansion · PASS: [N04 R03 R04 R05 R07 R08 R09] ROOM-01/02: W gives 128 cells, two open edges, stable economy, one expansion · PASS: [E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI N: reject shared-wall sofa, then enter and exit valid sofa through doorway · PASS: [E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI E: reject shared-wall sofa, then enter and exit valid sofa through doorway · PASS: [E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI W: reject shared-wall sofa, then enter and exit valid sofa through doorway · PASS: [R03 R04 R05 R06 R07 R08 R09] M5: expansion N, 128 tiles, shared doorway traversal and reload · PASS: [R03 R04 R05 R06 R07 R08 R09] M5: expansion E, 128 tiles, shared doorway traversal and reload · PASS: [R03 R04 R05 R06 R07 R08 R09] M5: expansion W, 128 tiles, shared doorway traversal and reload",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:23.568Z",
        "testRefs": [
          "tests/domain.test.ts: [E04 E05 N04 N06 N11 R04 R05 R06] P1-01: N shared-wall approaches rejected from both rooms without moving avatar",
          "tests/domain.test.ts: [E04 E05 N04 N06 N11 R04 R05 R06] P1-01: E shared-wall approaches rejected from both rooms without moving avatar",
          "tests/domain.test.ts: [E04 E05 N04 N06 N11 R04 R05 R06] P1-01: W shared-wall approaches rejected from both rooms without moving avatar",
          "tests/domain.test.ts: [N04 R03 R04 R05 R07 R08 R09] ROOM-01/02: N gives 128 cells, two open edges, stable economy, one expansion",
          "tests/domain.test.ts: [N04 R03 R04 R05 R07 R08 R09] ROOM-01/02: E gives 128 cells, two open edges, stable economy, one expansion",
          "tests/domain.test.ts: [N04 R03 R04 R05 R07 R08 R09] ROOM-01/02: W gives 128 cells, two open edges, stable economy, one expansion",
          "[E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI N: reject shared-wall sofa, then enter and exit valid sofa through doorway",
          "[E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI E: reject shared-wall sofa, then enter and exit valid sofa through doorway",
          "[E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI W: reject shared-wall sofa, then enter and exit valid sofa through doorway",
          "[R03 R04 R05 R06 R07 R08 R09] M5: expansion N, 128 tiles, shared doorway traversal and reload",
          "[R03 R04 R05 R06 R07 R08 R09] M5: expansion E, 128 tiles, shared doorway traversal and reload",
          "[R03 R04 R05 R06 R07 R08 R09] M5: expansion W, 128 tiles, shared doorway traversal and reload"
        ],
        "commands": [
          "npm run test:unit",
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "R06",
        "title": "Berjalan antarroom",
        "expected": "Melewati doorway secara kontinu, tidak menembus shared wall lain",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 102
        },
        "status": "PASS",
        "observed": "PASS: [E04 E05 N04 N06 N11 R04 R05 R06] P1-01: N shared-wall approaches rejected from both rooms without moving avatar · PASS: [G04 E05 N04 N11 R06 R08] P1-01: N expansion keeps both sofa seats and four rotations usable through the doorway · PASS: [E04 E05 N04 N06 N11 R04 R05 R06] P1-01: E shared-wall approaches rejected from both rooms without moving avatar · PASS: [G04 E05 N04 N11 R06 R08] P1-01: E expansion keeps both sofa seats and four rotations usable through the doorway · PASS: [E04 E05 N04 N06 N11 R04 R05 R06] P1-01: W shared-wall approaches rejected from both rooms without moving avatar · PASS: [G04 E05 N04 N11 R06 R08] P1-01: W expansion keeps both sofa seats and four rotations usable through the doorway · PASS: [S04 S05 R06] P1-01: old cross-wall save enters recovery and preserves raw data without writes or deletion · PASS: [N04 R06] all connected-room journeys cross only the doorway with bounded continuous motion · PASS: [E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI N: reject shared-wall sofa, then enter and exit valid sofa through doorway · PASS: [E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI E: reject shared-wall sofa, then enter and exit valid sofa through doorway · PASS: [E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI W: reject shared-wall sofa, then enter and exit valid sofa through doorway · PASS: [S04 S05 R06] P1-01 UI: invalid legacy cross-wall save preserves raw export and disables writes · PASS: [G01 N05 N09 N11 C01 C02 C03 C07 C08 C10 S01 R03 R06 R08] M1-M4: ordinary UI real-time two tasks, sofa, relax and reload · PASS: [R03 R04 R05 R06 R07 R08 R09] M5: expansion N, 128 tiles, shared doorway traversal and reload · PASS: [R03 R04 R05 R06 R07 R08 R09] M5: expansion E, 128 tiles, shared doorway traversal and reload · PASS: [R03 R04 R05 R06 R07 R08 R09] M5: expansion W, 128 tiles, shared doorway traversal and reload",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:23.568Z",
        "testRefs": [
          "tests/domain.test.ts: [E04 E05 N04 N06 N11 R04 R05 R06] P1-01: N shared-wall approaches rejected from both rooms without moving avatar",
          "tests/domain.test.ts: [G04 E05 N04 N11 R06 R08] P1-01: N expansion keeps both sofa seats and four rotations usable through the doorway",
          "tests/domain.test.ts: [E04 E05 N04 N06 N11 R04 R05 R06] P1-01: E shared-wall approaches rejected from both rooms without moving avatar",
          "tests/domain.test.ts: [G04 E05 N04 N11 R06 R08] P1-01: E expansion keeps both sofa seats and four rotations usable through the doorway",
          "tests/domain.test.ts: [E04 E05 N04 N06 N11 R04 R05 R06] P1-01: W shared-wall approaches rejected from both rooms without moving avatar",
          "tests/domain.test.ts: [G04 E05 N04 N11 R06 R08] P1-01: W expansion keeps both sofa seats and four rotations usable through the doorway",
          "tests/domain.test.ts: [S04 S05 R06] P1-01: old cross-wall save enters recovery and preserves raw data without writes or deletion",
          "tests/domain.test.ts: [N04 R06] all connected-room journeys cross only the doorway with bounded continuous motion",
          "[E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI N: reject shared-wall sofa, then enter and exit valid sofa through doorway",
          "[E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI E: reject shared-wall sofa, then enter and exit valid sofa through doorway",
          "[E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI W: reject shared-wall sofa, then enter and exit valid sofa through doorway",
          "[S04 S05 R06] P1-01 UI: invalid legacy cross-wall save preserves raw export and disables writes",
          "[G01 N05 N09 N11 C01 C02 C03 C07 C08 C10 S01 R03 R06 R08] M1-M4: ordinary UI real-time two tasks, sofa, relax and reload",
          "[R03 R04 R05 R06 R07 R08 R09] M5: expansion N, 128 tiles, shared doorway traversal and reload",
          "[R03 R04 R05 R06 R07 R08 R09] M5: expansion E, 128 tiles, shared doorway traversal and reload",
          "[R03 R04 R05 R06 R07 R08 R09] M5: expansion W, 128 tiles, shared doorway traversal and reload"
        ],
        "commands": [
          "npm run test:unit",
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "R07",
        "title": "Sesudah satu ekspansi",
        "expected": "Tambahan kedua dinonaktifkan sesuai scope, tidak membuat room tanpa batas",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 103
        },
        "status": "PASS",
        "observed": "PASS: [N04 R03 R04 R05 R07 R08 R09] ROOM-01/02: N gives 128 cells, two open edges, stable economy, one expansion · PASS: [N04 R03 R04 R05 R07 R08 R09] ROOM-01/02: E gives 128 cells, two open edges, stable economy, one expansion · PASS: [N04 R03 R04 R05 R07 R08 R09] ROOM-01/02: W gives 128 cells, two open edges, stable economy, one expansion · PASS: [R03 R04 R05 R06 R07 R08 R09] M5: expansion N, 128 tiles, shared doorway traversal and reload · PASS: [R03 R04 R05 R06 R07 R08 R09] M5: expansion E, 128 tiles, shared doorway traversal and reload · PASS: [R03 R04 R05 R06 R07 R08 R09] M5: expansion W, 128 tiles, shared doorway traversal and reload",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:23.568Z",
        "testRefs": [
          "tests/domain.test.ts: [N04 R03 R04 R05 R07 R08 R09] ROOM-01/02: N gives 128 cells, two open edges, stable economy, one expansion",
          "tests/domain.test.ts: [N04 R03 R04 R05 R07 R08 R09] ROOM-01/02: E gives 128 cells, two open edges, stable economy, one expansion",
          "tests/domain.test.ts: [N04 R03 R04 R05 R07 R08 R09] ROOM-01/02: W gives 128 cells, two open edges, stable economy, one expansion",
          "[R03 R04 R05 R06 R07 R08 R09] M5: expansion N, 128 tiles, shared doorway traversal and reload",
          "[R03 R04 R05 R06 R07 R08 R09] M5: expansion E, 128 tiles, shared doorway traversal and reload",
          "[R03 R04 R05 R06 R07 R08 R09] M5: expansion W, 128 tiles, shared doorway traversal and reload"
        ],
        "commands": [
          "npm run test:unit",
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "R08",
        "title": "Reload room gabungan",
        "expected": "Door pair dan connectionId pulih; old room/furnitur tidak pindah",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 104
        },
        "status": "PASS",
        "observed": "PASS: [G04 E05 N04 N11 R06 R08] P1-01: N expansion keeps both sofa seats and four rotations usable through the doorway · PASS: [G04 E05 N04 N11 R06 R08] P1-01: E expansion keeps both sofa seats and four rotations usable through the doorway · PASS: [G04 E05 N04 N11 R06 R08] P1-01: W expansion keeps both sofa seats and four rotations usable through the doorway · PASS: [N04 R03 R04 R05 R07 R08 R09] ROOM-01/02: N gives 128 cells, two open edges, stable economy, one expansion · PASS: [N04 R03 R04 R05 R07 R08 R09] ROOM-01/02: E gives 128 cells, two open edges, stable economy, one expansion · PASS: [N04 R03 R04 R05 R07 R08 R09] ROOM-01/02: W gives 128 cells, two open edges, stable economy, one expansion · PASS: [E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI N: reject shared-wall sofa, then enter and exit valid sofa through doorway · PASS: [E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI E: reject shared-wall sofa, then enter and exit valid sofa through doorway · PASS: [E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI W: reject shared-wall sofa, then enter and exit valid sofa through doorway · PASS: [G01 N05 N09 N11 C01 C02 C03 C07 C08 C10 S01 R03 R06 R08] M1-M4: ordinary UI real-time two tasks, sofa, relax and reload · PASS: [R03 R04 R05 R06 R07 R08 R09] M5: expansion N, 128 tiles, shared doorway traversal and reload · PASS: [R03 R04 R05 R06 R07 R08 R09] M5: expansion E, 128 tiles, shared doorway traversal and reload · PASS: [R03 R04 R05 R06 R07 R08 R09] M5: expansion W, 128 tiles, shared doorway traversal and reload",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:23.568Z",
        "testRefs": [
          "tests/domain.test.ts: [G04 E05 N04 N11 R06 R08] P1-01: N expansion keeps both sofa seats and four rotations usable through the doorway",
          "tests/domain.test.ts: [G04 E05 N04 N11 R06 R08] P1-01: E expansion keeps both sofa seats and four rotations usable through the doorway",
          "tests/domain.test.ts: [G04 E05 N04 N11 R06 R08] P1-01: W expansion keeps both sofa seats and four rotations usable through the doorway",
          "tests/domain.test.ts: [N04 R03 R04 R05 R07 R08 R09] ROOM-01/02: N gives 128 cells, two open edges, stable economy, one expansion",
          "tests/domain.test.ts: [N04 R03 R04 R05 R07 R08 R09] ROOM-01/02: E gives 128 cells, two open edges, stable economy, one expansion",
          "tests/domain.test.ts: [N04 R03 R04 R05 R07 R08 R09] ROOM-01/02: W gives 128 cells, two open edges, stable economy, one expansion",
          "[E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI N: reject shared-wall sofa, then enter and exit valid sofa through doorway",
          "[E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI E: reject shared-wall sofa, then enter and exit valid sofa through doorway",
          "[E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI W: reject shared-wall sofa, then enter and exit valid sofa through doorway",
          "[G01 N05 N09 N11 C01 C02 C03 C07 C08 C10 S01 R03 R06 R08] M1-M4: ordinary UI real-time two tasks, sofa, relax and reload",
          "[R03 R04 R05 R06 R07 R08 R09] M5: expansion N, 128 tiles, shared doorway traversal and reload",
          "[R03 R04 R05 R06 R07 R08 R09] M5: expansion E, 128 tiles, shared doorway traversal and reload",
          "[R03 R04 R05 R06 R07 R08 R09] M5: expansion W, 128 tiles, shared doorway traversal and reload"
        ],
        "commands": [
          "npm run test:unit",
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "R09",
        "title": "Batas dan ukuran",
        "expected": "Tile scale tetap; Fit All hanya mengubah kamera; tidak ada perubahan kavling",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 105
        },
        "status": "PASS",
        "observed": "PASS: [N04 R03 R04 R05 R07 R08 R09] ROOM-01/02: N gives 128 cells, two open edges, stable economy, one expansion · PASS: [N04 R03 R04 R05 R07 R08 R09] ROOM-01/02: E gives 128 cells, two open edges, stable economy, one expansion · PASS: [N04 R03 R04 R05 R07 R08 R09] ROOM-01/02: W gives 128 cells, two open edges, stable economy, one expansion · PASS: [R03 R04 R05 R06 R07 R08 R09] M5: expansion N, 128 tiles, shared doorway traversal and reload · PASS: [R03 R04 R05 R06 R07 R08 R09] M5: expansion E, 128 tiles, shared doorway traversal and reload · PASS: [R03 R04 R05 R06 R07 R08 R09] M5: expansion W, 128 tiles, shared doorway traversal and reload",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:23.568Z",
        "testRefs": [
          "tests/domain.test.ts: [N04 R03 R04 R05 R07 R08 R09] ROOM-01/02: N gives 128 cells, two open edges, stable economy, one expansion",
          "tests/domain.test.ts: [N04 R03 R04 R05 R07 R08 R09] ROOM-01/02: E gives 128 cells, two open edges, stable economy, one expansion",
          "tests/domain.test.ts: [N04 R03 R04 R05 R07 R08 R09] ROOM-01/02: W gives 128 cells, two open edges, stable economy, one expansion",
          "[R03 R04 R05 R06 R07 R08 R09] M5: expansion N, 128 tiles, shared doorway traversal and reload",
          "[R03 R04 R05 R06 R07 R08 R09] M5: expansion E, 128 tiles, shared doorway traversal and reload",
          "[R03 R04 R05 R06 R07 R08 R09] M5: expansion W, 128 tiles, shared doorway traversal and reload"
        ],
        "commands": [
          "npm run test:unit",
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "P01",
        "title": "Browser publik anonim",
        "expected": "App/review/JSON/gambar dapat dibuka langsung tanpa login atau cookie",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 111
        },
        "status": "PASS",
        "observed": "PASS: [P01 P05 P10] HTTPS anonymous app + build ID + headers · PASS: [P01 P05] Published JS executes, real-time task rewarded once, no page errors or off-origin requests · PASS: [P01] Default Python-urllib anonymous reader · PASS: Independent host actual GET/status/content-type for all artifacts",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:42:43Z",
        "testRefs": [
          "[P01 P05 P10] HTTPS anonymous app + build ID + headers",
          "[P01 P05] Published JS executes, real-time task rewarded once, no page errors or off-origin requests",
          "[P01] Default Python-urllib anonymous reader",
          "External HTTPS probe"
        ],
        "commands": [
          "npm run qa:public",
          "python3 tools/external-probe.py BUILD_ID live"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "P02",
        "title": "Review tanpa JavaScript",
        "expected": "Build ID, hasil tes, known issues, caption, dan link tetap terbaca",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 112
        },
        "status": "PASS",
        "observed": "PASS: [P02] Review readable with JavaScript disabled · PASS: Static review without JS includes 77 cases, canonical state, build and image checksums",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:43:01.032Z",
        "testRefs": [
          "[P02] Review readable with JavaScript disabled",
          "Static review without JS includes 77 cases, canonical state, build and image checksums"
        ],
        "commands": [
          "npm run qa:public",
          "node tools/review-checks.mjs"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "P03",
        "title": "Konsistensi build",
        "expected": "App, manifest, screenshot, dan laporan menyebut build yang sama",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 113
        },
        "status": "PASS",
        "observed": "PASS: [P12 S08 P03] review allowlist is deterministic, frozen, memory-only and rejects fixture URLs · PASS: [P03 P10] Review manifest, summary and every screenshot agree with published build · PASS: Static review without JS includes 77 cases, canonical state, build and image checksums",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:43:01.032Z",
        "testRefs": [
          "[P12 S08 P03] review allowlist is deterministic, frozen, memory-only and rejects fixture URLs",
          "[P03 P10] Review manifest, summary and every screenshot agree with published build",
          "Static review without JS includes 77 cases, canonical state, build and image checksums"
        ],
        "commands": [
          "npm run test:e2e",
          "npm run qa:public",
          "node tools/review-checks.mjs"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "P04",
        "title": "Scan output publik",
        "expected": "Tidak ada .env, repo, private source map, raw trace, log, atau PII",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 114
        },
        "status": "PASS",
        "observed": "PASS: [P04] Private routes and internal artifacts return 404 · PASS: [P04] Mutating HTTP methods rejected · PASS: [P04 P05] Synthetic cookie never reflected/consumed or changes static app · PASS: Public allowlist and sensitive artifact scan",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:43:01.032Z",
        "testRefs": [
          "[P04] Private routes and internal artifacts return 404",
          "[P04] Mutating HTTP methods rejected",
          "[P04 P05] Synthetic cookie never reflected/consumed or changes static app",
          "Public allowlist and sensitive artifact scan"
        ],
        "commands": [
          "npm run qa:public",
          "node tools/review-checks.mjs"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "P05",
        "title": "CSP dan request jaringan",
        "expected": "App bekerja dengan policy yang disetujui; tidak mengakses host/API privat",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 115
        },
        "status": "PASS",
        "observed": "PASS: [P01 P05 P10] HTTPS anonymous app + build ID + headers · PASS: [P04 P05] Synthetic cookie never reflected/consumed or changes static app · PASS: [P01 P05] Published JS executes, real-time task rewarded once, no page errors or off-origin requests",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:41:53.303Z",
        "testRefs": [
          "[P01 P05 P10] HTTPS anonymous app + build ID + headers",
          "[P04 P05] Synthetic cookie never reflected/consumed or changes static app",
          "[P01 P05] Published JS executes, real-time task rewarded once, no page errors or off-origin requests"
        ],
        "commands": [
          "npm run qa:public"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "P06",
        "title": "Base path",
        "expected": "Assets dan review bekerja di path selain root; direct link tidak 404",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 116
        },
        "status": "PASS",
        "observed": "PASS: Actual nested base path: app assets, review and direct evidence links",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:43:01.032Z",
        "testRefs": [
          "Actual nested base path: app assets, review and direct evidence links"
        ],
        "commands": [
          "node tools/review-checks.mjs"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "P07",
        "title": "Viewport utama dan kecil",
        "expected": "1440x900/1366x768 dapat diedit; 390x844 tetap dapat membaca/mencoba kontrol dasar",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 117
        },
        "status": "PASS",
        "observed": "PASS: [P07] UI-03: viewport 1366x768, usable controls and no horizontal overflow · PASS: [P07] UI-03: viewport 1920x1080, usable controls and no horizontal overflow · PASS: [P07] UI-03: viewport 1024x768, usable controls and no horizontal overflow · PASS: [P07] UI-03: viewport 390x844, usable controls and no horizontal overflow · PASS: Desktop 1440x900 and 1366x768: actual inspector edit and commit",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:43:01.032Z",
        "testRefs": [
          "[P07] UI-03: viewport 1366x768, usable controls and no horizontal overflow",
          "[P07] UI-03: viewport 1920x1080, usable controls and no horizontal overflow",
          "[P07] UI-03: viewport 1024x768, usable controls and no horizontal overflow",
          "[P07] UI-03: viewport 390x844, usable controls and no horizontal overflow",
          "Desktop 1440x900 and 1366x768: actual inspector edit and commit"
        ],
        "commands": [
          "npm run test:e2e",
          "node tools/review-checks.mjs"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "P08",
        "title": "Keyboard dan reduced motion",
        "expected": "Fokus terlihat, Escape bekerja, status tersedia sebagai teks, gerak nonesensial dapat dikurangi",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 118
        },
        "status": "PASS",
        "observed": "PASS: [E01 E02 E03 E06 E07 E09 P08] M3: invalid placement, rotation/cancel, wall reserve, undo/redo and expansion checkpoint · PASS: [G02 G07 N12 E10 E11 R01 R02 P08] shared view state, walls, ghost cancel, keyboard and inventory lifecycle",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:23.568Z",
        "testRefs": [
          "[E01 E02 E03 E06 E07 E09 P08] M3: invalid placement, rotation/cancel, wall reserve, undo/redo and expansion checkpoint",
          "[G02 G07 N12 E10 E11 R01 R02 P08] shared view state, walls, ghost cancel, keyboard and inventory lifecycle"
        ],
        "commands": [
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "P09",
        "title": "Tes 60 detik",
        "expected": "Perangkat/browser/viewport tercatat; FPS/frame time aktual atau NOT_MEASURED",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 119
        },
        "status": "PASS",
        "observed": "PASS: [P09 C01 C02 C07 S02] Idle TICK preserves state identity and still rejects invalid elapsed time · PASS: [P09 S01 S05 E03 E05] Idle checkpoints avoid duplicate writes; changed tasks and drafts still persist and revalidate · PASS: [P09] 60 seconds each: walking, interactions, editor, connected rooms; actual frame profile · PASS: walking: 37.8 FPS, p95 49.9ms; interactions: 34.8 FPS, p95 50.0ms; editor: 35.2 FPS, p95 50.0ms; two-rooms: 36.7 FPS, p95 50.0ms",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:37:39.447Z",
        "testRefs": [
          "tests/domain.test.ts: [P09 C01 C02 C07 S02] Idle TICK preserves state identity and still rejects invalid elapsed time",
          "[P09 S01 S05 E03 E05] Idle checkpoints avoid duplicate writes; changed tasks and drafts still persist and revalidate",
          "[P09] 60 seconds each: walking, interactions, editor, connected rooms; actual frame profile",
          "Four >=60s frame profiles; user device NOT_MEASURED"
        ],
        "commands": [
          "npm run test:unit",
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "P10",
        "title": "Cache release",
        "expected": "Refresh tidak mencampur JS/build baru dengan manifest lama",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 120
        },
        "status": "PASS",
        "observed": "PASS: [P01 P05 P10] HTTPS anonymous app + build ID + headers · PASS: [P03 P10] Review manifest, summary and every screenshot agree with published build",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:41:53.303Z",
        "testRefs": [
          "[P01 P05 P10] HTTPS anonymous app + build ID + headers",
          "[P03 P10] Review manifest, summary and every screenshot agree with published build"
        ],
        "commands": [
          "npm run qa:public"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "P11",
        "title": "Expiry dan rollback",
        "expected": "Mekanisme aktual terdokumentasi; tidak mematikan panel produksi",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 121
        },
        "status": "PASS",
        "observed": "PASS: Actual preview rollback and restore; production gate preserved",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:42:43.244639+00:00",
        "testRefs": [
          "Preview rollback receipt"
        ],
        "commands": [
          "python3 tools/deploy.py rollback BUILD_ID; external HTTPS probes"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      },
      {
        "id": "P12",
        "title": "Review scenario isolation",
        "expected": "Query review tidak menimpa save pengunjung dan tidak memuat fixture URL arbitrer",
        "source": {
          "path": "ACCEPTANCE_TESTS.md",
          "line": 122
        },
        "status": "PASS",
        "observed": "PASS: [P12 S08 P03] review allowlist is deterministic, frozen, memory-only and rejects fixture URLs",
        "buildId": "px-54c6825277ed",
        "testedAt": "2026-09-06T13:28:23.568Z",
        "testRefs": [
          "[P12 S08 P03] review allowlist is deterministic, frozen, memory-only and rejects fixture URLs"
        ],
        "commands": [
          "npm run test:e2e"
        ],
        "evidence": [
          "manifest.json"
        ],
        "blocker": null
      }
    ],
    "buildId": "px-54c6825277ed",
    "generatedAt": "2026-09-06T13:45:02.593Z",
    "counts": {
      "PASS": 77,
      "FAIL": 0,
      "BLOCKED": 0,
      "NOT_RUN": 0
    }
  },
  "packageChecks": {
    "buildId": "px-54c6825277ed",
    "testedAt": "2026-09-06T13:28:22.038215+00:00",
    "status": "PASS",
    "scope": "Package and fixture only; not application or deployment acceptance.",
    "checks": [
      {
        "command": "python3 tools/verify_package.py",
        "cwd": "unmodified handoff package root",
        "status": "PASS",
        "output": "PACKAGE PASS: all payload files, sizes, and SHA-256 checks match.\nPayload files: 20; control files: 2.\nRecovery files: 5/5 present; original source copies: 10/10 preserved.\nCoverage template: 77 cases, all NOT_RUN.\nThis checks the handoff only, not the browser app or deployment."
      },
      {
        "command": "python3 tools/validate_seed.py",
        "cwd": "unmodified handoff package root",
        "status": "PASS",
        "output": "SEED VALIDATION ONLY. The browser app and public deployment have not been tested here.\nSEED PASS: 64 unique initial tiles and 28 reserved transit tiles\nSEED PASS: Starter workstation and bed are in bounds without overlap\nSEED PASS: Whiteboard occupies 2x2 wall slots without blocking any port\nSEED PASS: Entry, transit, workstation, bed, and board approaches are reachable\nSEED PASS: Four rotations restore every floor mask and continuous use anchor\nSEED PASS: Suggested sofa fits and both seat approaches remain reachable\nSEED PASS: Expansion N: 128 unique tiles; two-cell doorway opens only intended edges\nSEED PASS: Expansion E: 128 unique tiles; two-cell doorway opens only intended edges\nSEED PASS: Expansion W: 128 unique tiles; two-cell doorway opens only intended edges\nSEED PASS: Fixture economy: two rewards minus one sofa = 50 coins and 40 XP\nTotal fixture checks: 10 passed."
      }
    ]
  },
  "checks": {
    "buildId": "px-54c6825277ed",
    "unitTests": 38,
    "unitCases": [
      {
        "name": "[P09 C01 C02 C07 S02] Idle TICK preserves state identity and still rejects invalid elapsed time",
        "status": "PASS",
        "testedAt": "2026-09-06T13:28:20.939Z"
      },
      {
        "name": "[E04 E05 N04 N06 N11 R04 R05 R06] P1-01: N shared-wall approaches rejected from both rooms without moving avatar",
        "status": "PASS",
        "testedAt": "2026-09-06T13:28:20.939Z"
      },
      {
        "name": "[G04 E05 N04 N11 R06 R08] P1-01: N expansion keeps both sofa seats and four rotations usable through the doorway",
        "status": "PASS",
        "testedAt": "2026-09-06T13:28:20.939Z"
      },
      {
        "name": "[E04 E05 N04 N06 N11 R04 R05 R06] P1-01: E shared-wall approaches rejected from both rooms without moving avatar",
        "status": "PASS",
        "testedAt": "2026-09-06T13:28:20.939Z"
      },
      {
        "name": "[G04 E05 N04 N11 R06 R08] P1-01: E expansion keeps both sofa seats and four rotations usable through the doorway",
        "status": "PASS",
        "testedAt": "2026-09-06T13:28:20.939Z"
      },
      {
        "name": "[E04 E05 N04 N06 N11 R04 R05 R06] P1-01: W shared-wall approaches rejected from both rooms without moving avatar",
        "status": "PASS",
        "testedAt": "2026-09-06T13:28:20.939Z"
      },
      {
        "name": "[G04 E05 N04 N11 R06 R08] P1-01: W expansion keeps both sofa seats and four rotations usable through the doorway",
        "status": "PASS",
        "testedAt": "2026-09-06T13:28:20.939Z"
      },
      {
        "name": "[S04 S05 R06] P1-01: old cross-wall save enters recovery and preserves raw data without writes or deletion",
        "status": "PASS",
        "testedAt": "2026-09-06T13:28:20.939Z"
      },
      {
        "name": "[G03] GEO-01: known projection, inverse, negative coordinates and height",
        "status": "PASS",
        "testedAt": "2026-09-06T13:28:20.939Z"
      },
      {
        "name": "[G04] GEO-03: four cell/continuous rotations preserve anchors outside footprint",
        "status": "PASS",
        "testedAt": "2026-09-06T13:28:20.939Z"
      },
      {
        "name": "[G01 G06 G08 S08] M1: derived JSON fixture equals runtime fixture; 64 cells, cross and access valid",
        "status": "PASS",
        "testedAt": "2026-09-06T13:28:20.939Z"
      },
      {
        "name": "[N01 N02 N03 G07] NAV-01: paths respect objects, floor, cardinal edges and unreachable targets",
        "status": "PASS",
        "testedAt": "2026-09-06T13:28:20.939Z"
      },
      {
        "name": "[N04] NAV-01: adjacent room tiles remain separated without a connection",
        "status": "PASS",
        "testedAt": "2026-09-06T13:28:20.939Z"
      },
      {
        "name": "[N04 R03 R04 R05 R07 R08 R09] ROOM-01/02: N gives 128 cells, two open edges, stable economy, one expansion",
        "status": "PASS",
        "testedAt": "2026-09-06T13:28:20.939Z"
      },
      {
        "name": "[N04 R03 R04 R05 R07 R08 R09] ROOM-01/02: E gives 128 cells, two open edges, stable economy, one expansion",
        "status": "PASS",
        "testedAt": "2026-09-06T13:28:20.939Z"
      },
      {
        "name": "[N04 R03 R04 R05 R07 R08 R09] ROOM-01/02: W gives 128 cells, two open edges, stable economy, one expansion",
        "status": "PASS",
        "testedAt": "2026-09-06T13:28:20.939Z"
      },
      {
        "name": "[E02 E03 E04] EDIT-01: invalid drafts do not mutate saved objects; transit and bounds protected",
        "status": "PASS",
        "testedAt": "2026-09-06T13:28:20.939Z"
      },
      {
        "name": "[E04 E05] EDIT-01: overlap, blocked approach and avatar trap rejected",
        "status": "PASS",
        "testedAt": "2026-09-06T13:28:20.939Z"
      },
      {
        "name": "[E06 E07 G05 G06] EDIT-01: wall coordinates, doorway reserve, world orientations and approach",
        "status": "PASS",
        "testedAt": "2026-09-06T13:28:20.939Z"
      },
      {
        "name": "[E11] EDIT-02: starter deletion, duplicate sofa and ownership are domain protected",
        "status": "PASS",
        "testedAt": "2026-09-06T13:28:20.939Z"
      },
      {
        "name": "[E09 E10] EDIT-02: undo/redo affects layout only; cancelling/storing sofa preserves ownership",
        "status": "PASS",
        "testedAt": "2026-09-06T13:28:20.939Z"
      },
      {
        "name": "[C03 C04 C07 C08] ECON-01/02: two accepts -> purchase -> 50 coins / 40 XP, exact idempotency",
        "status": "PASS",
        "testedAt": "2026-09-06T13:28:20.939Z"
      },
      {
        "name": "[C05 C06] ECON-01: failure, cancel, early acceptance and insufficient balance never reward",
        "status": "PASS",
        "testedAt": "2026-09-06T13:28:20.939Z"
      },
      {
        "name": "[C09] ECON-02: only one running job; repeated job IDs do not restart; invalid delta rejected",
        "status": "PASS",
        "testedAt": "2026-09-06T13:28:20.939Z"
      },
      {
        "name": "[S02] SAVE-01: reload retains remaining active time and never gives offline rewards",
        "status": "PASS",
        "testedAt": "2026-09-06T13:28:20.939Z"
      },
      {
        "name": "[S04] SAVE-01: malformed, future schema, invalid layout, duplicate ledger and money drift rejected",
        "status": "PASS",
        "testedAt": "2026-09-06T13:28:20.939Z"
      },
      {
        "name": "[S03] SAVE-01: reload recovers avatar from furniture to a valid exit",
        "status": "PASS",
        "testedAt": "2026-09-06T13:28:20.939Z"
      },
      {
        "name": "[S05] SAVE-01: storage write failure is session-only, never reported persisted",
        "status": "PASS",
        "testedAt": "2026-09-06T13:28:20.939Z"
      },
      {
        "name": "[N06 E08 S09] ANIM/NAV: approach -> enter -> bed -> exit, paused motion and reservation cleanup",
        "status": "PASS",
        "testedAt": "2026-09-06T13:28:20.939Z"
      },
      {
        "name": "[N09] ANIM: new task visually exits sofa before walking, idle activity cooldown",
        "status": "PASS",
        "testedAt": "2026-09-06T13:28:20.939Z"
      },
      {
        "name": "[S02 S03] SAVE/NAV: normal walking saves actual position, interaction saves safe exit",
        "status": "PASS",
        "testedAt": "2026-09-06T13:28:20.939Z"
      },
      {
        "name": "[E08 G04] NAV/EDIT: blocked exit rejects editor; four sofa rotations expose reachable slots",
        "status": "PASS",
        "testedAt": "2026-09-06T13:28:20.939Z"
      },
      {
        "name": "[G04 G08] official asset contract: masks, both seats, continuous anchors and facings at all rotations",
        "status": "PASS",
        "testedAt": "2026-09-06T13:28:20.939Z"
      },
      {
        "name": "[G03 G05] actual renderer camera round-trip and wall coordinates with pan/zoom",
        "status": "PASS",
        "testedAt": "2026-09-06T13:28:20.939Z"
      },
      {
        "name": "[N01 N02 N03 N08] redirected walking keeps cardinal collision-free steps and clears reservation",
        "status": "PASS",
        "testedAt": "2026-09-06T13:28:20.939Z"
      },
      {
        "name": "[N05 N06 N07 N11 S03] use heights, safe exits, board facing and complete sofa cooldown",
        "status": "PASS",
        "testedAt": "2026-09-06T13:28:20.939Z"
      },
      {
        "name": "[E05 C01 C02] blocking required approach has specific cause; success does not award before accept",
        "status": "PASS",
        "testedAt": "2026-09-06T13:28:20.939Z"
      },
      {
        "name": "[N04 R06] all connected-room journeys cross only the doorway with bounded continuous motion",
        "status": "PASS",
        "testedAt": "2026-09-06T13:28:20.939Z"
      }
    ],
    "commands": [
      {
        "command": "python3 tools/validate_seed.py",
        "startedAt": "2026-09-06T13:28:19.630Z",
        "status": "PASS",
        "exitCode": 0
      },
      {
        "command": "npm run lint",
        "startedAt": "2026-09-06T13:28:19.696Z",
        "status": "PASS",
        "exitCode": 0
      },
      {
        "command": "npm run typecheck",
        "startedAt": "2026-09-06T13:28:20.159Z",
        "status": "PASS",
        "exitCode": 0
      },
      {
        "command": "npm run test:unit",
        "startedAt": "2026-09-06T13:28:20.939Z",
        "status": "PASS",
        "exitCode": 0
      }
    ]
  },
  "e2e": {
    "command": "npm run test:e2e",
    "startedAt": "2026-09-06T13:28:23.568Z",
    "durationMs": 557174.172,
    "total": 29,
    "passed": 29,
    "failed": 0,
    "initialSuite": {
      "passed": 29,
      "failed": 0,
      "cases": [
        {
          "name": "[P09 S01 S05 E03 E05] Idle checkpoints avoid duplicate writes; changed tasks and drafts still persist and revalidate",
          "status": "PASS",
          "durationMs": 4904
        },
        {
          "name": "[E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI N: reject shared-wall sofa, then enter and exit valid sofa through doorway",
          "status": "PASS",
          "durationMs": 32720
        },
        {
          "name": "[E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI E: reject shared-wall sofa, then enter and exit valid sofa through doorway",
          "status": "PASS",
          "durationMs": 36486
        },
        {
          "name": "[E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI W: reject shared-wall sofa, then enter and exit valid sofa through doorway",
          "status": "PASS",
          "durationMs": 35345
        },
        {
          "name": "[S04 S05 R06] P1-01 UI: invalid legacy cross-wall save preserves raw export and disables writes",
          "status": "PASS",
          "durationMs": 2016
        },
        {
          "name": "[G01 N05 N09 N11 C01 C02 C03 C07 C08 C10 S01 R03 R06 R08] M1-M4: ordinary UI real-time two tasks, sofa, relax and reload",
          "status": "PASS",
          "durationMs": 44105
        },
        {
          "name": "[N01 N03 N06 N07 E08] M2: bed and board interactions, collision rejection, keyboard walk and editor exit",
          "status": "PASS",
          "durationMs": 17275
        },
        {
          "name": "[E01 E02 E03 E06 E07 E09 P08] M3: invalid placement, rotation/cancel, wall reserve, undo/redo and expansion checkpoint",
          "status": "PASS",
          "durationMs": 5768
        },
        {
          "name": "[R03 R04 R05 R06 R07 R08 R09] M5: expansion N, 128 tiles, shared doorway traversal and reload",
          "status": "PASS",
          "durationMs": 8782
        },
        {
          "name": "[R03 R04 R05 R06 R07 R08 R09] M5: expansion E, 128 tiles, shared doorway traversal and reload",
          "status": "PASS",
          "durationMs": 11095
        },
        {
          "name": "[R03 R04 R05 R06 R07 R08 R09] M5: expansion W, 128 tiles, shared doorway traversal and reload",
          "status": "PASS",
          "durationMs": 8913
        },
        {
          "name": "[C05 S09] M4: task pause in editor and hidden tab, failure/cancel have no reward",
          "status": "PASS",
          "durationMs": 3868
        },
        {
          "name": "[S06] M4: exclusive writer lock, readonly follower and explicit takeover",
          "status": "PASS",
          "durationMs": 2190
        },
        {
          "name": "[S04 S10] M4: corrupted/unknown save retained, raw export offered, reset cancel then confirm scoped",
          "status": "PASS",
          "durationMs": 4110
        },
        {
          "name": "[S05 S07 S08] M4: denied storage and unavailable locks use explicitly isolated session-only mode",
          "status": "PASS",
          "durationMs": 2229
        },
        {
          "name": "[S05] M4: quota failure after startup stays visible through transaction/reload",
          "status": "PASS",
          "durationMs": 1559
        },
        {
          "name": "[S02 S11] M4: mid-job reload keeps remaining time; export is local JSON",
          "status": "PASS",
          "durationMs": 2348
        },
        {
          "name": "[P07] UI-03: viewport 1366x768, usable controls and no horizontal overflow",
          "status": "PASS",
          "durationMs": 2605
        },
        {
          "name": "[P07] UI-03: viewport 1920x1080, usable controls and no horizontal overflow",
          "status": "PASS",
          "durationMs": 2443
        },
        {
          "name": "[P07] UI-03: viewport 1024x768, usable controls and no horizontal overflow",
          "status": "PASS",
          "durationMs": 2163
        },
        {
          "name": "[P07] UI-03: viewport 390x844, usable controls and no horizontal overflow",
          "status": "PASS",
          "durationMs": 1977
        },
        {
          "name": "[E02 E08 G04 N11] M3: place-sofa intent survives leaving bed; cancel retains inventory; four orientations",
          "status": "PASS",
          "durationMs": 10436
        },
        {
          "name": "[P12 S08 P03] review allowlist is deterministic, frozen, memory-only and rejects fixture URLs",
          "status": "PASS",
          "durationMs": 20057
        },
        {
          "name": "[N05 N06 N10] visible sitting/sleep body and front/back depth evidence",
          "status": "PASS",
          "durationMs": 4434
        },
        {
          "name": "[G02 G07 N12 E10 E11 R01 R02 P08] shared view state, walls, ghost cancel, keyboard and inventory lifecycle",
          "status": "PASS",
          "durationMs": 9368
        },
        {
          "name": "[S03 S06 S07] sleeping reload is safe; follower cannot tick and no-lock tab never writes",
          "status": "PASS",
          "durationMs": 3106
        },
        {
          "name": "[G04 E01 N05 N06] rotated workstation/bed use anchors and actual pose screenshots",
          "status": "PASS",
          "durationMs": 18748
        },
        {
          "name": "[N12] hidden front walls remain closed to navigation",
          "status": "PASS",
          "durationMs": 1658
        },
        {
          "name": "[P09] 60 seconds each: walking, interactions, editor, connected rooms; actual frame profile",
          "status": "PASS",
          "durationMs": 251459
        }
      ]
    },
    "reruns": [],
    "cases": [
      {
        "name": "[P09 S01 S05 E03 E05] Idle checkpoints avoid duplicate writes; changed tasks and drafts still persist and revalidate",
        "status": "PASS",
        "durationMs": 4904
      },
      {
        "name": "[E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI N: reject shared-wall sofa, then enter and exit valid sofa through doorway",
        "status": "PASS",
        "durationMs": 32720
      },
      {
        "name": "[E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI E: reject shared-wall sofa, then enter and exit valid sofa through doorway",
        "status": "PASS",
        "durationMs": 36486
      },
      {
        "name": "[E04 E05 N04 N11 R04 R05 R06 R08] P1-01 UI W: reject shared-wall sofa, then enter and exit valid sofa through doorway",
        "status": "PASS",
        "durationMs": 35345
      },
      {
        "name": "[S04 S05 R06] P1-01 UI: invalid legacy cross-wall save preserves raw export and disables writes",
        "status": "PASS",
        "durationMs": 2016
      },
      {
        "name": "[G01 N05 N09 N11 C01 C02 C03 C07 C08 C10 S01 R03 R06 R08] M1-M4: ordinary UI real-time two tasks, sofa, relax and reload",
        "status": "PASS",
        "durationMs": 44105
      },
      {
        "name": "[N01 N03 N06 N07 E08] M2: bed and board interactions, collision rejection, keyboard walk and editor exit",
        "status": "PASS",
        "durationMs": 17275
      },
      {
        "name": "[E01 E02 E03 E06 E07 E09 P08] M3: invalid placement, rotation/cancel, wall reserve, undo/redo and expansion checkpoint",
        "status": "PASS",
        "durationMs": 5768
      },
      {
        "name": "[R03 R04 R05 R06 R07 R08 R09] M5: expansion N, 128 tiles, shared doorway traversal and reload",
        "status": "PASS",
        "durationMs": 8782
      },
      {
        "name": "[R03 R04 R05 R06 R07 R08 R09] M5: expansion E, 128 tiles, shared doorway traversal and reload",
        "status": "PASS",
        "durationMs": 11095
      },
      {
        "name": "[R03 R04 R05 R06 R07 R08 R09] M5: expansion W, 128 tiles, shared doorway traversal and reload",
        "status": "PASS",
        "durationMs": 8913
      },
      {
        "name": "[C05 S09] M4: task pause in editor and hidden tab, failure/cancel have no reward",
        "status": "PASS",
        "durationMs": 3868
      },
      {
        "name": "[S06] M4: exclusive writer lock, readonly follower and explicit takeover",
        "status": "PASS",
        "durationMs": 2190
      },
      {
        "name": "[S04 S10] M4: corrupted/unknown save retained, raw export offered, reset cancel then confirm scoped",
        "status": "PASS",
        "durationMs": 4110
      },
      {
        "name": "[S05 S07 S08] M4: denied storage and unavailable locks use explicitly isolated session-only mode",
        "status": "PASS",
        "durationMs": 2229
      },
      {
        "name": "[S05] M4: quota failure after startup stays visible through transaction/reload",
        "status": "PASS",
        "durationMs": 1559
      },
      {
        "name": "[S02 S11] M4: mid-job reload keeps remaining time; export is local JSON",
        "status": "PASS",
        "durationMs": 2348
      },
      {
        "name": "[P07] UI-03: viewport 1366x768, usable controls and no horizontal overflow",
        "status": "PASS",
        "durationMs": 2605
      },
      {
        "name": "[P07] UI-03: viewport 1920x1080, usable controls and no horizontal overflow",
        "status": "PASS",
        "durationMs": 2443
      },
      {
        "name": "[P07] UI-03: viewport 1024x768, usable controls and no horizontal overflow",
        "status": "PASS",
        "durationMs": 2163
      },
      {
        "name": "[P07] UI-03: viewport 390x844, usable controls and no horizontal overflow",
        "status": "PASS",
        "durationMs": 1977
      },
      {
        "name": "[E02 E08 G04 N11] M3: place-sofa intent survives leaving bed; cancel retains inventory; four orientations",
        "status": "PASS",
        "durationMs": 10436
      },
      {
        "name": "[P12 S08 P03] review allowlist is deterministic, frozen, memory-only and rejects fixture URLs",
        "status": "PASS",
        "durationMs": 20057
      },
      {
        "name": "[N05 N06 N10] visible sitting/sleep body and front/back depth evidence",
        "status": "PASS",
        "durationMs": 4434
      },
      {
        "name": "[G02 G07 N12 E10 E11 R01 R02 P08] shared view state, walls, ghost cancel, keyboard and inventory lifecycle",
        "status": "PASS",
        "durationMs": 9368
      },
      {
        "name": "[S03 S06 S07] sleeping reload is safe; follower cannot tick and no-lock tab never writes",
        "status": "PASS",
        "durationMs": 3106
      },
      {
        "name": "[G04 E01 N05 N06] rotated workstation/bed use anchors and actual pose screenshots",
        "status": "PASS",
        "durationMs": 18748
      },
      {
        "name": "[N12] hidden front walls remain closed to navigation",
        "status": "PASS",
        "durationMs": 1658
      },
      {
        "name": "[P09] 60 seconds each: walking, interactions, editor, connected rooms; actual frame profile",
        "status": "PASS",
        "durationMs": 251459
      }
    ]
  },
  "verification": {
    "status": "PARTIAL",
    "testedBuildId": "px-54c6825277ed",
    "testedOrigin": "https://beta1.ctrlpanelai.com/",
    "commands": [
      {
        "command": "python3 tools/validate_seed.py",
        "startedAt": "2026-09-06T13:28:19.630Z",
        "status": "PASS",
        "exitCode": 0
      },
      {
        "command": "npm run lint",
        "startedAt": "2026-09-06T13:28:19.696Z",
        "status": "PASS",
        "exitCode": 0
      },
      {
        "command": "npm run typecheck",
        "startedAt": "2026-09-06T13:28:20.159Z",
        "status": "PASS",
        "exitCode": 0
      },
      {
        "command": "npm run test:unit",
        "startedAt": "2026-09-06T13:28:20.939Z",
        "status": "PASS",
        "exitCode": 0
      }
    ],
    "browsers": [
      {
        "name": "Chromium",
        "version": "153.0.8010.12",
        "viewport": {
          "width": 1440,
          "height": 900
        }
      }
    ],
    "counts": {
      "passed": 77,
      "failed": 0,
      "blocked": 0,
      "notRun": 0
    }
  },
  "scenarios": [
    {
      "id": "board",
      "status": "PASS",
      "description": "Berdiri pada approach whiteboard, menghadap N.",
      "screenshotUrls": [
        "screenshots/review-board.png"
      ],
      "evidenceUrl": "state-summary.json"
    },
    {
      "id": "editor-invalid",
      "status": "PASS",
      "description": "Jalur transit dilindungi; draft merah dan Terapkan disabled.",
      "screenshotUrls": [
        "screenshots/review-editor-invalid.png"
      ],
      "evidenceUrl": "state-summary.json"
    },
    {
      "id": "expansion-east",
      "status": "PASS",
      "description": "Sambungan E, origin (8,0), doorway lebar dua tile.",
      "screenshotUrls": [
        "screenshots/review-expansion-east.png"
      ],
      "evidenceUrl": "state-summary.json"
    },
    {
      "id": "expansion-north",
      "status": "PASS",
      "description": "Sambungan N, origin (0,-8).",
      "screenshotUrls": [
        "screenshots/review-expansion-north.png"
      ],
      "evidenceUrl": "state-summary.json"
    },
    {
      "id": "expansion-west",
      "status": "PASS",
      "description": "Sambungan W, origin (-8,0).",
      "screenshotUrls": [
        "screenshots/review-expansion-west.png"
      ],
      "evidenceUrl": "state-summary.json"
    },
    {
      "id": "reload",
      "status": "PASS",
      "description": "Save/reload: 50 koin, 40 XP, sofa satu, dua ruang.",
      "screenshotUrls": [
        "screenshots/review-reload.png"
      ],
      "evidenceUrl": "state-summary.json"
    },
    {
      "id": "sleep",
      "status": "PASS",
      "description": "Pose berbaring di atas kasur, bukan hanya label REST_BED.",
      "screenshotUrls": [
        "screenshots/review-sleep.png"
      ],
      "evidenceUrl": "state-summary.json"
    },
    {
      "id": "sofa-relax",
      "status": "PASS",
      "description": "Sofa dipakai setelah dua reward: 50 koin, 40 XP, satu sofa.",
      "screenshotUrls": [
        "screenshots/review-sofa-relax.png"
      ],
      "evidenceUrl": "state-summary.json"
    },
    {
      "id": "starter",
      "status": "PASS",
      "description": "Seed sintetis: satu ruang 8 × 8 dan tiga furnitur awal.",
      "screenshotUrls": [
        "screenshots/review-starter.png"
      ],
      "evidenceUrl": "state-summary.json"
    },
    {
      "id": "walk-work",
      "status": "PASS",
      "description": "Approach dan duduk di workstation; task state terpisah dari animasi.",
      "screenshotUrls": [
        "screenshots/review-walk-work.png"
      ],
      "evidenceUrl": "state-summary.json"
    }
  ],
  "screenshots": [
    {
      "name": "bed-orientation-0",
      "buildId": "px-54c6825277ed",
      "url": "screenshots/bed-orientation-0.png",
      "caption": "bed orientation 0",
      "sha256": "45f2dd609081ac6160a44e0e3a1b7f41ef173843a89b62abb960ede86e0bf554",
      "takenAt": "2026-09-06T13:33:20.282Z",
      "viewport": {
        "width": 1440,
        "height": 900
      }
    },
    {
      "name": "bed-orientation-180",
      "buildId": "px-54c6825277ed",
      "url": "screenshots/bed-orientation-180.png",
      "caption": "bed orientation 180",
      "sha256": "1c6b065c04225079bde15e00981103aa3723d72257b229317aad5c8c63d1a359",
      "takenAt": "2026-09-06T13:33:24.015Z",
      "viewport": {
        "width": 1440,
        "height": 900
      }
    },
    {
      "name": "bed-orientation-270",
      "buildId": "px-54c6825277ed",
      "url": "screenshots/bed-orientation-270.png",
      "caption": "bed orientation 270",
      "sha256": "0f628c74aafbe74faca92bd75f21c1d676bd933cffb2f5aa173e932b16549e0d",
      "takenAt": "2026-09-06T13:33:26.331Z",
      "viewport": {
        "width": 1440,
        "height": 900
      }
    },
    {
      "name": "bed-orientation-90",
      "buildId": "px-54c6825277ed",
      "url": "screenshots/bed-orientation-90.png",
      "caption": "bed orientation 90",
      "sha256": "072dd41bbbc36925897b192c59074a037d58020a0d0c1478bce7f1ec881e9c47",
      "takenAt": "2026-09-06T13:33:22.110Z",
      "viewport": {
        "width": 1440,
        "height": 900
      }
    },
    {
      "name": "board",
      "buildId": "px-54c6825277ed",
      "url": "screenshots/board.png",
      "caption": "Berdiri pada approach whiteboard, menghadap N.",
      "sha256": "9183fe7d9c1571e66eed422513c6b2c15a374ccd6dfea7987a1961e95dbe8be2",
      "takenAt": "2026-09-06T13:31:14.041Z",
      "viewport": {
        "width": 1440,
        "height": 900
      }
    },
    {
      "name": "depth-behind",
      "buildId": "px-54c6825277ed",
      "url": "screenshots/depth-behind.png",
      "caption": "Avatar di belakang workstation; depth mengikuti posisi dunia.",
      "sha256": "5c0521ff566a796591a6093d97a13d0de0080ebed3f756d85a0733c05af97127",
      "takenAt": "2026-09-06T13:32:53.543Z",
      "viewport": {
        "width": 1440,
        "height": 900
      }
    },
    {
      "name": "depth-front",
      "buildId": "px-54c6825277ed",
      "url": "screenshots/depth-front.png",
      "caption": "Avatar di depan workstation; furnitur tidak selalu di depan.",
      "sha256": "5b5f898ee7a80ed5f5d89b7b92528ddc322a006428d13641057a6195e276fc7d",
      "takenAt": "2026-09-06T13:32:54.840Z",
      "viewport": {
        "width": 1440,
        "height": 900
      }
    },
    {
      "name": "editor-invalid",
      "buildId": "px-54c6825277ed",
      "url": "screenshots/editor-invalid.png",
      "caption": "Jalur transit dilindungi; draft merah dan Terapkan disabled.",
      "sha256": "f6cf0a119f194f203fc58dff29ee211e3586b0efb0c6435390f0a2882b8b4813",
      "takenAt": "2026-09-06T13:31:21.262Z",
      "viewport": {
        "width": 1440,
        "height": 900
      }
    },
    {
      "name": "expansion-east",
      "buildId": "px-54c6825277ed",
      "url": "screenshots/expansion-east.png",
      "caption": "Sambungan E, origin (8,0), doorway lebar dua tile.",
      "sha256": "4073651025f46278ce5470f414abbba63279afb55cb547938e7f71089d4cbb50",
      "takenAt": "2026-09-06T13:31:44.715Z",
      "viewport": {
        "width": 1440,
        "height": 900
      }
    },
    {
      "name": "expansion-north",
      "buildId": "px-54c6825277ed",
      "url": "screenshots/expansion-north.png",
      "caption": "Sambungan N, origin (0,-8).",
      "sha256": "5faa7458df9ed165eeb662118c05444e6fc16833f73c602d49287a6eb7548573",
      "takenAt": "2026-09-06T13:31:33.587Z",
      "viewport": {
        "width": 1440,
        "height": 900
      }
    },
    {
      "name": "expansion-west",
      "buildId": "px-54c6825277ed",
      "url": "screenshots/expansion-west.png",
      "caption": "Sambungan W, origin (-8,0).",
      "sha256": "bc23b660f9c9549c81ea0b61dc67eb30832dc76dd2091c54f21fe8cf4997861e",
      "takenAt": "2026-09-06T13:31:53.661Z",
      "viewport": {
        "width": 1440,
        "height": 900
      }
    },
    {
      "name": "p1-save-recovery",
      "buildId": "px-54c6825277ed",
      "url": "screenshots/p1-save-recovery.png",
      "caption": "p1 save recovery",
      "sha256": "e4348020df44c7b9fbbbfbb2671568e87ce03ed12b5a0703fb7ea0c3a4fbd42c",
      "takenAt": "2026-09-06T13:30:17.942Z",
      "viewport": {
        "width": 1440,
        "height": 900
      }
    },
    {
      "name": "p1-sofa-exit-e",
      "buildId": "px-54c6825277ed",
      "url": "screenshots/p1-sofa-exit-e.png",
      "caption": "p1 sofa exit e",
      "sha256": "8e8106b785b03e6cb82a3eb84a4aa28e9d3db5e8ccc2305f0b2d46145bc065cb",
      "takenAt": "2026-09-06T13:29:40.177Z",
      "viewport": {
        "width": 1440,
        "height": 900
      }
    },
    {
      "name": "p1-sofa-exit-n",
      "buildId": "px-54c6825277ed",
      "url": "screenshots/p1-sofa-exit-n.png",
      "caption": "p1 sofa exit n",
      "sha256": "705b80098239674d9ec28e8263c5ad8d74649bef495afcd1f7b99faa66876f61",
      "takenAt": "2026-09-06T13:29:03.729Z",
      "viewport": {
        "width": 1440,
        "height": 900
      }
    },
    {
      "name": "p1-sofa-exit-w",
      "buildId": "px-54c6825277ed",
      "url": "screenshots/p1-sofa-exit-w.png",
      "caption": "p1 sofa exit w",
      "sha256": "3784ca049a725d73dcb6afcd71747e30203c62436f9f7bd597b3d14676f4f7f4",
      "takenAt": "2026-09-06T13:30:15.401Z",
      "viewport": {
        "width": 1440,
        "height": 900
      }
    },
    {
      "name": "p1-sofa-sit-e",
      "buildId": "px-54c6825277ed",
      "url": "screenshots/p1-sofa-sit-e.png",
      "caption": "p1 sofa sit e",
      "sha256": "fc1d6ab53f9ed077b27efdc3e1e00ad0d4a3078607218d744c8eb80d7ea6a811",
      "takenAt": "2026-09-06T13:29:31.953Z",
      "viewport": {
        "width": 1440,
        "height": 900
      }
    },
    {
      "name": "p1-sofa-sit-n",
      "buildId": "px-54c6825277ed",
      "url": "screenshots/p1-sofa-sit-n.png",
      "caption": "p1 sofa sit n",
      "sha256": "888951ddd611e531252a0f42c07e9dad82ce33011db7343bd06739d1250761a4",
      "takenAt": "2026-09-06T13:28:56.295Z",
      "viewport": {
        "width": 1440,
        "height": 900
      }
    },
    {
      "name": "p1-sofa-sit-w",
      "buildId": "px-54c6825277ed",
      "url": "screenshots/p1-sofa-sit-w.png",
      "caption": "p1 sofa sit w",
      "sha256": "eca65e19047a395d02abcd5a0770e2d9857f6dc941f7a8c22633b1a614e2e2e6",
      "takenAt": "2026-09-06T13:30:08.056Z",
      "viewport": {
        "width": 1440,
        "height": 900
      }
    },
    {
      "name": "p1-wall-rejected-e",
      "buildId": "px-54c6825277ed",
      "url": "screenshots/p1-wall-rejected-e.png",
      "caption": "p1 wall rejected e",
      "sha256": "7003b95195bef95194b1e6ec08f7c905e482a00970672e3b0ec1434e4b23f6f0",
      "takenAt": "2026-09-06T13:29:23.118Z",
      "viewport": {
        "width": 1440,
        "height": 900
      }
    },
    {
      "name": "p1-wall-rejected-n",
      "buildId": "px-54c6825277ed",
      "url": "screenshots/p1-wall-rejected-n.png",
      "caption": "p1 wall rejected n",
      "sha256": "30c734feae1e44b2665e4062db6ec35e85570b61278b8f1871575540d0dfb242",
      "takenAt": "2026-09-06T13:28:50.020Z",
      "viewport": {
        "width": 1440,
        "height": 900
      }
    },
    {
      "name": "p1-wall-rejected-w",
      "buildId": "px-54c6825277ed",
      "url": "screenshots/p1-wall-rejected-w.png",
      "caption": "p1 wall rejected w",
      "sha256": "ea409ef9c0437de02a2cf4102225b84f506362d40cd2ae8c8c68465fcdd24cce",
      "takenAt": "2026-09-06T13:30:00.384Z",
      "viewport": {
        "width": 1440,
        "height": 900
      }
    },
    {
      "name": "reload",
      "buildId": "px-54c6825277ed",
      "url": "screenshots/reload.png",
      "caption": "Save/reload: 50 koin, 40 XP, sofa satu, dua ruang.",
      "sha256": "ae0a193895722bef3383e8a786021b7a874417042b560d75b7833d6788f52c14",
      "takenAt": "2026-09-06T13:31:02.018Z",
      "viewport": {
        "width": 1440,
        "height": 900
      }
    },
    {
      "name": "review-board",
      "buildId": "px-54c6825277ed",
      "url": "screenshots/review-board.png",
      "caption": "Berdiri pada approach whiteboard, menghadap N.",
      "sha256": "682c334e57b26b274802e00680744b3c470e7dcb5f4cde1e001ce0df870b9cc9",
      "takenAt": "2026-09-06T13:32:39.551Z",
      "viewport": {
        "width": 1440,
        "height": 900
      }
    },
    {
      "name": "review-editor-invalid",
      "buildId": "px-54c6825277ed",
      "url": "screenshots/review-editor-invalid.png",
      "caption": "Jalur transit dilindungi; draft merah dan Terapkan disabled.",
      "sha256": "9dd6b167cb572a7d4f241ada80655e262a298cd41060132e754b1dcbe2eb12a3",
      "takenAt": "2026-09-06T13:32:42.541Z",
      "viewport": {
        "width": 1440,
        "height": 900
      }
    },
    {
      "name": "review-expansion-east",
      "buildId": "px-54c6825277ed",
      "url": "screenshots/review-expansion-east.png",
      "caption": "Sambungan E, origin (8,0), doorway lebar dua tile.",
      "sha256": "c6bd6abbfdd5b781e838aa28c465ea4a12a56cad331914fa2355b80503d4d215",
      "takenAt": "2026-09-06T13:32:44.583Z",
      "viewport": {
        "width": 1440,
        "height": 900
      }
    },
    {
      "name": "review-expansion-north",
      "buildId": "px-54c6825277ed",
      "url": "screenshots/review-expansion-north.png",
      "caption": "Sambungan N, origin (0,-8).",
      "sha256": "77ae48db17fae143068e5c5ff69c63169e43e340f6c8e5a5b834c83098a51f48",
      "takenAt": "2026-09-06T13:32:45.928Z",
      "viewport": {
        "width": 1440,
        "height": 900
      }
    },
    {
      "name": "review-expansion-west",
      "buildId": "px-54c6825277ed",
      "url": "screenshots/review-expansion-west.png",
      "caption": "Sambungan W, origin (-8,0).",
      "sha256": "ca51429bd1b617413508e6ef3ff5b4abfdb16a16965e763a216de4949a954492",
      "takenAt": "2026-09-06T13:32:47.405Z",
      "viewport": {
        "width": 1440,
        "height": 900
      }
    },
    {
      "name": "review-reload",
      "buildId": "px-54c6825277ed",
      "url": "screenshots/review-reload.png",
      "caption": "Save/reload: 50 koin, 40 XP, sofa satu, dua ruang.",
      "sha256": "294c26a663ec713c9b64aa5d8216f88c2f84e900ba52c86a75a7dccff91f52b5",
      "takenAt": "2026-09-06T13:32:48.855Z",
      "viewport": {
        "width": 1440,
        "height": 900
      }
    },
    {
      "name": "review-sleep",
      "buildId": "px-54c6825277ed",
      "url": "screenshots/review-sleep.png",
      "caption": "Pose berbaring di atas kasur, bukan hanya label REST_BED.",
      "sha256": "8c0562119fc97e2c8203f624e44518d510e02eef97f507561ecb1c87df8c2062",
      "takenAt": "2026-09-06T13:32:36.959Z",
      "viewport": {
        "width": 1440,
        "height": 900
      }
    },
    {
      "name": "review-sofa-relax",
      "buildId": "px-54c6825277ed",
      "url": "screenshots/review-sofa-relax.png",
      "caption": "Sofa dipakai setelah dua reward: 50 koin, 40 XP, satu sofa.",
      "sha256": "149f8c17ef76aea06604a3decde905c386b5dd32d9b537e2d161636c2225f59d",
      "takenAt": "2026-09-06T13:32:40.947Z",
      "viewport": {
        "width": 1440,
        "height": 900
      }
    },
    {
      "name": "review-starter",
      "buildId": "px-54c6825277ed",
      "url": "screenshots/review-starter.png",
      "caption": "Seed sintetis: satu ruang 8 × 8 dan tiga furnitur awal.",
      "sha256": "c8c0ce4db1cd4f19a58fd0792ccff5c7eb51234d75941a9ee12d35a2b2c2e512",
      "takenAt": "2026-09-06T13:32:33.432Z",
      "viewport": {
        "width": 1440,
        "height": 900
      }
    },
    {
      "name": "review-walk-work",
      "buildId": "px-54c6825277ed",
      "url": "screenshots/review-walk-work.png",
      "caption": "Approach dan duduk di workstation; task state terpisah dari animasi.",
      "sha256": "63511c350c206b91d33b5bf591e776dc0dd041c9f168eb0dd74cf266add73bef",
      "takenAt": "2026-09-06T13:32:35.262Z",
      "viewport": {
        "width": 1440,
        "height": 900
      }
    },
    {
      "name": "sleep",
      "buildId": "px-54c6825277ed",
      "url": "screenshots/sleep.png",
      "caption": "Pose berbaring di atas kasur, bukan hanya label REST_BED.",
      "sha256": "c77eafc5701303e197e2827c29ea3243b4f224aedde34cc732db24cea14d79b6",
      "takenAt": "2026-09-06T13:31:06.632Z",
      "viewport": {
        "width": 1440,
        "height": 900
      }
    },
    {
      "name": "sofa-orientation-0",
      "buildId": "px-54c6825277ed",
      "url": "screenshots/sofa-orientation-0.png",
      "caption": "sofa orientation 0",
      "sha256": "cace8e29a058231e3cfe64f2339c462d11d67b07149b2afa2f933b12f4c9b34a",
      "takenAt": "2026-09-06T13:32:24.879Z",
      "viewport": {
        "width": 1440,
        "height": 900
      }
    },
    {
      "name": "sofa-orientation-180",
      "buildId": "px-54c6825277ed",
      "url": "screenshots/sofa-orientation-180.png",
      "caption": "sofa orientation 180",
      "sha256": "86175700b0b59c867a5f7c94345b219f8bd84632000ab73f1eaea6361c775585",
      "takenAt": "2026-09-06T13:32:28.532Z",
      "viewport": {
        "width": 1440,
        "height": 900
      }
    },
    {
      "name": "sofa-orientation-270",
      "buildId": "px-54c6825277ed",
      "url": "screenshots/sofa-orientation-270.png",
      "caption": "sofa orientation 270",
      "sha256": "f9515eb8dbd6d015a6dd2241b334688ba7da431cfd612d2c64c3e297be99fba7",
      "takenAt": "2026-09-06T13:32:30.349Z",
      "viewport": {
        "width": 1440,
        "height": 900
      }
    },
    {
      "name": "sofa-orientation-90",
      "buildId": "px-54c6825277ed",
      "url": "screenshots/sofa-orientation-90.png",
      "caption": "sofa orientation 90",
      "sha256": "f34859edfd5a9eaddb2288f48b4d20ae46165bfc0e28f3998bf30ab617e21d50",
      "takenAt": "2026-09-06T13:32:26.939Z",
      "viewport": {
        "width": 1440,
        "height": 900
      }
    },
    {
      "name": "sofa-relax",
      "buildId": "px-54c6825277ed",
      "url": "screenshots/sofa-relax.png",
      "caption": "Sofa dipakai setelah dua reward: 50 koin, 40 XP, satu sofa.",
      "sha256": "2ca3452832235af726f201835c085b016e2fda722823e223c300c597083c56ec",
      "takenAt": "2026-09-06T13:30:50.184Z",
      "viewport": {
        "width": 1440,
        "height": 900
      }
    },
    {
      "name": "starter",
      "buildId": "px-54c6825277ed",
      "url": "screenshots/starter.png",
      "caption": "Seed sintetis: satu ruang 8 × 8 dan tiga furnitur awal.",
      "sha256": "ef8669146fae0852b44ff4f1ae7791888d57a68c165342f112cfe9c607029e0f",
      "takenAt": "2026-09-06T13:30:19.252Z",
      "viewport": {
        "width": 1440,
        "height": 900
      }
    },
    {
      "name": "viewport-1024",
      "buildId": "px-54c6825277ed",
      "url": "screenshots/viewport-1024.png",
      "caption": "viewport 1024",
      "sha256": "ce8c50122fd47e1e07243ddbac1533fcefbbd5e101ae35e1cc0adf4b0d4b9394",
      "takenAt": "2026-09-06T13:32:17.874Z",
      "viewport": {
        "width": 1024,
        "height": 768
      }
    },
    {
      "name": "viewport-1366",
      "buildId": "px-54c6825277ed",
      "url": "screenshots/viewport-1366.png",
      "caption": "viewport 1366",
      "sha256": "51c67c0f8b52c64a0ac1e304da8434698a72161d5ffb917a26341bc78e524f23",
      "takenAt": "2026-09-06T13:32:13.181Z",
      "viewport": {
        "width": 1366,
        "height": 768
      }
    },
    {
      "name": "viewport-1920",
      "buildId": "px-54c6825277ed",
      "url": "screenshots/viewport-1920.png",
      "caption": "viewport 1920",
      "sha256": "16659490cf22766a406f63e2862228646d3fd9c403dda1ce64cf6a7e6813a8b6",
      "takenAt": "2026-09-06T13:32:15.687Z",
      "viewport": {
        "width": 1920,
        "height": 1080
      }
    },
    {
      "name": "viewport-390",
      "buildId": "px-54c6825277ed",
      "url": "screenshots/viewport-390.png",
      "caption": "viewport 390",
      "sha256": "da46fba2142594cc56c379f227ccc665d08ea23de2055d6aa0af87b14f4426f1",
      "takenAt": "2026-09-06T13:32:20.062Z",
      "viewport": {
        "width": 390,
        "height": 844
      }
    },
    {
      "name": "walk-work",
      "buildId": "px-54c6825277ed",
      "url": "screenshots/walk-work.png",
      "caption": "Approach dan duduk di workstation; task state terpisah dari animasi.",
      "sha256": "11b52b228854f9408251a2a0de994b1c6d0c9cc57e843db118fdaa3fcc29fcde",
      "takenAt": "2026-09-06T13:30:23.080Z",
      "viewport": {
        "width": 1440,
        "height": 900
      }
    },
    {
      "name": "workstation-orientation-0",
      "buildId": "px-54c6825277ed",
      "url": "screenshots/workstation-orientation-0.png",
      "caption": "workstation orientation 0",
      "sha256": "979df5da98b027a8ce2d1127231179e067280377413bf18253d10f234bb211dc",
      "takenAt": "2026-09-06T13:33:10.733Z",
      "viewport": {
        "width": 1440,
        "height": 900
      }
    },
    {
      "name": "workstation-orientation-180",
      "buildId": "px-54c6825277ed",
      "url": "screenshots/workstation-orientation-180.png",
      "caption": "workstation orientation 180",
      "sha256": "3d822f709d607524e0afe7d6b298727105446de78e1db6855eebf684a2de781e",
      "takenAt": "2026-09-06T13:33:16.296Z",
      "viewport": {
        "width": 1440,
        "height": 900
      }
    },
    {
      "name": "workstation-orientation-270",
      "buildId": "px-54c6825277ed",
      "url": "screenshots/workstation-orientation-270.png",
      "caption": "workstation orientation 270",
      "sha256": "0c2b65515adb1461ad9752bce205e5848af3b42438a2c25864e79868133cb689",
      "takenAt": "2026-09-06T13:33:18.460Z",
      "viewport": {
        "width": 1440,
        "height": 900
      }
    },
    {
      "name": "workstation-orientation-90",
      "buildId": "px-54c6825277ed",
      "url": "screenshots/workstation-orientation-90.png",
      "caption": "workstation orientation 90",
      "sha256": "2c35bde42cc17ca4f55a7af187d7bad4179c54452004b7486e22856d52da5a93",
      "takenAt": "2026-09-06T13:33:13.749Z",
      "viewport": {
        "width": 1440,
        "height": 900
      }
    }
  ],
  "performance": {
    "buildId": "px-54c6825277ed",
    "measuredAt": "2026-09-06T13:37:39.447Z",
    "command": "npm run test:e2e",
    "browser": "153.0.8010.12",
    "viewport": {
      "width": 1440,
      "height": 900
    },
    "hardware": {
      "cpu": "AMD EPYC Processor (with IBPB)",
      "logicalCpus": 12,
      "memoryBytes": 50514534400,
      "os": "linux 6.8.0-138-generic"
    },
    "rendering": {
      "devices": [
        {
          "vendorId": 65535,
          "deviceId": 65535,
          "vendorString": "Google Inc. (Google)",
          "deviceString": "ANGLE (Google, Vulkan 1.3.0 (SwiftShader Device (Subzero) (0x0000C0DE)), SwiftShader driver-5.0.0)",
          "driverVendor": "SwANGLE",
          "driverVersion": "5.0.0"
        }
      ],
      "featureStatus": {
        "2d_canvas": "unavailable_software",
        "direct_rendering_display_compositor": "disabled_off_ok",
        "gpu_compositing": "disabled_software",
        "multiple_raster_threads": "enabled_on",
        "opengl": "disabled_off",
        "rasterization": "disabled_software",
        "raw_draw": "disabled_off_ok",
        "skia_graphite": "disabled_off",
        "trees_in_viz": "disabled_off",
        "video_decode": "disabled_software",
        "video_encode": "disabled_software",
        "vulkan": "disabled_off",
        "webgl": "unavailable_software",
        "webgpu": "unavailable_software",
        "webgpu_on_vk_via_gl_interop": "disabled_off",
        "webnn": "unavailable_software"
      }
    },
    "environment": "Chromium headless, shared Ubuntu VPS; software rendering as reported by SystemInfo. No frame outliers discarded. Four >=60s samples.",
    "userDeviceStatus": "NOT_MEASURED",
    "scenarios": [
      {
        "scenario": "walking",
        "startedAt": "2026-09-06T13:33:29.654Z",
        "durationMs": 62032,
        "viewport": {
          "width": 1440,
          "height": 900
        },
        "cycles": 21,
        "samples": 2330,
        "meanFps": 37.76184109229447,
        "frameTimeP50Ms": 33.19999999999709,
        "frameTimeP95Ms": 49.899999999999636,
        "frameTimeP99Ms": 66.69999999999709,
        "maxFrameMs": 266.6999999999971,
        "over16_67Ms": 1916,
        "over33_34Ms": 464,
        "over50Ms": 42,
        "over100Ms": 7,
        "profileP95Ms": {
          "simulation": 0.20000004768371582,
          "draw": 1.100000023841858,
          "ui": 0.5
        },
        "loadBefore": [
          4.59,
          3.92,
          2.97
        ],
        "loadAfter": [
          4.28,
          3.91,
          3.03
        ],
        "freeMemoryBytes": 44533477376,
        "status": "PASS"
      },
      {
        "scenario": "interactions",
        "startedAt": "2026-09-06T13:34:32.746Z",
        "durationMs": 61274,
        "viewport": {
          "width": 1440,
          "height": 900
        },
        "cycles": 9,
        "samples": 2120,
        "meanFps": 34.794482776703795,
        "frameTimeP50Ms": 33.299999999995634,
        "frameTimeP95Ms": 50,
        "frameTimeP99Ms": 100,
        "maxFrameMs": 450,
        "over16_67Ms": 1771,
        "over33_34Ms": 527,
        "over50Ms": 85,
        "over100Ms": 18,
        "profileP95Ms": {
          "simulation": 0.8999999761581421,
          "draw": 1.2000000476837158,
          "ui": 0.5
        },
        "loadBefore": [
          4.42,
          3.95,
          3.04
        ],
        "loadAfter": [
          4.26,
          3.99,
          3.11
        ],
        "freeMemoryBytes": 44535554048,
        "status": "PASS"
      },
      {
        "scenario": "editor",
        "startedAt": "2026-09-06T13:35:35.168Z",
        "durationMs": 62175,
        "viewport": {
          "width": 1440,
          "height": 900
        },
        "cycles": 27,
        "samples": 2178,
        "meanFps": 35.1554555521033,
        "frameTimeP50Ms": 33.299999999995634,
        "frameTimeP95Ms": 50,
        "frameTimeP99Ms": 83.29999999999927,
        "maxFrameMs": 283.40000000000146,
        "over16_67Ms": 1790,
        "over33_34Ms": 588,
        "over50Ms": 73,
        "over100Ms": 9,
        "profileP95Ms": {
          "simulation": 0.10000002384185791,
          "draw": 2.5,
          "ui": 0.6000000238418579
        },
        "loadBefore": [
          4.26,
          3.99,
          3.11
        ],
        "loadAfter": [
          4.5,
          4.07,
          3.2
        ],
        "freeMemoryBytes": 44551757824,
        "status": "PASS"
      },
      {
        "scenario": "two-rooms",
        "startedAt": "2026-09-06T13:36:38.663Z",
        "durationMs": 60748,
        "viewport": {
          "width": 1440,
          "height": 900
        },
        "cycles": 15,
        "samples": 2218,
        "meanFps": 36.677768113219834,
        "frameTimeP50Ms": 33.299999999995634,
        "frameTimeP95Ms": 50,
        "frameTimeP99Ms": 66.69999999999982,
        "maxFrameMs": 166.59999999999854,
        "over16_67Ms": 1808,
        "over33_34Ms": 545,
        "over50Ms": 49,
        "over100Ms": 7,
        "profileP95Ms": {
          "simulation": 0.2999999523162842,
          "draw": 1,
          "ui": 0.5
        },
        "loadBefore": [
          4.5,
          4.07,
          3.2
        ],
        "loadAfter": [
          3.85,
          3.96,
          3.21
        ],
        "freeMemoryBytes": 44525293568,
        "status": "PASS"
      }
    ],
    "status": "PASS"
  },
  "compressedAppBytes": 24511,
  "publicQA": {
    "buildId": "px-54c6825277ed",
    "testedAt": "2026-09-06T13:41:53.303Z",
    "command": "npm run qa:public",
    "baseUrl": "https://beta1.ctrlpanelai.com",
    "vantage": "Origin VPS over public HTTPS; separate external receipt required",
    "browser": "Chromium",
    "viewport": {
      "width": 1440,
      "height": 900
    },
    "status": "PASS",
    "reader": {
      "httpStatus": 200,
      "contentType": "application/json"
    },
    "httpReceipts": [
      {
        "url": "https://beta1.ctrlpanelai.com/",
        "method": "GET",
        "status": 200,
        "contentType": "text/html"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/build.json",
        "method": "GET",
        "status": 200,
        "contentType": "application/json"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/panel/terminal.php",
        "method": "GET",
        "status": 404,
        "contentType": "text/html"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/panel/files.php",
        "method": "GET",
        "status": 404,
        "contentType": "text/html"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/api/",
        "method": "GET",
        "status": 404,
        "contentType": "text/html"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/memory/",
        "method": "GET",
        "status": 404,
        "contentType": "text/html"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/terminal/",
        "method": "GET",
        "status": 404,
        "contentType": "text/html"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/.git/config",
        "method": "GET",
        "status": 404,
        "contentType": "text/html"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/.env",
        "method": "GET",
        "status": 404,
        "contentType": "text/html"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/docs/DISCOVERY.md",
        "method": "GET",
        "status": 404,
        "contentType": "text/html"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/src/main.ts",
        "method": "GET",
        "status": 404,
        "contentType": "text/html"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/package.json",
        "method": "GET",
        "status": 404,
        "contentType": "text/html"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/tools/deploy.py",
        "method": "GET",
        "status": 404,
        "contentType": "text/html"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/assets/missing.map",
        "method": "GET",
        "status": 404,
        "contentType": "text/html"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/",
        "method": "POST",
        "status": 405,
        "contentType": "text/html"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/",
        "method": "PUT",
        "status": 405,
        "contentType": "text/html"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/",
        "method": "DELETE",
        "status": 405,
        "contentType": "text/html"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/",
        "method": "GET",
        "status": 200,
        "contentType": "text/html"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/",
        "method": "GET",
        "status": 200,
        "contentType": "text/html"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/manifest.json",
        "method": "GET",
        "status": 200,
        "contentType": "application/json"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/state-summary.json",
        "method": "GET",
        "status": 200,
        "contentType": "application/json"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/",
        "method": "HEAD",
        "status": 200,
        "contentType": "text/html"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/",
        "method": "HEAD",
        "status": 200,
        "contentType": "text/html"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/manifest.json",
        "method": "HEAD",
        "status": 200,
        "contentType": "application/json"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/state-summary.json",
        "method": "HEAD",
        "status": 200,
        "contentType": "application/json"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/requirement-coverage.json",
        "method": "HEAD",
        "status": 200,
        "contentType": "application/json"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/changelog.txt",
        "method": "HEAD",
        "status": 200,
        "contentType": "text/plain"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/bed-orientation-0.png",
        "method": "HEAD",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/bed-orientation-180.png",
        "method": "HEAD",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/bed-orientation-270.png",
        "method": "HEAD",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/bed-orientation-90.png",
        "method": "HEAD",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/board.png",
        "method": "HEAD",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/depth-behind.png",
        "method": "HEAD",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/depth-front.png",
        "method": "HEAD",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/editor-invalid.png",
        "method": "HEAD",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/expansion-east.png",
        "method": "HEAD",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/expansion-north.png",
        "method": "HEAD",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/expansion-west.png",
        "method": "HEAD",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/p1-save-recovery.png",
        "method": "HEAD",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/p1-sofa-exit-e.png",
        "method": "HEAD",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/p1-sofa-exit-n.png",
        "method": "HEAD",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/p1-sofa-exit-w.png",
        "method": "HEAD",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/p1-sofa-sit-e.png",
        "method": "HEAD",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/p1-sofa-sit-n.png",
        "method": "HEAD",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/p1-sofa-sit-w.png",
        "method": "HEAD",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/p1-wall-rejected-e.png",
        "method": "HEAD",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/p1-wall-rejected-n.png",
        "method": "HEAD",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/p1-wall-rejected-w.png",
        "method": "HEAD",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/reload.png",
        "method": "HEAD",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-board.png",
        "method": "HEAD",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-editor-invalid.png",
        "method": "HEAD",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-expansion-east.png",
        "method": "HEAD",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-expansion-north.png",
        "method": "HEAD",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-expansion-west.png",
        "method": "HEAD",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-reload.png",
        "method": "HEAD",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-sleep.png",
        "method": "HEAD",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-sofa-relax.png",
        "method": "HEAD",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-starter.png",
        "method": "HEAD",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-walk-work.png",
        "method": "HEAD",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/sleep.png",
        "method": "HEAD",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/sofa-orientation-0.png",
        "method": "HEAD",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/sofa-orientation-180.png",
        "method": "HEAD",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/sofa-orientation-270.png",
        "method": "HEAD",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/sofa-orientation-90.png",
        "method": "HEAD",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/sofa-relax.png",
        "method": "HEAD",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/starter.png",
        "method": "HEAD",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/viewport-1024.png",
        "method": "HEAD",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/viewport-1366.png",
        "method": "HEAD",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/viewport-1920.png",
        "method": "HEAD",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/viewport-390.png",
        "method": "HEAD",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/walk-work.png",
        "method": "HEAD",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/workstation-orientation-0.png",
        "method": "HEAD",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/workstation-orientation-180.png",
        "method": "HEAD",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/workstation-orientation-270.png",
        "method": "HEAD",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/workstation-orientation-90.png",
        "method": "HEAD",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/bed-orientation-0.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/bed-orientation-180.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/bed-orientation-270.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/bed-orientation-90.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/board.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/depth-behind.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/depth-front.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/editor-invalid.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/expansion-east.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/expansion-north.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/expansion-west.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/p1-save-recovery.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/p1-sofa-exit-e.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/p1-sofa-exit-n.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/p1-sofa-exit-w.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/p1-sofa-sit-e.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/p1-sofa-sit-n.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/p1-sofa-sit-w.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/p1-wall-rejected-e.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/p1-wall-rejected-n.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/p1-wall-rejected-w.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/reload.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-board.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-editor-invalid.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-expansion-east.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-expansion-north.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-expansion-west.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-reload.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-sleep.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-sofa-relax.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-starter.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-walk-work.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/sleep.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/sofa-orientation-0.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/sofa-orientation-180.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/sofa-orientation-270.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/sofa-orientation-90.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/sofa-relax.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/starter.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/viewport-1024.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/viewport-1366.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/viewport-1920.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/viewport-390.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/walk-work.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/workstation-orientation-0.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/workstation-orientation-180.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/workstation-orientation-270.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png"
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/workstation-orientation-90.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png"
      }
    ],
    "clientRestriction": null,
    "checks": [
      {
        "name": "[P01 P05 P10] HTTPS anonymous app + build ID + headers",
        "status": "PASS"
      },
      {
        "name": "[P04] Private routes and internal artifacts return 404",
        "status": "PASS"
      },
      {
        "name": "[P04] Mutating HTTP methods rejected",
        "status": "PASS"
      },
      {
        "name": "[P04 P05] Synthetic cookie never reflected/consumed or changes static app",
        "status": "PASS"
      },
      {
        "name": "[P03 P10] Review manifest, summary and every screenshot agree with published build",
        "status": "PASS"
      },
      {
        "name": "[P02] Review readable with JavaScript disabled",
        "status": "PASS"
      },
      {
        "name": "[P01 P05] Published JS executes, real-time task rewarded once, no page errors or off-origin requests",
        "status": "PASS"
      },
      {
        "name": "[P01] Default Python-urllib anonymous reader",
        "status": "PASS"
      }
    ]
  },
  "external": {
    "buildId": "px-54c6825277ed",
    "testedAt": "2026-09-06T13:42:43Z",
    "command": "python3 tools/external-probe.py BUILD_ID live",
    "vantage": "Independent VPS, HTTPS without login/cookies; urllib with explicit review User-Agent, no JavaScript",
    "mode": "live",
    "status": "PASS",
    "checks": [
      {
        "name": "Anonymous app/review/build and every screenshot from an independent host",
        "status": "PASS"
      },
      {
        "name": "Preview private routes deny access",
        "status": "PASS"
      },
      {
        "name": "Production dashboard, terminal and files retain anonymous 404 gate",
        "status": "PASS"
      }
    ],
    "requests": [
      {
        "url": "https://beta1.ctrlpanelai.com/",
        "method": "GET",
        "status": 200,
        "contentType": "text/html",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/build.json",
        "method": "GET",
        "status": 200,
        "contentType": "application/json",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/",
        "method": "GET",
        "status": 200,
        "contentType": "text/html",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/manifest.json",
        "method": "GET",
        "status": 200,
        "contentType": "application/json",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/requirement-coverage.json",
        "method": "GET",
        "status": 200,
        "contentType": "application/json",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/state-summary.json",
        "method": "GET",
        "status": 200,
        "contentType": "application/json",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/changelog.txt",
        "method": "GET",
        "status": 200,
        "contentType": "text/plain",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/bed-orientation-0.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/bed-orientation-180.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/bed-orientation-270.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/bed-orientation-90.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/board.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/depth-behind.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/depth-front.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/editor-invalid.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/expansion-east.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/expansion-north.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/expansion-west.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/p1-save-recovery.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/p1-sofa-exit-e.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/p1-sofa-exit-n.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/p1-sofa-exit-w.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/p1-sofa-sit-e.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/p1-sofa-sit-n.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/p1-sofa-sit-w.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/p1-wall-rejected-e.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/p1-wall-rejected-n.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/p1-wall-rejected-w.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/reload.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-board.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-editor-invalid.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-expansion-east.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-expansion-north.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-expansion-west.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-reload.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-sleep.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-sofa-relax.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-starter.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-walk-work.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/sleep.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/sofa-orientation-0.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/sofa-orientation-180.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/sofa-orientation-270.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/sofa-orientation-90.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/sofa-relax.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/starter.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/viewport-1024.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/viewport-1366.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/viewport-1920.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/viewport-390.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/walk-work.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/workstation-orientation-0.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/workstation-orientation-180.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/workstation-orientation-270.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/review/screenshots/workstation-orientation-90.png",
        "method": "GET",
        "status": 200,
        "contentType": "image/png",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/",
        "method": "GET",
        "status": 200,
        "contentType": "text/html",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/panel/terminal.php",
        "method": "GET",
        "status": 404,
        "contentType": "text/html",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/panel/files.php",
        "method": "GET",
        "status": 404,
        "contentType": "text/html",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/.env",
        "method": "GET",
        "status": 404,
        "contentType": "text/html",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/.git/config",
        "method": "GET",
        "status": 404,
        "contentType": "text/html",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/api/",
        "method": "GET",
        "status": 404,
        "contentType": "text/html",
        "redirected": false
      },
      {
        "url": "https://beta1.ctrlpanelai.com/src/main.ts",
        "method": "GET",
        "status": 404,
        "contentType": "text/html",
        "redirected": false
      },
      {
        "url": "https://ctrlpanelai.com/panel/dashboard.php",
        "method": "GET",
        "status": 404,
        "contentType": "text/html; charset=UTF-8",
        "redirected": false
      },
      {
        "url": "https://ctrlpanelai.com/panel/terminal.php",
        "method": "GET",
        "status": 404,
        "contentType": "text/html; charset=UTF-8",
        "redirected": false
      },
      {
        "url": "https://ctrlpanelai.com/panel/files.php",
        "method": "GET",
        "status": 404,
        "contentType": "text/html; charset=UTF-8",
        "redirected": false
      }
    ]
  },
  "reviewChecks": {
    "buildId": "px-54c6825277ed",
    "testedAt": "2026-09-06T13:43:01.032Z",
    "command": "node tools/review-checks.mjs",
    "checks": [
      {
        "ids": [
          "P04"
        ],
        "name": "Public allowlist and sensitive artifact scan",
        "status": "PASS"
      },
      {
        "ids": [
          "P07"
        ],
        "name": "Desktop 1440x900 and 1366x768: actual inspector edit and commit",
        "status": "PASS"
      },
      {
        "ids": [
          "P06"
        ],
        "name": "Actual nested base path: app assets, review and direct evidence links",
        "status": "PASS"
      },
      {
        "ids": [
          "P02",
          "P03"
        ],
        "name": "Static review without JS includes 77 cases, canonical state, build and image checksums",
        "status": "PASS"
      }
    ],
    "status": "PASS"
  },
  "visualInspection": {
    "buildId": "px-54c6825277ed",
    "testedAt": "2026-09-06T13:39:47.659445+00:00",
    "command": "view_image of actual current-build browser captures",
    "reviewer": "CuXi static image inspection; no claim of reviewer clicking UI or approving final assets",
    "status": "PASS",
    "checks": [
      {
        "ids": [
          "G04"
        ],
        "status": "PASS",
        "observed": "Viewed all four workstation, bed and sofa orientations; composite furniture, body orientation and support follow rotation. Geometry and both-seat navigation are checked separately by executed tests.",
        "evidence": "screenshots/workstation-orientation-180.png"
      },
      {
        "ids": [
          "N05"
        ],
        "status": "PASS",
        "observed": "Avatar sits on workstation chair; desk and monitor occlude lower body according to orientation.",
        "evidence": "screenshots/workstation-orientation-0.png"
      },
      {
        "ids": [
          "N06"
        ],
        "status": "PASS",
        "observed": "Lying head, torso and legs are visible on mattress along its long axis in all four rotations.",
        "evidence": "screenshots/bed-orientation-90.png"
      },
      {
        "ids": [
          "N10"
        ],
        "status": "PASS",
        "observed": "Behind view partially occludes avatar with monitor; front view draws avatar in front. Bed support remains below lying body.",
        "evidence": "screenshots/depth-front.png"
      },
      {
        "ids": [
          "N11"
        ],
        "status": "PASS",
        "observed": "Seated torso and bent legs visible where orientation permits; sofa back appropriately occludes the body in opposite views. Timing and exits tested separately.",
        "evidence": "screenshots/sofa-orientation-90.png"
      }
    ],
    "screenshots": [
      {
        "name": "p1-wall-rejected-n",
        "url": "screenshots/p1-wall-rejected-n.png",
        "buildId": "px-54c6825277ed",
        "sha256": "30c734feae1e44b2665e4062db6ec35e85570b61278b8f1871575540d0dfb242"
      },
      {
        "name": "p1-sofa-sit-n",
        "url": "screenshots/p1-sofa-sit-n.png",
        "buildId": "px-54c6825277ed",
        "sha256": "888951ddd611e531252a0f42c07e9dad82ce33011db7343bd06739d1250761a4"
      },
      {
        "name": "p1-sofa-sit-e",
        "url": "screenshots/p1-sofa-sit-e.png",
        "buildId": "px-54c6825277ed",
        "sha256": "fc1d6ab53f9ed077b27efdc3e1e00ad0d4a3078607218d744c8eb80d7ea6a811"
      },
      {
        "name": "p1-sofa-sit-w",
        "url": "screenshots/p1-sofa-sit-w.png",
        "buildId": "px-54c6825277ed",
        "sha256": "eca65e19047a395d02abcd5a0770e2d9857f6dc941f7a8c22633b1a614e2e2e6"
      },
      {
        "name": "p1-sofa-exit-n",
        "url": "screenshots/p1-sofa-exit-n.png",
        "buildId": "px-54c6825277ed",
        "sha256": "705b80098239674d9ec28e8263c5ad8d74649bef495afcd1f7b99faa66876f61"
      },
      {
        "name": "p1-save-recovery",
        "url": "screenshots/p1-save-recovery.png",
        "buildId": "px-54c6825277ed",
        "sha256": "e4348020df44c7b9fbbbfbb2671568e87ce03ed12b5a0703fb7ea0c3a4fbd42c"
      },
      {
        "name": "depth-behind",
        "url": "screenshots/depth-behind.png",
        "buildId": "px-54c6825277ed",
        "sha256": "5c0521ff566a796591a6093d97a13d0de0080ebed3f756d85a0733c05af97127"
      },
      {
        "name": "depth-front",
        "url": "screenshots/depth-front.png",
        "buildId": "px-54c6825277ed",
        "sha256": "5b5f898ee7a80ed5f5d89b7b92528ddc322a006428d13641057a6195e276fc7d"
      },
      {
        "name": "workstation-orientation-0",
        "url": "screenshots/workstation-orientation-0.png",
        "buildId": "px-54c6825277ed",
        "sha256": "979df5da98b027a8ce2d1127231179e067280377413bf18253d10f234bb211dc"
      },
      {
        "name": "workstation-orientation-90",
        "url": "screenshots/workstation-orientation-90.png",
        "buildId": "px-54c6825277ed",
        "sha256": "2c35bde42cc17ca4f55a7af187d7bad4179c54452004b7486e22856d52da5a93"
      },
      {
        "name": "workstation-orientation-180",
        "url": "screenshots/workstation-orientation-180.png",
        "buildId": "px-54c6825277ed",
        "sha256": "3d822f709d607524e0afe7d6b298727105446de78e1db6855eebf684a2de781e"
      },
      {
        "name": "workstation-orientation-270",
        "url": "screenshots/workstation-orientation-270.png",
        "buildId": "px-54c6825277ed",
        "sha256": "0c2b65515adb1461ad9752bce205e5848af3b42438a2c25864e79868133cb689"
      },
      {
        "name": "bed-orientation-0",
        "url": "screenshots/bed-orientation-0.png",
        "buildId": "px-54c6825277ed",
        "sha256": "45f2dd609081ac6160a44e0e3a1b7f41ef173843a89b62abb960ede86e0bf554"
      },
      {
        "name": "bed-orientation-90",
        "url": "screenshots/bed-orientation-90.png",
        "buildId": "px-54c6825277ed",
        "sha256": "072dd41bbbc36925897b192c59074a037d58020a0d0c1478bce7f1ec881e9c47"
      },
      {
        "name": "bed-orientation-180",
        "url": "screenshots/bed-orientation-180.png",
        "buildId": "px-54c6825277ed",
        "sha256": "1c6b065c04225079bde15e00981103aa3723d72257b229317aad5c8c63d1a359"
      },
      {
        "name": "bed-orientation-270",
        "url": "screenshots/bed-orientation-270.png",
        "buildId": "px-54c6825277ed",
        "sha256": "0f628c74aafbe74faca92bd75f21c1d676bd933cffb2f5aa173e932b16549e0d"
      },
      {
        "name": "sofa-orientation-0",
        "url": "screenshots/sofa-orientation-0.png",
        "buildId": "px-54c6825277ed",
        "sha256": "cace8e29a058231e3cfe64f2339c462d11d67b07149b2afa2f933b12f4c9b34a"
      },
      {
        "name": "sofa-orientation-90",
        "url": "screenshots/sofa-orientation-90.png",
        "buildId": "px-54c6825277ed",
        "sha256": "f34859edfd5a9eaddb2288f48b4d20ae46165bfc0e28f3998bf30ab617e21d50"
      },
      {
        "name": "sofa-orientation-180",
        "url": "screenshots/sofa-orientation-180.png",
        "buildId": "px-54c6825277ed",
        "sha256": "86175700b0b59c867a5f7c94345b219f8bd84632000ab73f1eaea6361c775585"
      },
      {
        "name": "sofa-orientation-270",
        "url": "screenshots/sofa-orientation-270.png",
        "buildId": "px-54c6825277ed",
        "sha256": "f9515eb8dbd6d015a6dd2241b334688ba7da431cfd612d2c64c3e297be99fba7"
      }
    ]
  },
  "rollback": {
    "buildId": "px-54c6825277ed",
    "previousBuildId": "px-86fd3652a57b",
    "startedAt": "2026-09-06T13:42:26.963303+00:00",
    "testedAt": "2026-09-06T13:42:43.244639+00:00",
    "command": "python3 tools/deploy.py rollback BUILD_ID; external HTTPS probes after each switch",
    "status": "PASS",
    "previousReleaseProbe": {
      "buildId": "px-86fd3652a57b",
      "testedAt": "2026-09-06T13:42:40Z",
      "command": "python3 tools/external-probe.py BUILD_ID live",
      "vantage": "Independent VPS, HTTPS without login/cookies; urllib with explicit review User-Agent, no JavaScript",
      "mode": "live",
      "status": "PASS",
      "checks": [
        {
          "name": "Anonymous app/review/build and every screenshot from an independent host",
          "status": "PASS"
        },
        {
          "name": "Preview private routes deny access",
          "status": "PASS"
        },
        {
          "name": "Production dashboard, terminal and files retain anonymous 404 gate",
          "status": "PASS"
        }
      ],
      "requests": [
        {
          "url": "https://beta1.ctrlpanelai.com/",
          "method": "GET",
          "status": 200,
          "contentType": "text/html",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/build.json",
          "method": "GET",
          "status": 200,
          "contentType": "application/json",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/",
          "method": "GET",
          "status": 200,
          "contentType": "text/html",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/manifest.json",
          "method": "GET",
          "status": 200,
          "contentType": "application/json",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/requirement-coverage.json",
          "method": "GET",
          "status": 200,
          "contentType": "application/json",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/state-summary.json",
          "method": "GET",
          "status": 200,
          "contentType": "application/json",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/changelog.txt",
          "method": "GET",
          "status": 200,
          "contentType": "text/plain",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/bed-orientation-0.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/bed-orientation-180.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/bed-orientation-270.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/bed-orientation-90.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/board.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/depth-behind.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/depth-front.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/editor-invalid.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/expansion-east.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/expansion-north.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/expansion-west.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/reload.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-board.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-editor-invalid.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-expansion-east.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-expansion-north.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-expansion-west.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-reload.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-sleep.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-sofa-relax.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-starter.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-walk-work.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/sleep.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/sofa-orientation-0.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/sofa-orientation-180.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/sofa-orientation-270.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/sofa-orientation-90.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/sofa-relax.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/starter.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/viewport-1024.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/viewport-1366.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/viewport-1920.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/viewport-390.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/walk-work.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/workstation-orientation-0.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/workstation-orientation-180.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/workstation-orientation-270.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/workstation-orientation-90.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/",
          "method": "GET",
          "status": 200,
          "contentType": "text/html",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/panel/terminal.php",
          "method": "GET",
          "status": 404,
          "contentType": "text/html",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/panel/files.php",
          "method": "GET",
          "status": 404,
          "contentType": "text/html",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/.env",
          "method": "GET",
          "status": 404,
          "contentType": "text/html",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/.git/config",
          "method": "GET",
          "status": 404,
          "contentType": "text/html",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/api/",
          "method": "GET",
          "status": 404,
          "contentType": "text/html",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/src/main.ts",
          "method": "GET",
          "status": 404,
          "contentType": "text/html",
          "redirected": false
        },
        {
          "url": "https://ctrlpanelai.com/panel/dashboard.php",
          "method": "GET",
          "status": 404,
          "contentType": "text/html; charset=UTF-8",
          "redirected": false
        },
        {
          "url": "https://ctrlpanelai.com/panel/terminal.php",
          "method": "GET",
          "status": 404,
          "contentType": "text/html; charset=UTF-8",
          "redirected": false
        },
        {
          "url": "https://ctrlpanelai.com/panel/files.php",
          "method": "GET",
          "status": 404,
          "contentType": "text/html; charset=UTF-8",
          "redirected": false
        }
      ]
    },
    "restoredReleaseProbe": {
      "buildId": "px-54c6825277ed",
      "testedAt": "2026-09-06T13:42:43Z",
      "command": "python3 tools/external-probe.py BUILD_ID live",
      "vantage": "Independent VPS, HTTPS without login/cookies; urllib with explicit review User-Agent, no JavaScript",
      "mode": "live",
      "status": "PASS",
      "checks": [
        {
          "name": "Anonymous app/review/build and every screenshot from an independent host",
          "status": "PASS"
        },
        {
          "name": "Preview private routes deny access",
          "status": "PASS"
        },
        {
          "name": "Production dashboard, terminal and files retain anonymous 404 gate",
          "status": "PASS"
        }
      ],
      "requests": [
        {
          "url": "https://beta1.ctrlpanelai.com/",
          "method": "GET",
          "status": 200,
          "contentType": "text/html",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/build.json",
          "method": "GET",
          "status": 200,
          "contentType": "application/json",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/",
          "method": "GET",
          "status": 200,
          "contentType": "text/html",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/manifest.json",
          "method": "GET",
          "status": 200,
          "contentType": "application/json",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/requirement-coverage.json",
          "method": "GET",
          "status": 200,
          "contentType": "application/json",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/state-summary.json",
          "method": "GET",
          "status": 200,
          "contentType": "application/json",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/changelog.txt",
          "method": "GET",
          "status": 200,
          "contentType": "text/plain",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/bed-orientation-0.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/bed-orientation-180.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/bed-orientation-270.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/bed-orientation-90.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/board.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/depth-behind.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/depth-front.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/editor-invalid.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/expansion-east.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/expansion-north.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/expansion-west.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/p1-save-recovery.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/p1-sofa-exit-e.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/p1-sofa-exit-n.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/p1-sofa-exit-w.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/p1-sofa-sit-e.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/p1-sofa-sit-n.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/p1-sofa-sit-w.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/p1-wall-rejected-e.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/p1-wall-rejected-n.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/p1-wall-rejected-w.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/reload.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-board.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-editor-invalid.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-expansion-east.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-expansion-north.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-expansion-west.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-reload.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-sleep.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-sofa-relax.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-starter.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/review-walk-work.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/sleep.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/sofa-orientation-0.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/sofa-orientation-180.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/sofa-orientation-270.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/sofa-orientation-90.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/sofa-relax.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/starter.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/viewport-1024.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/viewport-1366.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/viewport-1920.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/viewport-390.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/walk-work.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/workstation-orientation-0.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/workstation-orientation-180.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/workstation-orientation-270.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/review/screenshots/workstation-orientation-90.png",
          "method": "GET",
          "status": 200,
          "contentType": "image/png",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/",
          "method": "GET",
          "status": 200,
          "contentType": "text/html",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/panel/terminal.php",
          "method": "GET",
          "status": 404,
          "contentType": "text/html",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/panel/files.php",
          "method": "GET",
          "status": 404,
          "contentType": "text/html",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/.env",
          "method": "GET",
          "status": 404,
          "contentType": "text/html",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/.git/config",
          "method": "GET",
          "status": 404,
          "contentType": "text/html",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/api/",
          "method": "GET",
          "status": 404,
          "contentType": "text/html",
          "redirected": false
        },
        {
          "url": "https://beta1.ctrlpanelai.com/src/main.ts",
          "method": "GET",
          "status": 404,
          "contentType": "text/html",
          "redirected": false
        },
        {
          "url": "https://ctrlpanelai.com/panel/dashboard.php",
          "method": "GET",
          "status": 404,
          "contentType": "text/html; charset=UTF-8",
          "redirected": false
        },
        {
          "url": "https://ctrlpanelai.com/panel/terminal.php",
          "method": "GET",
          "status": 404,
          "contentType": "text/html; charset=UTF-8",
          "redirected": false
        },
        {
          "url": "https://ctrlpanelai.com/panel/files.php",
          "method": "GET",
          "status": 404,
          "contentType": "text/html; charset=UTF-8",
          "redirected": false
        }
      ]
    },
    "currentBuildId": "px-54c6825277ed"
  },
  "production": {
    "coreStatus": "PASS",
    "outsideChangesStatus": "UNCHANGED",
    "changedCount": 0,
    "filesCompared": 2632,
    "details": "Internal file paths retained privately; no unrelated changes reverted."
  },
  "m6": {
    "publicAccess": "PASS",
    "artifactConsistency": "PASS",
    "isolation": "PASS",
    "productionCoreBaseline": "PASS",
    "outsidePreviewChanges": "UNCHANGED"
  },
  "expiry": {
    "mode": "manual",
    "date": "2026-09-13",
    "procedure": "Operator mengganti release preview dengan halaman ditutup. Tidak mengubah panel utama."
  },
  "knownIssues": [
    "Tes paket reviewer: BLOCKED. Paket PIXELCTRLPANEL_REVIEW_8d9328e dan dua skrip audit belum ditemukan di workspace; path telah diminta kepada pengguna. Tidak ada tes pengganti yang diklaim sebagai 13 tes reviewer.",
    "Pembaca web sesi CuXi menolak URL beta1 sebagai not safe to open. Smoke browser anonim dan probe HTTPS independen dilaporkan terpisah; sesi ChatGPT pengguna belum diuji.",
    "Perangkat pengguna NOT_MEASURED. Hasil headless VPS tidak membuktikan kenyamanan desktop atau ponsel pengguna.",
    "Penutupan preview manual; tanggal di halaman tidak menjalankan scheduler.",
    "Cookie HttpOnly dari domain induk dapat terkirim ke preview. App/server statis tidak membaca, memproses, merefleksikan atau mencatat isinya; konfigurasi cookie produksi tidak diubah.",
    "Aset tetap geometris; editor desktop menjadi target utama dan mobile mendukung kontrol dasar."
  ],
  "limitations": [
    "Mock economy local and visitor-editable.",
    "No real AI, final assets, additional staff or five-house world.",
    "URL reading does not prove a reviewer clicked UI or tested animation."
  ]
}