[
  {
    "run_id": "R-1001-1",
    "case_id": "checkout/coupon-apply.spec.ts",
    "attempt": 1,
    "status": "passed",
    "error_kind": null,
    "duration_ms": 8420,
    "error_message": null
  },
  {
    "run_id": "R-1001-1",
    "case_id": "cart/qty-change.spec.ts",
    "attempt": 1,
    "status": "passed",
    "error_kind": null,
    "duration_ms": 5310,
    "error_message": null
  },
  {
    "run_id": "R-1001-1",
    "case_id": "mypage/order-list.spec.ts",
    "attempt": 1,
    "status": "passed",
    "error_kind": null,
    "duration_ms": 4120,
    "error_message": null
  },
  {
    "run_id": "R-1001-1",
    "case_id": "auth/login.spec.ts",
    "attempt": 1,
    "status": "passed",
    "error_kind": null,
    "duration_ms": 2980,
    "error_message": null
  },
  {
    "run_id": "R-1001-1",
    "case_id": "search/keyword.spec.ts",
    "attempt": 1,
    "status": "passed",
    "error_kind": null,
    "duration_ms": 3650,
    "error_message": null
  },
  {
    "run_id": "R-1002-1",
    "case_id": "checkout/coupon-apply.spec.ts",
    "attempt": 1,
    "status": "failed",
    "error_kind": "assertion",
    "duration_ms": 9120,
    "error_message": "expect(locator('.discount-amount')).toHaveText('3,000원') · Received: '0원'"
  },
  {
    "run_id": "R-1002-1",
    "case_id": "checkout/coupon-apply.spec.ts",
    "attempt": 2,
    "status": "failed",
    "error_kind": "assertion",
    "duration_ms": 9050,
    "error_message": "expect(locator('.discount-amount')).toHaveText('3,000원') · Received: '0원'"
  },
  {
    "run_id": "R-1002-1",
    "case_id": "cart/qty-change.spec.ts",
    "attempt": 1,
    "status": "failed",
    "error_kind": "assertion",
    "duration_ms": 6010,
    "error_message": "expect(locator('.cart-total')).toHaveText('25,800원') · Received: '12,900원'"
  },
  {
    "run_id": "R-1002-1",
    "case_id": "cart/qty-change.spec.ts",
    "attempt": 2,
    "status": "passed",
    "error_kind": null,
    "duration_ms": 5400,
    "error_message": null
  },
  {
    "run_id": "R-1002-1",
    "case_id": "mypage/order-list.spec.ts",
    "attempt": 1,
    "status": "failed",
    "error_kind": "locator_timeout",
    "duration_ms": 30000,
    "error_message": "locator('#orderTable') 대기 30000ms 초과"
  },
  {
    "run_id": "R-1002-1",
    "case_id": "mypage/order-list.spec.ts",
    "attempt": 2,
    "status": "failed",
    "error_kind": "locator_timeout",
    "duration_ms": 30000,
    "error_message": "locator('#orderTable') 대기 30000ms 초과"
  },
  {
    "run_id": "R-1002-1",
    "case_id": "auth/login.spec.ts",
    "attempt": 1,
    "status": "passed",
    "error_kind": null,
    "duration_ms": 3010,
    "error_message": null
  },
  {
    "run_id": "R-1002-1",
    "case_id": "search/keyword.spec.ts",
    "attempt": 1,
    "status": "passed",
    "error_kind": null,
    "duration_ms": 3720,
    "error_message": null
  },
  {
    "run_id": "R-1002-2",
    "case_id": "checkout/coupon-apply.spec.ts",
    "attempt": 1,
    "status": "failed",
    "error_kind": "network",
    "duration_ms": 1200,
    "error_message": "page.goto: net::ERR_CONNECTION_RESET at https://stg-shop.example.com"
  },
  {
    "run_id": "R-1002-2",
    "case_id": "cart/qty-change.spec.ts",
    "attempt": 1,
    "status": "failed",
    "error_kind": "network",
    "duration_ms": 1180,
    "error_message": "page.goto: net::ERR_CONNECTION_RESET at https://stg-shop.example.com"
  },
  {
    "run_id": "R-1002-2",
    "case_id": "mypage/order-list.spec.ts",
    "attempt": 1,
    "status": "failed",
    "error_kind": "browser",
    "duration_ms": null,
    "error_message": "browserType.launch: Target page, context or browser has been closed"
  },
  {
    "run_id": "R-1002-2",
    "case_id": "auth/login.spec.ts",
    "attempt": 1,
    "status": "passed",
    "error_kind": null,
    "duration_ms": 3100,
    "error_message": null
  },
  {
    "run_id": "R-1002-2",
    "case_id": "search/keyword.spec.ts",
    "attempt": 1,
    "status": "failed",
    "error_kind": "network",
    "duration_ms": 1210,
    "error_message": "page.goto: net::ERR_CONNECTION_RESET at https://stg-shop.example.com"
  },
  {
    "run_id": "R-1002-3",
    "case_id": "checkout/coupon-apply.spec.ts",
    "attempt": 1,
    "status": "failed",
    "error_kind": "assertion",
    "duration_ms": 9200,
    "error_message": "expect(locator('.discount-amount')).toHaveText('3,000원') · Received: '0원'"
  },
  {
    "run_id": "R-1002-3",
    "case_id": "checkout/coupon-apply.spec.ts",
    "attempt": 2,
    "status": "failed",
    "error_kind": "assertion",
    "duration_ms": 9180,
    "error_message": "expect(locator('.discount-amount')).toHaveText('3,000원') · Received: '0원'"
  },
  {
    "run_id": "R-1002-3",
    "case_id": "cart/qty-change.spec.ts",
    "attempt": 1,
    "status": "failed",
    "error_kind": "network",
    "duration_ms": 1300,
    "error_message": "page.goto: net::ERR_CONNECTION_RESET at https://stg-shop.example.com"
  },
  {
    "run_id": "R-1002-3",
    "case_id": "cart/qty-change.spec.ts",
    "attempt": 2,
    "status": "passed",
    "error_kind": null,
    "duration_ms": 5350,
    "error_message": null
  },
  {
    "run_id": "R-1002-3",
    "case_id": "mypage/order-list.spec.ts",
    "attempt": 1,
    "status": "failed",
    "error_kind": "locator_timeout",
    "duration_ms": 30000,
    "error_message": "locator('#orderTable') 대기 30000ms 초과"
  },
  {
    "run_id": "R-1002-3",
    "case_id": "mypage/order-list.spec.ts",
    "attempt": 2,
    "status": "failed",
    "error_kind": "locator_timeout",
    "duration_ms": 30000,
    "error_message": "locator('#orderTable') 대기 30000ms 초과"
  },
  {
    "run_id": "R-1002-3",
    "case_id": "auth/login.spec.ts",
    "attempt": 1,
    "status": "passed",
    "error_kind": null,
    "duration_ms": 2950,
    "error_message": null
  },
  {
    "run_id": "R-1002-3",
    "case_id": "search/keyword.spec.ts",
    "attempt": 1,
    "status": "skipped",
    "error_kind": null,
    "duration_ms": null,
    "error_message": null
  }
]