{
  "issueId": "4420",
  "environment": "dev",
  "generatedAt": "2026-10-30T16:33:03+09:00",
  "sourceResult": "private Playwright execution results retained locally",
  "timings": {
    "issueId": "4420",
    "environment": "dev",
    "generatedAt": "2026-10-30T07:22:12.530Z",
    "exitStatus": 1,
    "timings": [
      {
        "name": "qa:run",
        "startedAt": "2026-10-30T07:21:12.752Z",
        "detail": {
          "issueId": "4420",
          "environment": "dev",
          "exitStatus": 1
        },
        "finishedAt": "2026-10-30T07:22:12.530Z",
        "durationMs": 59778,
        "status": "failed"
      },
      {
        "name": "prepare-results",
        "startedAt": "2026-10-30T07:21:12.753Z",
        "detail": {},
        "finishedAt": "2026-10-30T07:21:12.755Z",
        "durationMs": 2,
        "status": "ok"
      },
      {
        "name": "auth-refresh",
        "startedAt": "2026-10-30T07:21:12.755Z",
        "detail": {},
        "finishedAt": "2026-10-30T07:21:25.160Z",
        "durationMs": 12405,
        "status": "ok"
      },
      {
        "name": "auth-refresh:admin/dev/ADMIN",
        "startedAt": "2026-10-30T07:21:12.755Z",
        "detail": {
          "application": "admin",
          "role": "ADMIN",
          "businessRole": "ADMIN"
        },
        "finishedAt": "2026-10-30T07:21:25.160Z",
        "durationMs": 12405,
        "status": "ok"
      },
      {
        "name": "playwright",
        "startedAt": "2026-10-30T07:21:25.161Z",
        "detail": {
          "command": "npx playwright test qa/issues/4420/dev --trace retain-on-failure --grep A10",
          "exitStatus": 1
        },
        "finishedAt": "2026-10-30T07:22:12.530Z",
        "durationMs": 47369,
        "status": "failed"
      }
    ]
  },
  "summary": {
    "status": "FAIL",
    "passed": 10,
    "manualConfirmed": 0,
    "failed": 1,
    "skipped": 0,
    "blocked": 0,
    "flaky": 0,
    "durationMs": 216627
  },
  "rows": [
    {
      "title": "4420/dev/01-holiday.spec.ts / [dev] [ADMIN] 가맹점 휴일 지갑 이체 / A01 일반정보의 중복 휴일 이체 사용 여부 미표시",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 7152,
      "evidence": [
        "artifacts/screenshots/01-A01-general.png",
        "artifacts/files/verification-details.json"
      ],
      "screenshots": [
        "artifacts/screenshots/01-A01-general.png"
      ],
      "traces": [],
      "logs": [],
      "files": [
        "artifacts/files/verification-details.json"
      ],
      "role": "ADMIN",
      "page": "가맹점 관리",
      "checklistItem": "A01 일반정보의 중복 휴일 이체 사용 여부 미표시",
      "action": "가맹점 수정 일반정보에서 중복 항목 존재 여부 확인",
      "expected": "일반정보의 휴일 이체 사용 여부가 없어야 함",
      "actual": "일반정보에서 해당 항목 0개 확인",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4420/dev/01-holiday.spec.ts / [dev] [ADMIN] 가맹점 휴일 지갑 이체 / A02 정산정보 휴일 지갑 이체 1회 표시",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 10423,
      "evidence": [
        "artifacts/screenshots/02-A02-settlement.png",
        "artifacts/files/verification-details.json"
      ],
      "screenshots": [
        "artifacts/screenshots/02-A02-settlement.png"
      ],
      "traces": [],
      "logs": [],
      "files": [
        "artifacts/files/verification-details.json"
      ],
      "role": "ADMIN",
      "page": "가맹점 관리",
      "checklistItem": "A02 정산정보 휴일 지갑 이체 1회 표시",
      "action": "정산정보의 휴일 지갑 이체 입력칸 수 확인",
      "expected": "정산정보에 휴일 지갑 이체가 한 번만 있어야 함",
      "actual": "정산정보 선택칸·연결 입력값 각각 1개 확인",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4420/dev/01-holiday.spec.ts / [dev] [ADMIN] 가맹점 휴일 지갑 이체 / A03 기존 설정·새로고침 재진입 유지",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 18739,
      "evidence": [
        "artifacts/screenshots/03-A03-reentry.png",
        "artifacts/files/verification-details.json"
      ],
      "screenshots": [
        "artifacts/screenshots/03-A03-reentry.png"
      ],
      "traces": [],
      "logs": [],
      "files": [
        "artifacts/files/verification-details.json"
      ],
      "role": "ADMIN",
      "page": "가맹점 관리",
      "checklistItem": "A03 기존 설정·새로고침 재진입 유지",
      "action": "최초 상세 값과 화면을 대조한 뒤 새로고침·재진입",
      "expected": "기존 미사용 값이 유지되어야 함",
      "actual": "최초 값과 재진입 값 모두 미사용(false) 일치",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4420/dev/01-holiday.spec.ts / [dev] [ADMIN] 가맹점 휴일 지갑 이체 / A04 비고만 저장 후 휴일 지갑 이체 유지",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 40846,
      "evidence": [
        "artifacts/screenshots/04-A04-note-only.png",
        "artifacts/files/verification-details.json"
      ],
      "screenshots": [
        "artifacts/screenshots/04-A04-note-only.png"
      ],
      "traces": [],
      "logs": [],
      "files": [
        "artifacts/files/verification-details.json"
      ],
      "role": "ADMIN",
      "page": "가맹점 관리",
      "checklistItem": "A04 비고만 저장 후 휴일 지갑 이체 유지",
      "action": "휴일 설정을 건드리지 않고 비고만 임시 저장·새로고침·재진입",
      "expected": "비고만 바뀌며 휴일 설정과 다른 설정은 유지",
      "actual": "임시 비고 저장·재조회, 휴일 미사용과 다른 설정 유지 확인. finally 원복 확인",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4420/dev/01-holiday.spec.ts / [dev] [ADMIN] 가맹점 휴일 지갑 이체 / A05 사용→미사용 저장·새로고침 재진입",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 43301,
      "evidence": [
        "artifacts/screenshots/05-A05-disabled.png",
        "artifacts/files/verification-details.json"
      ],
      "screenshots": [
        "artifacts/screenshots/05-A05-disabled.png"
      ],
      "traces": [],
      "logs": [],
      "files": [
        "artifacts/files/verification-details.json"
      ],
      "role": "ADMIN",
      "page": "가맹점 관리",
      "checklistItem": "A05 사용→미사용 저장·새로고침 재진입",
      "action": "사용 상태로 준비한 뒤 미사용으로 변경·저장·새로고침·재진입",
      "expected": "사용→미사용 변경이 유지되어야 함",
      "actual": "사용(true) 저장을 확인한 뒤 미사용(false) 저장·재진입 일치. finally 원복 확인",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4420/dev/01-holiday.spec.ts / [dev] [ADMIN] 가맹점 휴일 지갑 이체 / A06 미사용→사용 저장·새로고침 재진입",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 32928,
      "evidence": [
        "artifacts/screenshots/06-A06-enabled.png",
        "artifacts/files/verification-details.json"
      ],
      "screenshots": [
        "artifacts/screenshots/06-A06-enabled.png"
      ],
      "traces": [],
      "logs": [],
      "files": [
        "artifacts/files/verification-details.json"
      ],
      "role": "ADMIN",
      "page": "가맹점 관리",
      "checklistItem": "A06 미사용→사용 저장·새로고침 재진입",
      "action": "미사용에서 사용으로 변경·저장·새로고침·재진입",
      "expected": "미사용→사용 변경이 유지되어야 함",
      "actual": "사용(true) 저장·재진입 값 일치. finally 원복 확인",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4420/dev/01-holiday.spec.ts / [dev] [ADMIN] 가맹점 휴일 지갑 이체 / A07 생성 모달 중복 제거·휴일 선택 가능",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 9000,
      "evidence": [
        "artifacts/screenshots/07-A07-create-no-save.png",
        "artifacts/files/verification-details.json"
      ],
      "screenshots": [
        "artifacts/screenshots/07-A07-create-no-save.png"
      ],
      "traces": [],
      "logs": [],
      "files": [
        "artifacts/files/verification-details.json"
      ],
      "role": "ADMIN",
      "page": "가맹점 관리",
      "checklistItem": "A07 생성 모달 중복 제거·휴일 선택 가능",
      "action": "생성 모달에서 항목 수·사용/미사용 선택 후 취소",
      "expected": "일반정보 중복 없음·정산정보 1개, 선택 가능",
      "actual": "중복 항목 0개·정산 선택칸 1개와 양방향 선택 확인. 저장·신규 생성 없이 취소",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4420/dev/01-holiday.spec.ts / [dev] [ADMIN] 가맹점 휴일 지갑 이체 / A08 김경주_법인 기존 휴일 항목·설정 유지",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 13239,
      "evidence": [
        "artifacts/screenshots/08-A08-reentry.png",
        "artifacts/files/verification-details.json"
      ],
      "screenshots": [
        "artifacts/screenshots/08-A08-reentry.png"
      ],
      "traces": [],
      "logs": [],
      "files": [
        "artifacts/files/verification-details.json"
      ],
      "role": "ADMIN",
      "page": "법인 관리",
      "checklistItem": "A08 김경주_법인 기존 휴일 항목·설정 유지",
      "action": "김경주_법인 수정 화면·휴일 항목·새로고침 재진입 비교",
      "expected": "기존 법인 휴일 지갑 이체와 설정값 유지",
      "actual": "항목 표시 유지, 최초·재진입 미사용(false) 일치. 법인 저장 없음",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4420/dev/01-holiday.spec.ts / [dev] [ADMIN] 가맹점 휴일 지갑 이체 / A09 김경주_영업 기존 휴일 항목·설정 유지",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 12047,
      "evidence": [
        "artifacts/screenshots/09-A09-reentry.png",
        "artifacts/files/verification-details.json"
      ],
      "screenshots": [
        "artifacts/screenshots/09-A09-reentry.png"
      ],
      "traces": [],
      "logs": [],
      "files": [
        "artifacts/files/verification-details.json"
      ],
      "role": "ADMIN",
      "page": "영업점 관리",
      "checklistItem": "A09 김경주_영업 기존 휴일 항목·설정 유지",
      "action": "김경주_영업 수정 화면·휴일 항목·새로고침 재진입 비교",
      "expected": "기존 영업점 휴일 이체 사용 여부와 설정값 유지",
      "actual": "항목 표시 유지, 최초·재진입 미사용(false) 일치. 영업점 저장 없음",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4420/dev/01-holiday.spec.ts / [dev] [ADMIN] 가맹점 휴일 지갑 이체 / A10 PC·모바일 너비 수정 모달 배치·개폐",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 23712,
      "evidence": [
        "artifacts/screenshots/10-A10-width-1440.png",
        "artifacts/screenshots/11-A10-width-390.png",
        "artifacts/logs/01-error-context.md",
        "artifacts/logs/02-error-context.md",
        "artifacts/traces/01-trace.zip",
        "artifacts/files/verification-details.json"
      ],
      "screenshots": [
        "artifacts/screenshots/10-A10-width-1440.png",
        "artifacts/screenshots/11-A10-width-390.png"
      ],
      "traces": [
        "artifacts/traces/01-trace.zip"
      ],
      "logs": [
        "artifacts/logs/01-error-context.md",
        "artifacts/logs/02-error-context.md"
      ],
      "files": [
        "artifacts/files/verification-details.json"
      ],
      "role": "ADMIN",
      "page": "가맹점 관리",
      "checklistItem": "A10 PC·모바일 너비 수정 모달 배치·개폐",
      "action": "1440px·390px 너비에서 가맹점 수정 모달·입력·버튼 배치 및 취소 확인",
      "expected": "휴일 입력칸과 취소·수정 버튼이 화면 안에 있고 겹침·잘림 없이 모달 개폐가 가능해야 함",
      "actual": "PC 1440px에서는 정상. 모바일 390px에서 수정 버튼 x=354px·폭64px·오른쪽 끝418px로 화면 밖28px 잘림 재현. 휴일 입력칸·취소·모달 개폐는 정상",
      "error": "Error: 390px 수정 right bound  expect(received).toBeLessThanOrEqual(expected)",
      "failureCategory": "assertion",
      "failureCategoryText": "기대 결과와 다름",
      "reproduction": {
        "required": true,
        "reason": "화면에서 확인한 값이 체크리스트의 기대 결과와 달랐습니다.",
        "debugCommand": "QA4420_AUTH_ROLE=QA4373_ADMIN npx tsx qa/issues/4420/dev/run.ts --grep A10 --headed",
        "notifyMessage": "김경주 / ADMIN / A10: 390px에서 수정 버튼 오른쪽28px 잘림. 공개 화면·측정 값·재현 기록 참조.",
        "manualSteps": [
          "ADMIN으로 가맹점 관리에서 BP100611 수정 모달 진입",
          "브라우저 너비390px에서 하단 수정 버튼의 오른쪽 잘림 확인",
          "1440px로 늘려 정상 표시와 비교",
          "저장 없이 취소로 닫기"
        ]
      }
    },
    {
      "title": "4420/dev/01-holiday.spec.ts / [dev] [ADMIN] 가맹점 휴일 지갑 이체 / A11 최종 원본 설정·비고 복구·재조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 5240,
      "evidence": [
        "artifacts/screenshots/12-A11-restored.png",
        "artifacts/files/verification-details.json"
      ],
      "screenshots": [
        "artifacts/screenshots/12-A11-restored.png"
      ],
      "traces": [],
      "logs": [],
      "files": [
        "artifacts/files/verification-details.json"
      ],
      "role": "ADMIN",
      "page": "가맹점 관리",
      "checklistItem": "A11 최종 원본 설정·비고 복구·재조회",
      "action": "최종 상세 재조회·화면과 최초 전체 설정 대조",
      "expected": "휴일 값·비고·다른 설정 모두 원래 값 복구",
      "actual": "휴일 미사용(false)·빈 비고(null)와 다른 설정을 최초 상태와 대조해 복구 일치. 지갑 잔고·수정 시각은 비교 제외",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    }
  ],
  "qaSourceChecklist": {
    "total": 11,
    "passed": 10,
    "failed": 1,
    "blocked": 0,
    "skipped": 0
  }
}
