{
  "version": "riddle-proof.profile-result.v1",
  "profile_name": "lilarcade-v252-builder-save-cancel-clears-draft",
  "runner": "riddle",
  "status": "product_regression",
  "baseline_policy": "invariant_only",
  "route": {
    "requested": "https://lilarcade.com/create",
    "observed": "/play/riddle-proof-v252-clean-after-cancel",
    "expected_path": "/play/riddle-proof-v252-clean-after-cancel",
    "matched": true,
    "http_status": 200
  },
  "artifacts": {
    "screenshots": [
      "lilarcade-v252-builder-save-cancel-clears-draft-desktop",
      "lilarcade-v252-builder-save-cancel-clears-draft-phone",
      "lilarcade-v252-builder-save-cancel-clears-draft-ipad-mini",
      "lilarcade-v252-builder-save-cancel-clears-draft-ipad"
    ],
    "console": "console.json",
    "proof_json": "proof.json",
    "dom_summary": "dom-summary.json"
  },
  "checks": [
    {
      "type": "network_mocks_succeeded",
      "label": "network mocks succeeded",
      "status": "failed",
      "evidence": {
        "mock_count": 6,
        "required_count": 6,
        "hit_count": 28,
        "hits_by_label": {
          "builder-chat": 4,
          "builder-build": 4,
          "builder-save-after-cancel": 4,
          "builder-v252-preview-html": 4,
          "saved-manifest-clean-after-cancel": 4,
          "saved-clean-after-cancel-html": 8
        },
        "required_hits_by_label": {
          "builder-chat": 4,
          "builder-build": 4,
          "builder-save-after-cancel": 4,
          "builder-v252-preview-html": 4,
          "saved-manifest-clean-after-cancel": 4,
          "saved-clean-after-cancel-html": 8
        },
        "failed": [
          {
            "label": "builder-save-after-cancel",
            "response_label": "builder-save-after-cancel",
            "hit_index": 0,
            "response_index": null,
            "url": "https://builder.lilarcade.com/api/save",
            "method": "POST",
            "reason": "request_body_mismatch",
            "request_body_failures": [
              {
                "type": "request_body_forbidden_text",
                "text": "\"emoji\":\"RP\""
              },
              {
                "type": "request_body_forbidden_text",
                "text": "RP252 stale canceled description"
              }
            ],
            "request_body_length": 133,
            "request_body_sample": "{\"name\":\"RP252 Clean After Cancel\",\"emoji\":\"RP\",\"description\":\"RP252 stale canceled description\",\"buildId\":\"build-riddle-proof-v252\"}"
          },
          {
            "label": "builder-save-after-cancel",
            "response_label": "builder-save-after-cancel",
            "hit_index": 1,
            "response_index": null,
            "url": "https://builder.lilarcade.com/api/save",
            "method": "POST",
            "reason": "request_body_mismatch",
            "request_body_failures": [
              {
                "type": "request_body_forbidden_text",
                "text": "\"emoji\":\"RP\""
              },
              {
                "type": "request_body_forbidden_text",
                "text": "RP252 stale canceled description"
              }
            ],
            "request_body_length": 133,
            "request_body_sample": "{\"name\":\"RP252 Clean After Cancel\",\"emoji\":\"RP\",\"description\":\"RP252 stale canceled description\",\"buildId\":\"build-riddle-proof-v252\"}"
          },
          {
            "label": "builder-save-after-cancel",
            "response_label": "builder-save-after-cancel",
            "hit_index": 2,
            "response_index": null,
            "url": "https://builder.lilarcade.com/api/save",
            "method": "POST",
            "reason": "request_body_mismatch",
            "request_body_failures": [
              {
                "type": "request_body_forbidden_text",
                "text": "\"emoji\":\"RP\""
              },
              {
                "type": "request_body_forbidden_text",
                "text": "RP252 stale canceled description"
              }
            ],
            "request_body_length": 133,
            "request_body_sample": "{\"name\":\"RP252 Clean After Cancel\",\"emoji\":\"RP\",\"description\":\"RP252 stale canceled description\",\"buildId\":\"build-riddle-proof-v252\"}"
          },
          {
            "label": "builder-save-after-cancel",
            "response_label": "builder-save-after-cancel",
            "hit_index": 3,
            "response_index": null,
            "url": "https://builder.lilarcade.com/api/save",
            "method": "POST",
            "reason": "request_body_mismatch",
            "request_body_failures": [
              {
                "type": "request_body_forbidden_text",
                "text": "\"emoji\":\"RP\""
              },
              {
                "type": "request_body_forbidden_text",
                "text": "RP252 stale canceled description"
              }
            ],
            "request_body_length": 133,
            "request_body_sample": "{\"name\":\"RP252 Clean After Cancel\",\"emoji\":\"RP\",\"description\":\"RP252 stale canceled description\",\"buildId\":\"build-riddle-proof-v252\"}"
          }
        ]
      },
      "message": "Network mocks failed or were not hit for 4 mock(s)."
    },
    {
      "type": "setup_actions_succeeded",
      "label": "setup actions succeeded",
      "status": "passed",
      "evidence": {
        "action_count": 22,
        "viewports": [
          {
            "name": "desktop",
            "ok": true,
            "result_count": 22
          },
          {
            "name": "phone",
            "ok": true,
            "result_count": 22
          },
          {
            "name": "ipad-mini",
            "ok": true,
            "result_count": 22
          },
          {
            "name": "ipad",
            "ok": true,
            "result_count": 22
          }
        ],
        "failed": []
      }
    },
    {
      "type": "route_loaded",
      "label": "route_loaded",
      "status": "passed",
      "evidence": {
        "expected_path": "/play/riddle-proof-v252-clean-after-cancel",
        "observed_paths": [
          "/play/riddle-proof-v252-clean-after-cancel",
          "/play/riddle-proof-v252-clean-after-cancel",
          "/play/riddle-proof-v252-clean-after-cancel",
          "/play/riddle-proof-v252-clean-after-cancel"
        ],
        "http_statuses": [
          200,
          200,
          200,
          200
        ]
      }
    },
    {
      "type": "selector_visible",
      "label": "selector_visible",
      "status": "passed",
      "evidence": {
        "selector": ".game-player-root",
        "visible_counts": [
          1,
          1,
          1,
          1
        ]
      }
    },
    {
      "type": "text_visible",
      "label": "text_visible",
      "status": "passed",
      "evidence": {
        "text": "OK RP252 Clean After Cancel",
        "matches": [
          true,
          true,
          true,
          true
        ]
      }
    },
    {
      "type": "text_absent",
      "label": "text_absent",
      "status": "passed",
      "evidence": {
        "text": "Game not found",
        "matches": [
          false,
          false,
          false,
          false
        ]
      }
    },
    {
      "type": "selector_count_equals",
      "label": "selector_count_equals",
      "status": "passed",
      "evidence": {
        "selector": ".game-player-root iframe",
        "expected_count": 1,
        "counts": [
          1,
          1,
          1,
          1
        ]
      }
    },
    {
      "type": "frame_text_visible",
      "label": "frame_text_visible",
      "status": "passed",
      "evidence": {
        "selector": ".game-player-root iframe",
        "text": "RP252 Clean After Cancel Frame",
        "pattern": null,
        "viewports": [
          {
            "viewport": "desktop",
            "frame_count": 1,
            "matched_count": 1,
            "matched": true,
            "urls": [
              "https://lilarcade-game-previews.s3.us-east-1.amazonaws.com/saved/riddle-proof-v252-clean-after-cancel/index.html"
            ],
            "samples": [
              "RP252 Clean After Cancel Frame RP252 Clean After Cancel Frame The later save did not inherit canceled form fields. save cancel draft rail RP252 Clean After Cancel Frame The later save did not inherit canceled form fields. save cancel draft "
            ]
          },
          {
            "viewport": "phone",
            "frame_count": 1,
            "matched_count": 1,
            "matched": true,
            "urls": [
              "https://lilarcade-game-previews.s3.us-east-1.amazonaws.com/saved/riddle-proof-v252-clean-after-cancel/index.html"
            ],
            "samples": [
              "RP252 Clean After Cancel Frame RP252 Clean After Cancel Frame The later save did not inherit canceled form fields. save cancel draft rail RP252 Clean After Cancel Frame The later save did not inherit canceled form fields. save cancel draft "
            ]
          },
          {
            "viewport": "ipad-mini",
            "frame_count": 1,
            "matched_count": 1,
            "matched": true,
            "urls": [
              "https://lilarcade-game-previews.s3.us-east-1.amazonaws.com/saved/riddle-proof-v252-clean-after-cancel/index.html"
            ],
            "samples": [
              "RP252 Clean After Cancel Frame RP252 Clean After Cancel Frame The later save did not inherit canceled form fields. save cancel draft rail RP252 Clean After Cancel Frame The later save did not inherit canceled form fields. save cancel draft "
            ]
          },
          {
            "viewport": "ipad",
            "frame_count": 1,
            "matched_count": 1,
            "matched": true,
            "urls": [
              "https://lilarcade-game-previews.s3.us-east-1.amazonaws.com/saved/riddle-proof-v252-clean-after-cancel/index.html"
            ],
            "samples": [
              "RP252 Clean After Cancel Frame RP252 Clean After Cancel Frame The later save did not inherit canceled form fields. save cancel draft rail RP252 Clean After Cancel Frame The later save did not inherit canceled form fields. save cancel draft "
            ]
          }
        ]
      }
    },
    {
      "type": "frame_no_horizontal_overflow",
      "label": "frame_no_horizontal_overflow",
      "status": "passed",
      "evidence": {
        "selector": ".game-player-root iframe",
        "max_overflow_px": 1,
        "viewports": [
          {
            "viewport": "desktop",
            "frame_count": 1,
            "max_overflow_px": 0,
            "failed_frame_count": 0,
            "frames": [
              {
                "index": 0,
                "url": "https://lilarcade-game-previews.s3.us-east-1.amazonaws.com/saved/riddle-proof-v252-clean-after-cancel/index.html",
                "overflow_px": 0,
                "offender_count": 0
              }
            ]
          },
          {
            "viewport": "phone",
            "frame_count": 1,
            "max_overflow_px": 0,
            "failed_frame_count": 0,
            "frames": [
              {
                "index": 0,
                "url": "https://lilarcade-game-previews.s3.us-east-1.amazonaws.com/saved/riddle-proof-v252-clean-after-cancel/index.html",
                "overflow_px": 0,
                "offender_count": 0
              }
            ]
          },
          {
            "viewport": "ipad-mini",
            "frame_count": 1,
            "max_overflow_px": 0,
            "failed_frame_count": 0,
            "frames": [
              {
                "index": 0,
                "url": "https://lilarcade-game-previews.s3.us-east-1.amazonaws.com/saved/riddle-proof-v252-clean-after-cancel/index.html",
                "overflow_px": 0,
                "offender_count": 0
              }
            ]
          },
          {
            "viewport": "ipad",
            "frame_count": 1,
            "max_overflow_px": 0,
            "failed_frame_count": 0,
            "frames": [
              {
                "index": 0,
                "url": "https://lilarcade-game-previews.s3.us-east-1.amazonaws.com/saved/riddle-proof-v252-clean-after-cancel/index.html",
                "overflow_px": 0,
                "offender_count": 0
              }
            ]
          }
        ]
      }
    },
    {
      "type": "no_horizontal_overflow",
      "label": "no_horizontal_overflow",
      "status": "passed",
      "evidence": {
        "max_overflow_px": 1,
        "overflow_px": [
          0,
          0,
          0,
          0
        ],
        "bounds_overflow_px": [
          0,
          0,
          0,
          0
        ],
        "overflow_offender_counts": [
          0,
          0,
          0,
          0
        ],
        "viewports": [
          "desktop",
          "phone",
          "ipad-mini",
          "ipad"
        ]
      }
    },
    {
      "type": "no_fatal_console_errors",
      "label": "no_fatal_console_errors",
      "status": "passed",
      "evidence": {
        "console_fatal_count": 0,
        "page_error_count": 0,
        "total_console_fatal_count": 0,
        "total_page_error_count": 0,
        "allowed_console_fatal_count": 0,
        "allowed_page_error_count": 0,
        "allowed_console_texts": [],
        "allowed_console_patterns": [],
        "allowed_page_error_texts": [],
        "allowed_page_error_patterns": []
      }
    }
  ],
  "summary": "lilarcade-v252-builder-save-cancel-clears-draft failed 1 product invariant(s) across 4 viewport(s).",
  "captured_at": "2026-05-14T15:12:33.941Z",
  "evidence": {
    "version": "riddle-proof.profile-evidence.v1",
    "profile_name": "lilarcade-v252-builder-save-cancel-clears-draft",
    "target_url": "https://lilarcade.com/create",
    "baseline_policy": "invariant_only",
    "captured_at": "2026-05-14T15:12:33.941Z",
    "viewports": [
      {
        "name": "desktop",
        "width": 1280,
        "height": 900,
        "url": "https://lilarcade.com/play/riddle-proof-v252-clean-after-cancel",
        "route": {
          "requested": "https://lilarcade.com/create",
          "observed": "/play/riddle-proof-v252-clean-after-cancel",
          "expected_path": "/play/riddle-proof-v252-clean-after-cancel",
          "matched": true,
          "http_status": 200
        },
        "title": "LilArcade",
        "body_text_length": 48,
        "body_text_sample": "🕹️ LilArcade ← Back OK RP252 Clean After Cancel",
        "scroll_width": 1280,
        "client_width": 1280,
        "overflow_px": 0,
        "bounds_overflow_px": 0,
        "overflow_offenders": [],
        "selectors": {
          ".game-player-root": {
            "count": 1,
            "visible_count": 1
          },
          ".game-player-root iframe": {
            "count": 1,
            "visible_count": 1
          }
        },
        "frames": {
          ".game-player-root iframe": {
            "selector": ".game-player-root iframe",
            "count": 1,
            "frame_count": 1,
            "frames": [
              {
                "index": 0,
                "attached": true,
                "url": "https://lilarcade-game-previews.s3.us-east-1.amazonaws.com/saved/riddle-proof-v252-clean-after-cancel/index.html",
                "title": "RP252 Clean After Cancel Frame",
                "text_length": 106,
                "text_sample": "RP252 Clean After Cancel Frame The later save did not inherit canceled form fields. save cancel draft rail",
                "body_text_sample": "RP252 Clean After Cancel Frame The later save did not inherit canceled form fields. save cancel draft rail",
                "viewport_width": 760,
                "viewport_height": 796,
                "scroll_width": 760,
                "client_width": 760,
                "overflow_px": 0,
                "bounds_overflow_px": 0,
                "overflow_offender_count": 0,
                "overflow_offenders": []
              }
            ],
            "errors": []
          }
        },
        "text_sequences": {},
        "text_matches": {
          "text:OK RP252 Clean After Cancel": true,
          "text:Game not found": false
        },
        "setup_action_results": [
          {
            "ok": true,
            "action": "clear_storage",
            "ordinal": 0,
            "selector": null,
            "storage": "both",
            "reload": true
          },
          {
            "ok": true,
            "action": "local_storage",
            "ordinal": 1,
            "selector": null,
            "key": "lilarcade_builder_tokens",
            "value_length": 172,
            "reload": true
          },
          {
            "ok": true,
            "action": "wait_for_selector",
            "ordinal": 2,
            "selector": ".chat-input-row input:not([disabled])",
            "timeout_ms": 30000
          },
          {
            "ok": true,
            "action": "fill",
            "ordinal": 3,
            "selector": ".chat-input-row input",
            "count": 1,
            "target_index": 0,
            "value_length": 30
          },
          {
            "ok": true,
            "action": "click",
            "ordinal": 4,
            "selector": ".chat-input-row button",
            "count": 1,
            "target_index": 0,
            "text": "Send"
          },
          {
            "ok": true,
            "action": "wait_for_text",
            "ordinal": 5,
            "selector": "body",
            "text": "You need to enable JavaScript to run this app. 🕹️ LilArcadeGame BuilderLogoutMake a save cancel draft proofBuilt a save cancel draft proof game.SendPreviewOpen in new tabSave to Arcade",
            "target_index": 0,
            "timeout_ms": 20000
          },
          {
            "ok": true,
            "action": "wait_for_selector",
            "ordinal": 6,
            "selector": ".preview-panel iframe",
            "timeout_ms": 20000
          },
          {
            "ok": true,
            "action": "wait_for_selector",
            "ordinal": 7,
            "selector": ".chat-input-row input:not([disabled])",
            "timeout_ms": 20000
          },
          {
            "ok": true,
            "action": "click",
            "ordinal": 8,
            "selector": "button",
            "count": 3,
            "target_index": 2,
            "text": "Save to Arcade"
          },
          {
            "ok": true,
            "action": "wait_for_selector",
            "ordinal": 9,
            "selector": ".save-form input[placeholder='Game name (required)']",
            "timeout_ms": 10000
          },
          {
            "ok": true,
            "action": "fill",
            "ordinal": 10,
            "selector": ".save-form input[placeholder='Game name (required)']",
            "count": 1,
            "target_index": 0,
            "value_length": 20
          },
          {
            "ok": true,
            "action": "fill",
            "ordinal": 11,
            "selector": ".save-form input[placeholder='Emoji (optional)']",
            "count": 1,
            "target_index": 0,
            "value_length": 2
          },
          {
            "ok": true,
            "action": "fill",
            "ordinal": 12,
            "selector": ".save-form input[placeholder='Description (optional)']",
            "count": 1,
            "target_index": 0,
            "value_length": 32
          },
          {
            "ok": true,
            "action": "click",
            "ordinal": 13,
            "selector": ".save-form button",
            "count": 2,
            "target_index": 1,
            "text": "Cancel"
          },
          {
            "ok": true,
            "action": "click",
            "ordinal": 14,
            "selector": "button",
            "count": 3,
            "target_index": 2,
            "text": "Save to Arcade"
          },
          {
            "ok": true,
            "action": "wait_for_selector",
            "ordinal": 15,
            "selector": ".save-form input[placeholder='Game name (required)']",
            "timeout_ms": 10000
          },
          {
            "ok": true,
            "action": "fill",
            "ordinal": 16,
            "selector": ".save-form input[placeholder='Game name (required)']",
            "count": 1,
            "target_index": 0,
            "value_length": 24
          },
          {
            "ok": true,
            "action": "click",
            "ordinal": 17,
            "selector": ".save-form button[type='submit']",
            "count": 1,
            "target_index": 0,
            "text": "Save"
          },
          {
            "ok": true,
            "action": "wait_for_text",
            "ordinal": 18,
            "selector": "body",
            "text": "You need to enable JavaScript to run this app. 🕹️ LilArcadeGame BuilderLogoutMake a save cancel draft proofBuilt a save cancel draft proof game.SendPreviewOpen in new tabSaved!View on home page",
            "target_index": 0,
            "timeout_ms": 20000
          },
          {
            "ok": true,
            "action": "click",
            "ordinal": 19,
            "selector": "a[href*='/play/riddle-proof-v252-clean-after-cancel']",
            "count": 1,
            "target_index": 0,
            "text": "View on home page"
          },
          {
            "ok": true,
            "action": "wait_for_selector",
            "ordinal": 20,
            "selector": ".game-player-root iframe",
            "timeout_ms": 20000
          },
          {
            "ok": true,
            "action": "wait_for_text",
            "ordinal": 21,
            "selector": "body",
            "text": "You need to enable JavaScript to run this app. 🕹️ LilArcade← BackOK RP252 Clean After Cancel",
            "target_index": 0,
            "timeout_ms": 10000
          }
        ],
        "screenshot_label": "lilarcade-v252-builder-save-cancel-clears-draft-desktop"
      },
      {
        "name": "phone",
        "width": 390,
        "height": 844,
        "url": "https://lilarcade.com/play/riddle-proof-v252-clean-after-cancel",
        "route": {
          "requested": "https://lilarcade.com/create",
          "observed": "/play/riddle-proof-v252-clean-after-cancel",
          "expected_path": "/play/riddle-proof-v252-clean-after-cancel",
          "matched": true,
          "http_status": 200
        },
        "title": "LilArcade",
        "body_text_length": 48,
        "body_text_sample": "🕹️ LilArcade ← Back OK RP252 Clean After Cancel",
        "scroll_width": 390,
        "client_width": 390,
        "overflow_px": 0,
        "bounds_overflow_px": 0,
        "overflow_offenders": [],
        "selectors": {
          ".game-player-root": {
            "count": 1,
            "visible_count": 1
          },
          ".game-player-root iframe": {
            "count": 1,
            "visible_count": 1
          }
        },
        "frames": {
          ".game-player-root iframe": {
            "selector": ".game-player-root iframe",
            "count": 1,
            "frame_count": 1,
            "frames": [
              {
                "index": 0,
                "attached": true,
                "url": "https://lilarcade-game-previews.s3.us-east-1.amazonaws.com/saved/riddle-proof-v252-clean-after-cancel/index.html",
                "title": "RP252 Clean After Cancel Frame",
                "text_length": 106,
                "text_sample": "RP252 Clean After Cancel Frame The later save did not inherit canceled form fields. save cancel draft rail",
                "body_text_sample": "RP252 Clean After Cancel Frame The later save did not inherit canceled form fields. save cancel draft rail",
                "viewport_width": 760,
                "viewport_height": 1471,
                "scroll_width": 760,
                "client_width": 760,
                "overflow_px": 0,
                "bounds_overflow_px": 0,
                "overflow_offender_count": 0,
                "overflow_offenders": []
              }
            ],
            "errors": []
          }
        },
        "text_sequences": {},
        "text_matches": {
          "text:OK RP252 Clean After Cancel": true,
          "text:Game not found": false
        },
        "setup_action_results": [
          {
            "ok": true,
            "action": "clear_storage",
            "ordinal": 0,
            "selector": null,
            "storage": "both",
            "reload": true
          },
          {
            "ok": true,
            "action": "local_storage",
            "ordinal": 1,
            "selector": null,
            "key": "lilarcade_builder_tokens",
            "value_length": 172,
            "reload": true
          },
          {
            "ok": true,
            "action": "wait_for_selector",
            "ordinal": 2,
            "selector": ".chat-input-row input:not([disabled])",
            "timeout_ms": 30000
          },
          {
            "ok": true,
            "action": "fill",
            "ordinal": 3,
            "selector": ".chat-input-row input",
            "count": 1,
            "target_index": 0,
            "value_length": 30
          },
          {
            "ok": true,
            "action": "click",
            "ordinal": 4,
            "selector": ".chat-input-row button",
            "count": 1,
            "target_index": 0,
            "text": "Send"
          },
          {
            "ok": true,
            "action": "wait_for_text",
            "ordinal": 5,
            "selector": "body",
            "text": "You need to enable JavaScript to run this app. 🕹️ LilArcadeGame BuilderLogoutMake a save cancel draft proofBuilt a save cancel draft proof game.Building game...SendPreviewYour game will appear here",
            "target_index": 0,
            "timeout_ms": 20000
          },
          {
            "ok": true,
            "action": "wait_for_selector",
            "ordinal": 6,
            "selector": ".preview-panel iframe",
            "timeout_ms": 20000
          },
          {
            "ok": true,
            "action": "wait_for_selector",
            "ordinal": 7,
            "selector": ".chat-input-row input:not([disabled])",
            "timeout_ms": 20000
          },
          {
            "ok": true,
            "action": "click",
            "ordinal": 8,
            "selector": "button",
            "count": 3,
            "target_index": 2,
            "text": "Save to Arcade"
          },
          {
            "ok": true,
            "action": "wait_for_selector",
            "ordinal": 9,
            "selector": ".save-form input[placeholder='Game name (required)']",
            "timeout_ms": 10000
          },
          {
            "ok": true,
            "action": "fill",
            "ordinal": 10,
            "selector": ".save-form input[placeholder='Game name (required)']",
            "count": 1,
            "target_index": 0,
            "value_length": 20
          },
          {
            "ok": true,
            "action": "fill",
            "ordinal": 11,
            "selector": ".save-form input[placeholder='Emoji (optional)']",
            "count": 1,
            "target_index": 0,
            "value_length": 2
          },
          {
            "ok": true,
            "action": "fill",
            "ordinal": 12,
            "selector": ".save-form input[placeholder='Description (optional)']",
            "count": 1,
            "target_index": 0,
            "value_length": 32
          },
          {
            "ok": true,
            "action": "click",
            "ordinal": 13,
            "selector": ".save-form button",
            "count": 2,
            "target_index": 1,
            "text": "Cancel"
          },
          {
            "ok": true,
            "action": "click",
            "ordinal": 14,
            "selector": "button",
            "count": 3,
            "target_index": 2,
            "text": "Save to Arcade"
          },
          {
            "ok": true,
            "action": "wait_for_selector",
            "ordinal": 15,
            "selector": ".save-form input[placeholder='Game name (required)']",
            "timeout_ms": 10000
          },
          {
            "ok": true,
            "action": "fill",
            "ordinal": 16,
            "selector": ".save-form input[placeholder='Game name (required)']",
            "count": 1,
            "target_index": 0,
            "value_length": 24
          },
          {
            "ok": true,
            "action": "click",
            "ordinal": 17,
            "selector": ".save-form button[type='submit']",
            "count": 1,
            "target_index": 0,
            "text": "Save"
          },
          {
            "ok": true,
            "action": "wait_for_text",
            "ordinal": 18,
            "selector": "body",
            "text": "You need to enable JavaScript to run this app. 🕹️ LilArcadeGame BuilderLogoutMake a save cancel draft proofBuilt a save cancel draft proof game.SendPreviewOpen in new tabSaved!View on home page",
            "target_index": 0,
            "timeout_ms": 20000
          },
          {
            "ok": true,
            "action": "click",
            "ordinal": 19,
            "selector": "a[href*='/play/riddle-proof-v252-clean-after-cancel']",
            "count": 1,
            "target_index": 0,
            "text": "View on home page"
          },
          {
            "ok": true,
            "action": "wait_for_selector",
            "ordinal": 20,
            "selector": ".game-player-root iframe",
            "timeout_ms": 20000
          },
          {
            "ok": true,
            "action": "wait_for_text",
            "ordinal": 21,
            "selector": "body",
            "text": "You need to enable JavaScript to run this app. 🕹️ LilArcade← BackOK RP252 Clean After Cancel",
            "target_index": 0,
            "timeout_ms": 10000
          }
        ],
        "screenshot_label": "lilarcade-v252-builder-save-cancel-clears-draft-phone"
      },
      {
        "name": "ipad-mini",
        "width": 768,
        "height": 1024,
        "url": "https://lilarcade.com/play/riddle-proof-v252-clean-after-cancel",
        "route": {
          "requested": "https://lilarcade.com/create",
          "observed": "/play/riddle-proof-v252-clean-after-cancel",
          "expected_path": "/play/riddle-proof-v252-clean-after-cancel",
          "matched": true,
          "http_status": 200
        },
        "title": "LilArcade",
        "body_text_length": 48,
        "body_text_sample": "🕹️ LilArcade ← Back OK RP252 Clean After Cancel",
        "scroll_width": 768,
        "client_width": 768,
        "overflow_px": 0,
        "bounds_overflow_px": 0,
        "overflow_offenders": [],
        "selectors": {
          ".game-player-root": {
            "count": 1,
            "visible_count": 1
          },
          ".game-player-root iframe": {
            "count": 1,
            "visible_count": 1
          }
        },
        "frames": {
          ".game-player-root iframe": {
            "selector": ".game-player-root iframe",
            "count": 1,
            "frame_count": 1,
            "frames": [
              {
                "index": 0,
                "attached": true,
                "url": "https://lilarcade-game-previews.s3.us-east-1.amazonaws.com/saved/riddle-proof-v252-clean-after-cancel/index.html",
                "title": "RP252 Clean After Cancel Frame",
                "text_length": 106,
                "text_sample": "RP252 Clean After Cancel Frame The later save did not inherit canceled form fields. save cancel draft rail",
                "body_text_sample": "RP252 Clean After Cancel Frame The later save did not inherit canceled form fields. save cancel draft rail",
                "viewport_width": 760,
                "viewport_height": 920,
                "scroll_width": 760,
                "client_width": 760,
                "overflow_px": 0,
                "bounds_overflow_px": 0,
                "overflow_offender_count": 0,
                "overflow_offenders": []
              }
            ],
            "errors": []
          }
        },
        "text_sequences": {},
        "text_matches": {
          "text:OK RP252 Clean After Cancel": true,
          "text:Game not found": false
        },
        "setup_action_results": [
          {
            "ok": true,
            "action": "clear_storage",
            "ordinal": 0,
            "selector": null,
            "storage": "both",
            "reload": true
          },
          {
            "ok": true,
            "action": "local_storage",
            "ordinal": 1,
            "selector": null,
            "key": "lilarcade_builder_tokens",
            "value_length": 172,
            "reload": true
          },
          {
            "ok": true,
            "action": "wait_for_selector",
            "ordinal": 2,
            "selector": ".chat-input-row input:not([disabled])",
            "timeout_ms": 30000
          },
          {
            "ok": true,
            "action": "fill",
            "ordinal": 3,
            "selector": ".chat-input-row input",
            "count": 1,
            "target_index": 0,
            "value_length": 30
          },
          {
            "ok": true,
            "action": "click",
            "ordinal": 4,
            "selector": ".chat-input-row button",
            "count": 1,
            "target_index": 0,
            "text": "Send"
          },
          {
            "ok": true,
            "action": "wait_for_text",
            "ordinal": 5,
            "selector": "body",
            "text": "You need to enable JavaScript to run this app. 🕹️ LilArcadeGame BuilderLogoutMake a save cancel draft proofBuilt a save cancel draft proof game.SendPreviewOpen in new tabSave to Arcade",
            "target_index": 0,
            "timeout_ms": 20000
          },
          {
            "ok": true,
            "action": "wait_for_selector",
            "ordinal": 6,
            "selector": ".preview-panel iframe",
            "timeout_ms": 20000
          },
          {
            "ok": true,
            "action": "wait_for_selector",
            "ordinal": 7,
            "selector": ".chat-input-row input:not([disabled])",
            "timeout_ms": 20000
          },
          {
            "ok": true,
            "action": "click",
            "ordinal": 8,
            "selector": "button",
            "count": 3,
            "target_index": 2,
            "text": "Save to Arcade"
          },
          {
            "ok": true,
            "action": "wait_for_selector",
            "ordinal": 9,
            "selector": ".save-form input[placeholder='Game name (required)']",
            "timeout_ms": 10000
          },
          {
            "ok": true,
            "action": "fill",
            "ordinal": 10,
            "selector": ".save-form input[placeholder='Game name (required)']",
            "count": 1,
            "target_index": 0,
            "value_length": 20
          },
          {
            "ok": true,
            "action": "fill",
            "ordinal": 11,
            "selector": ".save-form input[placeholder='Emoji (optional)']",
            "count": 1,
            "target_index": 0,
            "value_length": 2
          },
          {
            "ok": true,
            "action": "fill",
            "ordinal": 12,
            "selector": ".save-form input[placeholder='Description (optional)']",
            "count": 1,
            "target_index": 0,
            "value_length": 32
          },
          {
            "ok": true,
            "action": "click",
            "ordinal": 13,
            "selector": ".save-form button",
            "count": 2,
            "target_index": 1,
            "text": "Cancel"
          },
          {
            "ok": true,
            "action": "click",
            "ordinal": 14,
            "selector": "button",
            "count": 3,
            "target_index": 2,
            "text": "Save to Arcade"
          },
          {
            "ok": true,
            "action": "wait_for_selector",
            "ordinal": 15,
            "selector": ".save-form input[placeholder='Game name (required)']",
            "timeout_ms": 10000
          },
          {
            "ok": true,
            "action": "fill",
            "ordinal": 16,
            "selector": ".save-form input[placeholder='Game name (required)']",
            "count": 1,
            "target_index": 0,
            "value_length": 24
          },
          {
            "ok": true,
            "action": "click",
            "ordinal": 17,
            "selector": ".save-form button[type='submit']",
            "count": 1,
            "target_index": 0,
            "text": "Save"
          },
          {
            "ok": true,
            "action": "wait_for_text",
            "ordinal": 18,
            "selector": "body",
            "text": "You need to enable JavaScript to run this app. 🕹️ LilArcadeGame BuilderLogoutMake a save cancel draft proofBuilt a save cancel draft proof game.SendPreviewOpen in new tabSaved!View on home page",
            "target_index": 0,
            "timeout_ms": 20000
          },
          {
            "ok": true,
            "action": "click",
            "ordinal": 19,
            "selector": "a[href*='/play/riddle-proof-v252-clean-after-cancel']",
            "count": 1,
            "target_index": 0,
            "text": "View on home page"
          },
          {
            "ok": true,
            "action": "wait_for_selector",
            "ordinal": 20,
            "selector": ".game-player-root iframe",
            "timeout_ms": 20000
          },
          {
            "ok": true,
            "action": "wait_for_text",
            "ordinal": 21,
            "selector": "body",
            "text": "You need to enable JavaScript to run this app. 🕹️ LilArcade← BackOK RP252 Clean After Cancel",
            "target_index": 0,
            "timeout_ms": 10000
          }
        ],
        "screenshot_label": "lilarcade-v252-builder-save-cancel-clears-draft-ipad-mini"
      },
      {
        "name": "ipad",
        "width": 820,
        "height": 1180,
        "url": "https://lilarcade.com/play/riddle-proof-v252-clean-after-cancel",
        "route": {
          "requested": "https://lilarcade.com/create",
          "observed": "/play/riddle-proof-v252-clean-after-cancel",
          "expected_path": "/play/riddle-proof-v252-clean-after-cancel",
          "matched": true,
          "http_status": 200
        },
        "title": "LilArcade",
        "body_text_length": 48,
        "body_text_sample": "🕹️ LilArcade ← Back OK RP252 Clean After Cancel",
        "scroll_width": 820,
        "client_width": 820,
        "overflow_px": 0,
        "bounds_overflow_px": 0,
        "overflow_offenders": [],
        "selectors": {
          ".game-player-root": {
            "count": 1,
            "visible_count": 1
          },
          ".game-player-root iframe": {
            "count": 1,
            "visible_count": 1
          }
        },
        "frames": {
          ".game-player-root iframe": {
            "selector": ".game-player-root iframe",
            "count": 1,
            "frame_count": 1,
            "frames": [
              {
                "index": 0,
                "attached": true,
                "url": "https://lilarcade-game-previews.s3.us-east-1.amazonaws.com/saved/riddle-proof-v252-clean-after-cancel/index.html",
                "title": "RP252 Clean After Cancel Frame",
                "text_length": 106,
                "text_sample": "RP252 Clean After Cancel Frame The later save did not inherit canceled form fields. save cancel draft rail",
                "body_text_sample": "RP252 Clean After Cancel Frame The later save did not inherit canceled form fields. save cancel draft rail",
                "viewport_width": 760,
                "viewport_height": 1076,
                "scroll_width": 760,
                "client_width": 760,
                "overflow_px": 0,
                "bounds_overflow_px": 0,
                "overflow_offender_count": 0,
                "overflow_offenders": []
              }
            ],
            "errors": []
          }
        },
        "text_sequences": {},
        "text_matches": {
          "text:OK RP252 Clean After Cancel": true,
          "text:Game not found": false
        },
        "setup_action_results": [
          {
            "ok": true,
            "action": "clear_storage",
            "ordinal": 0,
            "selector": null,
            "storage": "both",
            "reload": true
          },
          {
            "ok": true,
            "action": "local_storage",
            "ordinal": 1,
            "selector": null,
            "key": "lilarcade_builder_tokens",
            "value_length": 172,
            "reload": true
          },
          {
            "ok": true,
            "action": "wait_for_selector",
            "ordinal": 2,
            "selector": ".chat-input-row input:not([disabled])",
            "timeout_ms": 30000
          },
          {
            "ok": true,
            "action": "fill",
            "ordinal": 3,
            "selector": ".chat-input-row input",
            "count": 1,
            "target_index": 0,
            "value_length": 30
          },
          {
            "ok": true,
            "action": "click",
            "ordinal": 4,
            "selector": ".chat-input-row button",
            "count": 1,
            "target_index": 0,
            "text": "Send"
          },
          {
            "ok": true,
            "action": "wait_for_text",
            "ordinal": 5,
            "selector": "body",
            "text": "You need to enable JavaScript to run this app. 🕹️ LilArcadeGame BuilderLogoutMake a save cancel draft proofBuilt a save cancel draft proof game.Building game...SendPreviewYour game will appear here",
            "target_index": 0,
            "timeout_ms": 20000
          },
          {
            "ok": true,
            "action": "wait_for_selector",
            "ordinal": 6,
            "selector": ".preview-panel iframe",
            "timeout_ms": 20000
          },
          {
            "ok": true,
            "action": "wait_for_selector",
            "ordinal": 7,
            "selector": ".chat-input-row input:not([disabled])",
            "timeout_ms": 20000
          },
          {
            "ok": true,
            "action": "click",
            "ordinal": 8,
            "selector": "button",
            "count": 3,
            "target_index": 2,
            "text": "Save to Arcade"
          },
          {
            "ok": true,
            "action": "wait_for_selector",
            "ordinal": 9,
            "selector": ".save-form input[placeholder='Game name (required)']",
            "timeout_ms": 10000
          },
          {
            "ok": true,
            "action": "fill",
            "ordinal": 10,
            "selector": ".save-form input[placeholder='Game name (required)']",
            "count": 1,
            "target_index": 0,
            "value_length": 20
          },
          {
            "ok": true,
            "action": "fill",
            "ordinal": 11,
            "selector": ".save-form input[placeholder='Emoji (optional)']",
            "count": 1,
            "target_index": 0,
            "value_length": 2
          },
          {
            "ok": true,
            "action": "fill",
            "ordinal": 12,
            "selector": ".save-form input[placeholder='Description (optional)']",
            "count": 1,
            "target_index": 0,
            "value_length": 32
          },
          {
            "ok": true,
            "action": "click",
            "ordinal": 13,
            "selector": ".save-form button",
            "count": 2,
            "target_index": 1,
            "text": "Cancel"
          },
          {
            "ok": true,
            "action": "click",
            "ordinal": 14,
            "selector": "button",
            "count": 3,
            "target_index": 2,
            "text": "Save to Arcade"
          },
          {
            "ok": true,
            "action": "wait_for_selector",
            "ordinal": 15,
            "selector": ".save-form input[placeholder='Game name (required)']",
            "timeout_ms": 10000
          },
          {
            "ok": true,
            "action": "fill",
            "ordinal": 16,
            "selector": ".save-form input[placeholder='Game name (required)']",
            "count": 1,
            "target_index": 0,
            "value_length": 24
          },
          {
            "ok": true,
            "action": "click",
            "ordinal": 17,
            "selector": ".save-form button[type='submit']",
            "count": 1,
            "target_index": 0,
            "text": "Save"
          },
          {
            "ok": true,
            "action": "wait_for_text",
            "ordinal": 18,
            "selector": "body",
            "text": "You need to enable JavaScript to run this app. 🕹️ LilArcadeGame BuilderLogoutMake a save cancel draft proofBuilt a save cancel draft proof game.SendPreviewOpen in new tabSaved!View on home page",
            "target_index": 0,
            "timeout_ms": 20000
          },
          {
            "ok": true,
            "action": "click",
            "ordinal": 19,
            "selector": "a[href*='/play/riddle-proof-v252-clean-after-cancel']",
            "count": 1,
            "target_index": 0,
            "text": "View on home page"
          },
          {
            "ok": true,
            "action": "wait_for_selector",
            "ordinal": 20,
            "selector": ".game-player-root iframe",
            "timeout_ms": 20000
          },
          {
            "ok": true,
            "action": "wait_for_text",
            "ordinal": 21,
            "selector": "body",
            "text": "You need to enable JavaScript to run this app. 🕹️ LilArcade← BackOK RP252 Clean After Cancel",
            "target_index": 0,
            "timeout_ms": 10000
          }
        ],
        "screenshot_label": "lilarcade-v252-builder-save-cancel-clears-draft-ipad"
      }
    ],
    "console": {
      "events": [],
      "fatal_count": 0
    },
    "page_errors": [],
    "network_mocks": [
      {
        "ok": true,
        "label": "builder-chat",
        "response_label": "builder-chat",
        "hit_index": 0,
        "response_index": null,
        "sequence_reused": false,
        "sequence_cycle": false,
        "url": "https://builder.lilarcade.com/v1/chat/completions",
        "method": "POST",
        "status": 200
      },
      {
        "ok": true,
        "label": "builder-build",
        "response_label": "builder-build",
        "hit_index": 0,
        "response_index": null,
        "sequence_reused": false,
        "sequence_cycle": false,
        "url": "https://builder.lilarcade.com/api/build",
        "method": "POST",
        "status": 200
      },
      {
        "ok": true,
        "label": "builder-v252-preview-html",
        "response_label": "builder-v252-preview-html",
        "hit_index": 0,
        "response_index": null,
        "sequence_reused": false,
        "sequence_cycle": false,
        "url": "https://lilarcade-game-previews.s3.us-east-1.amazonaws.com/builds/build-riddle-proof-v252/index.html",
        "method": "GET",
        "status": 200
      },
      {
        "ok": true,
        "label": "builder-save-after-cancel",
        "response_label": "builder-save-after-cancel",
        "hit_index": 0,
        "response_index": null,
        "sequence_reused": false,
        "sequence_cycle": false,
        "url": "https://builder.lilarcade.com/api/save",
        "method": "POST",
        "status": 200,
        "request_body_matches": false,
        "request_body_failures": [
          {
            "type": "request_body_forbidden_text",
            "text": "\"emoji\":\"RP\""
          },
          {
            "type": "request_body_forbidden_text",
            "text": "RP252 stale canceled description"
          }
        ],
        "request_body_length": 133,
        "request_body_sample": "{\"name\":\"RP252 Clean After Cancel\",\"emoji\":\"RP\",\"description\":\"RP252 stale canceled description\",\"buildId\":\"build-riddle-proof-v252\"}"
      },
      {
        "ok": true,
        "label": "saved-manifest-clean-after-cancel",
        "response_label": "saved-manifest-clean-after-cancel",
        "hit_index": 0,
        "response_index": null,
        "sequence_reused": false,
        "sequence_cycle": false,
        "url": "https://lilarcade-game-previews.s3.us-east-1.amazonaws.com/saved/manifest.json",
        "method": "GET",
        "status": 200
      },
      {
        "ok": true,
        "label": "saved-clean-after-cancel-html",
        "response_label": "saved-clean-after-cancel-html",
        "hit_index": 0,
        "response_index": null,
        "sequence_reused": false,
        "sequence_cycle": false,
        "url": "https://lilarcade-game-previews.s3.us-east-1.amazonaws.com/saved/riddle-proof-v252-clean-after-cancel/index.html",
        "method": "HEAD",
        "status": 200
      },
      {
        "ok": true,
        "label": "saved-clean-after-cancel-html",
        "response_label": "saved-clean-after-cancel-html",
        "hit_index": 1,
        "response_index": null,
        "sequence_reused": false,
        "sequence_cycle": false,
        "url": "https://lilarcade-game-previews.s3.us-east-1.amazonaws.com/saved/riddle-proof-v252-clean-after-cancel/index.html",
        "method": "GET",
        "status": 200
      },
      {
        "ok": true,
        "label": "builder-chat",
        "response_label": "builder-chat",
        "hit_index": 1,
        "response_index": null,
        "sequence_reused": false,
        "sequence_cycle": false,
        "url": "https://builder.lilarcade.com/v1/chat/completions",
        "method": "POST",
        "status": 200
      },
      {
        "ok": true,
        "label": "builder-build",
        "response_label": "builder-build",
        "hit_index": 1,
        "response_index": null,
        "sequence_reused": false,
        "sequence_cycle": false,
        "url": "https://builder.lilarcade.com/api/build",
        "method": "POST",
        "status": 200
      },
      {
        "ok": true,
        "label": "builder-v252-preview-html",
        "response_label": "builder-v252-preview-html",
        "hit_index": 1,
        "response_index": null,
        "sequence_reused": false,
        "sequence_cycle": false,
        "url": "https://lilarcade-game-previews.s3.us-east-1.amazonaws.com/builds/build-riddle-proof-v252/index.html",
        "method": "GET",
        "status": 200
      },
      {
        "ok": true,
        "label": "builder-save-after-cancel",
        "response_label": "builder-save-after-cancel",
        "hit_index": 1,
        "response_index": null,
        "sequence_reused": false,
        "sequence_cycle": false,
        "url": "https://builder.lilarcade.com/api/save",
        "method": "POST",
        "status": 200,
        "request_body_matches": false,
        "request_body_failures": [
          {
            "type": "request_body_forbidden_text",
            "text": "\"emoji\":\"RP\""
          },
          {
            "type": "request_body_forbidden_text",
            "text": "RP252 stale canceled description"
          }
        ],
        "request_body_length": 133,
        "request_body_sample": "{\"name\":\"RP252 Clean After Cancel\",\"emoji\":\"RP\",\"description\":\"RP252 stale canceled description\",\"buildId\":\"build-riddle-proof-v252\"}"
      },
      {
        "ok": true,
        "label": "saved-manifest-clean-after-cancel",
        "response_label": "saved-manifest-clean-after-cancel",
        "hit_index": 1,
        "response_index": null,
        "sequence_reused": false,
        "sequence_cycle": false,
        "url": "https://lilarcade-game-previews.s3.us-east-1.amazonaws.com/saved/manifest.json",
        "method": "GET",
        "status": 200
      },
      {
        "ok": true,
        "label": "saved-clean-after-cancel-html",
        "response_label": "saved-clean-after-cancel-html",
        "hit_index": 2,
        "response_index": null,
        "sequence_reused": false,
        "sequence_cycle": false,
        "url": "https://lilarcade-game-previews.s3.us-east-1.amazonaws.com/saved/riddle-proof-v252-clean-after-cancel/index.html",
        "method": "HEAD",
        "status": 200
      },
      {
        "ok": true,
        "label": "saved-clean-after-cancel-html",
        "response_label": "saved-clean-after-cancel-html",
        "hit_index": 3,
        "response_index": null,
        "sequence_reused": false,
        "sequence_cycle": false,
        "url": "https://lilarcade-game-previews.s3.us-east-1.amazonaws.com/saved/riddle-proof-v252-clean-after-cancel/index.html",
        "method": "GET",
        "status": 200
      },
      {
        "ok": true,
        "label": "builder-chat",
        "response_label": "builder-chat",
        "hit_index": 2,
        "response_index": null,
        "sequence_reused": false,
        "sequence_cycle": false,
        "url": "https://builder.lilarcade.com/v1/chat/completions",
        "method": "POST",
        "status": 200
      },
      {
        "ok": true,
        "label": "builder-build",
        "response_label": "builder-build",
        "hit_index": 2,
        "response_index": null,
        "sequence_reused": false,
        "sequence_cycle": false,
        "url": "https://builder.lilarcade.com/api/build",
        "method": "POST",
        "status": 200
      },
      {
        "ok": true,
        "label": "builder-v252-preview-html",
        "response_label": "builder-v252-preview-html",
        "hit_index": 2,
        "response_index": null,
        "sequence_reused": false,
        "sequence_cycle": false,
        "url": "https://lilarcade-game-previews.s3.us-east-1.amazonaws.com/builds/build-riddle-proof-v252/index.html",
        "method": "GET",
        "status": 200
      },
      {
        "ok": true,
        "label": "builder-save-after-cancel",
        "response_label": "builder-save-after-cancel",
        "hit_index": 2,
        "response_index": null,
        "sequence_reused": false,
        "sequence_cycle": false,
        "url": "https://builder.lilarcade.com/api/save",
        "method": "POST",
        "status": 200,
        "request_body_matches": false,
        "request_body_failures": [
          {
            "type": "request_body_forbidden_text",
            "text": "\"emoji\":\"RP\""
          },
          {
            "type": "request_body_forbidden_text",
            "text": "RP252 stale canceled description"
          }
        ],
        "request_body_length": 133,
        "request_body_sample": "{\"name\":\"RP252 Clean After Cancel\",\"emoji\":\"RP\",\"description\":\"RP252 stale canceled description\",\"buildId\":\"build-riddle-proof-v252\"}"
      },
      {
        "ok": true,
        "label": "saved-manifest-clean-after-cancel",
        "response_label": "saved-manifest-clean-after-cancel",
        "hit_index": 2,
        "response_index": null,
        "sequence_reused": false,
        "sequence_cycle": false,
        "url": "https://lilarcade-game-previews.s3.us-east-1.amazonaws.com/saved/manifest.json",
        "method": "GET",
        "status": 200
      },
      {
        "ok": true,
        "label": "saved-clean-after-cancel-html",
        "response_label": "saved-clean-after-cancel-html",
        "hit_index": 4,
        "response_index": null,
        "sequence_reused": false,
        "sequence_cycle": false,
        "url": "https://lilarcade-game-previews.s3.us-east-1.amazonaws.com/saved/riddle-proof-v252-clean-after-cancel/index.html",
        "method": "HEAD",
        "status": 200
      },
      {
        "ok": true,
        "label": "saved-clean-after-cancel-html",
        "response_label": "saved-clean-after-cancel-html",
        "hit_index": 5,
        "response_index": null,
        "sequence_reused": false,
        "sequence_cycle": false,
        "url": "https://lilarcade-game-previews.s3.us-east-1.amazonaws.com/saved/riddle-proof-v252-clean-after-cancel/index.html",
        "method": "GET",
        "status": 200
      },
      {
        "ok": true,
        "label": "builder-chat",
        "response_label": "builder-chat",
        "hit_index": 3,
        "response_index": null,
        "sequence_reused": false,
        "sequence_cycle": false,
        "url": "https://builder.lilarcade.com/v1/chat/completions",
        "method": "POST",
        "status": 200
      },
      {
        "ok": true,
        "label": "builder-build",
        "response_label": "builder-build",
        "hit_index": 3,
        "response_index": null,
        "sequence_reused": false,
        "sequence_cycle": false,
        "url": "https://builder.lilarcade.com/api/build",
        "method": "POST",
        "status": 200
      },
      {
        "ok": true,
        "label": "builder-v252-preview-html",
        "response_label": "builder-v252-preview-html",
        "hit_index": 3,
        "response_index": null,
        "sequence_reused": false,
        "sequence_cycle": false,
        "url": "https://lilarcade-game-previews.s3.us-east-1.amazonaws.com/builds/build-riddle-proof-v252/index.html",
        "method": "GET",
        "status": 200
      },
      {
        "ok": true,
        "label": "builder-save-after-cancel",
        "response_label": "builder-save-after-cancel",
        "hit_index": 3,
        "response_index": null,
        "sequence_reused": false,
        "sequence_cycle": false,
        "url": "https://builder.lilarcade.com/api/save",
        "method": "POST",
        "status": 200,
        "request_body_matches": false,
        "request_body_failures": [
          {
            "type": "request_body_forbidden_text",
            "text": "\"emoji\":\"RP\""
          },
          {
            "type": "request_body_forbidden_text",
            "text": "RP252 stale canceled description"
          }
        ],
        "request_body_length": 133,
        "request_body_sample": "{\"name\":\"RP252 Clean After Cancel\",\"emoji\":\"RP\",\"description\":\"RP252 stale canceled description\",\"buildId\":\"build-riddle-proof-v252\"}"
      },
      {
        "ok": true,
        "label": "saved-manifest-clean-after-cancel",
        "response_label": "saved-manifest-clean-after-cancel",
        "hit_index": 3,
        "response_index": null,
        "sequence_reused": false,
        "sequence_cycle": false,
        "url": "https://lilarcade-game-previews.s3.us-east-1.amazonaws.com/saved/manifest.json",
        "method": "GET",
        "status": 200
      },
      {
        "ok": true,
        "label": "saved-clean-after-cancel-html",
        "response_label": "saved-clean-after-cancel-html",
        "hit_index": 6,
        "response_index": null,
        "sequence_reused": false,
        "sequence_cycle": false,
        "url": "https://lilarcade-game-previews.s3.us-east-1.amazonaws.com/saved/riddle-proof-v252-clean-after-cancel/index.html",
        "method": "HEAD",
        "status": 200
      },
      {
        "ok": true,
        "label": "saved-clean-after-cancel-html",
        "response_label": "saved-clean-after-cancel-html",
        "hit_index": 7,
        "response_index": null,
        "sequence_reused": false,
        "sequence_cycle": false,
        "url": "https://lilarcade-game-previews.s3.us-east-1.amazonaws.com/saved/riddle-proof-v252-clean-after-cancel/index.html",
        "method": "GET",
        "status": 200
      }
    ],
    "dom_summary": {
      "expected_viewport_count": 4,
      "viewport_count": 4,
      "partial": false,
      "routes": [
        {
          "requested": "https://lilarcade.com/create",
          "observed": "/play/riddle-proof-v252-clean-after-cancel",
          "expected_path": "/play/riddle-proof-v252-clean-after-cancel",
          "matched": true,
          "http_status": 200
        },
        {
          "requested": "https://lilarcade.com/create",
          "observed": "/play/riddle-proof-v252-clean-after-cancel",
          "expected_path": "/play/riddle-proof-v252-clean-after-cancel",
          "matched": true,
          "http_status": 200
        },
        {
          "requested": "https://lilarcade.com/create",
          "observed": "/play/riddle-proof-v252-clean-after-cancel",
          "expected_path": "/play/riddle-proof-v252-clean-after-cancel",
          "matched": true,
          "http_status": 200
        },
        {
          "requested": "https://lilarcade.com/create",
          "observed": "/play/riddle-proof-v252-clean-after-cancel",
          "expected_path": "/play/riddle-proof-v252-clean-after-cancel",
          "matched": true,
          "http_status": 200
        }
      ],
      "titles": [
        "LilArcade",
        "LilArcade",
        "LilArcade",
        "LilArcade"
      ],
      "overflow_px": [
        0,
        0,
        0,
        0
      ],
      "bounds_overflow_px": [
        0,
        0,
        0,
        0
      ],
      "overflow_offender_counts": [
        0,
        0,
        0,
        0
      ],
      "frames": [
        {
          "viewport": "desktop",
          "selectors": [
            {
              "selector": ".game-player-root iframe",
              "count": 1,
              "frame_count": 1,
              "max_bounds_overflow_px": 0
            }
          ]
        },
        {
          "viewport": "phone",
          "selectors": [
            {
              "selector": ".game-player-root iframe",
              "count": 1,
              "frame_count": 1,
              "max_bounds_overflow_px": 0
            }
          ]
        },
        {
          "viewport": "ipad-mini",
          "selectors": [
            {
              "selector": ".game-player-root iframe",
              "count": 1,
              "frame_count": 1,
              "max_bounds_overflow_px": 0
            }
          ]
        },
        {
          "viewport": "ipad",
          "selectors": [
            {
              "selector": ".game-player-root iframe",
              "count": 1,
              "frame_count": 1,
              "max_bounds_overflow_px": 0
            }
          ]
        }
      ],
      "route_inventory": [],
      "network_mock_count": 6,
      "network_mock_hit_count": 28
    }
  }
}