{
  "id": "exp-002",
  "slug": "exp-002-passage-59-60-63-68",
  "algorithm": "2.0.0",
  "legacyAlgorithm": "1.0.0",
  "geometrySha256": "313c4fd15b13941f5b189a75e732cbb03aef2a9c75d65f1a1b7d581d925b7976",
  "generated": "2026-11-07",
  "generator": "tools/run_experiments.mjs",
  "verifier": "tools/verify_experiments.py",
  "kind": "simulation",
  "clearance": 60,
  "cases": [
    {
      "id": "barrier-59",
      "label": {
        "ko": "벽에서 벽까지 막은 가구 사이 59cm 틈",
        "en": "59 cm gap in a wall-to-wall barrier"
      },
      "preset": "x2g59",
      "gap": 59,
      "offset": 100,
      "input": {
        "room": {
          "w": 300,
          "h": 400
        },
        "items": [
          {
            "type": "wardrobe",
            "x": 0,
            "y": 180,
            "w": 100,
            "h": 60
          },
          {
            "type": "wardrobe",
            "x": 159,
            "y": 180,
            "w": 141,
            "h": 60
          }
        ]
      },
      "actual": {
        "status": "blocked",
        "reason": "no-path",
        "bottleneck": null,
        "step": 5,
        "tight": 0,
        "items": [
          "connected",
          "connected"
        ],
        "pathPoints": 0,
        "path": []
      },
      "legacy": {
        "status": "none",
        "pass": false
      },
      "expected": {
        "v2": "blocked",
        "bottleneck": null,
        "raster": "blocked",
        "v1": "none",
        "method": "closed form (passable iff gap >= 60) + 1 cm raster flood + Python v1"
      },
      "checks": [
        {
          "name": "v2 = closed form",
          "expected": "blocked",
          "actual": "blocked",
          "pass": true
        },
        {
          "name": "v2 = raster",
          "expected": "blocked",
          "actual": "blocked",
          "pass": true
        },
        {
          "name": "v1 JS = v1 Python",
          "expected": "none",
          "actual": "none",
          "pass": true
        }
      ],
      "pass": true
    },
    {
      "id": "barrier-60",
      "label": {
        "ko": "벽에서 벽까지 막은 가구 사이 60cm 틈",
        "en": "60 cm gap in a wall-to-wall barrier"
      },
      "preset": "x2g60",
      "gap": 60,
      "offset": 100,
      "input": {
        "room": {
          "w": 300,
          "h": 400
        },
        "items": [
          {
            "type": "wardrobe",
            "x": 0,
            "y": 180,
            "w": 100,
            "h": 60
          },
          {
            "type": "wardrobe",
            "x": 160,
            "y": 180,
            "w": 140,
            "h": 60
          }
        ]
      },
      "actual": {
        "status": "connected",
        "reason": "ok",
        "bottleneck": 60,
        "step": 5,
        "tight": 25,
        "items": [
          "connected",
          "connected"
        ],
        "pathPoints": 4,
        "path": [
          [
            140,
            370
          ],
          [
            140,
            265
          ],
          [
            130,
            255
          ],
          [
            130,
            110
          ]
        ]
      },
      "legacy": {
        "status": "connected",
        "pass": true
      },
      "expected": {
        "v2": "connected",
        "bottleneck": 60,
        "raster": "connected",
        "v1": "connected",
        "method": "closed form (passable iff gap >= 60) + 1 cm raster flood + Python v1"
      },
      "checks": [
        {
          "name": "v2 = closed form",
          "expected": "connected",
          "actual": "connected",
          "pass": true
        },
        {
          "name": "v2 = raster",
          "expected": "connected",
          "actual": "connected",
          "pass": true
        },
        {
          "name": "narrowest point = gap",
          "expected": 60,
          "actual": 60,
          "pass": true
        },
        {
          "name": "v1 JS = v1 Python",
          "expected": "connected",
          "actual": "connected",
          "pass": true
        }
      ],
      "pass": true
    },
    {
      "id": "barrier-61",
      "label": {
        "ko": "벽에서 벽까지 막은 가구 사이 61cm 틈",
        "en": "61 cm gap in a wall-to-wall barrier"
      },
      "preset": "x2g61",
      "gap": 61,
      "offset": 100,
      "input": {
        "room": {
          "w": 300,
          "h": 400
        },
        "items": [
          {
            "type": "wardrobe",
            "x": 0,
            "y": 180,
            "w": 100,
            "h": 60
          },
          {
            "type": "wardrobe",
            "x": 161,
            "y": 180,
            "w": 139,
            "h": 60
          }
        ]
      },
      "actual": {
        "status": "connected",
        "reason": "ok",
        "bottleneck": 61,
        "step": 5,
        "tight": 25,
        "items": [
          "connected",
          "connected"
        ],
        "pathPoints": 7,
        "path": [
          [
            140,
            370
          ],
          [
            140,
            265
          ],
          [
            135,
            260
          ],
          [
            131,
            255
          ],
          [
            131,
            250
          ],
          [
            130.5,
            245
          ],
          [
            130.5,
            110
          ]
        ]
      },
      "legacy": {
        "status": "connected",
        "pass": true
      },
      "expected": {
        "v2": "connected",
        "bottleneck": 61,
        "raster": "connected",
        "v1": "connected",
        "method": "closed form (passable iff gap >= 60) + 1 cm raster flood + Python v1"
      },
      "checks": [
        {
          "name": "v2 = closed form",
          "expected": "connected",
          "actual": "connected",
          "pass": true
        },
        {
          "name": "v2 = raster",
          "expected": "connected",
          "actual": "connected",
          "pass": true
        },
        {
          "name": "narrowest point = gap",
          "expected": 61,
          "actual": 61,
          "pass": true
        },
        {
          "name": "v1 JS = v1 Python",
          "expected": "connected",
          "actual": "connected",
          "pass": true
        }
      ],
      "pass": true
    },
    {
      "id": "barrier-63",
      "label": {
        "ko": "벽에서 벽까지 막은 가구 사이 63cm 틈",
        "en": "63 cm gap in a wall-to-wall barrier"
      },
      "preset": "x2g63",
      "gap": 63,
      "offset": 100,
      "input": {
        "room": {
          "w": 300,
          "h": 400
        },
        "items": [
          {
            "type": "wardrobe",
            "x": 0,
            "y": 180,
            "w": 100,
            "h": 60
          },
          {
            "type": "wardrobe",
            "x": 163,
            "y": 180,
            "w": 137,
            "h": 60
          }
        ]
      },
      "actual": {
        "status": "connected",
        "reason": "ok",
        "bottleneck": 63,
        "step": 5,
        "tight": 24,
        "items": [
          "connected",
          "connected"
        ],
        "pathPoints": 7,
        "path": [
          [
            140,
            370
          ],
          [
            140,
            265
          ],
          [
            135,
            260
          ],
          [
            135,
            255
          ],
          [
            133,
            250
          ],
          [
            131.5,
            245
          ],
          [
            131.5,
            110
          ]
        ]
      },
      "legacy": {
        "status": "connected",
        "pass": true
      },
      "expected": {
        "v2": "connected",
        "bottleneck": 63,
        "raster": "connected",
        "v1": "connected",
        "method": "closed form (passable iff gap >= 60) + 1 cm raster flood + Python v1"
      },
      "checks": [
        {
          "name": "v2 = closed form",
          "expected": "connected",
          "actual": "connected",
          "pass": true
        },
        {
          "name": "v2 = raster",
          "expected": "connected",
          "actual": "connected",
          "pass": true
        },
        {
          "name": "narrowest point = gap",
          "expected": 63,
          "actual": 63,
          "pass": true
        },
        {
          "name": "v1 JS = v1 Python",
          "expected": "connected",
          "actual": "connected",
          "pass": true
        }
      ],
      "pass": true
    },
    {
      "id": "barrier-68",
      "label": {
        "ko": "벽에서 벽까지 막은 가구 사이 68cm 틈",
        "en": "68 cm gap in a wall-to-wall barrier"
      },
      "preset": "x2g68",
      "gap": 68,
      "offset": 100,
      "input": {
        "room": {
          "w": 300,
          "h": 400
        },
        "items": [
          {
            "type": "wardrobe",
            "x": 0,
            "y": 180,
            "w": 100,
            "h": 60
          },
          {
            "type": "wardrobe",
            "x": 168,
            "y": 180,
            "w": 132,
            "h": 60
          }
        ]
      },
      "actual": {
        "status": "connected",
        "reason": "ok",
        "bottleneck": 68,
        "step": 5,
        "tight": 23,
        "items": [
          "connected",
          "connected"
        ],
        "pathPoints": 7,
        "path": [
          [
            140,
            370
          ],
          [
            140,
            265
          ],
          [
            138,
            260
          ],
          [
            135,
            255
          ],
          [
            135,
            250
          ],
          [
            134,
            245
          ],
          [
            134,
            110
          ]
        ]
      },
      "legacy": {
        "status": "connected",
        "pass": true
      },
      "expected": {
        "v2": "connected",
        "bottleneck": 68,
        "raster": "connected",
        "v1": "connected",
        "method": "closed form (passable iff gap >= 60) + 1 cm raster flood + Python v1"
      },
      "checks": [
        {
          "name": "v2 = closed form",
          "expected": "connected",
          "actual": "connected",
          "pass": true
        },
        {
          "name": "v2 = raster",
          "expected": "connected",
          "actual": "connected",
          "pass": true
        },
        {
          "name": "narrowest point = gap",
          "expected": 68,
          "actual": 68,
          "pass": true
        },
        {
          "name": "v1 JS = v1 Python",
          "expected": "connected",
          "actual": "connected",
          "pass": true
        }
      ],
      "pass": true
    },
    {
      "id": "note-206",
      "label": {
        "ko": "배치 노트 사례, 옷장 왼쪽 끝 206",
        "en": "Note layout, wardrobe left edge at 206"
      },
      "preset": "passage",
      "wardrobeX": 206,
      "horizontalGap": 84,
      "cornerDistance": 87.092,
      "input": {
        "room": {
          "w": 320,
          "h": 380
        },
        "items": [
          {
            "type": "bedSingle",
            "x": 12,
            "y": 12,
            "w": 110,
            "h": 200
          },
          {
            "type": "desk",
            "x": 204,
            "y": 15,
            "w": 105,
            "h": 50
          },
          {
            "type": "wardrobe",
            "x": 206,
            "y": 235,
            "w": 100,
            "h": 60
          }
        ]
      },
      "actual": {
        "status": "connected",
        "reason": "ok",
        "bottleneck": 80,
        "step": 5,
        "tight": 0,
        "items": [
          "connected",
          "connected",
          "connected"
        ],
        "pathPoints": 4,
        "path": [
          [
            160,
            350
          ],
          [
            160,
            230
          ],
          [
            165,
            225
          ],
          [
            165,
            105
          ]
        ]
      },
      "legacy": {
        "status": "connected",
        "pass": true
      },
      "expected": {
        "v2": "connected",
        "raster": "connected",
        "v1": "connected",
        "cornerDistance": 87.092,
        "method": "1 cm raster flood + Python v1 + rectangle distance"
      },
      "checks": [
        {
          "name": "v2 = raster",
          "expected": "connected",
          "actual": "connected",
          "pass": true
        },
        {
          "name": "bed–wardrobe distance",
          "expected": 87.092,
          "actual": 87.092,
          "pass": true
        },
        {
          "name": "v1 JS = v1 Python",
          "expected": "connected",
          "actual": "connected",
          "pass": true
        }
      ],
      "pass": true
    },
    {
      "id": "note-195",
      "label": {
        "ko": "배치 노트 사례, 옷장 왼쪽 끝 195",
        "en": "Note layout, wardrobe left edge at 195"
      },
      "preset": "x2w195",
      "wardrobeX": 195,
      "horizontalGap": 73,
      "cornerDistance": 76.538,
      "input": {
        "room": {
          "w": 320,
          "h": 380
        },
        "items": [
          {
            "type": "bedSingle",
            "x": 12,
            "y": 12,
            "w": 110,
            "h": 200
          },
          {
            "type": "desk",
            "x": 204,
            "y": 15,
            "w": 105,
            "h": 50
          },
          {
            "type": "wardrobe",
            "x": 195,
            "y": 235,
            "w": 100,
            "h": 60
          }
        ]
      },
      "actual": {
        "status": "connected",
        "reason": "ok",
        "bottleneck": 75.18,
        "step": 5,
        "tight": 27,
        "items": [
          "connected",
          "connected",
          "connected"
        ],
        "pathPoints": 6,
        "path": [
          [
            155,
            350
          ],
          [
            155,
            230
          ],
          [
            158.5,
            225
          ],
          [
            158.5,
            223.5
          ],
          [
            160,
            220
          ],
          [
            160,
            105
          ]
        ]
      },
      "legacy": {
        "status": "connected",
        "pass": true
      },
      "expected": {
        "v2": "connected",
        "raster": "connected",
        "v1": "connected",
        "cornerDistance": 76.538,
        "method": "1 cm raster flood + Python v1 + rectangle distance"
      },
      "checks": [
        {
          "name": "v2 = raster",
          "expected": "connected",
          "actual": "connected",
          "pass": true
        },
        {
          "name": "bed–wardrobe distance",
          "expected": 76.538,
          "actual": 76.538,
          "pass": true
        },
        {
          "name": "v1 JS = v1 Python",
          "expected": "connected",
          "actual": "connected",
          "pass": true
        }
      ],
      "pass": true
    },
    {
      "id": "note-190",
      "label": {
        "ko": "배치 노트 사례, 옷장 왼쪽 끝 190",
        "en": "Note layout, wardrobe left edge at 190"
      },
      "preset": "x2w190",
      "wardrobeX": 190,
      "horizontalGap": 68,
      "cornerDistance": 71.784,
      "input": {
        "room": {
          "w": 320,
          "h": 380
        },
        "items": [
          {
            "type": "bedSingle",
            "x": 12,
            "y": 12,
            "w": 110,
            "h": 200
          },
          {
            "type": "desk",
            "x": 204,
            "y": 15,
            "w": 105,
            "h": 50
          },
          {
            "type": "wardrobe",
            "x": 190,
            "y": 235,
            "w": 100,
            "h": 60
          }
        ]
      },
      "actual": {
        "status": "connected",
        "reason": "ok",
        "bottleneck": 69.857,
        "step": 5,
        "tight": 44,
        "items": [
          "connected",
          "connected",
          "connected"
        ],
        "pathPoints": 6,
        "path": [
          [
            155,
            350
          ],
          [
            155,
            230
          ],
          [
            156,
            225
          ],
          [
            156,
            220
          ],
          [
            160,
            215
          ],
          [
            160,
            105
          ]
        ]
      },
      "legacy": {
        "status": "connected",
        "pass": true
      },
      "expected": {
        "v2": "connected",
        "raster": "connected",
        "v1": "connected",
        "cornerDistance": 71.784,
        "method": "1 cm raster flood + Python v1 + rectangle distance"
      },
      "checks": [
        {
          "name": "v2 = raster",
          "expected": "connected",
          "actual": "connected",
          "pass": true
        },
        {
          "name": "bed–wardrobe distance",
          "expected": 71.784,
          "actual": 71.784,
          "pass": true
        },
        {
          "name": "v1 JS = v1 Python",
          "expected": "connected",
          "actual": "connected",
          "pass": true
        }
      ],
      "pass": true
    },
    {
      "id": "note-185",
      "label": {
        "ko": "배치 노트 사례, 옷장 왼쪽 끝 185",
        "en": "Note layout, wardrobe left edge at 185"
      },
      "preset": "passageB",
      "wardrobeX": 185,
      "horizontalGap": 63,
      "cornerDistance": 67.067,
      "input": {
        "room": {
          "w": 320,
          "h": 380
        },
        "items": [
          {
            "type": "bedSingle",
            "x": 12,
            "y": 12,
            "w": 110,
            "h": 200
          },
          {
            "type": "desk",
            "x": 204,
            "y": 15,
            "w": 105,
            "h": 50
          },
          {
            "type": "wardrobe",
            "x": 185,
            "y": 235,
            "w": 100,
            "h": 60
          }
        ]
      },
      "actual": {
        "status": "connected",
        "reason": "ok",
        "bottleneck": 66.09,
        "step": 5,
        "tight": 44,
        "items": [
          "connected",
          "connected",
          "connected"
        ],
        "pathPoints": 9,
        "path": [
          [
            150,
            350
          ],
          [
            150,
            235
          ],
          [
            152,
            230
          ],
          [
            153.5,
            225
          ],
          [
            153.5,
            223.5
          ],
          [
            155,
            220
          ],
          [
            155,
            215
          ],
          [
            160,
            210
          ],
          [
            160,
            105
          ]
        ]
      },
      "legacy": {
        "status": "none",
        "pass": false
      },
      "expected": {
        "v2": "connected",
        "raster": "connected",
        "v1": "none",
        "cornerDistance": 67.067,
        "method": "1 cm raster flood + Python v1 + rectangle distance"
      },
      "checks": [
        {
          "name": "v2 = raster",
          "expected": "connected",
          "actual": "connected",
          "pass": true
        },
        {
          "name": "bed–wardrobe distance",
          "expected": 67.067,
          "actual": 67.067,
          "pass": true
        },
        {
          "name": "v1 JS = v1 Python",
          "expected": "none",
          "actual": "none",
          "pass": true
        }
      ],
      "pass": true
    },
    {
      "id": "diagonal-58",
      "label": {
        "ko": "모서리끼리 대각선 58cm",
        "en": "Corner-to-corner diagonal 58 cm"
      },
      "diagonal": 58,
      "input": {
        "room": {
          "w": 300,
          "h": 400
        },
        "items": [
          {
            "type": "wardrobe",
            "x": 0,
            "y": 200,
            "w": 120,
            "h": 60
          },
          {
            "type": "wardrobe",
            "x": 161.01219330881975,
            "y": 100,
            "w": 138.98780669118025,
            "h": 58.987806691180246
          }
        ]
      },
      "cornerDistance": 58,
      "actual": {
        "status": "blocked",
        "reason": "no-path",
        "bottleneck": null,
        "step": 5,
        "tight": 0,
        "items": [
          "connected",
          "connected"
        ],
        "pathPoints": 0,
        "path": []
      },
      "legacy": {
        "status": "none",
        "pass": false
      },
      "expected": {
        "v2": "blocked",
        "cornerDistance": 58.0,
        "v1": "none",
        "resolved": true,
        "method": "closed form (passable iff corner distance >= 60); uncertain is allowed but not counted as resolved"
      },
      "checks": [
        {
          "name": "v2 does not contradict closed form",
          "expected": true,
          "actual": true,
          "pass": true
        },
        {
          "name": "corner distance",
          "expected": 58.0,
          "actual": 58,
          "pass": true
        },
        {
          "name": "v1 JS = v1 Python",
          "expected": "none",
          "actual": "none",
          "pass": true
        }
      ],
      "pass": true
    },
    {
      "id": "diagonal-59",
      "label": {
        "ko": "모서리끼리 대각선 59cm",
        "en": "Corner-to-corner diagonal 59 cm"
      },
      "diagonal": 59,
      "input": {
        "room": {
          "w": 300,
          "h": 400
        },
        "items": [
          {
            "type": "wardrobe",
            "x": 0,
            "y": 200,
            "w": 120,
            "h": 60
          },
          {
            "type": "wardrobe",
            "x": 161.7193000900063,
            "y": 100,
            "w": 138.2806999099937,
            "h": 58.2806999099937
          }
        ]
      },
      "cornerDistance": 59,
      "actual": {
        "status": "blocked",
        "reason": "no-path",
        "bottleneck": null,
        "step": 2.5,
        "tight": 0,
        "items": [
          "connected",
          "connected"
        ],
        "pathPoints": 0,
        "path": []
      },
      "legacy": {
        "status": "none",
        "pass": false
      },
      "expected": {
        "v2": "blocked",
        "cornerDistance": 59.0,
        "v1": "none",
        "resolved": true,
        "method": "closed form (passable iff corner distance >= 60); uncertain is allowed but not counted as resolved"
      },
      "checks": [
        {
          "name": "v2 does not contradict closed form",
          "expected": true,
          "actual": true,
          "pass": true
        },
        {
          "name": "corner distance",
          "expected": 59.0,
          "actual": 59,
          "pass": true
        },
        {
          "name": "v1 JS = v1 Python",
          "expected": "none",
          "actual": "none",
          "pass": true
        }
      ],
      "pass": true
    },
    {
      "id": "diagonal-59.5",
      "label": {
        "ko": "모서리끼리 대각선 59.5cm",
        "en": "Corner-to-corner diagonal 59.5 cm"
      },
      "diagonal": 59.5,
      "input": {
        "room": {
          "w": 300,
          "h": 400
        },
        "items": [
          {
            "type": "wardrobe",
            "x": 0,
            "y": 200,
            "w": 120,
            "h": 60
          },
          {
            "type": "wardrobe",
            "x": 162.07285348059958,
            "y": 100,
            "w": 137.92714651940042,
            "h": 57.927146519400424
          }
        ]
      },
      "cornerDistance": 59.5,
      "actual": {
        "status": "blocked",
        "reason": "no-path",
        "bottleneck": null,
        "step": 2.5,
        "tight": 0,
        "items": [
          "connected",
          "connected"
        ],
        "pathPoints": 0,
        "path": []
      },
      "legacy": {
        "status": "none",
        "pass": false
      },
      "expected": {
        "v2": "blocked",
        "cornerDistance": 59.5,
        "v1": "none",
        "resolved": true,
        "method": "closed form (passable iff corner distance >= 60); uncertain is allowed but not counted as resolved"
      },
      "checks": [
        {
          "name": "v2 does not contradict closed form",
          "expected": true,
          "actual": true,
          "pass": true
        },
        {
          "name": "corner distance",
          "expected": 59.5,
          "actual": 59.5,
          "pass": true
        },
        {
          "name": "v1 JS = v1 Python",
          "expected": "none",
          "actual": "none",
          "pass": true
        }
      ],
      "pass": true
    },
    {
      "id": "diagonal-59.8",
      "label": {
        "ko": "모서리끼리 대각선 59.8cm",
        "en": "Corner-to-corner diagonal 59.8 cm"
      },
      "diagonal": 59.8,
      "input": {
        "room": {
          "w": 300,
          "h": 400
        },
        "items": [
          {
            "type": "wardrobe",
            "x": 0,
            "y": 200,
            "w": 120,
            "h": 60
          },
          {
            "type": "wardrobe",
            "x": 162.28498551495554,
            "y": 100,
            "w": 137.71501448504446,
            "h": 57.71501448504446
          }
        ]
      },
      "cornerDistance": 59.8,
      "actual": {
        "status": "uncertain",
        "reason": "boundary",
        "bottleneck": null,
        "step": 1.25,
        "tight": 0,
        "items": [
          "connected",
          "connected"
        ],
        "pathPoints": 0,
        "path": []
      },
      "legacy": {
        "status": "none",
        "pass": false
      },
      "expected": {
        "v2": "blocked",
        "cornerDistance": 59.8,
        "v1": "none",
        "resolved": false,
        "method": "closed form (passable iff corner distance >= 60); uncertain is allowed but not counted as resolved"
      },
      "checks": [
        {
          "name": "v2 does not contradict closed form",
          "expected": true,
          "actual": true,
          "pass": true
        },
        {
          "name": "corner distance",
          "expected": 59.8,
          "actual": 59.8,
          "pass": true
        },
        {
          "name": "v1 JS = v1 Python",
          "expected": "none",
          "actual": "none",
          "pass": true
        }
      ],
      "pass": true
    },
    {
      "id": "diagonal-60",
      "label": {
        "ko": "모서리끼리 대각선 60cm",
        "en": "Corner-to-corner diagonal 60 cm"
      },
      "diagonal": 60,
      "input": {
        "room": {
          "w": 300,
          "h": 400
        },
        "items": [
          {
            "type": "wardrobe",
            "x": 0,
            "y": 200,
            "w": 120,
            "h": 60
          },
          {
            "type": "wardrobe",
            "x": 162.42640687119285,
            "y": 100,
            "w": 137.57359312880715,
            "h": 57.573593128807154
          }
        ]
      },
      "cornerDistance": 60,
      "actual": {
        "status": "uncertain",
        "reason": "boundary",
        "bottleneck": null,
        "step": 1.25,
        "tight": 0,
        "items": [
          "connected",
          "connected"
        ],
        "pathPoints": 0,
        "path": []
      },
      "legacy": {
        "status": "none",
        "pass": false
      },
      "expected": {
        "v2": "connected",
        "cornerDistance": 60.0,
        "v1": "none",
        "resolved": false,
        "method": "closed form (passable iff corner distance >= 60); uncertain is allowed but not counted as resolved"
      },
      "checks": [
        {
          "name": "v2 does not contradict closed form",
          "expected": true,
          "actual": true,
          "pass": true
        },
        {
          "name": "corner distance",
          "expected": 60.0,
          "actual": 60,
          "pass": true
        },
        {
          "name": "v1 JS = v1 Python",
          "expected": "none",
          "actual": "none",
          "pass": true
        }
      ],
      "pass": true
    },
    {
      "id": "diagonal-60.1",
      "label": {
        "ko": "모서리끼리 대각선 60.1cm",
        "en": "Corner-to-corner diagonal 60.1 cm"
      },
      "diagonal": 60.1,
      "input": {
        "room": {
          "w": 300,
          "h": 400
        },
        "items": [
          {
            "type": "wardrobe",
            "x": 0,
            "y": 200,
            "w": 120,
            "h": 60
          },
          {
            "type": "wardrobe",
            "x": 162.4971175493115,
            "y": 100,
            "w": 137.5028824506885,
            "h": 57.502882450688496
          }
        ]
      },
      "cornerDistance": 60.1,
      "actual": {
        "status": "connected",
        "reason": "ok",
        "bottleneck": 60.1,
        "step": 2.5,
        "tight": 72,
        "items": [
          "connected",
          "connected"
        ],
        "pathPoints": 14,
        "path": [
          [
            152.5,
            370
          ],
          [
            152.5,
            192.5
          ],
          [
            150,
            190
          ],
          [
            150,
            187.5
          ],
          [
            142.5,
            180
          ],
          [
            141.249,
            178.751
          ],
          [
            140,
            177.5
          ],
          [
            135,
            172.5
          ],
          [
            135,
            170
          ],
          [
            132.5,
            167.5
          ],
          [
            132.5,
            162.5
          ],
          [
            132.497,
            160
          ],
          [
            130,
            157.5
          ],
          [
            130,
            110
          ]
        ]
      },
      "legacy": {
        "status": "none",
        "pass": false
      },
      "expected": {
        "v2": "connected",
        "cornerDistance": 60.1,
        "v1": "none",
        "resolved": true,
        "method": "closed form (passable iff corner distance >= 60); uncertain is allowed but not counted as resolved"
      },
      "checks": [
        {
          "name": "v2 does not contradict closed form",
          "expected": true,
          "actual": true,
          "pass": true
        },
        {
          "name": "corner distance",
          "expected": 60.1,
          "actual": 60.1,
          "pass": true
        },
        {
          "name": "v1 JS = v1 Python",
          "expected": "none",
          "actual": "none",
          "pass": true
        }
      ],
      "pass": true
    },
    {
      "id": "diagonal-61",
      "label": {
        "ko": "모서리끼리 대각선 61cm",
        "en": "Corner-to-corner diagonal 61 cm"
      },
      "diagonal": 61,
      "input": {
        "room": {
          "w": 300,
          "h": 400
        },
        "items": [
          {
            "type": "wardrobe",
            "x": 0,
            "y": 200,
            "w": 120,
            "h": 60
          },
          {
            "type": "wardrobe",
            "x": 163.1335136523794,
            "y": 100,
            "w": 136.8664863476206,
            "h": 56.8664863476206
          }
        ]
      },
      "cornerDistance": 61,
      "actual": {
        "status": "connected",
        "reason": "ok",
        "bottleneck": 60.208,
        "step": 2.5,
        "tight": 72,
        "items": [
          "connected",
          "connected"
        ],
        "pathPoints": 13,
        "path": [
          [
            152.5,
            370
          ],
          [
            152.5,
            192.5
          ],
          [
            147.5,
            187.5
          ],
          [
            147.5,
            185
          ],
          [
            142.5,
            180
          ],
          [
            141.567,
            178.433
          ],
          [
            140,
            177.5
          ],
          [
            135,
            172.5
          ],
          [
            135,
            170
          ],
          [
            133.134,
            167.5
          ],
          [
            133.134,
            160
          ],
          [
            132.5,
            157.5
          ],
          [
            132.5,
            110
          ]
        ]
      },
      "legacy": {
        "status": "none",
        "pass": false
      },
      "expected": {
        "v2": "connected",
        "cornerDistance": 61.0,
        "v1": "none",
        "resolved": true,
        "method": "closed form (passable iff corner distance >= 60); uncertain is allowed but not counted as resolved"
      },
      "checks": [
        {
          "name": "v2 does not contradict closed form",
          "expected": true,
          "actual": true,
          "pass": true
        },
        {
          "name": "corner distance",
          "expected": 61.0,
          "actual": 61,
          "pass": true
        },
        {
          "name": "v1 JS = v1 Python",
          "expected": "none",
          "actual": "none",
          "pass": true
        }
      ],
      "pass": true
    },
    {
      "id": "diagonal-63.6",
      "label": {
        "ko": "모서리끼리 대각선 63.6cm",
        "en": "Corner-to-corner diagonal 63.6 cm"
      },
      "diagonal": 63.6,
      "input": {
        "room": {
          "w": 300,
          "h": 400
        },
        "items": [
          {
            "type": "wardrobe",
            "x": 0,
            "y": 200,
            "w": 120,
            "h": 60
          },
          {
            "type": "wardrobe",
            "x": 164.97199128346443,
            "y": 100,
            "w": 135.02800871653557,
            "h": 55.02800871653558
          }
        ]
      },
      "cornerDistance": 63.6,
      "actual": {
        "status": "connected",
        "reason": "ok",
        "bottleneck": 63.599,
        "step": 5,
        "tight": 37,
        "items": [
          "connected",
          "connected"
        ],
        "pathPoints": 11,
        "path": [
          [
            155,
            370
          ],
          [
            155,
            190
          ],
          [
            150,
            185.028
          ],
          [
            150,
            185
          ],
          [
            145,
            180
          ],
          [
            142.486,
            177.514
          ],
          [
            140,
            175
          ],
          [
            135,
            170
          ],
          [
            134.972,
            170
          ],
          [
            130,
            165
          ],
          [
            130,
            110
          ]
        ]
      },
      "legacy": {
        "status": "none",
        "pass": false
      },
      "expected": {
        "v2": "connected",
        "cornerDistance": 63.6,
        "v1": "none",
        "resolved": true,
        "method": "closed form (passable iff corner distance >= 60); uncertain is allowed but not counted as resolved"
      },
      "checks": [
        {
          "name": "v2 does not contradict closed form",
          "expected": true,
          "actual": true,
          "pass": true
        },
        {
          "name": "corner distance",
          "expected": 63.6,
          "actual": 63.6,
          "pass": true
        },
        {
          "name": "v1 JS = v1 Python",
          "expected": "none",
          "actual": "none",
          "pass": true
        }
      ],
      "pass": true
    }
  ],
  "phase": [
    {
      "gap": 59,
      "rows": [
        {
          "offset": 100,
          "v1": false,
          "v2": "blocked",
          "expectedV1": false,
          "expectedV2": "blocked",
          "pass": true
        },
        {
          "offset": 101,
          "v1": false,
          "v2": "blocked",
          "expectedV1": false,
          "expectedV2": "blocked",
          "pass": true
        },
        {
          "offset": 102,
          "v1": false,
          "v2": "blocked",
          "expectedV1": false,
          "expectedV2": "blocked",
          "pass": true
        },
        {
          "offset": 103,
          "v1": false,
          "v2": "blocked",
          "expectedV1": false,
          "expectedV2": "blocked",
          "pass": true
        },
        {
          "offset": 104,
          "v1": false,
          "v2": "blocked",
          "expectedV1": false,
          "expectedV2": "blocked",
          "pass": true
        },
        {
          "offset": 105,
          "v1": false,
          "v2": "blocked",
          "expectedV1": false,
          "expectedV2": "blocked",
          "pass": true
        },
        {
          "offset": 106,
          "v1": false,
          "v2": "blocked",
          "expectedV1": false,
          "expectedV2": "blocked",
          "pass": true
        },
        {
          "offset": 107,
          "v1": false,
          "v2": "blocked",
          "expectedV1": false,
          "expectedV2": "blocked",
          "pass": true
        },
        {
          "offset": 108,
          "v1": false,
          "v2": "blocked",
          "expectedV1": false,
          "expectedV2": "blocked",
          "pass": true
        },
        {
          "offset": 109,
          "v1": false,
          "v2": "blocked",
          "expectedV1": false,
          "expectedV2": "blocked",
          "pass": true
        }
      ],
      "v1Pass": 0,
      "v2Connected": 0,
      "pass": true
    },
    {
      "gap": 60,
      "rows": [
        {
          "offset": 100,
          "v1": true,
          "v2": "connected",
          "expectedV1": true,
          "expectedV2": "connected",
          "pass": true
        },
        {
          "offset": 101,
          "v1": false,
          "v2": "connected",
          "expectedV1": false,
          "expectedV2": "connected",
          "pass": true
        },
        {
          "offset": 102,
          "v1": false,
          "v2": "connected",
          "expectedV1": false,
          "expectedV2": "connected",
          "pass": true
        },
        {
          "offset": 103,
          "v1": false,
          "v2": "connected",
          "expectedV1": false,
          "expectedV2": "connected",
          "pass": true
        },
        {
          "offset": 104,
          "v1": false,
          "v2": "connected",
          "expectedV1": false,
          "expectedV2": "connected",
          "pass": true
        },
        {
          "offset": 105,
          "v1": false,
          "v2": "connected",
          "expectedV1": false,
          "expectedV2": "connected",
          "pass": true
        },
        {
          "offset": 106,
          "v1": false,
          "v2": "connected",
          "expectedV1": false,
          "expectedV2": "connected",
          "pass": true
        },
        {
          "offset": 107,
          "v1": false,
          "v2": "connected",
          "expectedV1": false,
          "expectedV2": "connected",
          "pass": true
        },
        {
          "offset": 108,
          "v1": false,
          "v2": "connected",
          "expectedV1": false,
          "expectedV2": "connected",
          "pass": true
        },
        {
          "offset": 109,
          "v1": false,
          "v2": "connected",
          "expectedV1": false,
          "expectedV2": "connected",
          "pass": true
        }
      ],
      "v1Pass": 1,
      "v2Connected": 10,
      "pass": true
    },
    {
      "gap": 63,
      "rows": [
        {
          "offset": 100,
          "v1": true,
          "v2": "connected",
          "expectedV1": true,
          "expectedV2": "connected",
          "pass": true
        },
        {
          "offset": 101,
          "v1": false,
          "v2": "connected",
          "expectedV1": false,
          "expectedV2": "connected",
          "pass": true
        },
        {
          "offset": 102,
          "v1": false,
          "v2": "connected",
          "expectedV1": false,
          "expectedV2": "connected",
          "pass": true
        },
        {
          "offset": 103,
          "v1": false,
          "v2": "connected",
          "expectedV1": false,
          "expectedV2": "connected",
          "pass": true
        },
        {
          "offset": 104,
          "v1": false,
          "v2": "connected",
          "expectedV1": false,
          "expectedV2": "connected",
          "pass": true
        },
        {
          "offset": 105,
          "v1": false,
          "v2": "connected",
          "expectedV1": false,
          "expectedV2": "connected",
          "pass": true
        },
        {
          "offset": 106,
          "v1": false,
          "v2": "connected",
          "expectedV1": false,
          "expectedV2": "connected",
          "pass": true
        },
        {
          "offset": 107,
          "v1": true,
          "v2": "connected",
          "expectedV1": true,
          "expectedV2": "connected",
          "pass": true
        },
        {
          "offset": 108,
          "v1": true,
          "v2": "connected",
          "expectedV1": true,
          "expectedV2": "connected",
          "pass": true
        },
        {
          "offset": 109,
          "v1": true,
          "v2": "connected",
          "expectedV1": true,
          "expectedV2": "connected",
          "pass": true
        }
      ],
      "v1Pass": 4,
      "v2Connected": 10,
      "pass": true
    },
    {
      "gap": 68,
      "rows": [
        {
          "offset": 100,
          "v1": true,
          "v2": "connected",
          "expectedV1": true,
          "expectedV2": "connected",
          "pass": true
        },
        {
          "offset": 101,
          "v1": false,
          "v2": "connected",
          "expectedV1": false,
          "expectedV2": "connected",
          "pass": true
        },
        {
          "offset": 102,
          "v1": true,
          "v2": "connected",
          "expectedV1": true,
          "expectedV2": "connected",
          "pass": true
        },
        {
          "offset": 103,
          "v1": true,
          "v2": "connected",
          "expectedV1": true,
          "expectedV2": "connected",
          "pass": true
        },
        {
          "offset": 104,
          "v1": true,
          "v2": "connected",
          "expectedV1": true,
          "expectedV2": "connected",
          "pass": true
        },
        {
          "offset": 105,
          "v1": true,
          "v2": "connected",
          "expectedV1": true,
          "expectedV2": "connected",
          "pass": true
        },
        {
          "offset": 106,
          "v1": true,
          "v2": "connected",
          "expectedV1": true,
          "expectedV2": "connected",
          "pass": true
        },
        {
          "offset": 107,
          "v1": true,
          "v2": "connected",
          "expectedV1": true,
          "expectedV2": "connected",
          "pass": true
        },
        {
          "offset": 108,
          "v1": true,
          "v2": "connected",
          "expectedV1": true,
          "expectedV2": "connected",
          "pass": true
        },
        {
          "offset": 109,
          "v1": true,
          "v2": "connected",
          "expectedV1": true,
          "expectedV2": "connected",
          "pass": true
        }
      ],
      "v1Pass": 9,
      "v2Connected": 10,
      "pass": true
    }
  ],
  "verification": {
    "cases": 21,
    "passed": 21,
    "failed": 0,
    "checks": 95
  }
}
