{
  "issueId": "4373",
  "environment": "dev",
  "generatedAt": "2026-10-26T22:17:24+09:00",
  "sourceResult": "qa-results redacted from tracked output",
  "timings": {
    "issueId": "4373",
    "environment": "dev",
    "generatedAt": "2026-10-26T12:38:37.014Z",
    "exitStatus": 1,
    "timings": [
      {
        "name": "qa:run",
        "startedAt": "2026-10-26T12:35:49.073Z",
        "detail": {
          "issueId": "4373",
          "environment": "dev",
          "exitStatus": 1
        },
        "finishedAt": "2026-10-26T12:38:37.013Z",
        "durationMs": 167940,
        "status": "failed"
      },
      {
        "name": "prepare-results",
        "startedAt": "2026-10-26T12:35:49.074Z",
        "detail": {},
        "finishedAt": "2026-10-26T12:35:49.081Z",
        "durationMs": 7,
        "status": "ok"
      },
      {
        "name": "auth-refresh",
        "startedAt": "2026-10-26T12:35:49.081Z",
        "detail": {},
        "finishedAt": "2026-10-26T12:36:09.256Z",
        "durationMs": 20175,
        "status": "ok"
      },
      {
        "name": "auth-refresh:admin/dev/QA4373_ADMIN",
        "startedAt": "2026-10-26T12:35:49.081Z",
        "detail": {
          "application": "admin",
          "role": "QA4373_ADMIN",
          "businessRole": "ADMIN"
        },
        "finishedAt": "2026-10-26T12:35:54.140Z",
        "durationMs": 5059,
        "status": "ok"
      },
      {
        "name": "auth-refresh:admin/dev/TA",
        "startedAt": "2026-10-26T12:35:54.140Z",
        "detail": {
          "application": "admin",
          "role": "TA",
          "businessRole": "TA"
        },
        "finishedAt": "2026-10-26T12:35:58.973Z",
        "durationMs": 4833,
        "status": "ok"
      },
      {
        "name": "auth-refresh:admin/dev/CO",
        "startedAt": "2026-10-26T12:35:58.973Z",
        "detail": {
          "application": "admin",
          "role": "CO",
          "businessRole": "CO"
        },
        "finishedAt": "2026-10-26T12:36:04.729Z",
        "durationMs": 5756,
        "status": "ok"
      },
      {
        "name": "auth-refresh:admin/dev/BO",
        "startedAt": "2026-10-26T12:36:04.729Z",
        "detail": {
          "application": "admin",
          "role": "BO",
          "businessRole": "BO"
        },
        "finishedAt": "2026-10-26T12:36:09.256Z",
        "durationMs": 4527,
        "status": "ok"
      },
      {
        "name": "playwright",
        "startedAt": "2026-10-26T12:36:09.256Z",
        "detail": {
          "command": "npx playwright test qa/issues/4373/dev --trace retain-on-failure --grep 01 빠른|08 보조|16 긴",
          "exitStatus": 1
        },
        "finishedAt": "2026-10-26T12:38:37.013Z",
        "durationMs": 147757,
        "status": "failed"
      }
    ]
  },
  "summary": {
    "status": "FAIL",
    "passed": 50,
    "failed": 4,
    "skipped": 4,
    "blocked": 5,
    "flaky": 0,
    "durationMs": 623209
  },
  "rows": [
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [ADMIN] role / 가맹점 등록·수정 / 02 보조검증: 브라우저 한글 조합·영문·숫자 혼합",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 2103,
      "evidence": [
        "artifacts/screenshots/01-02-browser-composition.png"
      ],
      "screenshots": [
        "artifacts/screenshots/01-02-browser-composition.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "ADMIN",
      "page": "가맹점 등록·수정",
      "checklistItem": "02 보조검증: 브라우저 한글 조합·영문·숫자 혼합",
      "action": "ADMIN 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "ADMIN 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "scope: 실제 개발계 브라우저 한글 조합 보조검증. macOS/Windows 실제 OS 입력기 검증을 대체하지 않음.",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [ADMIN] role / 가맹점 등록·수정 / 03 입력 직후 이체수수료·기본 수수료 변경",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 5156,
      "evidence": [
        "artifacts/screenshots/02-03-cross-section.png"
      ],
      "screenshots": [
        "artifacts/screenshots/02-03-cross-section.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "ADMIN",
      "page": "가맹점 등록·수정",
      "checklistItem": "03 입력 직후 이체수수료·기본 수수료 변경",
      "action": "ADMIN 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "ADMIN 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [ADMIN] role / 가맹점 등록·수정 / 04 문장 중간 삽입·삭제·붙여넣기",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 2719,
      "evidence": [
        "artifacts/screenshots/03-04-edit-paste.png"
      ],
      "screenshots": [
        "artifacts/screenshots/03-04-edit-paste.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "ADMIN",
      "page": "가맹점 등록·수정",
      "checklistItem": "04 문장 중간 삽입·삭제·붙여넣기",
      "action": "ADMIN 계정으로 정책을 생성하고 삭제한 뒤 목록 반영 여부를 확인",
      "expected": "TA 계정에서 정책 생성과 삭제가 성공하고 목록에 즉시 반영되어야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [ADMIN] role / 가맹점 등록·수정 / 06 대표자·업종·업태·상세주소·연락처·상품명 빠른 입력",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 3322,
      "evidence": [
        "artifacts/screenshots/04-06-other-fields.png"
      ],
      "screenshots": [
        "artifacts/screenshots/04-06-other-fields.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "ADMIN",
      "page": "가맹점 등록·수정",
      "checklistItem": "대표자·업종·업태·상세주소·연락처·상품명 빠른 입력",
      "action": "ADMIN 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "ADMIN 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [ADMIN] role / 가맹점 등록·수정 / 07 금액·수수료·결제한도·계좌번호 표시 형식",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 2203,
      "evidence": [
        "artifacts/screenshots/05-07-format.png"
      ],
      "screenshots": [
        "artifacts/screenshots/05-07-format.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "ADMIN",
      "page": "가맹점 등록·수정",
      "checklistItem": "예금주 조회·계좌 재입력 전후 잠금 상태",
      "action": "ADMIN 계정으로 가맹점 등록·수정 화면에서 은행/계좌번호 입력, 예금주 조회, 실패 안내 또는 다음 단계 버튼 상태를 확인",
      "expected": "헥토파이낸셜 예금주 조회 전환 후 정상 계좌는 예금주명이 표시되고, 실패 계좌는 안내 문구와 진행 제한이 동작해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [ADMIN] role / 가맹점 등록·수정 / 13 이메일·사업자등록번호 검증 메시지 표시·해제",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 2474,
      "evidence": [
        "artifacts/screenshots/06-13-validation.png"
      ],
      "screenshots": [
        "artifacts/screenshots/06-13-validation.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "ADMIN",
      "page": "가맹점 등록·수정",
      "checklistItem": "13 이메일·사업자등록번호 검증 메시지 표시·해제",
      "action": "ADMIN 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "ADMIN 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [ADMIN] role / 가맹점 등록·수정 / 10 프리셋 적용 후 직접 수정값 유지",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 2584,
      "evidence": [
        "artifacts/screenshots/07-10-preset.png"
      ],
      "screenshots": [
        "artifacts/screenshots/07-10-preset.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "ADMIN",
      "page": "가맹점 등록·수정",
      "checklistItem": "10 프리셋 적용 후 직접 수정값 유지",
      "action": "ADMIN 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "ADMIN 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [ADMIN] role / 가맹점 등록·수정 / 09 기존 가맹점 수정 화면 진입·재조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 7738,
      "evidence": [
        "artifacts/screenshots/08-09-existing-reopen.png"
      ],
      "screenshots": [
        "artifacts/screenshots/08-09-existing-reopen.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "ADMIN",
      "page": "가맹점 등록·수정",
      "checklistItem": "기존 가맹점 수정 화면 진입·재조회 시 저장 정보 표시",
      "action": "ADMIN 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "ADMIN 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [ADMIN] role / 가맹점 등록·수정 / 11 다른 가맹점으로 이동할 때 미저장 입력 분리",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 3253,
      "evidence": [
        "artifacts/screenshots/09-11-isolation.png"
      ],
      "screenshots": [
        "artifacts/screenshots/09-11-isolation.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "ADMIN",
      "page": "가맹점 등록·수정",
      "checklistItem": "기존 가맹점 수정 화면 진입·재조회 시 저장 정보 표시",
      "action": "ADMIN 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "ADMIN 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [ADMIN] role / 가맹점 등록·수정 / 15 수정 화면 개인정보 마스킹 잠금 확인",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 2079,
      "evidence": [
        "artifacts/screenshots/10-15-mask-lock.png"
      ],
      "screenshots": [
        "artifacts/screenshots/10-15-mask-lock.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "ADMIN",
      "page": "가맹점 등록·수정",
      "checklistItem": "15 수정 화면 개인정보 마스킹 잠금 확인",
      "action": "ADMIN 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "ADMIN 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [TA] role / 가맹점 등록·수정 / 02 보조검증: 브라우저 한글 조합·영문·숫자 혼합",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 1342,
      "evidence": [
        "artifacts/screenshots/11-02-browser-composition.png"
      ],
      "screenshots": [
        "artifacts/screenshots/11-02-browser-composition.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "TA",
      "page": "가맹점 등록·수정",
      "checklistItem": "02 보조검증: 브라우저 한글 조합·영문·숫자 혼합",
      "action": "TA 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "TA 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "scope: 실제 개발계 브라우저 한글 조합 보조검증. macOS/Windows 실제 OS 입력기 검증을 대체하지 않음.",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [TA] role / 가맹점 등록·수정 / 03 입력 직후 이체수수료·기본 수수료 변경",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 3478,
      "evidence": [
        "artifacts/screenshots/12-03-cross-section.png"
      ],
      "screenshots": [
        "artifacts/screenshots/12-03-cross-section.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "TA",
      "page": "가맹점 등록·수정",
      "checklistItem": "03 입력 직후 이체수수료·기본 수수료 변경",
      "action": "TA 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "TA 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [TA] role / 가맹점 등록·수정 / 04 문장 중간 삽입·삭제·붙여넣기",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 1692,
      "evidence": [
        "artifacts/screenshots/13-04-edit-paste.png"
      ],
      "screenshots": [
        "artifacts/screenshots/13-04-edit-paste.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "TA",
      "page": "가맹점 등록·수정",
      "checklistItem": "04 문장 중간 삽입·삭제·붙여넣기",
      "action": "TA 계정으로 정책을 생성하고 삭제한 뒤 목록 반영 여부를 확인",
      "expected": "TA 계정에서 정책 생성과 삭제가 성공하고 목록에 즉시 반영되어야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [TA] role / 가맹점 등록·수정 / 06 대표자·업종·업태·상세주소·연락처·상품명 빠른 입력",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 2157,
      "evidence": [
        "artifacts/screenshots/14-06-other-fields.png"
      ],
      "screenshots": [
        "artifacts/screenshots/14-06-other-fields.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "TA",
      "page": "가맹점 등록·수정",
      "checklistItem": "대표자·업종·업태·상세주소·연락처·상품명 빠른 입력",
      "action": "TA 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "TA 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [TA] role / 가맹점 등록·수정 / 07 금액·수수료·결제한도·계좌번호 표시 형식",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 1426,
      "evidence": [
        "artifacts/screenshots/15-07-format.png"
      ],
      "screenshots": [
        "artifacts/screenshots/15-07-format.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "TA",
      "page": "가맹점 등록·수정",
      "checklistItem": "예금주 조회·계좌 재입력 전후 잠금 상태",
      "action": "TA 계정으로 가맹점 등록·수정 화면에서 은행/계좌번호 입력, 예금주 조회, 실패 안내 또는 다음 단계 버튼 상태를 확인",
      "expected": "헥토파이낸셜 예금주 조회 전환 후 정상 계좌는 예금주명이 표시되고, 실패 계좌는 안내 문구와 진행 제한이 동작해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [TA] role / 가맹점 등록·수정 / 13 이메일·사업자등록번호 검증 메시지 표시·해제",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 1513,
      "evidence": [
        "artifacts/screenshots/16-13-validation.png"
      ],
      "screenshots": [
        "artifacts/screenshots/16-13-validation.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "TA",
      "page": "가맹점 등록·수정",
      "checklistItem": "13 이메일·사업자등록번호 검증 메시지 표시·해제",
      "action": "TA 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "TA 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [TA] role / 가맹점 등록·수정 / 10 프리셋 적용 후 직접 수정값 유지",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 1805,
      "evidence": [
        "artifacts/screenshots/17-10-preset.png"
      ],
      "screenshots": [
        "artifacts/screenshots/17-10-preset.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "TA",
      "page": "가맹점 등록·수정",
      "checklistItem": "10 프리셋 적용 후 직접 수정값 유지",
      "action": "TA 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "TA 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [TA] role / 가맹점 등록·수정 / 09 기존 가맹점 수정 화면 진입·재조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 7180,
      "evidence": [
        "artifacts/screenshots/18-09-existing-reopen.png"
      ],
      "screenshots": [
        "artifacts/screenshots/18-09-existing-reopen.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "TA",
      "page": "가맹점 등록·수정",
      "checklistItem": "기존 가맹점 수정 화면 진입·재조회 시 저장 정보 표시",
      "action": "TA 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "TA 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [TA] role / 가맹점 등록·수정 / 11 다른 가맹점으로 이동할 때 미저장 입력 분리",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 2640,
      "evidence": [
        "artifacts/screenshots/19-11-isolation.png"
      ],
      "screenshots": [
        "artifacts/screenshots/19-11-isolation.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "TA",
      "page": "가맹점 등록·수정",
      "checklistItem": "기존 가맹점 수정 화면 진입·재조회 시 저장 정보 표시",
      "action": "TA 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "TA 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [TA] role / 가맹점 등록·수정 / 15 수정 화면 개인정보 마스킹 잠금 확인",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 1489,
      "evidence": [
        "artifacts/screenshots/20-15-mask-lock.png"
      ],
      "screenshots": [
        "artifacts/screenshots/20-15-mask-lock.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "TA",
      "page": "가맹점 등록·수정",
      "checklistItem": "15 수정 화면 개인정보 마스킹 잠금 확인",
      "action": "TA 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "TA 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [CO] role / 가맹점 등록·수정 / 02 보조검증: 브라우저 한글 조합·영문·숫자 혼합",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 1240,
      "evidence": [
        "artifacts/screenshots/21-02-browser-composition.png"
      ],
      "screenshots": [
        "artifacts/screenshots/21-02-browser-composition.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "CO",
      "page": "가맹점 등록·수정",
      "checklistItem": "02 보조검증: 브라우저 한글 조합·영문·숫자 혼합",
      "action": "CO 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "CO 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "scope: 실제 개발계 브라우저 한글 조합 보조검증. macOS/Windows 실제 OS 입력기 검증을 대체하지 않음.",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [CO] role / 가맹점 등록·수정 / 03 입력 직후 이체수수료·기본 수수료 변경",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 2509,
      "evidence": [
        "artifacts/screenshots/22-03-cross-section.png"
      ],
      "screenshots": [
        "artifacts/screenshots/22-03-cross-section.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "CO",
      "page": "가맹점 등록·수정",
      "checklistItem": "03 입력 직후 이체수수료·기본 수수료 변경",
      "action": "CO 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "CO 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [CO] role / 가맹점 등록·수정 / 04 문장 중간 삽입·삭제·붙여넣기",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 1091,
      "evidence": [
        "artifacts/screenshots/23-04-edit-paste.png"
      ],
      "screenshots": [
        "artifacts/screenshots/23-04-edit-paste.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "CO",
      "page": "가맹점 등록·수정",
      "checklistItem": "04 문장 중간 삽입·삭제·붙여넣기",
      "action": "CO 계정으로 정책을 생성하고 삭제한 뒤 목록 반영 여부를 확인",
      "expected": "TA 계정에서 정책 생성과 삭제가 성공하고 목록에 즉시 반영되어야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [CO] role / 가맹점 등록·수정 / 06 대표자·업종·업태·상세주소·연락처·상품명 빠른 입력",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 1458,
      "evidence": [
        "artifacts/screenshots/24-06-other-fields.png"
      ],
      "screenshots": [
        "artifacts/screenshots/24-06-other-fields.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "CO",
      "page": "가맹점 등록·수정",
      "checklistItem": "대표자·업종·업태·상세주소·연락처·상품명 빠른 입력",
      "action": "CO 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "CO 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [CO] role / 가맹점 등록·수정 / 07 금액·수수료·결제한도·계좌번호 표시 형식",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 1227,
      "evidence": [
        "artifacts/screenshots/25-07-format.png"
      ],
      "screenshots": [
        "artifacts/screenshots/25-07-format.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "CO",
      "page": "가맹점 등록·수정",
      "checklistItem": "예금주 조회·계좌 재입력 전후 잠금 상태",
      "action": "CO 계정으로 가맹점 등록·수정 화면에서 은행/계좌번호 입력, 예금주 조회, 실패 안내 또는 다음 단계 버튼 상태를 확인",
      "expected": "헥토파이낸셜 예금주 조회 전환 후 정상 계좌는 예금주명이 표시되고, 실패 계좌는 안내 문구와 진행 제한이 동작해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [CO] role / 가맹점 등록·수정 / 13 이메일·사업자등록번호 검증 메시지 표시·해제",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 1122,
      "evidence": [
        "artifacts/screenshots/26-13-validation.png"
      ],
      "screenshots": [
        "artifacts/screenshots/26-13-validation.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "CO",
      "page": "가맹점 등록·수정",
      "checklistItem": "13 이메일·사업자등록번호 검증 메시지 표시·해제",
      "action": "CO 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "CO 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [CO] role / 가맹점 등록·수정 / 10 프리셋 적용 후 직접 수정값 유지",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 1425,
      "evidence": [
        "artifacts/screenshots/27-10-preset.png"
      ],
      "screenshots": [
        "artifacts/screenshots/27-10-preset.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "CO",
      "page": "가맹점 등록·수정",
      "checklistItem": "10 프리셋 적용 후 직접 수정값 유지",
      "action": "CO 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "CO 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [CO] role / 가맹점 등록·수정 / 09 기존 가맹점 수정 화면 진입·재조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 6578,
      "evidence": [
        "artifacts/screenshots/28-09-existing-reopen.png"
      ],
      "screenshots": [
        "artifacts/screenshots/28-09-existing-reopen.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "CO",
      "page": "가맹점 등록·수정",
      "checklistItem": "기존 가맹점 수정 화면 진입·재조회 시 저장 정보 표시",
      "action": "CO 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "CO 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [CO] role / 가맹점 등록·수정 / 11 다른 가맹점으로 이동할 때 미저장 입력 분리",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 1887,
      "evidence": [
        "artifacts/screenshots/29-11-isolation.png"
      ],
      "screenshots": [
        "artifacts/screenshots/29-11-isolation.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "CO",
      "page": "가맹점 등록·수정",
      "checklistItem": "기존 가맹점 수정 화면 진입·재조회 시 저장 정보 표시",
      "action": "CO 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "CO 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [CO] role / 가맹점 등록·수정 / 15 수정 화면 개인정보 마스킹 잠금 확인",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 987,
      "evidence": [
        "artifacts/screenshots/30-15-mask-lock.png"
      ],
      "screenshots": [
        "artifacts/screenshots/30-15-mask-lock.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "CO",
      "page": "가맹점 등록·수정",
      "checklistItem": "15 수정 화면 개인정보 마스킹 잠금 확인",
      "action": "CO 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "CO 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [BO] role / 가맹점 등록·수정 / 02 보조검증: 브라우저 한글 조합·영문·숫자 혼합",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 1616,
      "evidence": [
        "artifacts/screenshots/31-02-browser-composition.png"
      ],
      "screenshots": [
        "artifacts/screenshots/31-02-browser-composition.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "BO",
      "page": "가맹점 등록·수정",
      "checklistItem": "02 보조검증: 브라우저 한글 조합·영문·숫자 혼합",
      "action": "BO 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "BO 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "scope: 실제 개발계 브라우저 한글 조합 보조검증. macOS/Windows 실제 OS 입력기 검증을 대체하지 않음.",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [BO] role / 가맹점 등록·수정 / 03 입력 직후 이체수수료·기본 수수료 변경",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 2222,
      "evidence": [
        "artifacts/screenshots/32-03-cross-section.png"
      ],
      "screenshots": [
        "artifacts/screenshots/32-03-cross-section.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "BO",
      "page": "가맹점 등록·수정",
      "checklistItem": "03 입력 직후 이체수수료·기본 수수료 변경",
      "action": "BO 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "BO 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [BO] role / 가맹점 등록·수정 / 04 문장 중간 삽입·삭제·붙여넣기",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 1009,
      "evidence": [
        "artifacts/screenshots/33-04-edit-paste.png"
      ],
      "screenshots": [
        "artifacts/screenshots/33-04-edit-paste.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "BO",
      "page": "가맹점 등록·수정",
      "checklistItem": "04 문장 중간 삽입·삭제·붙여넣기",
      "action": "BO 계정으로 정책을 생성하고 삭제한 뒤 목록 반영 여부를 확인",
      "expected": "TA 계정에서 정책 생성과 삭제가 성공하고 목록에 즉시 반영되어야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [BO] role / 가맹점 등록·수정 / 06 대표자·업종·업태·상세주소·연락처·상품명 빠른 입력",
      "status": "SKIPPED",
      "statusText": "해당 없음",
      "durationMs": 255,
      "evidence": [],
      "screenshots": [],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "BO",
      "page": "가맹점 등록·수정",
      "checklistItem": "06 대표자·업종·업태·상세주소·연락처·상품명 빠른 입력",
      "action": "BO 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "BO 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "BO의 정상 마스킹·메뉴 정책에 따라 해당 검사 그룹의 입력 동작은 수행하지 않았습니다.",
      "error": "NOT_APPLICABLE: BO 마스킹 개인정보 입력은 정상 잠금 범위이므로 이 검사 그룹의 입력 검증에서 제외",
      "failureCategory": "none",
      "failureCategoryText": "정상 제한에 따른 범위 제외",
      "reproduction": {
        "required": false,
        "reason": "정상 제한에 따라 해당 입력 검사를 제외했습니다. 입력 성공 판정은 아닙니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [BO] role / 가맹점 등록·수정 / 07 금액·수수료·결제한도·계좌번호 표시 형식",
      "status": "SKIPPED",
      "statusText": "해당 없음",
      "durationMs": 258,
      "evidence": [],
      "screenshots": [],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "BO",
      "page": "가맹점 등록·수정",
      "checklistItem": "07 금액·수수료·결제한도·계좌번호 표시 형식",
      "action": "BO 계정으로 가맹점 등록·수정 화면에서 은행/계좌번호 입력, 예금주 조회, 실패 안내 또는 다음 단계 버튼 상태를 확인",
      "expected": "헥토파이낸셜 예금주 조회 전환 후 정상 계좌는 예금주명이 표시되고, 실패 계좌는 안내 문구와 진행 제한이 동작해야 합니다.",
      "actual": "BO의 정상 마스킹·메뉴 정책에 따라 해당 검사 그룹의 입력 동작은 수행하지 않았습니다.",
      "error": "NOT_APPLICABLE: BO 마스킹 계좌 입력은 정상 잠금 범위이므로 이 검사 그룹의 입력 검증에서 제외",
      "failureCategory": "none",
      "failureCategoryText": "정상 제한에 따른 범위 제외",
      "reproduction": {
        "required": false,
        "reason": "정상 제한에 따라 해당 입력 검사를 제외했습니다. 입력 성공 판정은 아닙니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [BO] role / 가맹점 등록·수정 / 13 이메일·사업자등록번호 검증 메시지 표시·해제",
      "status": "SKIPPED",
      "statusText": "해당 없음",
      "durationMs": 285,
      "evidence": [],
      "screenshots": [],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "BO",
      "page": "가맹점 등록·수정",
      "checklistItem": "13 이메일·사업자등록번호 검증 메시지 표시·해제",
      "action": "BO 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "BO 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "BO의 정상 마스킹·메뉴 정책에 따라 해당 검사 그룹의 입력 동작은 수행하지 않았습니다.",
      "error": "NOT_APPLICABLE: BO 마스킹 이메일·등록번호 입력은 정상 잠금 범위이므로 검증 메시지 검사에서 제외",
      "failureCategory": "none",
      "failureCategoryText": "정상 제한에 따른 범위 제외",
      "reproduction": {
        "required": false,
        "reason": "정상 제한에 따라 해당 입력 검사를 제외했습니다. 입력 성공 판정은 아닙니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [BO] role / 가맹점 등록·수정 / 10 프리셋 적용 후 직접 수정값 유지",
      "status": "SKIPPED",
      "statusText": "해당 없음",
      "durationMs": 306,
      "evidence": [],
      "screenshots": [],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "BO",
      "page": "가맹점 등록·수정",
      "checklistItem": "10 프리셋 적용 후 직접 수정값 유지",
      "action": "BO 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "BO 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "BO의 정상 마스킹·메뉴 정책에 따라 해당 검사 그룹의 입력 동작은 수행하지 않았습니다.",
      "error": "NOT_APPLICABLE: BO는 프리셋 선택 메뉴 제공 대상 역할이 아니므로 적용 검사에서 제외",
      "failureCategory": "none",
      "failureCategoryText": "정상 제한에 따른 범위 제외",
      "reproduction": {
        "required": false,
        "reason": "정상 제한에 따라 해당 입력 검사를 제외했습니다. 입력 성공 판정은 아닙니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [BO] role / 가맹점 등록·수정 / 09 기존 가맹점 수정 화면 진입·재조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 634,
      "evidence": [
        "artifacts/screenshots/34-09-existing-reopen.png"
      ],
      "screenshots": [
        "artifacts/screenshots/34-09-existing-reopen.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "BO",
      "page": "가맹점 등록·수정",
      "checklistItem": "기존 가맹점 수정 화면 진입·재조회 시 저장 정보 표시",
      "action": "BO 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "BO 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [BO] role / 가맹점 등록·수정 / 11 다른 가맹점으로 이동할 때 미저장 입력 분리",
      "status": "BLOCKED",
      "statusText": "확인 불가",
      "durationMs": 117,
      "evidence": [],
      "screenshots": [],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "BO",
      "page": "가맹점 등록·수정",
      "checklistItem": "기존 가맹점 수정 화면 진입·재조회 시 저장 정보 표시",
      "action": "BO 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "BO 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "확인을 끝내지 못했습니다: skip: BLOCKED: 비교할 두 가맹점 데이터 없음",
      "error": "skip: BLOCKED: 비교할 두 가맹점 데이터 없음",
      "failureCategory": "blocked",
      "failureCategoryText": "확인 조건 부족",
      "reproduction": {
        "required": false,
        "reason": "확인 조건이 부족해 본 시나리오를 끝까지 실행하지 못했습니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [BO] role / 가맹점 등록·수정 / 15 수정 화면 개인정보 마스킹 잠금 확인",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 350,
      "evidence": [
        "artifacts/screenshots/35-15-mask-lock.png"
      ],
      "screenshots": [
        "artifacts/screenshots/35-15-mask-lock.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "BO",
      "page": "가맹점 등록·수정",
      "checklistItem": "15 수정 화면 개인정보 마스킹 잠금 확인",
      "action": "BO 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "BO 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [ADMIN] role / 가맹점 등록·수정 / 01 빠른 상호명·비고 입력 유지",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 2238,
      "evidence": [
        "artifacts/screenshots/36-01-fast-input.png"
      ],
      "screenshots": [
        "artifacts/screenshots/36-01-fast-input.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "ADMIN",
      "page": "가맹점 등록·수정",
      "checklistItem": "01 빠른 상호명·비고 입력 유지",
      "action": "ADMIN 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "ADMIN 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [ADMIN] role / 가맹점 등록·수정 / 08 보조검증: 선택·시간 입력 후 섹션 변경 유지",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 2999,
      "evidence": [
        "artifacts/screenshots/37-08-unsaved-time-fields.png"
      ],
      "screenshots": [
        "artifacts/screenshots/37-08-unsaved-time-fields.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "ADMIN",
      "page": "가맹점 등록·수정",
      "checklistItem": "08 보조검증: 선택·시간 입력 후 섹션 변경 유지",
      "action": "ADMIN 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "ADMIN 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "scope: 미저장 UI 유지 보조검증. 서버 저장·재진입은 QA 전용 데이터 사전조건 확인 필요.",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [ADMIN] role / 가맹점 등록·수정 / 16 긴 비고 입력과 등록 화면 구성 확인",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 26491,
      "evidence": [
        "artifacts/screenshots/38-16-long-note.png"
      ],
      "screenshots": [
        "artifacts/screenshots/38-16-long-note.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "ADMIN",
      "page": "가맹점 등록·수정",
      "checklistItem": "16 긴 비고 입력과 등록 화면 구성 확인",
      "action": "ADMIN 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "ADMIN 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [TA] role / 가맹점 등록·수정 / 01 빠른 상호명·비고 입력 유지",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 1742,
      "evidence": [
        "artifacts/screenshots/39-01-fast-input.png"
      ],
      "screenshots": [
        "artifacts/screenshots/39-01-fast-input.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "TA",
      "page": "가맹점 등록·수정",
      "checklistItem": "01 빠른 상호명·비고 입력 유지",
      "action": "TA 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "TA 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [TA] role / 가맹점 등록·수정 / 08 보조검증: 선택·시간 입력 후 섹션 변경 유지",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 2276,
      "evidence": [
        "artifacts/screenshots/40-08-unsaved-time-fields.png"
      ],
      "screenshots": [
        "artifacts/screenshots/40-08-unsaved-time-fields.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "TA",
      "page": "가맹점 등록·수정",
      "checklistItem": "08 보조검증: 선택·시간 입력 후 섹션 변경 유지",
      "action": "TA 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "TA 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "scope: 미저장 UI 유지 보조검증. 서버 저장·재진입은 QA 전용 데이터 사전조건 확인 필요.",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [TA] role / 가맹점 등록·수정 / 16 긴 비고 입력과 등록 화면 구성 확인",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 22586,
      "evidence": [
        "artifacts/screenshots/41-16-long-note.png"
      ],
      "screenshots": [
        "artifacts/screenshots/41-16-long-note.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "TA",
      "page": "가맹점 등록·수정",
      "checklistItem": "16 긴 비고 입력과 등록 화면 구성 확인",
      "action": "TA 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "TA 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [CO] role / 가맹점 등록·수정 / 01 빠른 상호명·비고 입력 유지",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 1397,
      "evidence": [
        "artifacts/screenshots/42-01-fast-input.png"
      ],
      "screenshots": [
        "artifacts/screenshots/42-01-fast-input.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "CO",
      "page": "가맹점 등록·수정",
      "checklistItem": "01 빠른 상호명·비고 입력 유지",
      "action": "CO 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "CO 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [CO] role / 가맹점 등록·수정 / 08 보조검증: 선택·시간 입력 후 섹션 변경 유지",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 1707,
      "evidence": [
        "artifacts/screenshots/43-08-unsaved-time-fields.png"
      ],
      "screenshots": [
        "artifacts/screenshots/43-08-unsaved-time-fields.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "CO",
      "page": "가맹점 등록·수정",
      "checklistItem": "08 보조검증: 선택·시간 입력 후 섹션 변경 유지",
      "action": "CO 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "CO 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "scope: 미저장 UI 유지 보조검증. 서버 저장·재진입은 QA 전용 데이터 사전조건 확인 필요.",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [CO] role / 가맹점 등록·수정 / 16 긴 비고 입력과 등록 화면 구성 확인",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 25827,
      "evidence": [
        "artifacts/screenshots/44-screenshot.png",
        "artifacts/logs/01-error-context.md",
        "artifacts/logs/02-error-context.md",
        "artifacts/traces/01-trace.zip"
      ],
      "screenshots": [
        "artifacts/screenshots/44-screenshot.png"
      ],
      "traces": [
        "artifacts/traces/01-trace.zip"
      ],
      "logs": [
        "artifacts/logs/01-error-context.md",
        "artifacts/logs/02-error-context.md"
      ],
      "files": [],
      "role": "CO",
      "page": "가맹점 등록·수정",
      "checklistItem": "16 긴 비고 입력과 등록 화면 구성 확인",
      "action": "CO 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "CO 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "긴 비고 1,500자 자동입력에서 문자가 누락되었습니다. 추가 반복 3회에도 1,498·1,497·1,498자.",
      "error": "긴 비고 자동입력 문자열 불일치. 추가 반복 3/3회 재현. 실제 OS 입력기 검증은 별도 필요.",
      "failureCategory": "assertion",
      "failureCategoryText": "기대 결과와 다름",
      "reproduction": {
        "required": true,
        "reason": "화면에서 확인한 값이 체크리스트의 기대 결과와 달랐습니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4373\" --env \"dev\" --role \"CO\" --case \"16 긴 비고 입력과 등록 화면 구성 확인\"",
        "notifyMessage": "[QA 확인 요청] CO / 가맹점 등록·수정 / 16 긴 비고 입력과 등록 화면 구성 확인: 기대 결과와 다름 상태입니다. npm run qa:debug -- --issue \"4373\" --env \"dev\" --role \"CO\" --case \"16 긴 비고 입력과 등록 화면 구성 확인\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [BO] role / 가맹점 등록·수정 / 01 빠른 상호명·비고 입력 유지",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 1788,
      "evidence": [
        "artifacts/screenshots/45-01-fast-input.png"
      ],
      "screenshots": [
        "artifacts/screenshots/45-01-fast-input.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "BO",
      "page": "가맹점 등록·수정",
      "checklistItem": "01 빠른 상호명·비고 입력 유지",
      "action": "BO 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "BO 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [BO] role / 가맹점 등록·수정 / 08 보조검증: 선택·시간 입력 후 섹션 변경 유지",
      "status": "BLOCKED",
      "statusText": "확인 불가",
      "durationMs": 248,
      "evidence": [],
      "screenshots": [],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "BO",
      "page": "가맹점 등록·수정",
      "checklistItem": "08 보조검증: 선택·시간 입력 후 섹션 변경 유지",
      "action": "BO 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "BO 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "확인을 끝내지 못했습니다: skip: BLOCKED: 해당 계정의 시간 입력 권한/조건 없음",
      "error": "skip: BLOCKED: 해당 계정의 시간 입력 권한/조건 없음",
      "failureCategory": "blocked",
      "failureCategoryText": "확인 조건 부족",
      "reproduction": {
        "required": false,
        "reason": "확인 조건이 부족해 본 시나리오를 끝까지 실행하지 못했습니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [BO] role / 가맹점 등록·수정 / 16 긴 비고 입력과 등록 화면 구성 확인",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 22754,
      "evidence": [
        "artifacts/screenshots/46-16-long-note.png"
      ],
      "screenshots": [
        "artifacts/screenshots/46-16-long-note.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "BO",
      "page": "가맹점 등록·수정",
      "checklistItem": "16 긴 비고 입력과 등록 화면 구성 확인",
      "action": "BO 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "BO 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/holiday-warning.spec.ts / [dev] / [ADMIN] role / 가맹점 등록·수정 / 14 휴일정산 변경 안내",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 10890,
      "evidence": [
        "artifacts/screenshots/47-14-holiday-warning.png"
      ],
      "screenshots": [
        "artifacts/screenshots/47-14-holiday-warning.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "ADMIN",
      "page": "가맹점 등록·수정",
      "checklistItem": "14 휴일정산 변경 안내",
      "action": "ADMIN 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "ADMIN 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/holiday-warning.spec.ts / [dev] / [TA] role / 가맹점 등록·수정 / 14 휴일정산 변경 안내",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 9549,
      "evidence": [
        "artifacts/screenshots/48-14-holiday-warning.png"
      ],
      "screenshots": [
        "artifacts/screenshots/48-14-holiday-warning.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "TA",
      "page": "가맹점 등록·수정",
      "checklistItem": "14 휴일정산 변경 안내",
      "action": "TA 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "TA 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/holiday-warning.spec.ts / [dev] / [CO] role / 가맹점 등록·수정 / 14 휴일정산 변경 안내",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 7276,
      "evidence": [
        "artifacts/screenshots/49-14-holiday-warning.png"
      ],
      "screenshots": [
        "artifacts/screenshots/49-14-holiday-warning.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "CO",
      "page": "가맹점 등록·수정",
      "checklistItem": "14 휴일정산 변경 안내",
      "action": "CO 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "CO 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/holiday-warning.spec.ts / [dev] / [BO] role / 가맹점 등록·수정 / 14 휴일정산 변경 안내",
      "status": "BLOCKED",
      "statusText": "확인 불가",
      "durationMs": 5073,
      "evidence": [],
      "screenshots": [],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "BO",
      "page": "가맹점 등록·수정",
      "checklistItem": "14 휴일정산 변경 안내",
      "action": "BO 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "BO 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "확인을 끝내지 못했습니다: skip: BLOCKED: 휴일정산 수정 권한 없음",
      "error": "skip: BLOCKED: 휴일정산 수정 권한 없음",
      "failureCategory": "blocked",
      "failureCategoryText": "확인 조건 부족",
      "reproduction": {
        "required": false,
        "reason": "확인 조건이 부족해 본 시나리오를 끝까지 실행하지 못했습니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/preconditions.spec.ts / [dev] / [전체] role / 실제 OS 한글 입력기 / 02 macOS·Windows Chrome 실제 입력기",
      "status": "BLOCKED",
      "statusText": "확인 불가",
      "durationMs": 1,
      "evidence": [],
      "screenshots": [],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "전체",
      "page": "실제 OS 한글 입력기",
      "checklistItem": "02 macOS·Windows Chrome 실제 입력기",
      "action": "전체 계정으로 실제 OS 한글 입력기 항목을 확인",
      "expected": "전체 계정에서 실제 OS 한글 입력기 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "확인을 끝내지 못했습니다: skip: BLOCKED: CDP 한글 조합은 별도 보조검증으로 실행했다. 실제 OS 입력 소스를 통한 조합은 macOS에서 전환 확인을 완료하지 못했고 Windows 실행환경이 제공되지 않았다. OS별 한글 입력기 검증 증거가 필요하다.",
      "error": "skip: BLOCKED: CDP 한글 조합은 별도 보조검증으로 실행했다. 실제 OS 입력 소스를 통한 조합은 macOS에서 전환 확인을 완료하지 못했고 Windows 실행환경이 제공되지 않았다. OS별 한글 입력기 검증 증거가 필요하다.",
      "failureCategory": "blocked",
      "failureCategoryText": "확인 조건 부족",
      "reproduction": {
        "required": false,
        "reason": "확인 조건이 부족해 본 시나리오를 끝까지 실행하지 못했습니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/preconditions.spec.ts / [dev] / [전체] role / 가맹점 등록·수정 / 12 예금주 조회·재입력 잠금 상태",
      "status": "BLOCKED",
      "statusText": "확인 불가",
      "durationMs": 1,
      "evidence": [],
      "screenshots": [],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "전체",
      "page": "가맹점 등록·수정",
      "checklistItem": "예금주 조회·계좌 재입력 전후 잠금 상태",
      "action": "전체 계정으로 가맹점 등록·수정 화면에서 은행/계좌번호 입력, 예금주 조회, 실패 안내 또는 다음 단계 버튼 상태를 확인",
      "expected": "헥토파이낸셜 예금주 조회 전환 후 정상 계좌는 예금주명이 표시되고, 실패 계좌는 안내 문구와 진행 제한이 동작해야 합니다.",
      "actual": "확인을 끝내지 못했습니다: skip: BLOCKED: 조회가 허용된 QA용 은행·계좌 및 예상 예금주가 제공되지 않았다. 임의 계좌로 외부 예금주 조회를 실행하지 않았다.",
      "error": "skip: BLOCKED: 조회가 허용된 QA용 은행·계좌 및 예상 예금주가 제공되지 않았다. 임의 계좌로 외부 예금주 조회를 실행하지 않았다.",
      "failureCategory": "blocked",
      "failureCategoryText": "확인 조건 부족",
      "reproduction": {
        "required": false,
        "reason": "확인 조건이 부족해 본 시나리오를 끝까지 실행하지 못했습니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [CO] role / 가맹점 등록·수정 / 16 긴 비고 입력과 등록 화면 구성 확인",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 19367,
      "evidence": [
        "artifacts/screenshots/50-16-long-note.png",
        "artifacts/screenshots/51-screenshot.png",
        "artifacts/logs/03-error-context.md",
        "artifacts/logs/04-error-context.md",
        "artifacts/traces/02-trace.zip"
      ],
      "screenshots": [
        "artifacts/screenshots/50-16-long-note.png",
        "artifacts/screenshots/51-screenshot.png"
      ],
      "traces": [
        "artifacts/traces/02-trace.zip"
      ],
      "logs": [
        "artifacts/logs/03-error-context.md",
        "artifacts/logs/04-error-context.md"
      ],
      "files": [],
      "role": "CO",
      "page": "가맹점 등록·수정",
      "checklistItem": "16 긴 비고 입력과 등록 화면 구성 확인",
      "action": "CO 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "CO 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "긴 비고 1,500자 자동입력에서 문자가 누락되었습니다. 추가 반복 3회에도 1,498·1,497·1,498자.",
      "error": "긴 비고 자동입력 문자열 불일치. 추가 반복 3/3회 재현. 실제 OS 입력기 검증은 별도 필요.",
      "failureCategory": "assertion",
      "failureCategoryText": "기대 결과와 다름",
      "reproduction": {
        "required": true,
        "reason": "화면에서 확인한 값이 체크리스트의 기대 결과와 달랐습니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4373\" --env \"dev\" --role \"CO\" --case \"16 긴 비고 입력과 등록 화면 구성 확인\"",
        "notifyMessage": "[QA 확인 요청] CO / 가맹점 등록·수정 / 16 긴 비고 입력과 등록 화면 구성 확인: 기대 결과와 다름 상태입니다. npm run qa:debug -- --issue \"4373\" --env \"dev\" --role \"CO\" --case \"16 긴 비고 입력과 등록 화면 구성 확인\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [CO] role / 가맹점 등록·수정 / 16 긴 비고 입력과 등록 화면 구성 확인",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 19833,
      "evidence": [
        "artifacts/screenshots/52-16-long-note.png",
        "artifacts/screenshots/53-screenshot.png",
        "artifacts/logs/05-error-context.md",
        "artifacts/logs/06-error-context.md",
        "artifacts/traces/03-trace.zip"
      ],
      "screenshots": [
        "artifacts/screenshots/52-16-long-note.png",
        "artifacts/screenshots/53-screenshot.png"
      ],
      "traces": [
        "artifacts/traces/03-trace.zip"
      ],
      "logs": [
        "artifacts/logs/05-error-context.md",
        "artifacts/logs/06-error-context.md"
      ],
      "files": [],
      "role": "CO",
      "page": "가맹점 등록·수정",
      "checklistItem": "16 긴 비고 입력과 등록 화면 구성 확인",
      "action": "CO 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "CO 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "긴 비고 1,500자 자동입력에서 문자가 누락되었습니다. 추가 반복 3회에도 1,498·1,497·1,498자.",
      "error": "긴 비고 자동입력 문자열 불일치. 추가 반복 3/3회 재현. 실제 OS 입력기 검증은 별도 필요.",
      "failureCategory": "assertion",
      "failureCategoryText": "기대 결과와 다름",
      "reproduction": {
        "required": true,
        "reason": "화면에서 확인한 값이 체크리스트의 기대 결과와 달랐습니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4373\" --env \"dev\" --role \"CO\" --case \"16 긴 비고 입력과 등록 화면 구성 확인\"",
        "notifyMessage": "[QA 확인 요청] CO / 가맹점 등록·수정 / 16 긴 비고 입력과 등록 화면 구성 확인: 기대 결과와 다름 상태입니다. npm run qa:debug -- --issue \"4373\" --env \"dev\" --role \"CO\" --case \"16 긴 비고 입력과 등록 화면 구성 확인\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4373/dev/vendor-input.spec.ts / [dev] / [CO] role / 가맹점 등록·수정 / 16 긴 비고 입력과 등록 화면 구성 확인",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 19618,
      "evidence": [
        "artifacts/screenshots/54-16-long-note.png",
        "artifacts/screenshots/55-screenshot.png",
        "artifacts/logs/07-error-context.md",
        "artifacts/logs/08-error-context.md",
        "artifacts/traces/04-trace.zip"
      ],
      "screenshots": [
        "artifacts/screenshots/54-16-long-note.png",
        "artifacts/screenshots/55-screenshot.png"
      ],
      "traces": [
        "artifacts/traces/04-trace.zip"
      ],
      "logs": [
        "artifacts/logs/07-error-context.md",
        "artifacts/logs/08-error-context.md"
      ],
      "files": [],
      "role": "CO",
      "page": "가맹점 등록·수정",
      "checklistItem": "16 긴 비고 입력과 등록 화면 구성 확인",
      "action": "CO 계정으로 가맹점 등록·수정 항목을 확인",
      "expected": "CO 계정에서 가맹점 등록·수정 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "긴 비고 1,500자 자동입력에서 문자가 누락되었습니다. 추가 반복 3회에도 1,498·1,497·1,498자.",
      "error": "긴 비고 자동입력 문자열 불일치. 추가 반복 3/3회 재현. 실제 OS 입력기 검증은 별도 필요.",
      "failureCategory": "assertion",
      "failureCategoryText": "기대 결과와 다름",
      "reproduction": {
        "required": true,
        "reason": "화면에서 확인한 값이 체크리스트의 기대 결과와 달랐습니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4373\" --env \"dev\" --role \"CO\" --case \"16 긴 비고 입력과 등록 화면 구성 확인\"",
        "notifyMessage": "[QA 확인 요청] CO / 가맹점 등록·수정 / 16 긴 비고 입력과 등록 화면 구성 확인: 기대 결과와 다름 상태입니다. npm run qa:debug -- --issue \"4373\" --env \"dev\" --role \"CO\" --case \"16 긴 비고 입력과 등록 화면 구성 확인\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4373/dev/vendor-save.spec.ts / [dev] / [ADMIN] role / 사용자 지정 가맹점 저장·원복 / 05 마지막 글자 입력 직후 저장·재진입",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 17674,
      "evidence": [
        "artifacts/screenshots/56-05-saved-last-character.png"
      ],
      "screenshots": [
        "artifacts/screenshots/56-05-saved-last-character.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "ADMIN",
      "page": "사용자 지정 가맹점 저장·원복",
      "checklistItem": "05 마지막 글자 입력 직후 저장·재진입",
      "action": "ADMIN 계정으로 사용자 지정 가맹점 저장·원복 항목을 확인",
      "expected": "ADMIN 계정에서 사용자 지정 가맹점 저장·원복 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4373/dev/vendor-save.spec.ts / [dev] / [ADMIN] role / 사용자 지정 가맹점 저장·원복 / 08 선택·거래가능 시간 저장·재진입",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 16076,
      "evidence": [
        "artifacts/screenshots/57-08-saved-selection-times.png"
      ],
      "screenshots": [
        "artifacts/screenshots/57-08-saved-selection-times.png"
      ],
      "traces": [],
      "logs": [],
      "files": [],
      "role": "ADMIN",
      "page": "사용자 지정 가맹점 저장·원복",
      "checklistItem": "08 선택·거래가능 시간 저장·재진입",
      "action": "ADMIN 계정으로 사용자 지정 가맹점 저장·원복 항목을 확인",
      "expected": "ADMIN 계정에서 사용자 지정 가맹점 저장·원복 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    }
  ],
  "requesterName": "김경주",
  "qaPerformerName": "김경주",
  "executionScope": {
    "os": "macOS 26.5",
    "browser": "설치된 Google Chrome (Playwright channel=chrome)",
    "originalChecklistItems": 16,
    "automatedExecutions": 63,
    "osImeVerified": false,
    "windowsVerified": false,
    "serverSaveVerified": true,
    "batches": [
      "role matrix 48건 중 입력 보완 대상 8건을 후속 결과로 교체",
      "후속 입력·시간·측정 12건",
      "휴일정산·사전조건 8건",
      "CO 긴 비고 추가 반복 3건"
    ],
    "additionalSaveScope": "사용자 지정 박재민_가맹_한결데 / ADMIN / 저장·새로고침·재진입·원복 확인"
  },
  "executionStatus": "COMPLETE_AVAILABLE_SCOPE",
  "distinctFindings": 1,
  "findingExecutions": 4,
  "executionLimitations": 5,
  "normalPolicyScopeExclusions": 4
}
