{
  "issueId": "4147",
  "environment": "dev",
  "generatedAt": "2026-09-17T23:54:55+09:00",
  "sourceResult": "qa-results redacted from tracked output",
  "timings": null,
  "summary": {
    "status": "FAIL",
    "passed": 95,
    "failed": 50,
    "skipped": 0,
    "blocked": 32,
    "flaky": 0,
    "durationMs": 1786228
  },
  "rows": [
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 거래내역 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 12098,
      "evidence": [
        "artifacts/logs/01-거래내역-ADMIN-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/01-거래내역-ADMIN-detail-masking.md"
      ],
      "files": [],
      "role": "ADMIN - 거래내역",
      "page": "[ADMIN] 거래내역",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "ADMIN - 거래내역 계정으로 [ADMIN] 거래내역 항목을 확인",
      "expected": "ADMIN - 거래내역 계정에서 [ADMIN] 거래내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 거래내역 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 29200,
      "evidence": [
        "artifacts/logs/02-거래내역-ADMIN-excel-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/02-거래내역-ADMIN-excel-masking.md"
      ],
      "files": [],
      "role": "ADMIN - 거래내역",
      "page": "[ADMIN] 거래내역",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "ADMIN - 거래내역 계정으로 [ADMIN] 거래내역 항목을 확인",
      "expected": "ADMIN - 거래내역 계정에서 [ADMIN] 거래내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] 거래내역 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 10298,
      "evidence": [
        "artifacts/logs/03-거래내역-TA-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/03-거래내역-TA-detail-masking.md"
      ],
      "files": [],
      "role": "TA - 거래내역",
      "page": "[TA] 거래내역",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "TA - 거래내역 계정으로 [TA] 거래내역 항목을 확인",
      "expected": "TA - 거래내역 계정에서 [TA] 거래내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] 거래내역 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 25227,
      "evidence": [
        "artifacts/logs/04-거래내역-TA-excel-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/04-거래내역-TA-excel-masking.md"
      ],
      "files": [],
      "role": "TA - 거래내역",
      "page": "[TA] 거래내역",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "TA - 거래내역 계정으로 [TA] 거래내역 항목을 확인",
      "expected": "TA - 거래내역 계정에서 [TA] 거래내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [CO] 거래내역 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 6477,
      "evidence": [
        "artifacts/logs/05-거래내역-CO-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/05-거래내역-CO-detail-masking.md"
      ],
      "files": [],
      "role": "CO - 거래내역",
      "page": "[CO] 거래내역",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "CO - 거래내역 계정으로 [CO] 거래내역 항목을 확인",
      "expected": "CO - 거래내역 계정에서 [CO] 거래내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [CO] 거래내역 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 34505,
      "evidence": [
        "artifacts/logs/06-error-context.md",
        "artifacts/traces/01-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/01-trace.zip"
      ],
      "logs": [
        "artifacts/logs/06-error-context.md"
      ],
      "files": [],
      "role": "CO - 거래내역",
      "page": "[CO] 거래내역",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "CO - 거래내역 계정으로 [CO] 거래내역 항목을 확인",
      "expected": "CO - 거래내역 계정에서 [CO] 거래내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: 문서보관함에 tenant-id-redacted 행이 표시되어야 합니다.  expect(locator).toBeVisible() failed",
      "error": "Error: 문서보관함에 tenant-id-redacted 행이 표시되어야 합니다.  expect(locator).toBeVisible() failed",
      "failureCategory": "assertion",
      "failureCategoryText": "기대 결과와 다름",
      "reproduction": {
        "required": true,
        "reason": "화면에서 확인한 값이 체크리스트의 기대 결과와 달랐습니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"CO - 거래내역\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\"",
        "notifyMessage": "[QA 확인 요청] CO - 거래내역 / [CO] 거래내역 / Excel 기본 마스킹 및 PIN 원문 다운로드: 기대 결과와 다름 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"CO - 거래내역\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [BO] 거래내역 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 6443,
      "evidence": [
        "artifacts/logs/07-거래내역-BO-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/07-거래내역-BO-detail-masking.md"
      ],
      "files": [],
      "role": "BO - 거래내역",
      "page": "[BO] 거래내역",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "BO - 거래내역 계정으로 [BO] 거래내역 항목을 확인",
      "expected": "BO - 거래내역 계정에서 [BO] 거래내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [BO] 거래내역 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 25662,
      "evidence": [
        "artifacts/logs/08-거래내역-BO-excel-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/08-거래내역-BO-excel-masking.md"
      ],
      "files": [],
      "role": "BO - 거래내역",
      "page": "[BO] 거래내역",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "BO - 거래내역 계정으로 [BO] 거래내역 항목을 확인",
      "expected": "BO - 거래내역 계정에서 [BO] 거래내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 상계처리내역 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 6138,
      "evidence": [
        "artifacts/logs/09-상계처리내역-ADMIN-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/09-상계처리내역-ADMIN-detail-masking.md"
      ],
      "files": [],
      "role": "ADMIN - 상계처리내역",
      "page": "[ADMIN] 상계처리내역",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "ADMIN - 상계처리내역 계정으로 [ADMIN] 상계처리내역 항목을 확인",
      "expected": "ADMIN - 상계처리내역 계정에서 [ADMIN] 상계처리내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] 상계처리내역 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 5703,
      "evidence": [
        "artifacts/logs/10-상계처리내역-TA-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/10-상계처리내역-TA-detail-masking.md"
      ],
      "files": [],
      "role": "TA - 상계처리내역",
      "page": "[TA] 상계처리내역",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "TA - 상계처리내역 계정으로 [TA] 상계처리내역 항목을 확인",
      "expected": "TA - 상계처리내역 계정에서 [TA] 상계처리내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [CO] 상계처리내역 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 5399,
      "evidence": [
        "artifacts/logs/11-상계처리내역-CO-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/11-상계처리내역-CO-detail-masking.md"
      ],
      "files": [],
      "role": "CO - 상계처리내역",
      "page": "[CO] 상계처리내역",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "CO - 상계처리내역 계정으로 [CO] 상계처리내역 항목을 확인",
      "expected": "CO - 상계처리내역 계정에서 [CO] 상계처리내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [BO] 상계처리내역 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 5605,
      "evidence": [
        "artifacts/logs/12-상계처리내역-BO-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/12-상계처리내역-BO-detail-masking.md"
      ],
      "files": [],
      "role": "BO - 상계처리내역",
      "page": "[BO] 상계처리내역",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "BO - 상계처리내역 계정으로 [BO] 상계처리내역 항목을 확인",
      "expected": "BO - 상계처리내역 계정에서 [BO] 상계처리내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 링크발송내역 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 6013,
      "evidence": [
        "artifacts/logs/13-링크발송내역-ADMIN-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/13-링크발송내역-ADMIN-detail-masking.md"
      ],
      "files": [],
      "role": "ADMIN - 링크발송내역",
      "page": "[ADMIN] 링크발송내역",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "ADMIN - 링크발송내역 계정으로 [ADMIN] 링크발송내역 항목을 확인",
      "expected": "ADMIN - 링크발송내역 계정에서 [ADMIN] 링크발송내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] 링크발송내역 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 5837,
      "evidence": [
        "artifacts/logs/14-링크발송내역-TA-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/14-링크발송내역-TA-detail-masking.md"
      ],
      "files": [],
      "role": "TA - 링크발송내역",
      "page": "[TA] 링크발송내역",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "TA - 링크발송내역 계정으로 [TA] 링크발송내역 항목을 확인",
      "expected": "TA - 링크발송내역 계정에서 [TA] 링크발송내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [CO] 링크발송내역 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 5624,
      "evidence": [
        "artifacts/logs/15-링크발송내역-CO-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/15-링크발송내역-CO-detail-masking.md"
      ],
      "files": [],
      "role": "CO - 링크발송내역",
      "page": "[CO] 링크발송내역",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "CO - 링크발송내역 계정으로 [CO] 링크발송내역 항목을 확인",
      "expected": "CO - 링크발송내역 계정에서 [CO] 링크발송내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [BO] 링크발송내역 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 5916,
      "evidence": [
        "artifacts/logs/16-링크발송내역-BO-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/16-링크발송내역-BO-detail-masking.md"
      ],
      "files": [],
      "role": "BO - 링크발송내역",
      "page": "[BO] 링크발송내역",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "BO - 링크발송내역 계정으로 [BO] 링크발송내역 항목을 확인",
      "expected": "BO - 링크발송내역 계정에서 [BO] 링크발송내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 과세자료 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 5701,
      "evidence": [
        "artifacts/logs/17-과세자료-ADMIN-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/17-과세자료-ADMIN-detail-masking.md"
      ],
      "files": [],
      "role": "ADMIN - 과세자료",
      "page": "[ADMIN] 과세자료",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "ADMIN - 과세자료 계정으로 [ADMIN] 과세자료 항목을 확인",
      "expected": "ADMIN - 과세자료 계정에서 [ADMIN] 과세자료 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 과세자료 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 24014,
      "evidence": [
        "artifacts/logs/18-과세자료-ADMIN-excel-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/18-과세자료-ADMIN-excel-masking.md"
      ],
      "files": [],
      "role": "ADMIN - 과세자료",
      "page": "[ADMIN] 과세자료",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "ADMIN - 과세자료 계정으로 [ADMIN] 과세자료 항목을 확인",
      "expected": "ADMIN - 과세자료 계정에서 [ADMIN] 과세자료 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] 과세자료 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 5364,
      "evidence": [
        "artifacts/logs/19-과세자료-TA-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/19-과세자료-TA-detail-masking.md"
      ],
      "files": [],
      "role": "TA - 과세자료",
      "page": "[TA] 과세자료",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "TA - 과세자료 계정으로 [TA] 과세자료 항목을 확인",
      "expected": "TA - 과세자료 계정에서 [TA] 과세자료 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] 과세자료 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 23227,
      "evidence": [
        "artifacts/logs/20-과세자료-TA-excel-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/20-과세자료-TA-excel-masking.md"
      ],
      "files": [],
      "role": "TA - 과세자료",
      "page": "[TA] 과세자료",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "TA - 과세자료 계정으로 [TA] 과세자료 항목을 확인",
      "expected": "TA - 과세자료 계정에서 [TA] 과세자료 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [CO] 과세자료 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 5293,
      "evidence": [
        "artifacts/logs/21-과세자료-CO-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/21-과세자료-CO-detail-masking.md"
      ],
      "files": [],
      "role": "CO - 과세자료",
      "page": "[CO] 과세자료",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "CO - 과세자료 계정으로 [CO] 과세자료 항목을 확인",
      "expected": "CO - 과세자료 계정에서 [CO] 과세자료 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [CO] 과세자료 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 27777,
      "evidence": [
        "artifacts/logs/22-error-context.md",
        "artifacts/traces/02-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/02-trace.zip"
      ],
      "logs": [
        "artifacts/logs/22-error-context.md"
      ],
      "files": [],
      "role": "CO - 과세자료",
      "page": "[CO] 과세자료",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "CO - 과세자료 계정으로 [CO] 과세자료 항목을 확인",
      "expected": "CO - 과세자료 계정에서 [CO] 과세자료 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: 문서보관함에 tenant-id-redacted 행이 표시되어야 합니다.  expect(locator).toBeVisible() failed",
      "error": "Error: 문서보관함에 tenant-id-redacted 행이 표시되어야 합니다.  expect(locator).toBeVisible() failed",
      "failureCategory": "assertion",
      "failureCategoryText": "기대 결과와 다름",
      "reproduction": {
        "required": true,
        "reason": "화면에서 확인한 값이 체크리스트의 기대 결과와 달랐습니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"CO - 과세자료\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\"",
        "notifyMessage": "[QA 확인 요청] CO - 과세자료 / [CO] 과세자료 / Excel 기본 마스킹 및 PIN 원문 다운로드: 기대 결과와 다름 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"CO - 과세자료\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [BO] 과세자료 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 5066,
      "evidence": [
        "artifacts/logs/23-과세자료-BO-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/23-과세자료-BO-detail-masking.md"
      ],
      "files": [],
      "role": "BO - 과세자료",
      "page": "[BO] 과세자료",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "BO - 과세자료 계정으로 [BO] 과세자료 항목을 확인",
      "expected": "BO - 과세자료 계정에서 [BO] 과세자료 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [BO] 과세자료 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 23266,
      "evidence": [
        "artifacts/logs/24-과세자료-BO-excel-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/24-과세자료-BO-excel-masking.md"
      ],
      "files": [],
      "role": "BO - 과세자료",
      "page": "[BO] 과세자료",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "BO - 과세자료 계정으로 [BO] 과세자료 항목을 확인",
      "expected": "BO - 과세자료 계정에서 [BO] 과세자료 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 부가세 신고자료 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 5461,
      "evidence": [
        "artifacts/logs/25-부가세-신고자료-ADMIN-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/25-부가세-신고자료-ADMIN-detail-masking.md"
      ],
      "files": [],
      "role": "ADMIN - 부가세 신고자료",
      "page": "[ADMIN] 부가세 신고자료",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "ADMIN - 부가세 신고자료 계정으로 [ADMIN] 부가세 신고자료 항목을 확인",
      "expected": "ADMIN - 부가세 신고자료 계정에서 [ADMIN] 부가세 신고자료 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 부가세 신고자료 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 24091,
      "evidence": [
        "artifacts/logs/26-부가세-신고자료-ADMIN-excel-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/26-부가세-신고자료-ADMIN-excel-masking.md"
      ],
      "files": [],
      "role": "ADMIN - 부가세 신고자료",
      "page": "[ADMIN] 부가세 신고자료",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "ADMIN - 부가세 신고자료 계정으로 [ADMIN] 부가세 신고자료 항목을 확인",
      "expected": "ADMIN - 부가세 신고자료 계정에서 [ADMIN] 부가세 신고자료 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] 부가세 신고자료 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 6348,
      "evidence": [
        "artifacts/logs/27-부가세-신고자료-TA-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/27-부가세-신고자료-TA-detail-masking.md"
      ],
      "files": [],
      "role": "TA - 부가세 신고자료",
      "page": "[TA] 부가세 신고자료",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "TA - 부가세 신고자료 계정으로 [TA] 부가세 신고자료 항목을 확인",
      "expected": "TA - 부가세 신고자료 계정에서 [TA] 부가세 신고자료 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] 부가세 신고자료 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 22923,
      "evidence": [
        "artifacts/logs/28-부가세-신고자료-TA-excel-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/28-부가세-신고자료-TA-excel-masking.md"
      ],
      "files": [],
      "role": "TA - 부가세 신고자료",
      "page": "[TA] 부가세 신고자료",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "TA - 부가세 신고자료 계정으로 [TA] 부가세 신고자료 항목을 확인",
      "expected": "TA - 부가세 신고자료 계정에서 [TA] 부가세 신고자료 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [CO] 부가세 신고자료 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 5090,
      "evidence": [
        "artifacts/logs/29-부가세-신고자료-CO-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/29-부가세-신고자료-CO-detail-masking.md"
      ],
      "files": [],
      "role": "CO - 부가세 신고자료",
      "page": "[CO] 부가세 신고자료",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "CO - 부가세 신고자료 계정으로 [CO] 부가세 신고자료 항목을 확인",
      "expected": "CO - 부가세 신고자료 계정에서 [CO] 부가세 신고자료 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [CO] 부가세 신고자료 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 27857,
      "evidence": [
        "artifacts/logs/30-error-context.md",
        "artifacts/traces/03-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/03-trace.zip"
      ],
      "logs": [
        "artifacts/logs/30-error-context.md"
      ],
      "files": [],
      "role": "CO - 부가세 신고자료",
      "page": "[CO] 부가세 신고자료",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "CO - 부가세 신고자료 계정으로 [CO] 부가세 신고자료 항목을 확인",
      "expected": "CO - 부가세 신고자료 계정에서 [CO] 부가세 신고자료 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: 문서보관함에 tenant-id-redacted 행이 표시되어야 합니다.  expect(locator).toBeVisible() failed",
      "error": "Error: 문서보관함에 tenant-id-redacted 행이 표시되어야 합니다.  expect(locator).toBeVisible() failed",
      "failureCategory": "assertion",
      "failureCategoryText": "기대 결과와 다름",
      "reproduction": {
        "required": true,
        "reason": "화면에서 확인한 값이 체크리스트의 기대 결과와 달랐습니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"CO - 부가세 신고자료\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\"",
        "notifyMessage": "[QA 확인 요청] CO - 부가세 신고자료 / [CO] 부가세 신고자료 / Excel 기본 마스킹 및 PIN 원문 다운로드: 기대 결과와 다름 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"CO - 부가세 신고자료\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [BO] 부가세 신고자료 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 5130,
      "evidence": [
        "artifacts/logs/31-부가세-신고자료-BO-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/31-부가세-신고자료-BO-detail-masking.md"
      ],
      "files": [],
      "role": "BO - 부가세 신고자료",
      "page": "[BO] 부가세 신고자료",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "BO - 부가세 신고자료 계정으로 [BO] 부가세 신고자료 항목을 확인",
      "expected": "BO - 부가세 신고자료 계정에서 [BO] 부가세 신고자료 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [BO] 부가세 신고자료 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 23389,
      "evidence": [
        "artifacts/logs/32-부가세-신고자료-BO-excel-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/32-부가세-신고자료-BO-excel-masking.md"
      ],
      "files": [],
      "role": "BO - 부가세 신고자료",
      "page": "[BO] 부가세 신고자료",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "BO - 부가세 신고자료 계정으로 [BO] 부가세 신고자료 항목을 확인",
      "expected": "BO - 부가세 신고자료 계정에서 [BO] 부가세 신고자료 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 펌뱅킹 등록 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 5801,
      "evidence": [
        "artifacts/logs/33-펌뱅킹-등록-ADMIN-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/33-펌뱅킹-등록-ADMIN-detail-masking.md"
      ],
      "files": [],
      "role": "ADMIN - 펌뱅킹 등록",
      "page": "[ADMIN] 펌뱅킹 등록",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "ADMIN - 펌뱅킹 등록 계정으로 [ADMIN] 펌뱅킹 등록 항목을 확인",
      "expected": "ADMIN - 펌뱅킹 등록 계정에서 [ADMIN] 펌뱅킹 등록 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 펌뱅킹 등록 / 수정 모달 마스킹 및 인증 전 수정 차단",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 4138,
      "evidence": [
        "artifacts/logs/34-error-context.md",
        "artifacts/traces/04-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/04-trace.zip"
      ],
      "logs": [
        "artifacts/logs/34-error-context.md"
      ],
      "files": [],
      "role": "ADMIN - 펌뱅킹 등록",
      "page": "[ADMIN] 펌뱅킹 등록",
      "checklistItem": "수정 모달 마스킹 및 인증 전 수정 차단",
      "action": "ADMIN - 펌뱅킹 등록 계정으로 [ADMIN] 펌뱅킹 등록 항목을 확인",
      "expected": "ADMIN - 펌뱅킹 등록 계정에서 [ADMIN] 펌뱅킹 등록 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: 펌뱅킹 등록 수정 모달의 마스킹 개인정보는 인증 전에 편집할 수 없어야 합니다.  expect(received).toBe(expected) // Object.is equality",
      "error": "Error: 펌뱅킹 등록 수정 모달의 마스킹 개인정보는 인증 전에 편집할 수 없어야 합니다.  expect(received).toBe(expected) // Object.is equality",
      "failureCategory": "assertion",
      "failureCategoryText": "기대 결과와 다름",
      "reproduction": {
        "required": true,
        "reason": "화면에서 확인한 값이 체크리스트의 기대 결과와 달랐습니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"ADMIN - 펌뱅킹 등록\" --case \"수정 모달 마스킹 및 인증 전 수정 차단\"",
        "notifyMessage": "[QA 확인 요청] ADMIN - 펌뱅킹 등록 / [ADMIN] 펌뱅킹 등록 / 수정 모달 마스킹 및 인증 전 수정 차단: 기대 결과와 다름 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"ADMIN - 펌뱅킹 등록\" --case \"수정 모달 마스킹 및 인증 전 수정 차단\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] 펌뱅킹 등록 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 5509,
      "evidence": [
        "artifacts/logs/35-펌뱅킹-등록-TA-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/35-펌뱅킹-등록-TA-detail-masking.md"
      ],
      "files": [],
      "role": "TA - 펌뱅킹 등록",
      "page": "[TA] 펌뱅킹 등록",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "TA - 펌뱅킹 등록 계정으로 [TA] 펌뱅킹 등록 항목을 확인",
      "expected": "TA - 펌뱅킹 등록 계정에서 [TA] 펌뱅킹 등록 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] 펌뱅킹 등록 / 수정 모달 마스킹 및 인증 전 수정 차단",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 3153,
      "evidence": [
        "artifacts/logs/36-error-context.md",
        "artifacts/traces/05-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/05-trace.zip"
      ],
      "logs": [
        "artifacts/logs/36-error-context.md"
      ],
      "files": [],
      "role": "TA - 펌뱅킹 등록",
      "page": "[TA] 펌뱅킹 등록",
      "checklistItem": "수정 모달 마스킹 및 인증 전 수정 차단",
      "action": "TA - 펌뱅킹 등록 계정으로 [TA] 펌뱅킹 등록 항목을 확인",
      "expected": "TA - 펌뱅킹 등록 계정에서 [TA] 펌뱅킹 등록 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: 펌뱅킹 등록 목록에 데이터가 있지만 수정 버튼 또는 수정 모달을 찾지 못했습니다.",
      "error": "Error: 펌뱅킹 등록 목록에 데이터가 있지만 수정 버튼 또는 수정 모달을 찾지 못했습니다.",
      "failureCategory": "unknown",
      "failureCategoryText": "원인 확인 필요",
      "reproduction": {
        "required": true,
        "reason": "자동화 결과만으로 원인을 확정하기 어려워 화면 기준 확인이 필요합니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"TA - 펌뱅킹 등록\" --case \"수정 모달 마스킹 및 인증 전 수정 차단\"",
        "notifyMessage": "[QA 확인 요청] TA - 펌뱅킹 등록 / [TA] 펌뱅킹 등록 / 수정 모달 마스킹 및 인증 전 수정 차단: 원인 확인 필요 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"TA - 펌뱅킹 등록\" --case \"수정 모달 마스킹 및 인증 전 수정 차단\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [CO] 펌뱅킹 등록 / 상세 마스킹 및 PIN 원문 조회",
      "status": "BLOCKED",
      "statusText": "확인 불가",
      "durationMs": 5816,
      "evidence": [
        "artifacts/logs/37-error-context.md",
        "artifacts/traces/06-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/06-trace.zip"
      ],
      "logs": [
        "artifacts/logs/37-error-context.md"
      ],
      "files": [],
      "role": "CO - 펌뱅킹 등록",
      "page": "[CO] 펌뱅킹 등록",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "CO - 펌뱅킹 등록 계정으로 [CO] 펌뱅킹 등록 항목을 확인",
      "expected": "CO - 펌뱅킹 등록 계정에서 [CO] 펌뱅킹 등록 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "확인을 끝내지 못했습니다: Error: BLOCKED: CO 펌뱅킹 등록 상세 데이터에 마스킹 검증이 가능한 개인정보 값이 없습니다.",
      "error": "Error: BLOCKED: CO 펌뱅킹 등록 상세 데이터에 마스킹 검증이 가능한 개인정보 값이 없습니다.",
      "failureCategory": "blocked",
      "failureCategoryText": "확인 조건 부족",
      "reproduction": {
        "required": false,
        "reason": "확인 조건이 부족해 본 시나리오를 끝까지 실행하지 못했습니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [CO] 펌뱅킹 등록 / 수정 모달 마스킹 및 인증 전 수정 차단",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 2774,
      "evidence": [
        "artifacts/logs/38-error-context.md",
        "artifacts/traces/07-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/07-trace.zip"
      ],
      "logs": [
        "artifacts/logs/38-error-context.md"
      ],
      "files": [],
      "role": "CO - 펌뱅킹 등록",
      "page": "[CO] 펌뱅킹 등록",
      "checklistItem": "수정 모달 마스킹 및 인증 전 수정 차단",
      "action": "CO - 펌뱅킹 등록 계정으로 [CO] 펌뱅킹 등록 항목을 확인",
      "expected": "CO - 펌뱅킹 등록 계정에서 [CO] 펌뱅킹 등록 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: 펌뱅킹 등록 목록에 데이터가 있지만 수정 버튼 또는 수정 모달을 찾지 못했습니다.",
      "error": "Error: 펌뱅킹 등록 목록에 데이터가 있지만 수정 버튼 또는 수정 모달을 찾지 못했습니다.",
      "failureCategory": "unknown",
      "failureCategoryText": "원인 확인 필요",
      "reproduction": {
        "required": true,
        "reason": "자동화 결과만으로 원인을 확정하기 어려워 화면 기준 확인이 필요합니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"CO - 펌뱅킹 등록\" --case \"수정 모달 마스킹 및 인증 전 수정 차단\"",
        "notifyMessage": "[QA 확인 요청] CO - 펌뱅킹 등록 / [CO] 펌뱅킹 등록 / 수정 모달 마스킹 및 인증 전 수정 차단: 원인 확인 필요 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"CO - 펌뱅킹 등록\" --case \"수정 모달 마스킹 및 인증 전 수정 차단\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 모계좌 관리 / 상세 마스킹 및 PIN 원문 조회",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 3136,
      "evidence": [
        "artifacts/logs/39-error-context.md",
        "artifacts/traces/08-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/08-trace.zip"
      ],
      "logs": [
        "artifacts/logs/39-error-context.md"
      ],
      "files": [],
      "role": "ADMIN - 모계좌 관리",
      "page": "[ADMIN] 모계좌 관리",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "ADMIN - 모계좌 관리 계정으로 [ADMIN] 모계좌 관리 항목을 확인",
      "expected": "ADMIN - 모계좌 관리 계정에서 [ADMIN] 모계좌 관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: ADMIN 모계좌 관리 목록에 데이터가 있지만 상세보기 또는 마스킹 해제 버튼이 없습니다.",
      "error": "Error: ADMIN 모계좌 관리 목록에 데이터가 있지만 상세보기 또는 마스킹 해제 버튼이 없습니다.",
      "failureCategory": "unknown",
      "failureCategoryText": "원인 확인 필요",
      "reproduction": {
        "required": true,
        "reason": "자동화 결과만으로 원인을 확정하기 어려워 화면 기준 확인이 필요합니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"ADMIN - 모계좌 관리\" --case \"상세 마스킹 및 PIN 원문 조회\"",
        "notifyMessage": "[QA 확인 요청] ADMIN - 모계좌 관리 / [ADMIN] 모계좌 관리 / 상세 마스킹 및 PIN 원문 조회: 원인 확인 필요 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"ADMIN - 모계좌 관리\" --case \"상세 마스킹 및 PIN 원문 조회\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 운영계좌 관리 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 5972,
      "evidence": [
        "artifacts/logs/40-운영계좌-관리-ADMIN-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/40-운영계좌-관리-ADMIN-detail-masking.md"
      ],
      "files": [],
      "role": "ADMIN - 운영계좌 관리",
      "page": "[ADMIN] 운영계좌 관리",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "ADMIN - 운영계좌 관리 계정으로 [ADMIN] 운영계좌 관리 항목을 확인",
      "expected": "ADMIN - 운영계좌 관리 계정에서 [ADMIN] 운영계좌 관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 운영계좌 관리 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 5652,
      "evidence": [
        "artifacts/logs/41-error-context.md",
        "artifacts/traces/09-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/09-trace.zip"
      ],
      "logs": [
        "artifacts/logs/41-error-context.md"
      ],
      "files": [],
      "role": "ADMIN - 운영계좌 관리",
      "page": "[ADMIN] 운영계좌 관리",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "ADMIN - 운영계좌 관리 계정으로 [ADMIN] 운영계좌 관리 항목을 확인",
      "expected": "ADMIN - 운영계좌 관리 계정에서 [ADMIN] 운영계좌 관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: ADMIN 운영계좌 관리 Excel 조회결과 다운로드 메뉴가 없습니다.",
      "error": "Error: ADMIN 운영계좌 관리 Excel 조회결과 다운로드 메뉴가 없습니다.",
      "failureCategory": "unknown",
      "failureCategoryText": "원인 확인 필요",
      "reproduction": {
        "required": true,
        "reason": "자동화 결과만으로 원인을 확정하기 어려워 화면 기준 확인이 필요합니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"ADMIN - 운영계좌 관리\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\"",
        "notifyMessage": "[QA 확인 요청] ADMIN - 운영계좌 관리 / [ADMIN] 운영계좌 관리 / Excel 기본 마스킹 및 PIN 원문 다운로드: 원인 확인 필요 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"ADMIN - 운영계좌 관리\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] 운영계좌 관리 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 5387,
      "evidence": [
        "artifacts/logs/42-운영계좌-관리-TA-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/42-운영계좌-관리-TA-detail-masking.md"
      ],
      "files": [],
      "role": "TA - 운영계좌 관리",
      "page": "[TA] 운영계좌 관리",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "TA - 운영계좌 관리 계정으로 [TA] 운영계좌 관리 항목을 확인",
      "expected": "TA - 운영계좌 관리 계정에서 [TA] 운영계좌 관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] 운영계좌 관리 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 5594,
      "evidence": [
        "artifacts/logs/43-error-context.md",
        "artifacts/traces/10-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/10-trace.zip"
      ],
      "logs": [
        "artifacts/logs/43-error-context.md"
      ],
      "files": [],
      "role": "TA - 운영계좌 관리",
      "page": "[TA] 운영계좌 관리",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "TA - 운영계좌 관리 계정으로 [TA] 운영계좌 관리 항목을 확인",
      "expected": "TA - 운영계좌 관리 계정에서 [TA] 운영계좌 관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: TA 운영계좌 관리 Excel 조회결과 다운로드 메뉴가 없습니다.",
      "error": "Error: TA 운영계좌 관리 Excel 조회결과 다운로드 메뉴가 없습니다.",
      "failureCategory": "unknown",
      "failureCategoryText": "원인 확인 필요",
      "reproduction": {
        "required": true,
        "reason": "자동화 결과만으로 원인을 확정하기 어려워 화면 기준 확인이 필요합니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"TA - 운영계좌 관리\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\"",
        "notifyMessage": "[QA 확인 요청] TA - 운영계좌 관리 / [TA] 운영계좌 관리 / Excel 기본 마스킹 및 PIN 원문 다운로드: 원인 확인 필요 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"TA - 운영계좌 관리\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [CO] 운영계좌 관리 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 5655,
      "evidence": [
        "artifacts/logs/44-운영계좌-관리-CO-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/44-운영계좌-관리-CO-detail-masking.md"
      ],
      "files": [],
      "role": "CO - 운영계좌 관리",
      "page": "[CO] 운영계좌 관리",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "CO - 운영계좌 관리 계정으로 [CO] 운영계좌 관리 항목을 확인",
      "expected": "CO - 운영계좌 관리 계정에서 [CO] 운영계좌 관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [CO] 운영계좌 관리 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 5523,
      "evidence": [
        "artifacts/logs/45-error-context.md",
        "artifacts/traces/11-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/11-trace.zip"
      ],
      "logs": [
        "artifacts/logs/45-error-context.md"
      ],
      "files": [],
      "role": "CO - 운영계좌 관리",
      "page": "[CO] 운영계좌 관리",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "CO - 운영계좌 관리 계정으로 [CO] 운영계좌 관리 항목을 확인",
      "expected": "CO - 운영계좌 관리 계정에서 [CO] 운영계좌 관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: CO 운영계좌 관리 Excel 조회결과 다운로드 메뉴가 없습니다.",
      "error": "Error: CO 운영계좌 관리 Excel 조회결과 다운로드 메뉴가 없습니다.",
      "failureCategory": "unknown",
      "failureCategoryText": "원인 확인 필요",
      "reproduction": {
        "required": true,
        "reason": "자동화 결과만으로 원인을 확정하기 어려워 화면 기준 확인이 필요합니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"CO - 운영계좌 관리\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\"",
        "notifyMessage": "[QA 확인 요청] CO - 운영계좌 관리 / [CO] 운영계좌 관리 / Excel 기본 마스킹 및 PIN 원문 다운로드: 원인 확인 필요 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"CO - 운영계좌 관리\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 운영계좌 입출금 내역 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 5701,
      "evidence": [
        "artifacts/logs/46-운영계좌-입출금-내역-ADMIN-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/46-운영계좌-입출금-내역-ADMIN-detail-masking.md"
      ],
      "files": [],
      "role": "ADMIN - 운영계좌 입출금 내역",
      "page": "[ADMIN] 운영계좌 입출금 내역",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "ADMIN - 운영계좌 입출금 내역 계정으로 [ADMIN] 운영계좌 입출금 내역 항목을 확인",
      "expected": "ADMIN - 운영계좌 입출금 내역 계정에서 [ADMIN] 운영계좌 입출금 내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 운영계좌 입출금 내역 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 5628,
      "evidence": [
        "artifacts/logs/47-error-context.md",
        "artifacts/traces/12-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/12-trace.zip"
      ],
      "logs": [
        "artifacts/logs/47-error-context.md"
      ],
      "files": [],
      "role": "ADMIN - 운영계좌 입출금 내역",
      "page": "[ADMIN] 운영계좌 입출금 내역",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "ADMIN - 운영계좌 입출금 내역 계정으로 [ADMIN] 운영계좌 입출금 내역 항목을 확인",
      "expected": "ADMIN - 운영계좌 입출금 내역 계정에서 [ADMIN] 운영계좌 입출금 내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: ADMIN 운영계좌 입출금 내역 Excel 조회결과 다운로드 메뉴가 없습니다.",
      "error": "Error: ADMIN 운영계좌 입출금 내역 Excel 조회결과 다운로드 메뉴가 없습니다.",
      "failureCategory": "unknown",
      "failureCategoryText": "원인 확인 필요",
      "reproduction": {
        "required": true,
        "reason": "자동화 결과만으로 원인을 확정하기 어려워 화면 기준 확인이 필요합니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"ADMIN - 운영계좌 입출금 내역\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\"",
        "notifyMessage": "[QA 확인 요청] ADMIN - 운영계좌 입출금 내역 / [ADMIN] 운영계좌 입출금 내역 / Excel 기본 마스킹 및 PIN 원문 다운로드: 원인 확인 필요 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"ADMIN - 운영계좌 입출금 내역\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] 운영계좌 입출금 내역 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 5855,
      "evidence": [
        "artifacts/logs/48-운영계좌-입출금-내역-TA-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/48-운영계좌-입출금-내역-TA-detail-masking.md"
      ],
      "files": [],
      "role": "TA - 운영계좌 입출금 내역",
      "page": "[TA] 운영계좌 입출금 내역",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "TA - 운영계좌 입출금 내역 계정으로 [TA] 운영계좌 입출금 내역 항목을 확인",
      "expected": "TA - 운영계좌 입출금 내역 계정에서 [TA] 운영계좌 입출금 내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] 운영계좌 입출금 내역 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 6190,
      "evidence": [
        "artifacts/logs/49-error-context.md",
        "artifacts/traces/13-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/13-trace.zip"
      ],
      "logs": [
        "artifacts/logs/49-error-context.md"
      ],
      "files": [],
      "role": "TA - 운영계좌 입출금 내역",
      "page": "[TA] 운영계좌 입출금 내역",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "TA - 운영계좌 입출금 내역 계정으로 [TA] 운영계좌 입출금 내역 항목을 확인",
      "expected": "TA - 운영계좌 입출금 내역 계정에서 [TA] 운영계좌 입출금 내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: TA 운영계좌 입출금 내역 Excel 조회결과 다운로드 메뉴가 없습니다.",
      "error": "Error: TA 운영계좌 입출금 내역 Excel 조회결과 다운로드 메뉴가 없습니다.",
      "failureCategory": "unknown",
      "failureCategoryText": "원인 확인 필요",
      "reproduction": {
        "required": true,
        "reason": "자동화 결과만으로 원인을 확정하기 어려워 화면 기준 확인이 필요합니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"TA - 운영계좌 입출금 내역\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\"",
        "notifyMessage": "[QA 확인 요청] TA - 운영계좌 입출금 내역 / [TA] 운영계좌 입출금 내역 / Excel 기본 마스킹 및 PIN 원문 다운로드: 원인 확인 필요 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"TA - 운영계좌 입출금 내역\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 법인계좌 입출금 내역 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 6421,
      "evidence": [
        "artifacts/logs/50-법인계좌-입출금-내역-ADMIN-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/50-법인계좌-입출금-내역-ADMIN-detail-masking.md"
      ],
      "files": [],
      "role": "ADMIN - 법인계좌 입출금 내역",
      "page": "[ADMIN] 법인계좌 입출금 내역",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "ADMIN - 법인계좌 입출금 내역 계정으로 [ADMIN] 법인계좌 입출금 내역 항목을 확인",
      "expected": "ADMIN - 법인계좌 입출금 내역 계정에서 [ADMIN] 법인계좌 입출금 내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 법인계좌 입출금 내역 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 6293,
      "evidence": [
        "artifacts/logs/51-error-context.md",
        "artifacts/traces/14-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/14-trace.zip"
      ],
      "logs": [
        "artifacts/logs/51-error-context.md"
      ],
      "files": [],
      "role": "ADMIN - 법인계좌 입출금 내역",
      "page": "[ADMIN] 법인계좌 입출금 내역",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "ADMIN - 법인계좌 입출금 내역 계정으로 [ADMIN] 법인계좌 입출금 내역 항목을 확인",
      "expected": "ADMIN - 법인계좌 입출금 내역 계정에서 [ADMIN] 법인계좌 입출금 내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: ADMIN 법인계좌 입출금 내역 Excel 조회결과 다운로드 메뉴가 없습니다.",
      "error": "Error: ADMIN 법인계좌 입출금 내역 Excel 조회결과 다운로드 메뉴가 없습니다.",
      "failureCategory": "unknown",
      "failureCategoryText": "원인 확인 필요",
      "reproduction": {
        "required": true,
        "reason": "자동화 결과만으로 원인을 확정하기 어려워 화면 기준 확인이 필요합니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"ADMIN - 법인계좌 입출금 내역\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\"",
        "notifyMessage": "[QA 확인 요청] ADMIN - 법인계좌 입출금 내역 / [ADMIN] 법인계좌 입출금 내역 / Excel 기본 마스킹 및 PIN 원문 다운로드: 원인 확인 필요 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"ADMIN - 법인계좌 입출금 내역\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] 법인계좌 입출금 내역 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 7204,
      "evidence": [
        "artifacts/logs/52-법인계좌-입출금-내역-TA-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/52-법인계좌-입출금-내역-TA-detail-masking.md"
      ],
      "files": [],
      "role": "TA - 법인계좌 입출금 내역",
      "page": "[TA] 법인계좌 입출금 내역",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "TA - 법인계좌 입출금 내역 계정으로 [TA] 법인계좌 입출금 내역 항목을 확인",
      "expected": "TA - 법인계좌 입출금 내역 계정에서 [TA] 법인계좌 입출금 내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] 법인계좌 입출금 내역 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 5982,
      "evidence": [
        "artifacts/logs/53-error-context.md",
        "artifacts/traces/15-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/15-trace.zip"
      ],
      "logs": [
        "artifacts/logs/53-error-context.md"
      ],
      "files": [],
      "role": "TA - 법인계좌 입출금 내역",
      "page": "[TA] 법인계좌 입출금 내역",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "TA - 법인계좌 입출금 내역 계정으로 [TA] 법인계좌 입출금 내역 항목을 확인",
      "expected": "TA - 법인계좌 입출금 내역 계정에서 [TA] 법인계좌 입출금 내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: TA 법인계좌 입출금 내역 Excel 조회결과 다운로드 메뉴가 없습니다.",
      "error": "Error: TA 법인계좌 입출금 내역 Excel 조회결과 다운로드 메뉴가 없습니다.",
      "failureCategory": "unknown",
      "failureCategoryText": "원인 확인 필요",
      "reproduction": {
        "required": true,
        "reason": "자동화 결과만으로 원인을 확정하기 어려워 화면 기준 확인이 필요합니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"TA - 법인계좌 입출금 내역\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\"",
        "notifyMessage": "[QA 확인 요청] TA - 법인계좌 입출금 내역 / [TA] 법인계좌 입출금 내역 / Excel 기본 마스킹 및 PIN 원문 다운로드: 원인 확인 필요 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"TA - 법인계좌 입출금 내역\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 입금확인 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 5471,
      "evidence": [
        "artifacts/logs/54-입금확인-ADMIN-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/54-입금확인-ADMIN-detail-masking.md"
      ],
      "files": [],
      "role": "ADMIN - 입금확인",
      "page": "[ADMIN] 입금확인",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "ADMIN - 입금확인 계정으로 [ADMIN] 입금확인 항목을 확인",
      "expected": "ADMIN - 입금확인 계정에서 [ADMIN] 입금확인 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 입금확인 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 24368,
      "evidence": [
        "artifacts/logs/55-입금확인-ADMIN-excel-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/55-입금확인-ADMIN-excel-masking.md"
      ],
      "files": [],
      "role": "ADMIN - 입금확인",
      "page": "[ADMIN] 입금확인",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "ADMIN - 입금확인 계정으로 [ADMIN] 입금확인 항목을 확인",
      "expected": "ADMIN - 입금확인 계정에서 [ADMIN] 입금확인 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] 입금확인 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 6589,
      "evidence": [
        "artifacts/logs/56-입금확인-TA-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/56-입금확인-TA-detail-masking.md"
      ],
      "files": [],
      "role": "TA - 입금확인",
      "page": "[TA] 입금확인",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "TA - 입금확인 계정으로 [TA] 입금확인 항목을 확인",
      "expected": "TA - 입금확인 계정에서 [TA] 입금확인 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] 입금확인 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 5825,
      "evidence": [
        "artifacts/logs/57-error-context.md",
        "artifacts/traces/16-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/16-trace.zip"
      ],
      "logs": [
        "artifacts/logs/57-error-context.md"
      ],
      "files": [],
      "role": "TA - 입금확인",
      "page": "[TA] 입금확인",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "TA - 입금확인 계정으로 [TA] 입금확인 항목을 확인",
      "expected": "TA - 입금확인 계정에서 [TA] 입금확인 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: 입금확인 Excel 생성 응답에서 문서 ID를 찾지 못했습니다.",
      "error": "Error: 입금확인 Excel 생성 응답에서 문서 ID를 찾지 못했습니다.",
      "failureCategory": "unknown",
      "failureCategoryText": "원인 확인 필요",
      "reproduction": {
        "required": true,
        "reason": "자동화 결과만으로 원인을 확정하기 어려워 화면 기준 확인이 필요합니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"TA - 입금확인\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\"",
        "notifyMessage": "[QA 확인 요청] TA - 입금확인 / [TA] 입금확인 / Excel 기본 마스킹 및 PIN 원문 다운로드: 원인 확인 필요 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"TA - 입금확인\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 이체내역 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 5586,
      "evidence": [
        "artifacts/logs/58-이체내역-ADMIN-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/58-이체내역-ADMIN-detail-masking.md"
      ],
      "files": [],
      "role": "ADMIN - 이체내역",
      "page": "[ADMIN] 이체내역",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "ADMIN - 이체내역 계정으로 [ADMIN] 이체내역 항목을 확인",
      "expected": "ADMIN - 이체내역 계정에서 [ADMIN] 이체내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 이체내역 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 24477,
      "evidence": [
        "artifacts/logs/59-이체내역-ADMIN-excel-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/59-이체내역-ADMIN-excel-masking.md"
      ],
      "files": [],
      "role": "ADMIN - 이체내역",
      "page": "[ADMIN] 이체내역",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "ADMIN - 이체내역 계정으로 [ADMIN] 이체내역 항목을 확인",
      "expected": "ADMIN - 이체내역 계정에서 [ADMIN] 이체내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] 이체내역 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 6006,
      "evidence": [
        "artifacts/logs/60-이체내역-TA-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/60-이체내역-TA-detail-masking.md"
      ],
      "files": [],
      "role": "TA - 이체내역",
      "page": "[TA] 이체내역",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "TA - 이체내역 계정으로 [TA] 이체내역 항목을 확인",
      "expected": "TA - 이체내역 계정에서 [TA] 이체내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] 이체내역 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 24383,
      "evidence": [
        "artifacts/logs/61-이체내역-TA-excel-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/61-이체내역-TA-excel-masking.md"
      ],
      "files": [],
      "role": "TA - 이체내역",
      "page": "[TA] 이체내역",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "TA - 이체내역 계정으로 [TA] 이체내역 항목을 확인",
      "expected": "TA - 이체내역 계정에서 [TA] 이체내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [CO] 이체내역 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 6821,
      "evidence": [
        "artifacts/logs/62-이체내역-CO-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/62-이체내역-CO-detail-masking.md"
      ],
      "files": [],
      "role": "CO - 이체내역",
      "page": "[CO] 이체내역",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "CO - 이체내역 계정으로 [CO] 이체내역 항목을 확인",
      "expected": "CO - 이체내역 계정에서 [CO] 이체내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [CO] 이체내역 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 30150,
      "evidence": [
        "artifacts/logs/63-error-context.md",
        "artifacts/traces/17-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/17-trace.zip"
      ],
      "logs": [
        "artifacts/logs/63-error-context.md"
      ],
      "files": [],
      "role": "CO - 이체내역",
      "page": "[CO] 이체내역",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "CO - 이체내역 계정으로 [CO] 이체내역 항목을 확인",
      "expected": "CO - 이체내역 계정에서 [CO] 이체내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: 문서보관함에 tenant-id-redacted 행이 표시되어야 합니다.  expect(locator).toBeVisible() failed",
      "error": "Error: 문서보관함에 tenant-id-redacted 행이 표시되어야 합니다.  expect(locator).toBeVisible() failed",
      "failureCategory": "assertion",
      "failureCategoryText": "기대 결과와 다름",
      "reproduction": {
        "required": true,
        "reason": "화면에서 확인한 값이 체크리스트의 기대 결과와 달랐습니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"CO - 이체내역\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\"",
        "notifyMessage": "[QA 확인 요청] CO - 이체내역 / [CO] 이체내역 / Excel 기본 마스킹 및 PIN 원문 다운로드: 기대 결과와 다름 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"CO - 이체내역\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [BO] 이체내역 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 6209,
      "evidence": [
        "artifacts/logs/64-이체내역-BO-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/64-이체내역-BO-detail-masking.md"
      ],
      "files": [],
      "role": "BO - 이체내역",
      "page": "[BO] 이체내역",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "BO - 이체내역 계정으로 [BO] 이체내역 항목을 확인",
      "expected": "BO - 이체내역 계정에서 [BO] 이체내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [BO] 이체내역 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 22327,
      "evidence": [
        "artifacts/logs/65-이체내역-BO-excel-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/65-이체내역-BO-excel-masking.md"
      ],
      "files": [],
      "role": "BO - 이체내역",
      "page": "[BO] 이체내역",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "BO - 이체내역 계정으로 [BO] 이체내역 항목을 확인",
      "expected": "BO - 이체내역 계정에서 [BO] 이체내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 이체하기 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 6066,
      "evidence": [
        "artifacts/logs/66-이체하기-ADMIN-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/66-이체하기-ADMIN-detail-masking.md"
      ],
      "files": [],
      "role": "ADMIN - 이체하기",
      "page": "[ADMIN] 이체하기",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "ADMIN - 이체하기 계정으로 [ADMIN] 이체하기 항목을 확인",
      "expected": "ADMIN - 이체하기 계정에서 [ADMIN] 이체하기 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] 이체하기 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 6140,
      "evidence": [
        "artifacts/logs/67-이체하기-TA-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/67-이체하기-TA-detail-masking.md"
      ],
      "files": [],
      "role": "TA - 이체하기",
      "page": "[TA] 이체하기",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "TA - 이체하기 계정으로 [TA] 이체하기 항목을 확인",
      "expected": "TA - 이체하기 계정에서 [TA] 이체하기 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [CO] 이체하기 / 상세 마스킹 및 PIN 원문 조회",
      "status": "BLOCKED",
      "statusText": "확인 불가",
      "durationMs": 3414,
      "evidence": [
        "artifacts/logs/68-error-context.md",
        "artifacts/traces/18-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/18-trace.zip"
      ],
      "logs": [
        "artifacts/logs/68-error-context.md"
      ],
      "files": [],
      "role": "CO - 이체하기",
      "page": "[CO] 이체하기",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "CO - 이체하기 계정으로 [CO] 이체하기 항목을 확인",
      "expected": "CO - 이체하기 계정에서 [CO] 이체하기 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "확인을 끝내지 못했습니다: Error: BLOCKED: CO 이체하기은 기간 확장 후에도 상세 검증 데이터가 없습니다.",
      "error": "Error: BLOCKED: CO 이체하기은 기간 확장 후에도 상세 검증 데이터가 없습니다.",
      "failureCategory": "blocked",
      "failureCategoryText": "확인 조건 부족",
      "reproduction": {
        "required": false,
        "reason": "확인 조건이 부족해 본 시나리오를 끝까지 실행하지 못했습니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [BO] 이체하기 / 상세 마스킹 및 PIN 원문 조회",
      "status": "BLOCKED",
      "statusText": "확인 불가",
      "durationMs": 3509,
      "evidence": [
        "artifacts/logs/69-error-context.md",
        "artifacts/traces/19-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/19-trace.zip"
      ],
      "logs": [
        "artifacts/logs/69-error-context.md"
      ],
      "files": [],
      "role": "BO - 이체하기",
      "page": "[BO] 이체하기",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "BO - 이체하기 계정으로 [BO] 이체하기 항목을 확인",
      "expected": "BO - 이체하기 계정에서 [BO] 이체하기 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "확인을 끝내지 못했습니다: Error: BLOCKED: BO 이체하기은 기간 확장 후에도 상세 검증 데이터가 없습니다.",
      "error": "Error: BLOCKED: BO 이체하기은 기간 확장 후에도 상세 검증 데이터가 없습니다.",
      "failureCategory": "blocked",
      "failureCategoryText": "확인 조건 부족",
      "reproduction": {
        "required": false,
        "reason": "확인 조건이 부족해 본 시나리오를 끝까지 실행하지 못했습니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 이체하기(렌탈페이) / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 6584,
      "evidence": [
        "artifacts/logs/70-이체하기-렌탈페이--ADMIN-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/70-이체하기-렌탈페이--ADMIN-detail-masking.md"
      ],
      "files": [],
      "role": "ADMIN - 이체하기(렌탈페이)",
      "page": "[ADMIN] 이체하기(렌탈페이)",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "ADMIN - 이체하기(렌탈페이) 계정으로 [ADMIN] 이체하기(렌탈페이) 항목을 확인",
      "expected": "ADMIN - 이체하기(렌탈페이) 계정에서 [ADMIN] 이체하기(렌탈페이) 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] 이체하기(렌탈페이) / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 6030,
      "evidence": [
        "artifacts/logs/71-이체하기-렌탈페이--TA-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/71-이체하기-렌탈페이--TA-detail-masking.md"
      ],
      "files": [],
      "role": "TA - 이체하기(렌탈페이)",
      "page": "[TA] 이체하기(렌탈페이)",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "TA - 이체하기(렌탈페이) 계정으로 [TA] 이체하기(렌탈페이) 항목을 확인",
      "expected": "TA - 이체하기(렌탈페이) 계정에서 [TA] 이체하기(렌탈페이) 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [CO] 이체하기(렌탈페이) / 상세 마스킹 및 PIN 원문 조회",
      "status": "BLOCKED",
      "statusText": "확인 불가",
      "durationMs": 4702,
      "evidence": [
        "artifacts/logs/72-error-context.md",
        "artifacts/traces/20-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/20-trace.zip"
      ],
      "logs": [
        "artifacts/logs/72-error-context.md"
      ],
      "files": [],
      "role": "CO - 이체하기(렌탈페이)",
      "page": "[CO] 이체하기(렌탈페이)",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "CO - 이체하기(렌탈페이) 계정으로 [CO] 이체하기(렌탈페이) 항목을 확인",
      "expected": "CO - 이체하기(렌탈페이) 계정에서 [CO] 이체하기(렌탈페이) 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "확인을 끝내지 못했습니다: Error: BLOCKED: CO 이체하기(렌탈페이)은 기간 확장 후에도 상세 검증 데이터가 없습니다.",
      "error": "Error: BLOCKED: CO 이체하기(렌탈페이)은 기간 확장 후에도 상세 검증 데이터가 없습니다.",
      "failureCategory": "blocked",
      "failureCategoryText": "확인 조건 부족",
      "reproduction": {
        "required": false,
        "reason": "확인 조건이 부족해 본 시나리오를 끝까지 실행하지 못했습니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [BO] 이체하기(렌탈페이) / 상세 마스킹 및 PIN 원문 조회",
      "status": "BLOCKED",
      "statusText": "확인 불가",
      "durationMs": 3775,
      "evidence": [
        "artifacts/logs/73-error-context.md",
        "artifacts/traces/21-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/21-trace.zip"
      ],
      "logs": [
        "artifacts/logs/73-error-context.md"
      ],
      "files": [],
      "role": "BO - 이체하기(렌탈페이)",
      "page": "[BO] 이체하기(렌탈페이)",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "BO - 이체하기(렌탈페이) 계정으로 [BO] 이체하기(렌탈페이) 항목을 확인",
      "expected": "BO - 이체하기(렌탈페이) 계정에서 [BO] 이체하기(렌탈페이) 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "확인을 끝내지 못했습니다: Error: BLOCKED: BO 이체하기(렌탈페이)은 기간 확장 후에도 상세 검증 데이터가 없습니다.",
      "error": "Error: BLOCKED: BO 이체하기(렌탈페이)은 기간 확장 후에도 상세 검증 데이터가 없습니다.",
      "failureCategory": "blocked",
      "failureCategoryText": "확인 조건 부족",
      "reproduction": {
        "required": false,
        "reason": "확인 조건이 부족해 본 시나리오를 끝까지 실행하지 못했습니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 구 이체내역 확인(렌탈페이) / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 6311,
      "evidence": [
        "artifacts/logs/74-구-이체내역-확인-렌탈페이--ADMIN-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/74-구-이체내역-확인-렌탈페이--ADMIN-detail-masking.md"
      ],
      "files": [],
      "role": "ADMIN - 구 이체내역 확인(렌탈페이)",
      "page": "[ADMIN] 구 이체내역 확인(렌탈페이)",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "ADMIN - 구 이체내역 확인(렌탈페이) 계정으로 [ADMIN] 구 이체내역 확인(렌탈페이) 항목을 확인",
      "expected": "ADMIN - 구 이체내역 확인(렌탈페이) 계정에서 [ADMIN] 구 이체내역 확인(렌탈페이) 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 지갑입출금내역 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 5421,
      "evidence": [
        "artifacts/logs/75-지갑입출금내역-ADMIN-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/75-지갑입출금내역-ADMIN-detail-masking.md"
      ],
      "files": [],
      "role": "ADMIN - 지갑입출금내역",
      "page": "[ADMIN] 지갑입출금내역",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "ADMIN - 지갑입출금내역 계정으로 [ADMIN] 지갑입출금내역 항목을 확인",
      "expected": "ADMIN - 지갑입출금내역 계정에서 [ADMIN] 지갑입출금내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 지갑입출금내역 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 5659,
      "evidence": [
        "artifacts/logs/76-error-context.md",
        "artifacts/traces/22-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/22-trace.zip"
      ],
      "logs": [
        "artifacts/logs/76-error-context.md"
      ],
      "files": [],
      "role": "ADMIN - 지갑입출금내역",
      "page": "[ADMIN] 지갑입출금내역",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "ADMIN - 지갑입출금내역 계정으로 [ADMIN] 지갑입출금내역 항목을 확인",
      "expected": "ADMIN - 지갑입출금내역 계정에서 [ADMIN] 지갑입출금내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: ADMIN 지갑입출금내역 Excel 조회결과 다운로드 메뉴가 없습니다.",
      "error": "Error: ADMIN 지갑입출금내역 Excel 조회결과 다운로드 메뉴가 없습니다.",
      "failureCategory": "unknown",
      "failureCategoryText": "원인 확인 필요",
      "reproduction": {
        "required": true,
        "reason": "자동화 결과만으로 원인을 확정하기 어려워 화면 기준 확인이 필요합니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"ADMIN - 지갑입출금내역\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\"",
        "notifyMessage": "[QA 확인 요청] ADMIN - 지갑입출금내역 / [ADMIN] 지갑입출금내역 / Excel 기본 마스킹 및 PIN 원문 다운로드: 원인 확인 필요 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"ADMIN - 지갑입출금내역\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] 지갑입출금내역 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 5482,
      "evidence": [
        "artifacts/logs/77-지갑입출금내역-TA-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/77-지갑입출금내역-TA-detail-masking.md"
      ],
      "files": [],
      "role": "TA - 지갑입출금내역",
      "page": "[TA] 지갑입출금내역",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "TA - 지갑입출금내역 계정으로 [TA] 지갑입출금내역 항목을 확인",
      "expected": "TA - 지갑입출금내역 계정에서 [TA] 지갑입출금내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] 지갑입출금내역 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 5332,
      "evidence": [
        "artifacts/logs/78-error-context.md",
        "artifacts/traces/23-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/23-trace.zip"
      ],
      "logs": [
        "artifacts/logs/78-error-context.md"
      ],
      "files": [],
      "role": "TA - 지갑입출금내역",
      "page": "[TA] 지갑입출금내역",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "TA - 지갑입출금내역 계정으로 [TA] 지갑입출금내역 항목을 확인",
      "expected": "TA - 지갑입출금내역 계정에서 [TA] 지갑입출금내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: TA 지갑입출금내역 Excel 조회결과 다운로드 메뉴가 없습니다.",
      "error": "Error: TA 지갑입출금내역 Excel 조회결과 다운로드 메뉴가 없습니다.",
      "failureCategory": "unknown",
      "failureCategoryText": "원인 확인 필요",
      "reproduction": {
        "required": true,
        "reason": "자동화 결과만으로 원인을 확정하기 어려워 화면 기준 확인이 필요합니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"TA - 지갑입출금내역\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\"",
        "notifyMessage": "[QA 확인 요청] TA - 지갑입출금내역 / [TA] 지갑입출금내역 / Excel 기본 마스킹 및 PIN 원문 다운로드: 원인 확인 필요 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"TA - 지갑입출금내역\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [CO] 지갑입출금내역 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 6181,
      "evidence": [
        "artifacts/logs/79-지갑입출금내역-CO-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/79-지갑입출금내역-CO-detail-masking.md"
      ],
      "files": [],
      "role": "CO - 지갑입출금내역",
      "page": "[CO] 지갑입출금내역",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "CO - 지갑입출금내역 계정으로 [CO] 지갑입출금내역 항목을 확인",
      "expected": "CO - 지갑입출금내역 계정에서 [CO] 지갑입출금내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [CO] 지갑입출금내역 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 6032,
      "evidence": [
        "artifacts/logs/80-error-context.md",
        "artifacts/traces/24-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/24-trace.zip"
      ],
      "logs": [
        "artifacts/logs/80-error-context.md"
      ],
      "files": [],
      "role": "CO - 지갑입출금내역",
      "page": "[CO] 지갑입출금내역",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "CO - 지갑입출금내역 계정으로 [CO] 지갑입출금내역 항목을 확인",
      "expected": "CO - 지갑입출금내역 계정에서 [CO] 지갑입출금내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: CO 지갑입출금내역 Excel 조회결과 다운로드 메뉴가 없습니다.",
      "error": "Error: CO 지갑입출금내역 Excel 조회결과 다운로드 메뉴가 없습니다.",
      "failureCategory": "unknown",
      "failureCategoryText": "원인 확인 필요",
      "reproduction": {
        "required": true,
        "reason": "자동화 결과만으로 원인을 확정하기 어려워 화면 기준 확인이 필요합니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"CO - 지갑입출금내역\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\"",
        "notifyMessage": "[QA 확인 요청] CO - 지갑입출금내역 / [CO] 지갑입출금내역 / Excel 기본 마스킹 및 PIN 원문 다운로드: 원인 확인 필요 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"CO - 지갑입출금내역\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [BO] 지갑입출금내역 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 6458,
      "evidence": [
        "artifacts/logs/81-지갑입출금내역-BO-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/81-지갑입출금내역-BO-detail-masking.md"
      ],
      "files": [],
      "role": "BO - 지갑입출금내역",
      "page": "[BO] 지갑입출금내역",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "BO - 지갑입출금내역 계정으로 [BO] 지갑입출금내역 항목을 확인",
      "expected": "BO - 지갑입출금내역 계정에서 [BO] 지갑입출금내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [BO] 지갑입출금내역 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 6130,
      "evidence": [
        "artifacts/logs/82-error-context.md",
        "artifacts/traces/25-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/25-trace.zip"
      ],
      "logs": [
        "artifacts/logs/82-error-context.md"
      ],
      "files": [],
      "role": "BO - 지갑입출금내역",
      "page": "[BO] 지갑입출금내역",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "BO - 지갑입출금내역 계정으로 [BO] 지갑입출금내역 항목을 확인",
      "expected": "BO - 지갑입출금내역 계정에서 [BO] 지갑입출금내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: BO 지갑입출금내역 Excel 조회결과 다운로드 메뉴가 없습니다.",
      "error": "Error: BO 지갑입출금내역 Excel 조회결과 다운로드 메뉴가 없습니다.",
      "failureCategory": "unknown",
      "failureCategoryText": "원인 확인 필요",
      "reproduction": {
        "required": true,
        "reason": "자동화 결과만으로 원인을 확정하기 어려워 화면 기준 확인이 필요합니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"BO - 지갑입출금내역\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\"",
        "notifyMessage": "[QA 확인 요청] BO - 지갑입출금내역 / [BO] 지갑입출금내역 / Excel 기본 마스킹 및 PIN 원문 다운로드: 원인 확인 필요 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"BO - 지갑입출금내역\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 정산내역 / 상세 마스킹 및 PIN 원문 조회",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 2976,
      "evidence": [
        "artifacts/logs/83-error-context.md",
        "artifacts/traces/26-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/26-trace.zip"
      ],
      "logs": [
        "artifacts/logs/83-error-context.md"
      ],
      "files": [],
      "role": "ADMIN - 정산내역",
      "page": "[ADMIN] 정산내역",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "ADMIN - 정산내역 계정으로 [ADMIN] 정산내역 항목을 확인",
      "expected": "ADMIN - 정산내역 계정에서 [ADMIN] 정산내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: ADMIN 정산내역 목록에 데이터가 있지만 상세보기 또는 마스킹 해제 버튼이 없습니다.",
      "error": "Error: ADMIN 정산내역 목록에 데이터가 있지만 상세보기 또는 마스킹 해제 버튼이 없습니다.",
      "failureCategory": "unknown",
      "failureCategoryText": "원인 확인 필요",
      "reproduction": {
        "required": true,
        "reason": "자동화 결과만으로 원인을 확정하기 어려워 화면 기준 확인이 필요합니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"ADMIN - 정산내역\" --case \"상세 마스킹 및 PIN 원문 조회\"",
        "notifyMessage": "[QA 확인 요청] ADMIN - 정산내역 / [ADMIN] 정산내역 / 상세 마스킹 및 PIN 원문 조회: 원인 확인 필요 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"ADMIN - 정산내역\" --case \"상세 마스킹 및 PIN 원문 조회\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 정산내역 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "BLOCKED",
      "statusText": "확인 불가",
      "durationMs": 23955,
      "evidence": [
        "artifacts/logs/84-error-context.md",
        "artifacts/traces/27-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/27-trace.zip"
      ],
      "logs": [
        "artifacts/logs/84-error-context.md"
      ],
      "files": [],
      "role": "ADMIN - 정산내역",
      "page": "[ADMIN] 정산내역",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "ADMIN - 정산내역 계정으로 [ADMIN] 정산내역 항목을 확인",
      "expected": "ADMIN - 정산내역 계정에서 [ADMIN] 정산내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "확인을 끝내지 못했습니다: Error: BLOCKED: ADMIN 정산내역 기본 Excel에 마스킹 검증이 가능한 개인정보 값이 없습니다.",
      "error": "Error: BLOCKED: ADMIN 정산내역 기본 Excel에 마스킹 검증이 가능한 개인정보 값이 없습니다.",
      "failureCategory": "blocked",
      "failureCategoryText": "확인 조건 부족",
      "reproduction": {
        "required": false,
        "reason": "확인 조건이 부족해 본 시나리오를 끝까지 실행하지 못했습니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] 정산내역 / 상세 마스킹 및 PIN 원문 조회",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 3108,
      "evidence": [
        "artifacts/logs/85-error-context.md",
        "artifacts/traces/28-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/28-trace.zip"
      ],
      "logs": [
        "artifacts/logs/85-error-context.md"
      ],
      "files": [],
      "role": "TA - 정산내역",
      "page": "[TA] 정산내역",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "TA - 정산내역 계정으로 [TA] 정산내역 항목을 확인",
      "expected": "TA - 정산내역 계정에서 [TA] 정산내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: TA 정산내역 목록에 데이터가 있지만 상세보기 또는 마스킹 해제 버튼이 없습니다.",
      "error": "Error: TA 정산내역 목록에 데이터가 있지만 상세보기 또는 마스킹 해제 버튼이 없습니다.",
      "failureCategory": "unknown",
      "failureCategoryText": "원인 확인 필요",
      "reproduction": {
        "required": true,
        "reason": "자동화 결과만으로 원인을 확정하기 어려워 화면 기준 확인이 필요합니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"TA - 정산내역\" --case \"상세 마스킹 및 PIN 원문 조회\"",
        "notifyMessage": "[QA 확인 요청] TA - 정산내역 / [TA] 정산내역 / 상세 마스킹 및 PIN 원문 조회: 원인 확인 필요 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"TA - 정산내역\" --case \"상세 마스킹 및 PIN 원문 조회\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] 정산내역 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "BLOCKED",
      "statusText": "확인 불가",
      "durationMs": 23722,
      "evidence": [
        "artifacts/logs/86-error-context.md",
        "artifacts/traces/29-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/29-trace.zip"
      ],
      "logs": [
        "artifacts/logs/86-error-context.md"
      ],
      "files": [],
      "role": "TA - 정산내역",
      "page": "[TA] 정산내역",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "TA - 정산내역 계정으로 [TA] 정산내역 항목을 확인",
      "expected": "TA - 정산내역 계정에서 [TA] 정산내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "확인을 끝내지 못했습니다: Error: BLOCKED: TA 정산내역 기본 Excel에 마스킹 검증이 가능한 개인정보 값이 없습니다.",
      "error": "Error: BLOCKED: TA 정산내역 기본 Excel에 마스킹 검증이 가능한 개인정보 값이 없습니다.",
      "failureCategory": "blocked",
      "failureCategoryText": "확인 조건 부족",
      "reproduction": {
        "required": false,
        "reason": "확인 조건이 부족해 본 시나리오를 끝까지 실행하지 못했습니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [CO] 정산내역 / 상세 마스킹 및 PIN 원문 조회",
      "status": "BLOCKED",
      "statusText": "확인 불가",
      "durationMs": 4459,
      "evidence": [
        "artifacts/logs/87-error-context.md",
        "artifacts/traces/30-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/30-trace.zip"
      ],
      "logs": [
        "artifacts/logs/87-error-context.md"
      ],
      "files": [],
      "role": "CO - 정산내역",
      "page": "[CO] 정산내역",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "CO - 정산내역 계정으로 [CO] 정산내역 항목을 확인",
      "expected": "CO - 정산내역 계정에서 [CO] 정산내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "확인을 끝내지 못했습니다: Error: BLOCKED: CO 정산내역은 기간 확장 후에도 상세 검증 데이터가 없습니다.",
      "error": "Error: BLOCKED: CO 정산내역은 기간 확장 후에도 상세 검증 데이터가 없습니다.",
      "failureCategory": "blocked",
      "failureCategoryText": "확인 조건 부족",
      "reproduction": {
        "required": false,
        "reason": "확인 조건이 부족해 본 시나리오를 끝까지 실행하지 못했습니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [CO] 정산내역 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 29760,
      "evidence": [
        "artifacts/logs/88-error-context.md",
        "artifacts/traces/31-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/31-trace.zip"
      ],
      "logs": [
        "artifacts/logs/88-error-context.md"
      ],
      "files": [],
      "role": "CO - 정산내역",
      "page": "[CO] 정산내역",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "CO - 정산내역 계정으로 [CO] 정산내역 항목을 확인",
      "expected": "CO - 정산내역 계정에서 [CO] 정산내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: 문서보관함에 tenant-id-redacted 행이 표시되어야 합니다.  expect(locator).toBeVisible() failed",
      "error": "Error: 문서보관함에 tenant-id-redacted 행이 표시되어야 합니다.  expect(locator).toBeVisible() failed",
      "failureCategory": "assertion",
      "failureCategoryText": "기대 결과와 다름",
      "reproduction": {
        "required": true,
        "reason": "화면에서 확인한 값이 체크리스트의 기대 결과와 달랐습니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"CO - 정산내역\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\"",
        "notifyMessage": "[QA 확인 요청] CO - 정산내역 / [CO] 정산내역 / Excel 기본 마스킹 및 PIN 원문 다운로드: 기대 결과와 다름 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"CO - 정산내역\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [BO] 정산내역 / 상세 마스킹 및 PIN 원문 조회",
      "status": "BLOCKED",
      "statusText": "확인 불가",
      "durationMs": 3564,
      "evidence": [
        "artifacts/logs/89-error-context.md",
        "artifacts/traces/32-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/32-trace.zip"
      ],
      "logs": [
        "artifacts/logs/89-error-context.md"
      ],
      "files": [],
      "role": "BO - 정산내역",
      "page": "[BO] 정산내역",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "BO - 정산내역 계정으로 [BO] 정산내역 항목을 확인",
      "expected": "BO - 정산내역 계정에서 [BO] 정산내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "확인을 끝내지 못했습니다: Error: BLOCKED: BO 정산내역은 기간 확장 후에도 상세 검증 데이터가 없습니다.",
      "error": "Error: BLOCKED: BO 정산내역은 기간 확장 후에도 상세 검증 데이터가 없습니다.",
      "failureCategory": "blocked",
      "failureCategoryText": "확인 조건 부족",
      "reproduction": {
        "required": false,
        "reason": "확인 조건이 부족해 본 시나리오를 끝까지 실행하지 못했습니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [BO] 정산내역 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 25229,
      "evidence": [
        "artifacts/logs/90-정산내역-BO-excel-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/90-정산내역-BO-excel-masking.md"
      ],
      "files": [],
      "role": "BO - 정산내역",
      "page": "[BO] 정산내역",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "BO - 정산내역 계정으로 [BO] 정산내역 항목을 확인",
      "expected": "BO - 정산내역 계정에서 [BO] 정산내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 총판관리 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 5876,
      "evidence": [
        "artifacts/logs/91-총판관리-ADMIN-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/91-총판관리-ADMIN-detail-masking.md"
      ],
      "files": [],
      "role": "ADMIN - 총판관리",
      "page": "[ADMIN] 총판관리",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "ADMIN - 총판관리 계정으로 [ADMIN] 총판관리 항목을 확인",
      "expected": "ADMIN - 총판관리 계정에서 [ADMIN] 총판관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 총판관리 / 수정 모달 마스킹 및 인증 전 수정 차단",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 5669,
      "evidence": [
        "artifacts/logs/92-error-context.md",
        "artifacts/traces/33-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/33-trace.zip"
      ],
      "logs": [
        "artifacts/logs/92-error-context.md"
      ],
      "files": [],
      "role": "ADMIN - 총판관리",
      "page": "[ADMIN] 총판관리",
      "checklistItem": "수정 모달 마스킹 및 인증 전 수정 차단",
      "action": "ADMIN - 총판관리 계정으로 [ADMIN] 총판관리 항목을 확인",
      "expected": "ADMIN - 총판관리 계정에서 [ADMIN] 총판관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: 총판관리 수정 모달의 마스킹 개인정보는 인증 전에 편집할 수 없어야 합니다.  expect(received).toBe(expected) // Object.is equality",
      "error": "Error: 총판관리 수정 모달의 마스킹 개인정보는 인증 전에 편집할 수 없어야 합니다.  expect(received).toBe(expected) // Object.is equality",
      "failureCategory": "assertion",
      "failureCategoryText": "기대 결과와 다름",
      "reproduction": {
        "required": true,
        "reason": "화면에서 확인한 값이 체크리스트의 기대 결과와 달랐습니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"ADMIN - 총판관리\" --case \"수정 모달 마스킹 및 인증 전 수정 차단\"",
        "notifyMessage": "[QA 확인 요청] ADMIN - 총판관리 / [ADMIN] 총판관리 / 수정 모달 마스킹 및 인증 전 수정 차단: 기대 결과와 다름 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"ADMIN - 총판관리\" --case \"수정 모달 마스킹 및 인증 전 수정 차단\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 총판관리 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 23113,
      "evidence": [
        "artifacts/logs/93-총판관리-ADMIN-excel-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/93-총판관리-ADMIN-excel-masking.md"
      ],
      "files": [],
      "role": "ADMIN - 총판관리",
      "page": "[ADMIN] 총판관리",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "ADMIN - 총판관리 계정으로 [ADMIN] 총판관리 항목을 확인",
      "expected": "ADMIN - 총판관리 계정에서 [ADMIN] 총판관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] 총판관리 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 5344,
      "evidence": [
        "artifacts/logs/94-총판관리-TA-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/94-총판관리-TA-detail-masking.md"
      ],
      "files": [],
      "role": "TA - 총판관리",
      "page": "[TA] 총판관리",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "TA - 총판관리 계정으로 [TA] 총판관리 항목을 확인",
      "expected": "TA - 총판관리 계정에서 [TA] 총판관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] 총판관리 / 수정 모달 마스킹 및 인증 전 수정 차단",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 4066,
      "evidence": [
        "artifacts/logs/95-error-context.md",
        "artifacts/traces/34-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/34-trace.zip"
      ],
      "logs": [
        "artifacts/logs/95-error-context.md"
      ],
      "files": [],
      "role": "TA - 총판관리",
      "page": "[TA] 총판관리",
      "checklistItem": "수정 모달 마스킹 및 인증 전 수정 차단",
      "action": "TA - 총판관리 계정으로 [TA] 총판관리 항목을 확인",
      "expected": "TA - 총판관리 계정에서 [TA] 총판관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: 총판관리 수정 모달의 마스킹 개인정보는 인증 전에 편집할 수 없어야 합니다.  expect(received).toBe(expected) // Object.is equality",
      "error": "Error: 총판관리 수정 모달의 마스킹 개인정보는 인증 전에 편집할 수 없어야 합니다.  expect(received).toBe(expected) // Object.is equality",
      "failureCategory": "assertion",
      "failureCategoryText": "기대 결과와 다름",
      "reproduction": {
        "required": true,
        "reason": "화면에서 확인한 값이 체크리스트의 기대 결과와 달랐습니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"TA - 총판관리\" --case \"수정 모달 마스킹 및 인증 전 수정 차단\"",
        "notifyMessage": "[QA 확인 요청] TA - 총판관리 / [TA] 총판관리 / 수정 모달 마스킹 및 인증 전 수정 차단: 기대 결과와 다름 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"TA - 총판관리\" --case \"수정 모달 마스킹 및 인증 전 수정 차단\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] 총판관리 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 21457,
      "evidence": [
        "artifacts/logs/96-총판관리-TA-excel-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/96-총판관리-TA-excel-masking.md"
      ],
      "files": [],
      "role": "TA - 총판관리",
      "page": "[TA] 총판관리",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "TA - 총판관리 계정으로 [TA] 총판관리 항목을 확인",
      "expected": "TA - 총판관리 계정에서 [TA] 총판관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [CO] 총판관리 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 4900,
      "evidence": [
        "artifacts/logs/97-총판관리-CO-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/97-총판관리-CO-detail-masking.md"
      ],
      "files": [],
      "role": "CO - 총판관리",
      "page": "[CO] 총판관리",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "CO - 총판관리 계정으로 [CO] 총판관리 항목을 확인",
      "expected": "CO - 총판관리 계정에서 [CO] 총판관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [CO] 총판관리 / 수정 모달 마스킹 및 인증 전 수정 차단",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 2537,
      "evidence": [
        "artifacts/logs/98-error-context.md",
        "artifacts/traces/35-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/35-trace.zip"
      ],
      "logs": [
        "artifacts/logs/98-error-context.md"
      ],
      "files": [],
      "role": "CO - 총판관리",
      "page": "[CO] 총판관리",
      "checklistItem": "수정 모달 마스킹 및 인증 전 수정 차단",
      "action": "CO - 총판관리 계정으로 [CO] 총판관리 항목을 확인",
      "expected": "CO - 총판관리 계정에서 [CO] 총판관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: 총판관리 목록에 데이터가 있지만 수정 버튼 또는 수정 모달을 찾지 못했습니다.",
      "error": "Error: 총판관리 목록에 데이터가 있지만 수정 버튼 또는 수정 모달을 찾지 못했습니다.",
      "failureCategory": "unknown",
      "failureCategoryText": "원인 확인 필요",
      "reproduction": {
        "required": true,
        "reason": "자동화 결과만으로 원인을 확정하기 어려워 화면 기준 확인이 필요합니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"CO - 총판관리\" --case \"수정 모달 마스킹 및 인증 전 수정 차단\"",
        "notifyMessage": "[QA 확인 요청] CO - 총판관리 / [CO] 총판관리 / 수정 모달 마스킹 및 인증 전 수정 차단: 원인 확인 필요 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"CO - 총판관리\" --case \"수정 모달 마스킹 및 인증 전 수정 차단\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [CO] 총판관리 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 25769,
      "evidence": [
        "artifacts/logs/99-error-context.md",
        "artifacts/traces/36-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/36-trace.zip"
      ],
      "logs": [
        "artifacts/logs/99-error-context.md"
      ],
      "files": [],
      "role": "CO - 총판관리",
      "page": "[CO] 총판관리",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "CO - 총판관리 계정으로 [CO] 총판관리 항목을 확인",
      "expected": "CO - 총판관리 계정에서 [CO] 총판관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: 문서보관함에 tenant-id-redacted 행이 표시되어야 합니다.  expect(locator).toBeVisible() failed",
      "error": "Error: 문서보관함에 tenant-id-redacted 행이 표시되어야 합니다.  expect(locator).toBeVisible() failed",
      "failureCategory": "assertion",
      "failureCategoryText": "기대 결과와 다름",
      "reproduction": {
        "required": true,
        "reason": "화면에서 확인한 값이 체크리스트의 기대 결과와 달랐습니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"CO - 총판관리\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\"",
        "notifyMessage": "[QA 확인 요청] CO - 총판관리 / [CO] 총판관리 / Excel 기본 마스킹 및 PIN 원문 다운로드: 기대 결과와 다름 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"CO - 총판관리\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 부서별 운영상태관리 / 상세 마스킹 및 PIN 원문 조회",
      "status": "BLOCKED",
      "statusText": "확인 불가",
      "durationMs": 25038,
      "evidence": [
        "artifacts/logs/100-error-context.md",
        "artifacts/traces/37-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/37-trace.zip"
      ],
      "logs": [
        "artifacts/logs/100-error-context.md"
      ],
      "files": [],
      "role": "ADMIN - 부서별 운영상태관리",
      "page": "[ADMIN] 부서별 운영상태관리",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "ADMIN - 부서별 운영상태관리 계정으로 [ADMIN] 부서별 운영상태관리 항목을 확인",
      "expected": "ADMIN - 부서별 운영상태관리 계정에서 [ADMIN] 부서별 운영상태관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "확인을 끝내지 못했습니다: Error: BLOCKED: ADMIN 부서별 운영상태관리 상세 데이터에 마스킹 검증이 가능한 개인정보 값이 없습니다.",
      "error": "Error: BLOCKED: ADMIN 부서별 운영상태관리 상세 데이터에 마스킹 검증이 가능한 개인정보 값이 없습니다.",
      "failureCategory": "blocked",
      "failureCategoryText": "확인 조건 부족",
      "reproduction": {
        "required": false,
        "reason": "확인 조건이 부족해 본 시나리오를 끝까지 실행하지 못했습니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 부서별 운영상태관리 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 3927,
      "evidence": [
        "artifacts/logs/101-error-context.md",
        "artifacts/traces/38-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/38-trace.zip"
      ],
      "logs": [
        "artifacts/logs/101-error-context.md"
      ],
      "files": [],
      "role": "ADMIN - 부서별 운영상태관리",
      "page": "[ADMIN] 부서별 운영상태관리",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "ADMIN - 부서별 운영상태관리 계정으로 [ADMIN] 부서별 운영상태관리 항목을 확인",
      "expected": "ADMIN - 부서별 운영상태관리 계정에서 [ADMIN] 부서별 운영상태관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: ADMIN 부서별 운영상태관리 화면에 Excel 버튼이 표시되지 않습니다.",
      "error": "Error: ADMIN 부서별 운영상태관리 화면에 Excel 버튼이 표시되지 않습니다.",
      "failureCategory": "unknown",
      "failureCategoryText": "원인 확인 필요",
      "reproduction": {
        "required": true,
        "reason": "자동화 결과만으로 원인을 확정하기 어려워 화면 기준 확인이 필요합니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"ADMIN - 부서별 운영상태관리\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\"",
        "notifyMessage": "[QA 확인 요청] ADMIN - 부서별 운영상태관리 / [ADMIN] 부서별 운영상태관리 / Excel 기본 마스킹 및 PIN 원문 다운로드: 원인 확인 필요 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"ADMIN - 부서별 운영상태관리\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] 부서별 운영상태관리 / 상세 마스킹 및 PIN 원문 조회",
      "status": "BLOCKED",
      "statusText": "확인 불가",
      "durationMs": 24418,
      "evidence": [
        "artifacts/logs/102-error-context.md",
        "artifacts/traces/39-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/39-trace.zip"
      ],
      "logs": [
        "artifacts/logs/102-error-context.md"
      ],
      "files": [],
      "role": "TA - 부서별 운영상태관리",
      "page": "[TA] 부서별 운영상태관리",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "TA - 부서별 운영상태관리 계정으로 [TA] 부서별 운영상태관리 항목을 확인",
      "expected": "TA - 부서별 운영상태관리 계정에서 [TA] 부서별 운영상태관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "확인을 끝내지 못했습니다: Error: BLOCKED: TA 부서별 운영상태관리 상세 데이터에 마스킹 검증이 가능한 개인정보 값이 없습니다.",
      "error": "Error: BLOCKED: TA 부서별 운영상태관리 상세 데이터에 마스킹 검증이 가능한 개인정보 값이 없습니다.",
      "failureCategory": "blocked",
      "failureCategoryText": "확인 조건 부족",
      "reproduction": {
        "required": false,
        "reason": "확인 조건이 부족해 본 시나리오를 끝까지 실행하지 못했습니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] 부서별 운영상태관리 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 3694,
      "evidence": [
        "artifacts/logs/103-error-context.md",
        "artifacts/traces/40-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/40-trace.zip"
      ],
      "logs": [
        "artifacts/logs/103-error-context.md"
      ],
      "files": [],
      "role": "TA - 부서별 운영상태관리",
      "page": "[TA] 부서별 운영상태관리",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "TA - 부서별 운영상태관리 계정으로 [TA] 부서별 운영상태관리 항목을 확인",
      "expected": "TA - 부서별 운영상태관리 계정에서 [TA] 부서별 운영상태관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: TA 부서별 운영상태관리 화면에 Excel 버튼이 표시되지 않습니다.",
      "error": "Error: TA 부서별 운영상태관리 화면에 Excel 버튼이 표시되지 않습니다.",
      "failureCategory": "unknown",
      "failureCategoryText": "원인 확인 필요",
      "reproduction": {
        "required": true,
        "reason": "자동화 결과만으로 원인을 확정하기 어려워 화면 기준 확인이 필요합니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"TA - 부서별 운영상태관리\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\"",
        "notifyMessage": "[QA 확인 요청] TA - 부서별 운영상태관리 / [TA] 부서별 운영상태관리 / Excel 기본 마스킹 및 PIN 원문 다운로드: 원인 확인 필요 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"TA - 부서별 운영상태관리\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [CO] 부서별 운영상태관리 / 상세 마스킹 및 PIN 원문 조회",
      "status": "BLOCKED",
      "statusText": "확인 불가",
      "durationMs": 24123,
      "evidence": [
        "artifacts/logs/104-error-context.md",
        "artifacts/traces/41-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/41-trace.zip"
      ],
      "logs": [
        "artifacts/logs/104-error-context.md"
      ],
      "files": [],
      "role": "CO - 부서별 운영상태관리",
      "page": "[CO] 부서별 운영상태관리",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "CO - 부서별 운영상태관리 계정으로 [CO] 부서별 운영상태관리 항목을 확인",
      "expected": "CO - 부서별 운영상태관리 계정에서 [CO] 부서별 운영상태관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "확인을 끝내지 못했습니다: Error: BLOCKED: CO 부서별 운영상태관리 상세 데이터에 마스킹 검증이 가능한 개인정보 값이 없습니다.",
      "error": "Error: BLOCKED: CO 부서별 운영상태관리 상세 데이터에 마스킹 검증이 가능한 개인정보 값이 없습니다.",
      "failureCategory": "blocked",
      "failureCategoryText": "확인 조건 부족",
      "reproduction": {
        "required": false,
        "reason": "확인 조건이 부족해 본 시나리오를 끝까지 실행하지 못했습니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [CO] 부서별 운영상태관리 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 3713,
      "evidence": [
        "artifacts/logs/105-error-context.md",
        "artifacts/traces/42-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/42-trace.zip"
      ],
      "logs": [
        "artifacts/logs/105-error-context.md"
      ],
      "files": [],
      "role": "CO - 부서별 운영상태관리",
      "page": "[CO] 부서별 운영상태관리",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "CO - 부서별 운영상태관리 계정으로 [CO] 부서별 운영상태관리 항목을 확인",
      "expected": "CO - 부서별 운영상태관리 계정에서 [CO] 부서별 운영상태관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: CO 부서별 운영상태관리 화면에 Excel 버튼이 표시되지 않습니다.",
      "error": "Error: CO 부서별 운영상태관리 화면에 Excel 버튼이 표시되지 않습니다.",
      "failureCategory": "unknown",
      "failureCategoryText": "원인 확인 필요",
      "reproduction": {
        "required": true,
        "reason": "자동화 결과만으로 원인을 확정하기 어려워 화면 기준 확인이 필요합니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"CO - 부서별 운영상태관리\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\"",
        "notifyMessage": "[QA 확인 요청] CO - 부서별 운영상태관리 / [CO] 부서별 운영상태관리 / Excel 기본 마스킹 및 PIN 원문 다운로드: 원인 확인 필요 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"CO - 부서별 운영상태관리\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 영업점관리 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 6127,
      "evidence": [
        "artifacts/logs/106-영업점관리-ADMIN-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/106-영업점관리-ADMIN-detail-masking.md"
      ],
      "files": [],
      "role": "ADMIN - 영업점관리",
      "page": "[ADMIN] 영업점관리",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "ADMIN - 영업점관리 계정으로 [ADMIN] 영업점관리 항목을 확인",
      "expected": "ADMIN - 영업점관리 계정에서 [ADMIN] 영업점관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 영업점관리 / 수정 모달 마스킹 및 인증 전 수정 차단",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 5526,
      "evidence": [
        "artifacts/logs/107-error-context.md",
        "artifacts/traces/43-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/43-trace.zip"
      ],
      "logs": [
        "artifacts/logs/107-error-context.md"
      ],
      "files": [],
      "role": "ADMIN - 영업점관리",
      "page": "[ADMIN] 영업점관리",
      "checklistItem": "수정 모달 마스킹 및 인증 전 수정 차단",
      "action": "ADMIN - 영업점관리 계정으로 [ADMIN] 영업점관리 항목을 확인",
      "expected": "ADMIN - 영업점관리 계정에서 [ADMIN] 영업점관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: 영업점관리 수정 모달의 마스킹 개인정보는 인증 전에 편집할 수 없어야 합니다.  expect(received).toBe(expected) // Object.is equality",
      "error": "Error: 영업점관리 수정 모달의 마스킹 개인정보는 인증 전에 편집할 수 없어야 합니다.  expect(received).toBe(expected) // Object.is equality",
      "failureCategory": "assertion",
      "failureCategoryText": "기대 결과와 다름",
      "reproduction": {
        "required": true,
        "reason": "화면에서 확인한 값이 체크리스트의 기대 결과와 달랐습니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"ADMIN - 영업점관리\" --case \"수정 모달 마스킹 및 인증 전 수정 차단\"",
        "notifyMessage": "[QA 확인 요청] ADMIN - 영업점관리 / [ADMIN] 영업점관리 / 수정 모달 마스킹 및 인증 전 수정 차단: 기대 결과와 다름 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"ADMIN - 영업점관리\" --case \"수정 모달 마스킹 및 인증 전 수정 차단\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 영업점관리 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 23596,
      "evidence": [
        "artifacts/logs/108-영업점관리-ADMIN-excel-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/108-영업점관리-ADMIN-excel-masking.md"
      ],
      "files": [],
      "role": "ADMIN - 영업점관리",
      "page": "[ADMIN] 영업점관리",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "ADMIN - 영업점관리 계정으로 [ADMIN] 영업점관리 항목을 확인",
      "expected": "ADMIN - 영업점관리 계정에서 [ADMIN] 영업점관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] 영업점관리 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 5255,
      "evidence": [
        "artifacts/logs/109-영업점관리-TA-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/109-영업점관리-TA-detail-masking.md"
      ],
      "files": [],
      "role": "TA - 영업점관리",
      "page": "[TA] 영업점관리",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "TA - 영업점관리 계정으로 [TA] 영업점관리 항목을 확인",
      "expected": "TA - 영업점관리 계정에서 [TA] 영업점관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] 영업점관리 / 수정 모달 마스킹 및 인증 전 수정 차단",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 4216,
      "evidence": [
        "artifacts/logs/110-error-context.md",
        "artifacts/traces/44-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/44-trace.zip"
      ],
      "logs": [
        "artifacts/logs/110-error-context.md"
      ],
      "files": [],
      "role": "TA - 영업점관리",
      "page": "[TA] 영업점관리",
      "checklistItem": "수정 모달 마스킹 및 인증 전 수정 차단",
      "action": "TA - 영업점관리 계정으로 [TA] 영업점관리 항목을 확인",
      "expected": "TA - 영업점관리 계정에서 [TA] 영업점관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: 영업점관리 수정 모달의 마스킹 개인정보는 인증 전에 편집할 수 없어야 합니다.  expect(received).toBe(expected) // Object.is equality",
      "error": "Error: 영업점관리 수정 모달의 마스킹 개인정보는 인증 전에 편집할 수 없어야 합니다.  expect(received).toBe(expected) // Object.is equality",
      "failureCategory": "assertion",
      "failureCategoryText": "기대 결과와 다름",
      "reproduction": {
        "required": true,
        "reason": "화면에서 확인한 값이 체크리스트의 기대 결과와 달랐습니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"TA - 영업점관리\" --case \"수정 모달 마스킹 및 인증 전 수정 차단\"",
        "notifyMessage": "[QA 확인 요청] TA - 영업점관리 / [TA] 영업점관리 / 수정 모달 마스킹 및 인증 전 수정 차단: 기대 결과와 다름 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"TA - 영업점관리\" --case \"수정 모달 마스킹 및 인증 전 수정 차단\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] 영업점관리 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 21623,
      "evidence": [
        "artifacts/logs/111-영업점관리-TA-excel-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/111-영업점관리-TA-excel-masking.md"
      ],
      "files": [],
      "role": "TA - 영업점관리",
      "page": "[TA] 영업점관리",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "TA - 영업점관리 계정으로 [TA] 영업점관리 항목을 확인",
      "expected": "TA - 영업점관리 계정에서 [TA] 영업점관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [CO] 영업점관리 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 5026,
      "evidence": [
        "artifacts/logs/112-영업점관리-CO-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/112-영업점관리-CO-detail-masking.md"
      ],
      "files": [],
      "role": "CO - 영업점관리",
      "page": "[CO] 영업점관리",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "CO - 영업점관리 계정으로 [CO] 영업점관리 항목을 확인",
      "expected": "CO - 영업점관리 계정에서 [CO] 영업점관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [CO] 영업점관리 / 수정 모달 마스킹 및 인증 전 수정 차단",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 2535,
      "evidence": [
        "artifacts/logs/113-error-context.md",
        "artifacts/traces/45-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/45-trace.zip"
      ],
      "logs": [
        "artifacts/logs/113-error-context.md"
      ],
      "files": [],
      "role": "CO - 영업점관리",
      "page": "[CO] 영업점관리",
      "checklistItem": "수정 모달 마스킹 및 인증 전 수정 차단",
      "action": "CO - 영업점관리 계정으로 [CO] 영업점관리 항목을 확인",
      "expected": "CO - 영업점관리 계정에서 [CO] 영업점관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: 영업점관리 목록에 데이터가 있지만 수정 버튼 또는 수정 모달을 찾지 못했습니다.",
      "error": "Error: 영업점관리 목록에 데이터가 있지만 수정 버튼 또는 수정 모달을 찾지 못했습니다.",
      "failureCategory": "unknown",
      "failureCategoryText": "원인 확인 필요",
      "reproduction": {
        "required": true,
        "reason": "자동화 결과만으로 원인을 확정하기 어려워 화면 기준 확인이 필요합니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"CO - 영업점관리\" --case \"수정 모달 마스킹 및 인증 전 수정 차단\"",
        "notifyMessage": "[QA 확인 요청] CO - 영업점관리 / [CO] 영업점관리 / 수정 모달 마스킹 및 인증 전 수정 차단: 원인 확인 필요 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"CO - 영업점관리\" --case \"수정 모달 마스킹 및 인증 전 수정 차단\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [CO] 영업점관리 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 25772,
      "evidence": [
        "artifacts/logs/114-error-context.md",
        "artifacts/traces/46-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/46-trace.zip"
      ],
      "logs": [
        "artifacts/logs/114-error-context.md"
      ],
      "files": [],
      "role": "CO - 영업점관리",
      "page": "[CO] 영업점관리",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "CO - 영업점관리 계정으로 [CO] 영업점관리 항목을 확인",
      "expected": "CO - 영업점관리 계정에서 [CO] 영업점관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: 문서보관함에 tenant-id-redacted 행이 표시되어야 합니다.  expect(locator).toBeVisible() failed",
      "error": "Error: 문서보관함에 tenant-id-redacted 행이 표시되어야 합니다.  expect(locator).toBeVisible() failed",
      "failureCategory": "assertion",
      "failureCategoryText": "기대 결과와 다름",
      "reproduction": {
        "required": true,
        "reason": "화면에서 확인한 값이 체크리스트의 기대 결과와 달랐습니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"CO - 영업점관리\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\"",
        "notifyMessage": "[QA 확인 요청] CO - 영업점관리 / [CO] 영업점관리 / Excel 기본 마스킹 및 PIN 원문 다운로드: 기대 결과와 다름 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"CO - 영업점관리\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [BO] 영업점관리 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 5064,
      "evidence": [
        "artifacts/logs/115-영업점관리-BO-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/115-영업점관리-BO-detail-masking.md"
      ],
      "files": [],
      "role": "BO - 영업점관리",
      "page": "[BO] 영업점관리",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "BO - 영업점관리 계정으로 [BO] 영업점관리 항목을 확인",
      "expected": "BO - 영업점관리 계정에서 [BO] 영업점관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [BO] 영업점관리 / 수정 모달 마스킹 및 인증 전 수정 차단",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 2670,
      "evidence": [
        "artifacts/logs/116-error-context.md",
        "artifacts/traces/47-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/47-trace.zip"
      ],
      "logs": [
        "artifacts/logs/116-error-context.md"
      ],
      "files": [],
      "role": "BO - 영업점관리",
      "page": "[BO] 영업점관리",
      "checklistItem": "수정 모달 마스킹 및 인증 전 수정 차단",
      "action": "BO - 영업점관리 계정으로 [BO] 영업점관리 항목을 확인",
      "expected": "BO - 영업점관리 계정에서 [BO] 영업점관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: 영업점관리 목록에 데이터가 있지만 수정 버튼 또는 수정 모달을 찾지 못했습니다.",
      "error": "Error: 영업점관리 목록에 데이터가 있지만 수정 버튼 또는 수정 모달을 찾지 못했습니다.",
      "failureCategory": "unknown",
      "failureCategoryText": "원인 확인 필요",
      "reproduction": {
        "required": true,
        "reason": "자동화 결과만으로 원인을 확정하기 어려워 화면 기준 확인이 필요합니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"BO - 영업점관리\" --case \"수정 모달 마스킹 및 인증 전 수정 차단\"",
        "notifyMessage": "[QA 확인 요청] BO - 영업점관리 / [BO] 영업점관리 / 수정 모달 마스킹 및 인증 전 수정 차단: 원인 확인 필요 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"BO - 영업점관리\" --case \"수정 모달 마스킹 및 인증 전 수정 차단\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [BO] 영업점관리 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 4500,
      "evidence": [
        "artifacts/logs/117-error-context.md",
        "artifacts/traces/48-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/48-trace.zip"
      ],
      "logs": [
        "artifacts/logs/117-error-context.md"
      ],
      "files": [],
      "role": "BO - 영업점관리",
      "page": "[BO] 영업점관리",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "BO - 영업점관리 계정으로 [BO] 영업점관리 항목을 확인",
      "expected": "BO - 영업점관리 계정에서 [BO] 영업점관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: 영업점관리 Excel 생성 응답에서 문서 ID를 찾지 못했습니다.",
      "error": "Error: 영업점관리 Excel 생성 응답에서 문서 ID를 찾지 못했습니다.",
      "failureCategory": "unknown",
      "failureCategoryText": "원인 확인 필요",
      "reproduction": {
        "required": true,
        "reason": "자동화 결과만으로 원인을 확정하기 어려워 화면 기준 확인이 필요합니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"BO - 영업점관리\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\"",
        "notifyMessage": "[QA 확인 요청] BO - 영업점관리 / [BO] 영업점관리 / Excel 기본 마스킹 및 PIN 원문 다운로드: 원인 확인 필요 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"BO - 영업점관리\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 가맹점관리 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 6636,
      "evidence": [
        "artifacts/logs/118-가맹점관리-ADMIN-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/118-가맹점관리-ADMIN-detail-masking.md"
      ],
      "files": [],
      "role": "ADMIN - 가맹점관리",
      "page": "[ADMIN] 가맹점관리",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "ADMIN - 가맹점관리 계정으로 [ADMIN] 가맹점관리 항목을 확인",
      "expected": "ADMIN - 가맹점관리 계정에서 [ADMIN] 가맹점관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 가맹점관리 / 수정 모달 마스킹 및 인증 전 수정 차단",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 8877,
      "evidence": [
        "artifacts/logs/119-error-context.md",
        "artifacts/traces/49-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/49-trace.zip"
      ],
      "logs": [
        "artifacts/logs/119-error-context.md"
      ],
      "files": [],
      "role": "ADMIN - 가맹점관리",
      "page": "[ADMIN] 가맹점관리",
      "checklistItem": "수정 모달 마스킹 및 인증 전 수정 차단",
      "action": "ADMIN - 가맹점관리 계정으로 [ADMIN] 가맹점관리 항목을 확인",
      "expected": "ADMIN - 가맹점관리 계정에서 [ADMIN] 가맹점관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: 가맹점관리 수정 모달의 마스킹 개인정보는 인증 전에 편집할 수 없어야 합니다.  expect(received).toBe(expected) // Object.is equality",
      "error": "Error: 가맹점관리 수정 모달의 마스킹 개인정보는 인증 전에 편집할 수 없어야 합니다.  expect(received).toBe(expected) // Object.is equality",
      "failureCategory": "assertion",
      "failureCategoryText": "기대 결과와 다름",
      "reproduction": {
        "required": true,
        "reason": "화면에서 확인한 값이 체크리스트의 기대 결과와 달랐습니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"ADMIN - 가맹점관리\" --case \"수정 모달 마스킹 및 인증 전 수정 차단\"",
        "notifyMessage": "[QA 확인 요청] ADMIN - 가맹점관리 / [ADMIN] 가맹점관리 / 수정 모달 마스킹 및 인증 전 수정 차단: 기대 결과와 다름 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"ADMIN - 가맹점관리\" --case \"수정 모달 마스킹 및 인증 전 수정 차단\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 가맹점관리 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 16198,
      "evidence": [
        "artifacts/logs/120-error-context.md",
        "artifacts/traces/50-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/50-trace.zip"
      ],
      "logs": [
        "artifacts/logs/120-error-context.md"
      ],
      "files": [],
      "role": "ADMIN - 가맹점관리",
      "page": "[ADMIN] 가맹점관리",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "ADMIN - 가맹점관리 계정으로 [ADMIN] 가맹점관리 항목을 확인",
      "expected": "ADMIN - 가맹점관리 계정에서 [ADMIN] 가맹점관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: 가맹점관리 Excel 생성 응답에서 문서 ID를 찾지 못했습니다.",
      "error": "Error: 가맹점관리 Excel 생성 응답에서 문서 ID를 찾지 못했습니다.",
      "failureCategory": "unknown",
      "failureCategoryText": "원인 확인 필요",
      "reproduction": {
        "required": true,
        "reason": "자동화 결과만으로 원인을 확정하기 어려워 화면 기준 확인이 필요합니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"ADMIN - 가맹점관리\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\"",
        "notifyMessage": "[QA 확인 요청] ADMIN - 가맹점관리 / [ADMIN] 가맹점관리 / Excel 기본 마스킹 및 PIN 원문 다운로드: 원인 확인 필요 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"ADMIN - 가맹점관리\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] 가맹점관리 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 5858,
      "evidence": [
        "artifacts/logs/121-가맹점관리-TA-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/121-가맹점관리-TA-detail-masking.md"
      ],
      "files": [],
      "role": "TA - 가맹점관리",
      "page": "[TA] 가맹점관리",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "TA - 가맹점관리 계정으로 [TA] 가맹점관리 항목을 확인",
      "expected": "TA - 가맹점관리 계정에서 [TA] 가맹점관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] 가맹점관리 / 수정 모달 마스킹 및 인증 전 수정 차단",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 6326,
      "evidence": [
        "artifacts/logs/122-error-context.md",
        "artifacts/traces/51-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/51-trace.zip"
      ],
      "logs": [
        "artifacts/logs/122-error-context.md"
      ],
      "files": [],
      "role": "TA - 가맹점관리",
      "page": "[TA] 가맹점관리",
      "checklistItem": "수정 모달 마스킹 및 인증 전 수정 차단",
      "action": "TA - 가맹점관리 계정으로 [TA] 가맹점관리 항목을 확인",
      "expected": "TA - 가맹점관리 계정에서 [TA] 가맹점관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: 가맹점관리 수정 모달의 마스킹 개인정보는 인증 전에 편집할 수 없어야 합니다.  expect(received).toBe(expected) // Object.is equality",
      "error": "Error: 가맹점관리 수정 모달의 마스킹 개인정보는 인증 전에 편집할 수 없어야 합니다.  expect(received).toBe(expected) // Object.is equality",
      "failureCategory": "assertion",
      "failureCategoryText": "기대 결과와 다름",
      "reproduction": {
        "required": true,
        "reason": "화면에서 확인한 값이 체크리스트의 기대 결과와 달랐습니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"TA - 가맹점관리\" --case \"수정 모달 마스킹 및 인증 전 수정 차단\"",
        "notifyMessage": "[QA 확인 요청] TA - 가맹점관리 / [TA] 가맹점관리 / 수정 모달 마스킹 및 인증 전 수정 차단: 기대 결과와 다름 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"TA - 가맹점관리\" --case \"수정 모달 마스킹 및 인증 전 수정 차단\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] 가맹점관리 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 23334,
      "evidence": [
        "artifacts/logs/123-가맹점관리-TA-excel-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/123-가맹점관리-TA-excel-masking.md"
      ],
      "files": [],
      "role": "TA - 가맹점관리",
      "page": "[TA] 가맹점관리",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "TA - 가맹점관리 계정으로 [TA] 가맹점관리 항목을 확인",
      "expected": "TA - 가맹점관리 계정에서 [TA] 가맹점관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [CO] 가맹점관리 / 상세 마스킹 및 PIN 원문 조회",
      "status": "BLOCKED",
      "statusText": "확인 불가",
      "durationMs": 14550,
      "evidence": [
        "artifacts/logs/124-error-context.md",
        "artifacts/traces/52-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/52-trace.zip"
      ],
      "logs": [
        "artifacts/logs/124-error-context.md"
      ],
      "files": [],
      "role": "CO - 가맹점관리",
      "page": "[CO] 가맹점관리",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "CO - 가맹점관리 계정으로 [CO] 가맹점관리 항목을 확인",
      "expected": "CO - 가맹점관리 계정에서 [CO] 가맹점관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "확인을 끝내지 못했습니다: Error: BLOCKED: CO 가맹점관리 상세 데이터에 마스킹 검증이 가능한 개인정보 값이 없습니다.",
      "error": "Error: BLOCKED: CO 가맹점관리 상세 데이터에 마스킹 검증이 가능한 개인정보 값이 없습니다.",
      "failureCategory": "blocked",
      "failureCategoryText": "확인 조건 부족",
      "reproduction": {
        "required": false,
        "reason": "확인 조건이 부족해 본 시나리오를 끝까지 실행하지 못했습니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [CO] 가맹점관리 / 수정 모달 마스킹 및 인증 전 수정 차단",
      "status": "BLOCKED",
      "statusText": "확인 불가",
      "durationMs": 4863,
      "evidence": [
        "artifacts/logs/125-error-context.md",
        "artifacts/traces/53-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/53-trace.zip"
      ],
      "logs": [
        "artifacts/logs/125-error-context.md"
      ],
      "files": [],
      "role": "CO - 가맹점관리",
      "page": "[CO] 가맹점관리",
      "checklistItem": "수정 모달 마스킹 및 인증 전 수정 차단",
      "action": "CO - 가맹점관리 계정으로 [CO] 가맹점관리 항목을 확인",
      "expected": "CO - 가맹점관리 계정에서 [CO] 가맹점관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "확인을 끝내지 못했습니다: Error: BLOCKED: 가맹점관리 수정 모달에 수정 차단을 검증할 마스킹 입력값이 없습니다.",
      "error": "Error: BLOCKED: 가맹점관리 수정 모달에 수정 차단을 검증할 마스킹 입력값이 없습니다.",
      "failureCategory": "blocked",
      "failureCategoryText": "확인 조건 부족",
      "reproduction": {
        "required": false,
        "reason": "확인 조건이 부족해 본 시나리오를 끝까지 실행하지 못했습니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [CO] 가맹점관리 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 27099,
      "evidence": [
        "artifacts/logs/126-error-context.md",
        "artifacts/traces/54-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/54-trace.zip"
      ],
      "logs": [
        "artifacts/logs/126-error-context.md"
      ],
      "files": [],
      "role": "CO - 가맹점관리",
      "page": "[CO] 가맹점관리",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "CO - 가맹점관리 계정으로 [CO] 가맹점관리 항목을 확인",
      "expected": "CO - 가맹점관리 계정에서 [CO] 가맹점관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: 문서보관함에 tenant-id-redacted 행이 표시되어야 합니다.  expect(locator).toBeVisible() failed",
      "error": "Error: 문서보관함에 tenant-id-redacted 행이 표시되어야 합니다.  expect(locator).toBeVisible() failed",
      "failureCategory": "assertion",
      "failureCategoryText": "기대 결과와 다름",
      "reproduction": {
        "required": true,
        "reason": "화면에서 확인한 값이 체크리스트의 기대 결과와 달랐습니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"CO - 가맹점관리\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\"",
        "notifyMessage": "[QA 확인 요청] CO - 가맹점관리 / [CO] 가맹점관리 / Excel 기본 마스킹 및 PIN 원문 다운로드: 기대 결과와 다름 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"CO - 가맹점관리\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [BO] 가맹점관리 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 5138,
      "evidence": [
        "artifacts/logs/127-가맹점관리-BO-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/127-가맹점관리-BO-detail-masking.md"
      ],
      "files": [],
      "role": "BO - 가맹점관리",
      "page": "[BO] 가맹점관리",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "BO - 가맹점관리 계정으로 [BO] 가맹점관리 항목을 확인",
      "expected": "BO - 가맹점관리 계정에서 [BO] 가맹점관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [BO] 가맹점관리 / 수정 모달 마스킹 및 인증 전 수정 차단",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 4512,
      "evidence": [
        "artifacts/logs/128-error-context.md",
        "artifacts/traces/55-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/55-trace.zip"
      ],
      "logs": [
        "artifacts/logs/128-error-context.md"
      ],
      "files": [],
      "role": "BO - 가맹점관리",
      "page": "[BO] 가맹점관리",
      "checklistItem": "수정 모달 마스킹 및 인증 전 수정 차단",
      "action": "BO - 가맹점관리 계정으로 [BO] 가맹점관리 항목을 확인",
      "expected": "BO - 가맹점관리 계정에서 [BO] 가맹점관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: 가맹점관리 수정 모달의 마스킹 개인정보는 인증 전에 편집할 수 없어야 합니다.  expect(received).toBe(expected) // Object.is equality",
      "error": "Error: 가맹점관리 수정 모달의 마스킹 개인정보는 인증 전에 편집할 수 없어야 합니다.  expect(received).toBe(expected) // Object.is equality",
      "failureCategory": "assertion",
      "failureCategoryText": "기대 결과와 다름",
      "reproduction": {
        "required": true,
        "reason": "화면에서 확인한 값이 체크리스트의 기대 결과와 달랐습니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"BO - 가맹점관리\" --case \"수정 모달 마스킹 및 인증 전 수정 차단\"",
        "notifyMessage": "[QA 확인 요청] BO - 가맹점관리 / [BO] 가맹점관리 / 수정 모달 마스킹 및 인증 전 수정 차단: 기대 결과와 다름 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"BO - 가맹점관리\" --case \"수정 모달 마스킹 및 인증 전 수정 차단\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [BO] 가맹점관리 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 21854,
      "evidence": [
        "artifacts/logs/129-가맹점관리-BO-excel-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/129-가맹점관리-BO-excel-masking.md"
      ],
      "files": [],
      "role": "BO - 가맹점관리",
      "page": "[BO] 가맹점관리",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "BO - 가맹점관리 계정으로 [BO] 가맹점관리 항목을 확인",
      "expected": "BO - 가맹점관리 계정에서 [BO] 가맹점관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 사용자관리 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 5842,
      "evidence": [
        "artifacts/logs/130-사용자관리-ADMIN-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/130-사용자관리-ADMIN-detail-masking.md"
      ],
      "files": [],
      "role": "ADMIN - 사용자관리",
      "page": "[ADMIN] 사용자관리",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "ADMIN - 사용자관리 계정으로 [ADMIN] 사용자관리 항목을 확인",
      "expected": "ADMIN - 사용자관리 계정에서 [ADMIN] 사용자관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 사용자관리 / 수정 모달 마스킹 및 인증 전 수정 차단",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 4762,
      "evidence": [
        "artifacts/logs/131-error-context.md",
        "artifacts/traces/56-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/56-trace.zip"
      ],
      "logs": [
        "artifacts/logs/131-error-context.md"
      ],
      "files": [],
      "role": "ADMIN - 사용자관리",
      "page": "[ADMIN] 사용자관리",
      "checklistItem": "수정 모달 마스킹 및 인증 전 수정 차단",
      "action": "ADMIN - 사용자관리 계정으로 [ADMIN] 사용자관리 항목을 확인",
      "expected": "ADMIN - 사용자관리 계정에서 [ADMIN] 사용자관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: 사용자관리 수정 모달의 마스킹 개인정보는 인증 전에 편집할 수 없어야 합니다.  expect(received).toBe(expected) // Object.is equality",
      "error": "Error: 사용자관리 수정 모달의 마스킹 개인정보는 인증 전에 편집할 수 없어야 합니다.  expect(received).toBe(expected) // Object.is equality",
      "failureCategory": "assertion",
      "failureCategoryText": "기대 결과와 다름",
      "reproduction": {
        "required": true,
        "reason": "화면에서 확인한 값이 체크리스트의 기대 결과와 달랐습니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"ADMIN - 사용자관리\" --case \"수정 모달 마스킹 및 인증 전 수정 차단\"",
        "notifyMessage": "[QA 확인 요청] ADMIN - 사용자관리 / [ADMIN] 사용자관리 / 수정 모달 마스킹 및 인증 전 수정 차단: 기대 결과와 다름 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"ADMIN - 사용자관리\" --case \"수정 모달 마스킹 및 인증 전 수정 차단\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 사용자관리 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 5470,
      "evidence": [
        "artifacts/logs/132-error-context.md",
        "artifacts/traces/57-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/57-trace.zip"
      ],
      "logs": [
        "artifacts/logs/132-error-context.md"
      ],
      "files": [],
      "role": "ADMIN - 사용자관리",
      "page": "[ADMIN] 사용자관리",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "ADMIN - 사용자관리 계정으로 [ADMIN] 사용자관리 항목을 확인",
      "expected": "ADMIN - 사용자관리 계정에서 [ADMIN] 사용자관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: ADMIN 사용자관리 Excel 조회결과 다운로드 메뉴가 없습니다.",
      "error": "Error: ADMIN 사용자관리 Excel 조회결과 다운로드 메뉴가 없습니다.",
      "failureCategory": "unknown",
      "failureCategoryText": "원인 확인 필요",
      "reproduction": {
        "required": true,
        "reason": "자동화 결과만으로 원인을 확정하기 어려워 화면 기준 확인이 필요합니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"ADMIN - 사용자관리\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\"",
        "notifyMessage": "[QA 확인 요청] ADMIN - 사용자관리 / [ADMIN] 사용자관리 / Excel 기본 마스킹 및 PIN 원문 다운로드: 원인 확인 필요 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"ADMIN - 사용자관리\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] 사용자관리 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 5493,
      "evidence": [
        "artifacts/logs/133-사용자관리-TA-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/133-사용자관리-TA-detail-masking.md"
      ],
      "files": [],
      "role": "TA - 사용자관리",
      "page": "[TA] 사용자관리",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "TA - 사용자관리 계정으로 [TA] 사용자관리 항목을 확인",
      "expected": "TA - 사용자관리 계정에서 [TA] 사용자관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] 사용자관리 / 수정 모달 마스킹 및 인증 전 수정 차단",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 4385,
      "evidence": [
        "artifacts/logs/134-error-context.md",
        "artifacts/traces/58-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/58-trace.zip"
      ],
      "logs": [
        "artifacts/logs/134-error-context.md"
      ],
      "files": [],
      "role": "TA - 사용자관리",
      "page": "[TA] 사용자관리",
      "checklistItem": "수정 모달 마스킹 및 인증 전 수정 차단",
      "action": "TA - 사용자관리 계정으로 [TA] 사용자관리 항목을 확인",
      "expected": "TA - 사용자관리 계정에서 [TA] 사용자관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: 사용자관리 수정 모달의 마스킹 개인정보는 인증 전에 편집할 수 없어야 합니다.  expect(received).toBe(expected) // Object.is equality",
      "error": "Error: 사용자관리 수정 모달의 마스킹 개인정보는 인증 전에 편집할 수 없어야 합니다.  expect(received).toBe(expected) // Object.is equality",
      "failureCategory": "assertion",
      "failureCategoryText": "기대 결과와 다름",
      "reproduction": {
        "required": true,
        "reason": "화면에서 확인한 값이 체크리스트의 기대 결과와 달랐습니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"TA - 사용자관리\" --case \"수정 모달 마스킹 및 인증 전 수정 차단\"",
        "notifyMessage": "[QA 확인 요청] TA - 사용자관리 / [TA] 사용자관리 / 수정 모달 마스킹 및 인증 전 수정 차단: 기대 결과와 다름 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"TA - 사용자관리\" --case \"수정 모달 마스킹 및 인증 전 수정 차단\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] 사용자관리 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 5453,
      "evidence": [
        "artifacts/logs/135-error-context.md",
        "artifacts/traces/59-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/59-trace.zip"
      ],
      "logs": [
        "artifacts/logs/135-error-context.md"
      ],
      "files": [],
      "role": "TA - 사용자관리",
      "page": "[TA] 사용자관리",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "TA - 사용자관리 계정으로 [TA] 사용자관리 항목을 확인",
      "expected": "TA - 사용자관리 계정에서 [TA] 사용자관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: TA 사용자관리 Excel 조회결과 다운로드 메뉴가 없습니다.",
      "error": "Error: TA 사용자관리 Excel 조회결과 다운로드 메뉴가 없습니다.",
      "failureCategory": "unknown",
      "failureCategoryText": "원인 확인 필요",
      "reproduction": {
        "required": true,
        "reason": "자동화 결과만으로 원인을 확정하기 어려워 화면 기준 확인이 필요합니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"TA - 사용자관리\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\"",
        "notifyMessage": "[QA 확인 요청] TA - 사용자관리 / [TA] 사용자관리 / Excel 기본 마스킹 및 PIN 원문 다운로드: 원인 확인 필요 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"TA - 사용자관리\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [CO] 사용자관리 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 5257,
      "evidence": [
        "artifacts/logs/136-사용자관리-CO-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/136-사용자관리-CO-detail-masking.md"
      ],
      "files": [],
      "role": "CO - 사용자관리",
      "page": "[CO] 사용자관리",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "CO - 사용자관리 계정으로 [CO] 사용자관리 항목을 확인",
      "expected": "CO - 사용자관리 계정에서 [CO] 사용자관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [CO] 사용자관리 / 수정 모달 마스킹 및 인증 전 수정 차단",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 5760,
      "evidence": [
        "artifacts/logs/137-error-context.md",
        "artifacts/traces/60-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/60-trace.zip"
      ],
      "logs": [
        "artifacts/logs/137-error-context.md"
      ],
      "files": [],
      "role": "CO - 사용자관리",
      "page": "[CO] 사용자관리",
      "checklistItem": "수정 모달 마스킹 및 인증 전 수정 차단",
      "action": "CO - 사용자관리 계정으로 [CO] 사용자관리 항목을 확인",
      "expected": "CO - 사용자관리 계정에서 [CO] 사용자관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: 사용자관리 수정 모달의 마스킹 개인정보는 인증 전에 편집할 수 없어야 합니다.  expect(received).toBe(expected) // Object.is equality",
      "error": "Error: 사용자관리 수정 모달의 마스킹 개인정보는 인증 전에 편집할 수 없어야 합니다.  expect(received).toBe(expected) // Object.is equality",
      "failureCategory": "assertion",
      "failureCategoryText": "기대 결과와 다름",
      "reproduction": {
        "required": true,
        "reason": "화면에서 확인한 값이 체크리스트의 기대 결과와 달랐습니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"CO - 사용자관리\" --case \"수정 모달 마스킹 및 인증 전 수정 차단\"",
        "notifyMessage": "[QA 확인 요청] CO - 사용자관리 / [CO] 사용자관리 / 수정 모달 마스킹 및 인증 전 수정 차단: 기대 결과와 다름 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"CO - 사용자관리\" --case \"수정 모달 마스킹 및 인증 전 수정 차단\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [CO] 사용자관리 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 5300,
      "evidence": [
        "artifacts/logs/138-error-context.md",
        "artifacts/traces/61-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/61-trace.zip"
      ],
      "logs": [
        "artifacts/logs/138-error-context.md"
      ],
      "files": [],
      "role": "CO - 사용자관리",
      "page": "[CO] 사용자관리",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "CO - 사용자관리 계정으로 [CO] 사용자관리 항목을 확인",
      "expected": "CO - 사용자관리 계정에서 [CO] 사용자관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: CO 사용자관리 Excel 조회결과 다운로드 메뉴가 없습니다.",
      "error": "Error: CO 사용자관리 Excel 조회결과 다운로드 메뉴가 없습니다.",
      "failureCategory": "unknown",
      "failureCategoryText": "원인 확인 필요",
      "reproduction": {
        "required": true,
        "reason": "자동화 결과만으로 원인을 확정하기 어려워 화면 기준 확인이 필요합니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"CO - 사용자관리\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\"",
        "notifyMessage": "[QA 확인 요청] CO - 사용자관리 / [CO] 사용자관리 / Excel 기본 마스킹 및 PIN 원문 다운로드: 원인 확인 필요 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"CO - 사용자관리\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [BO] 사용자관리 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 5131,
      "evidence": [
        "artifacts/logs/139-사용자관리-BO-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/139-사용자관리-BO-detail-masking.md"
      ],
      "files": [],
      "role": "BO - 사용자관리",
      "page": "[BO] 사용자관리",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "BO - 사용자관리 계정으로 [BO] 사용자관리 항목을 확인",
      "expected": "BO - 사용자관리 계정에서 [BO] 사용자관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [BO] 사용자관리 / 수정 모달 마스킹 및 인증 전 수정 차단",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 3916,
      "evidence": [
        "artifacts/logs/140-error-context.md",
        "artifacts/traces/62-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/62-trace.zip"
      ],
      "logs": [
        "artifacts/logs/140-error-context.md"
      ],
      "files": [],
      "role": "BO - 사용자관리",
      "page": "[BO] 사용자관리",
      "checklistItem": "수정 모달 마스킹 및 인증 전 수정 차단",
      "action": "BO - 사용자관리 계정으로 [BO] 사용자관리 항목을 확인",
      "expected": "BO - 사용자관리 계정에서 [BO] 사용자관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: 사용자관리 수정 모달의 마스킹 개인정보는 인증 전에 편집할 수 없어야 합니다.  expect(received).toBe(expected) // Object.is equality",
      "error": "Error: 사용자관리 수정 모달의 마스킹 개인정보는 인증 전에 편집할 수 없어야 합니다.  expect(received).toBe(expected) // Object.is equality",
      "failureCategory": "assertion",
      "failureCategoryText": "기대 결과와 다름",
      "reproduction": {
        "required": true,
        "reason": "화면에서 확인한 값이 체크리스트의 기대 결과와 달랐습니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"BO - 사용자관리\" --case \"수정 모달 마스킹 및 인증 전 수정 차단\"",
        "notifyMessage": "[QA 확인 요청] BO - 사용자관리 / [BO] 사용자관리 / 수정 모달 마스킹 및 인증 전 수정 차단: 기대 결과와 다름 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"BO - 사용자관리\" --case \"수정 모달 마스킹 및 인증 전 수정 차단\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [BO] 사용자관리 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 5222,
      "evidence": [
        "artifacts/logs/141-error-context.md",
        "artifacts/traces/63-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/63-trace.zip"
      ],
      "logs": [
        "artifacts/logs/141-error-context.md"
      ],
      "files": [],
      "role": "BO - 사용자관리",
      "page": "[BO] 사용자관리",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "BO - 사용자관리 계정으로 [BO] 사용자관리 항목을 확인",
      "expected": "BO - 사용자관리 계정에서 [BO] 사용자관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: BO 사용자관리 Excel 조회결과 다운로드 메뉴가 없습니다.",
      "error": "Error: BO 사용자관리 Excel 조회결과 다운로드 메뉴가 없습니다.",
      "failureCategory": "unknown",
      "failureCategoryText": "원인 확인 필요",
      "reproduction": {
        "required": true,
        "reason": "자동화 결과만으로 원인을 확정하기 어려워 화면 기준 확인이 필요합니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"BO - 사용자관리\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\"",
        "notifyMessage": "[QA 확인 요청] BO - 사용자관리 / [BO] 사용자관리 / Excel 기본 마스킹 및 PIN 원문 다운로드: 원인 확인 필요 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"BO - 사용자관리\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 법인관리 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 4949,
      "evidence": [
        "artifacts/logs/142-법인관리-ADMIN-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/142-법인관리-ADMIN-detail-masking.md"
      ],
      "files": [],
      "role": "ADMIN - 법인관리",
      "page": "[ADMIN] 법인관리",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "ADMIN - 법인관리 계정으로 [ADMIN] 법인관리 항목을 확인",
      "expected": "ADMIN - 법인관리 계정에서 [ADMIN] 법인관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 카드관리 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 16521,
      "evidence": [
        "artifacts/logs/143-카드관리-ADMIN-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/143-카드관리-ADMIN-detail-masking.md"
      ],
      "files": [],
      "role": "ADMIN - 카드관리",
      "page": "[ADMIN] 카드관리",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "ADMIN - 카드관리 계정으로 [ADMIN] 카드관리 항목을 확인",
      "expected": "ADMIN - 카드관리 계정에서 [ADMIN] 카드관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 카드관리 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 27515,
      "evidence": [
        "artifacts/logs/144-카드관리-ADMIN-excel-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/144-카드관리-ADMIN-excel-masking.md"
      ],
      "files": [],
      "role": "ADMIN - 카드관리",
      "page": "[ADMIN] 카드관리",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "ADMIN - 카드관리 계정으로 [ADMIN] 카드관리 항목을 확인",
      "expected": "ADMIN - 카드관리 계정에서 [ADMIN] 카드관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] 카드관리 / 상세 마스킹 및 PIN 원문 조회",
      "status": "BLOCKED",
      "statusText": "확인 불가",
      "durationMs": 5381,
      "evidence": [
        "artifacts/logs/145-error-context.md",
        "artifacts/traces/64-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/64-trace.zip"
      ],
      "logs": [
        "artifacts/logs/145-error-context.md"
      ],
      "files": [],
      "role": "TA - 카드관리",
      "page": "[TA] 카드관리",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "TA - 카드관리 계정으로 [TA] 카드관리 항목을 확인",
      "expected": "TA - 카드관리 계정에서 [TA] 카드관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "확인을 끝내지 못했습니다: Error: BLOCKED: TA 카드관리 상세 데이터에 마스킹 검증이 가능한 개인정보 값이 없습니다.",
      "error": "Error: BLOCKED: TA 카드관리 상세 데이터에 마스킹 검증이 가능한 개인정보 값이 없습니다.",
      "failureCategory": "blocked",
      "failureCategoryText": "확인 조건 부족",
      "reproduction": {
        "required": false,
        "reason": "확인 조건이 부족해 본 시나리오를 끝까지 실행하지 못했습니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] 카드관리 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 25887,
      "evidence": [
        "artifacts/logs/146-카드관리-TA-excel-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/146-카드관리-TA-excel-masking.md"
      ],
      "files": [],
      "role": "TA - 카드관리",
      "page": "[TA] 카드관리",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "TA - 카드관리 계정으로 [TA] 카드관리 항목을 확인",
      "expected": "TA - 카드관리 계정에서 [TA] 카드관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [CO] 카드관리 / 상세 마스킹 및 PIN 원문 조회",
      "status": "BLOCKED",
      "statusText": "확인 불가",
      "durationMs": 5237,
      "evidence": [
        "artifacts/logs/147-error-context.md",
        "artifacts/traces/65-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/65-trace.zip"
      ],
      "logs": [
        "artifacts/logs/147-error-context.md"
      ],
      "files": [],
      "role": "CO - 카드관리",
      "page": "[CO] 카드관리",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "CO - 카드관리 계정으로 [CO] 카드관리 항목을 확인",
      "expected": "CO - 카드관리 계정에서 [CO] 카드관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "확인을 끝내지 못했습니다: Error: BLOCKED: CO 카드관리 상세 데이터에 마스킹 검증이 가능한 개인정보 값이 없습니다.",
      "error": "Error: BLOCKED: CO 카드관리 상세 데이터에 마스킹 검증이 가능한 개인정보 값이 없습니다.",
      "failureCategory": "blocked",
      "failureCategoryText": "확인 조건 부족",
      "reproduction": {
        "required": false,
        "reason": "확인 조건이 부족해 본 시나리오를 끝까지 실행하지 못했습니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [CO] 카드관리 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 30044,
      "evidence": [
        "artifacts/logs/148-error-context.md",
        "artifacts/traces/66-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/66-trace.zip"
      ],
      "logs": [
        "artifacts/logs/148-error-context.md"
      ],
      "files": [],
      "role": "CO - 카드관리",
      "page": "[CO] 카드관리",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "CO - 카드관리 계정으로 [CO] 카드관리 항목을 확인",
      "expected": "CO - 카드관리 계정에서 [CO] 카드관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: 문서보관함에 tenant-id-redacted 행이 표시되어야 합니다.  expect(locator).toBeVisible() failed",
      "error": "Error: 문서보관함에 tenant-id-redacted 행이 표시되어야 합니다.  expect(locator).toBeVisible() failed",
      "failureCategory": "assertion",
      "failureCategoryText": "기대 결과와 다름",
      "reproduction": {
        "required": true,
        "reason": "화면에서 확인한 값이 체크리스트의 기대 결과와 달랐습니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"CO - 카드관리\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\"",
        "notifyMessage": "[QA 확인 요청] CO - 카드관리 / [CO] 카드관리 / Excel 기본 마스킹 및 PIN 원문 다운로드: 기대 결과와 다름 상태입니다. npm run qa:debug -- --issue \"4147\" --env \"dev\" --role \"CO - 카드관리\" --case \"Excel 기본 마스킹 및 PIN 원문 다운로드\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 사용내역 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 7246,
      "evidence": [
        "artifacts/logs/149-사용내역-ADMIN-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/149-사용내역-ADMIN-detail-masking.md"
      ],
      "files": [],
      "role": "ADMIN - 사용내역",
      "page": "[ADMIN] 사용내역",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "ADMIN - 사용내역 계정으로 [ADMIN] 사용내역 항목을 확인",
      "expected": "ADMIN - 사용내역 계정에서 [ADMIN] 사용내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] 사용내역 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 6900,
      "evidence": [
        "artifacts/logs/150-사용내역-TA-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/150-사용내역-TA-detail-masking.md"
      ],
      "files": [],
      "role": "TA - 사용내역",
      "page": "[TA] 사용내역",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "TA - 사용내역 계정으로 [TA] 사용내역 항목을 확인",
      "expected": "TA - 사용내역 계정에서 [TA] 사용내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [CO] 사용내역 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 5732,
      "evidence": [
        "artifacts/logs/151-사용내역-CO-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/151-사용내역-CO-detail-masking.md"
      ],
      "files": [],
      "role": "CO - 사용내역",
      "page": "[CO] 사용내역",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "CO - 사용내역 계정으로 [CO] 사용내역 항목을 확인",
      "expected": "CO - 사용내역 계정에서 [CO] 사용내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 비스킷카드 신청관리 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 5539,
      "evidence": [
        "artifacts/logs/152-비스킷카드-신청관리-ADMIN-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/152-비스킷카드-신청관리-ADMIN-detail-masking.md"
      ],
      "files": [],
      "role": "ADMIN - 비스킷카드 신청관리",
      "page": "[ADMIN] 비스킷카드 신청관리",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "ADMIN - 비스킷카드 신청관리 계정으로 [ADMIN] 비스킷카드 신청관리 항목을 확인",
      "expected": "ADMIN - 비스킷카드 신청관리 계정에서 [ADMIN] 비스킷카드 신청관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 비스킷카드 신청관리 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 23256,
      "evidence": [
        "artifacts/logs/153-비스킷카드-신청관리-ADMIN-excel-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/153-비스킷카드-신청관리-ADMIN-excel-masking.md"
      ],
      "files": [],
      "role": "ADMIN - 비스킷카드 신청관리",
      "page": "[ADMIN] 비스킷카드 신청관리",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "ADMIN - 비스킷카드 신청관리 계정으로 [ADMIN] 비스킷카드 신청관리 항목을 확인",
      "expected": "ADMIN - 비스킷카드 신청관리 계정에서 [ADMIN] 비스킷카드 신청관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] 비스킷카드 신청관리 / 상세 마스킹 및 PIN 원문 조회",
      "status": "BLOCKED",
      "statusText": "확인 불가",
      "durationMs": 4315,
      "evidence": [
        "artifacts/logs/154-error-context.md",
        "artifacts/traces/67-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/67-trace.zip"
      ],
      "logs": [
        "artifacts/logs/154-error-context.md"
      ],
      "files": [],
      "role": "TA - 비스킷카드 신청관리",
      "page": "[TA] 비스킷카드 신청관리",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "TA - 비스킷카드 신청관리 계정으로 [TA] 비스킷카드 신청관리 항목을 확인",
      "expected": "TA - 비스킷카드 신청관리 계정에서 [TA] 비스킷카드 신청관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "확인을 끝내지 못했습니다: Error: BLOCKED: TA 비스킷카드 신청관리 상세 데이터에 마스킹 검증이 가능한 개인정보 값이 없습니다.",
      "error": "Error: BLOCKED: TA 비스킷카드 신청관리 상세 데이터에 마스킹 검증이 가능한 개인정보 값이 없습니다.",
      "failureCategory": "blocked",
      "failureCategoryText": "확인 조건 부족",
      "reproduction": {
        "required": false,
        "reason": "확인 조건이 부족해 본 시나리오를 끝까지 실행하지 못했습니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] 비스킷카드 신청관리 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 22788,
      "evidence": [
        "artifacts/logs/155-비스킷카드-신청관리-TA-excel-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/155-비스킷카드-신청관리-TA-excel-masking.md"
      ],
      "files": [],
      "role": "TA - 비스킷카드 신청관리",
      "page": "[TA] 비스킷카드 신청관리",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "TA - 비스킷카드 신청관리 계정으로 [TA] 비스킷카드 신청관리 항목을 확인",
      "expected": "TA - 비스킷카드 신청관리 계정에서 [TA] 비스킷카드 신청관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [CO] 비스킷카드 신청관리 / 상세 마스킹 및 PIN 원문 조회",
      "status": "BLOCKED",
      "statusText": "확인 불가",
      "durationMs": 3193,
      "evidence": [
        "artifacts/logs/156-error-context.md",
        "artifacts/traces/68-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/68-trace.zip"
      ],
      "logs": [
        "artifacts/logs/156-error-context.md"
      ],
      "files": [],
      "role": "CO - 비스킷카드 신청관리",
      "page": "[CO] 비스킷카드 신청관리",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "CO - 비스킷카드 신청관리 계정으로 [CO] 비스킷카드 신청관리 항목을 확인",
      "expected": "CO - 비스킷카드 신청관리 계정에서 [CO] 비스킷카드 신청관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "확인을 끝내지 못했습니다: Error: BLOCKED: CO 비스킷카드 신청관리은 기간 확장 후에도 상세 검증 데이터가 없습니다.",
      "error": "Error: BLOCKED: CO 비스킷카드 신청관리은 기간 확장 후에도 상세 검증 데이터가 없습니다.",
      "failureCategory": "blocked",
      "failureCategoryText": "확인 조건 부족",
      "reproduction": {
        "required": false,
        "reason": "확인 조건이 부족해 본 시나리오를 끝까지 실행하지 못했습니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [CO] 비스킷카드 신청관리 / Excel 기본 마스킹 및 PIN 원문 다운로드",
      "status": "BLOCKED",
      "statusText": "확인 불가",
      "durationMs": 3137,
      "evidence": [
        "artifacts/logs/157-error-context.md",
        "artifacts/traces/69-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/69-trace.zip"
      ],
      "logs": [
        "artifacts/logs/157-error-context.md"
      ],
      "files": [],
      "role": "CO - 비스킷카드 신청관리",
      "page": "[CO] 비스킷카드 신청관리",
      "checklistItem": "Excel 기본 마스킹 및 PIN 원문 다운로드",
      "action": "CO - 비스킷카드 신청관리 계정으로 [CO] 비스킷카드 신청관리 항목을 확인",
      "expected": "CO - 비스킷카드 신청관리 계정에서 [CO] 비스킷카드 신청관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "확인을 끝내지 못했습니다: Error: BLOCKED: CO 비스킷카드 신청관리은 기간 확장 후에도 Excel 검증 데이터가 없습니다.",
      "error": "Error: BLOCKED: CO 비스킷카드 신청관리은 기간 확장 후에도 Excel 검증 데이터가 없습니다.",
      "failureCategory": "blocked",
      "failureCategoryText": "확인 조건 부족",
      "reproduction": {
        "required": false,
        "reason": "확인 조건이 부족해 본 시나리오를 끝까지 실행하지 못했습니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 레드마인티켓 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 10359,
      "evidence": [
        "artifacts/logs/158-레드마인티켓-ADMIN-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/158-레드마인티켓-ADMIN-detail-masking.md"
      ],
      "files": [],
      "role": "ADMIN - 레드마인티켓",
      "page": "[ADMIN] 레드마인티켓",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "ADMIN - 레드마인티켓 계정으로 [ADMIN] 레드마인티켓 항목을 확인",
      "expected": "ADMIN - 레드마인티켓 계정에서 [ADMIN] 레드마인티켓 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] 레드마인티켓 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 10216,
      "evidence": [
        "artifacts/logs/159-레드마인티켓-TA-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/159-레드마인티켓-TA-detail-masking.md"
      ],
      "files": [],
      "role": "TA - 레드마인티켓",
      "page": "[TA] 레드마인티켓",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "TA - 레드마인티켓 계정으로 [TA] 레드마인티켓 항목을 확인",
      "expected": "TA - 레드마인티켓 계정에서 [TA] 레드마인티켓 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 블랙리스트 관리 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 4989,
      "evidence": [
        "artifacts/logs/160-블랙리스트-관리-ADMIN-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/160-블랙리스트-관리-ADMIN-detail-masking.md"
      ],
      "files": [],
      "role": "ADMIN - 블랙리스트 관리",
      "page": "[ADMIN] 블랙리스트 관리",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "ADMIN - 블랙리스트 관리 계정으로 [ADMIN] 블랙리스트 관리 항목을 확인",
      "expected": "ADMIN - 블랙리스트 관리 계정에서 [ADMIN] 블랙리스트 관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] 블랙리스트 관리 / 상세 마스킹 및 PIN 원문 조회",
      "status": "BLOCKED",
      "statusText": "확인 불가",
      "durationMs": 3120,
      "evidence": [
        "artifacts/logs/161-error-context.md",
        "artifacts/traces/70-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/70-trace.zip"
      ],
      "logs": [
        "artifacts/logs/161-error-context.md"
      ],
      "files": [],
      "role": "TA - 블랙리스트 관리",
      "page": "[TA] 블랙리스트 관리",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "TA - 블랙리스트 관리 계정으로 [TA] 블랙리스트 관리 항목을 확인",
      "expected": "TA - 블랙리스트 관리 계정에서 [TA] 블랙리스트 관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "확인을 끝내지 못했습니다: Error: BLOCKED: TA 블랙리스트 관리은 기간 확장 후에도 상세 검증 데이터가 없습니다.",
      "error": "Error: BLOCKED: TA 블랙리스트 관리은 기간 확장 후에도 상세 검증 데이터가 없습니다.",
      "failureCategory": "blocked",
      "failureCategoryText": "확인 조건 부족",
      "reproduction": {
        "required": false,
        "reason": "확인 조건이 부족해 본 시나리오를 끝까지 실행하지 못했습니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [CO] 블랙리스트 관리 / 상세 마스킹 및 PIN 원문 조회",
      "status": "BLOCKED",
      "statusText": "확인 불가",
      "durationMs": 3581,
      "evidence": [
        "artifacts/logs/162-error-context.md",
        "artifacts/traces/71-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/71-trace.zip"
      ],
      "logs": [
        "artifacts/logs/162-error-context.md"
      ],
      "files": [],
      "role": "CO - 블랙리스트 관리",
      "page": "[CO] 블랙리스트 관리",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "CO - 블랙리스트 관리 계정으로 [CO] 블랙리스트 관리 항목을 확인",
      "expected": "CO - 블랙리스트 관리 계정에서 [CO] 블랙리스트 관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "확인을 끝내지 못했습니다: Error: BLOCKED: CO 블랙리스트 관리은 기간 확장 후에도 상세 검증 데이터가 없습니다.",
      "error": "Error: BLOCKED: CO 블랙리스트 관리은 기간 확장 후에도 상세 검증 데이터가 없습니다.",
      "failureCategory": "blocked",
      "failureCategoryText": "확인 조건 부족",
      "reproduction": {
        "required": false,
        "reason": "확인 조건이 부족해 본 시나리오를 끝까지 실행하지 못했습니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [BO] 블랙리스트 관리 / 상세 마스킹 및 PIN 원문 조회",
      "status": "BLOCKED",
      "statusText": "확인 불가",
      "durationMs": 3277,
      "evidence": [
        "artifacts/logs/163-error-context.md",
        "artifacts/traces/72-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/72-trace.zip"
      ],
      "logs": [
        "artifacts/logs/163-error-context.md"
      ],
      "files": [],
      "role": "BO - 블랙리스트 관리",
      "page": "[BO] 블랙리스트 관리",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "BO - 블랙리스트 관리 계정으로 [BO] 블랙리스트 관리 항목을 확인",
      "expected": "BO - 블랙리스트 관리 계정에서 [BO] 블랙리스트 관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "확인을 끝내지 못했습니다: Error: BLOCKED: BO 블랙리스트 관리은 기간 확장 후에도 상세 검증 데이터가 없습니다.",
      "error": "Error: BLOCKED: BO 블랙리스트 관리은 기간 확장 후에도 상세 검증 데이터가 없습니다.",
      "failureCategory": "blocked",
      "failureCategoryText": "확인 조건 부족",
      "reproduction": {
        "required": false,
        "reason": "확인 조건이 부족해 본 시나리오를 끝까지 실행하지 못했습니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 차단계좌 이체시도 내역 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 5657,
      "evidence": [
        "artifacts/logs/164-차단계좌-이체시도-내역-ADMIN-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/164-차단계좌-이체시도-내역-ADMIN-detail-masking.md"
      ],
      "files": [],
      "role": "ADMIN - 차단계좌 이체시도 내역",
      "page": "[ADMIN] 차단계좌 이체시도 내역",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "ADMIN - 차단계좌 이체시도 내역 계정으로 [ADMIN] 차단계좌 이체시도 내역 항목을 확인",
      "expected": "ADMIN - 차단계좌 이체시도 내역 계정에서 [ADMIN] 차단계좌 이체시도 내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] 차단계좌 이체시도 내역 / 상세 마스킹 및 PIN 원문 조회",
      "status": "BLOCKED",
      "statusText": "확인 불가",
      "durationMs": 3221,
      "evidence": [
        "artifacts/logs/165-error-context.md",
        "artifacts/traces/73-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/73-trace.zip"
      ],
      "logs": [
        "artifacts/logs/165-error-context.md"
      ],
      "files": [],
      "role": "TA - 차단계좌 이체시도 내역",
      "page": "[TA] 차단계좌 이체시도 내역",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "TA - 차단계좌 이체시도 내역 계정으로 [TA] 차단계좌 이체시도 내역 항목을 확인",
      "expected": "TA - 차단계좌 이체시도 내역 계정에서 [TA] 차단계좌 이체시도 내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "확인을 끝내지 못했습니다: Error: BLOCKED: TA 차단계좌 이체시도 내역은 기간 확장 후에도 상세 검증 데이터가 없습니다.",
      "error": "Error: BLOCKED: TA 차단계좌 이체시도 내역은 기간 확장 후에도 상세 검증 데이터가 없습니다.",
      "failureCategory": "blocked",
      "failureCategoryText": "확인 조건 부족",
      "reproduction": {
        "required": false,
        "reason": "확인 조건이 부족해 본 시나리오를 끝까지 실행하지 못했습니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [CO] 차단계좌 이체시도 내역 / 상세 마스킹 및 PIN 원문 조회",
      "status": "BLOCKED",
      "statusText": "확인 불가",
      "durationMs": 3151,
      "evidence": [
        "artifacts/logs/166-error-context.md",
        "artifacts/traces/74-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/74-trace.zip"
      ],
      "logs": [
        "artifacts/logs/166-error-context.md"
      ],
      "files": [],
      "role": "CO - 차단계좌 이체시도 내역",
      "page": "[CO] 차단계좌 이체시도 내역",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "CO - 차단계좌 이체시도 내역 계정으로 [CO] 차단계좌 이체시도 내역 항목을 확인",
      "expected": "CO - 차단계좌 이체시도 내역 계정에서 [CO] 차단계좌 이체시도 내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "확인을 끝내지 못했습니다: Error: BLOCKED: CO 차단계좌 이체시도 내역은 기간 확장 후에도 상세 검증 데이터가 없습니다.",
      "error": "Error: BLOCKED: CO 차단계좌 이체시도 내역은 기간 확장 후에도 상세 검증 데이터가 없습니다.",
      "failureCategory": "blocked",
      "failureCategoryText": "확인 조건 부족",
      "reproduction": {
        "required": false,
        "reason": "확인 조건이 부족해 본 시나리오를 끝까지 실행하지 못했습니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [BO] 차단계좌 이체시도 내역 / 상세 마스킹 및 PIN 원문 조회",
      "status": "BLOCKED",
      "statusText": "확인 불가",
      "durationMs": 3161,
      "evidence": [
        "artifacts/logs/167-error-context.md",
        "artifacts/traces/75-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/75-trace.zip"
      ],
      "logs": [
        "artifacts/logs/167-error-context.md"
      ],
      "files": [],
      "role": "BO - 차단계좌 이체시도 내역",
      "page": "[BO] 차단계좌 이체시도 내역",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "BO - 차단계좌 이체시도 내역 계정으로 [BO] 차단계좌 이체시도 내역 항목을 확인",
      "expected": "BO - 차단계좌 이체시도 내역 계정에서 [BO] 차단계좌 이체시도 내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "확인을 끝내지 못했습니다: Error: BLOCKED: BO 차단계좌 이체시도 내역은 기간 확장 후에도 상세 검증 데이터가 없습니다.",
      "error": "Error: BLOCKED: BO 차단계좌 이체시도 내역은 기간 확장 후에도 상세 검증 데이터가 없습니다.",
      "failureCategory": "blocked",
      "failureCategoryText": "확인 조건 부족",
      "reproduction": {
        "required": false,
        "reason": "확인 조건이 부족해 본 시나리오를 끝까지 실행하지 못했습니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] IP 차단관리 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 5619,
      "evidence": [
        "artifacts/logs/168-IP-차단관리-ADMIN-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/168-IP-차단관리-ADMIN-detail-masking.md"
      ],
      "files": [],
      "role": "ADMIN - IP 차단관리",
      "page": "[ADMIN] IP 차단관리",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "ADMIN - IP 차단관리 계정으로 [ADMIN] IP 차단관리 항목을 확인",
      "expected": "ADMIN - IP 차단관리 계정에서 [ADMIN] IP 차단관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] IP 차단관리 / 상세 마스킹 및 PIN 원문 조회",
      "status": "BLOCKED",
      "statusText": "확인 불가",
      "durationMs": 3194,
      "evidence": [
        "artifacts/logs/169-error-context.md",
        "artifacts/traces/76-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/76-trace.zip"
      ],
      "logs": [
        "artifacts/logs/169-error-context.md"
      ],
      "files": [],
      "role": "TA - IP 차단관리",
      "page": "[TA] IP 차단관리",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "TA - IP 차단관리 계정으로 [TA] IP 차단관리 항목을 확인",
      "expected": "TA - IP 차단관리 계정에서 [TA] IP 차단관리 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "확인을 끝내지 못했습니다: Error: BLOCKED: TA IP 차단관리은 기간 확장 후에도 상세 검증 데이터가 없습니다.",
      "error": "Error: BLOCKED: TA IP 차단관리은 기간 확장 후에도 상세 검증 데이터가 없습니다.",
      "failureCategory": "blocked",
      "failureCategoryText": "확인 조건 부족",
      "reproduction": {
        "required": false,
        "reason": "확인 조건이 부족해 본 시나리오를 끝까지 실행하지 못했습니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] RM 사업자조회 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 4889,
      "evidence": [
        "artifacts/logs/170-RM-사업자조회-ADMIN-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/170-RM-사업자조회-ADMIN-detail-masking.md"
      ],
      "files": [],
      "role": "ADMIN - RM 사업자조회",
      "page": "[ADMIN] RM 사업자조회",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "ADMIN - RM 사업자조회 계정으로 [ADMIN] RM 사업자조회 항목을 확인",
      "expected": "ADMIN - RM 사업자조회 계정에서 [ADMIN] RM 사업자조회 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] RM 사업자조회 / 상세 마스킹 및 PIN 원문 조회",
      "status": "BLOCKED",
      "statusText": "확인 불가",
      "durationMs": 4642,
      "evidence": [
        "artifacts/logs/171-error-context.md",
        "artifacts/traces/77-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/77-trace.zip"
      ],
      "logs": [
        "artifacts/logs/171-error-context.md"
      ],
      "files": [],
      "role": "TA - RM 사업자조회",
      "page": "[TA] RM 사업자조회",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "TA - RM 사업자조회 계정으로 [TA] RM 사업자조회 항목을 확인",
      "expected": "TA - RM 사업자조회 계정에서 [TA] RM 사업자조회 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "확인을 끝내지 못했습니다: Error: BLOCKED: TA RM 사업자조회 상세 데이터에 마스킹 검증이 가능한 개인정보 값이 없습니다.",
      "error": "Error: BLOCKED: TA RM 사업자조회 상세 데이터에 마스킹 검증이 가능한 개인정보 값이 없습니다.",
      "failureCategory": "blocked",
      "failureCategoryText": "확인 조건 부족",
      "reproduction": {
        "required": false,
        "reason": "확인 조건이 부족해 본 시나리오를 끝까지 실행하지 못했습니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [CO] RM 사업자조회 / 상세 마스킹 및 PIN 원문 조회",
      "status": "BLOCKED",
      "statusText": "확인 불가",
      "durationMs": 3180,
      "evidence": [
        "artifacts/logs/172-error-context.md",
        "artifacts/traces/78-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/78-trace.zip"
      ],
      "logs": [
        "artifacts/logs/172-error-context.md"
      ],
      "files": [],
      "role": "CO - RM 사업자조회",
      "page": "[CO] RM 사업자조회",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "CO - RM 사업자조회 계정으로 [CO] RM 사업자조회 항목을 확인",
      "expected": "CO - RM 사업자조회 계정에서 [CO] RM 사업자조회 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "확인을 끝내지 못했습니다: Error: BLOCKED: CO RM 사업자조회은 기간 확장 후에도 상세 검증 데이터가 없습니다.",
      "error": "Error: BLOCKED: CO RM 사업자조회은 기간 확장 후에도 상세 검증 데이터가 없습니다.",
      "failureCategory": "blocked",
      "failureCategoryText": "확인 조건 부족",
      "reproduction": {
        "required": false,
        "reason": "확인 조건이 부족해 본 시나리오를 끝까지 실행하지 못했습니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [BO] RM 사업자조회 / 상세 마스킹 및 PIN 원문 조회",
      "status": "BLOCKED",
      "statusText": "확인 불가",
      "durationMs": 3297,
      "evidence": [
        "artifacts/logs/173-error-context.md",
        "artifacts/traces/79-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/79-trace.zip"
      ],
      "logs": [
        "artifacts/logs/173-error-context.md"
      ],
      "files": [],
      "role": "BO - RM 사업자조회",
      "page": "[BO] RM 사업자조회",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "BO - RM 사업자조회 계정으로 [BO] RM 사업자조회 항목을 확인",
      "expected": "BO - RM 사업자조회 계정에서 [BO] RM 사업자조회 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "확인을 끝내지 못했습니다: Error: BLOCKED: BO RM 사업자조회은 기간 확장 후에도 상세 검증 데이터가 없습니다.",
      "error": "Error: BLOCKED: BO RM 사업자조회은 기간 확장 후에도 상세 검증 데이터가 없습니다.",
      "failureCategory": "blocked",
      "failureCategoryText": "확인 조건 부족",
      "reproduction": {
        "required": false,
        "reason": "확인 조건이 부족해 본 시나리오를 끝까지 실행하지 못했습니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [ADMIN] 텔레그램 발송 내역 / 상세 마스킹 및 PIN 원문 조회",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 5184,
      "evidence": [
        "artifacts/logs/174-텔레그램-발송-내역-ADMIN-detail-masking.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/174-텔레그램-발송-내역-ADMIN-detail-masking.md"
      ],
      "files": [],
      "role": "ADMIN - 텔레그램 발송 내역",
      "page": "[ADMIN] 텔레그램 발송 내역",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "ADMIN - 텔레그램 발송 내역 계정으로 [ADMIN] 텔레그램 발송 내역 항목을 확인",
      "expected": "ADMIN - 텔레그램 발송 내역 계정에서 [ADMIN] 텔레그램 발송 내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [TA] 텔레그램 발송 내역 / 상세 마스킹 및 PIN 원문 조회",
      "status": "BLOCKED",
      "statusText": "확인 불가",
      "durationMs": 16103,
      "evidence": [
        "artifacts/logs/175-error-context.md",
        "artifacts/traces/80-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/80-trace.zip"
      ],
      "logs": [
        "artifacts/logs/175-error-context.md"
      ],
      "files": [],
      "role": "TA - 텔레그램 발송 내역",
      "page": "[TA] 텔레그램 발송 내역",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "TA - 텔레그램 발송 내역 계정으로 [TA] 텔레그램 발송 내역 항목을 확인",
      "expected": "TA - 텔레그램 발송 내역 계정에서 [TA] 텔레그램 발송 내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "확인을 끝내지 못했습니다: Error: BLOCKED: TA 텔레그램 발송 내역 상세 데이터에 마스킹 검증이 가능한 개인정보 값이 없습니다.",
      "error": "Error: BLOCKED: TA 텔레그램 발송 내역 상세 데이터에 마스킹 검증이 가능한 개인정보 값이 없습니다.",
      "failureCategory": "blocked",
      "failureCategoryText": "확인 조건 부족",
      "reproduction": {
        "required": false,
        "reason": "확인 조건이 부족해 본 시나리오를 끝까지 실행하지 못했습니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [CO] 텔레그램 발송 내역 / 상세 마스킹 및 PIN 원문 조회",
      "status": "BLOCKED",
      "statusText": "확인 불가",
      "durationMs": 5217,
      "evidence": [
        "artifacts/logs/176-error-context.md",
        "artifacts/traces/81-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/81-trace.zip"
      ],
      "logs": [
        "artifacts/logs/176-error-context.md"
      ],
      "files": [],
      "role": "CO - 텔레그램 발송 내역",
      "page": "[CO] 텔레그램 발송 내역",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "CO - 텔레그램 발송 내역 계정으로 [CO] 텔레그램 발송 내역 항목을 확인",
      "expected": "CO - 텔레그램 발송 내역 계정에서 [CO] 텔레그램 발송 내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "확인을 끝내지 못했습니다: Error: BLOCKED: CO 텔레그램 발송 내역은 기간 확장 후에도 상세 검증 데이터가 없습니다.",
      "error": "Error: BLOCKED: CO 텔레그램 발송 내역은 기간 확장 후에도 상세 검증 데이터가 없습니다.",
      "failureCategory": "blocked",
      "failureCategoryText": "확인 조건 부족",
      "reproduction": {
        "required": false,
        "reason": "확인 조건이 부족해 본 시나리오를 끝까지 실행하지 못했습니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4147/dev/privacy-masking-regression.spec.ts / [4147][dev] [QA] 개인정보 마스킹 및 원문 조회 역할별 회귀 검증 / [BO] 텔레그램 발송 내역 / 상세 마스킹 및 PIN 원문 조회",
      "status": "BLOCKED",
      "statusText": "확인 불가",
      "durationMs": 3094,
      "evidence": [
        "artifacts/logs/177-error-context.md",
        "artifacts/traces/82-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/82-trace.zip"
      ],
      "logs": [
        "artifacts/logs/177-error-context.md"
      ],
      "files": [],
      "role": "BO - 텔레그램 발송 내역",
      "page": "[BO] 텔레그램 발송 내역",
      "checklistItem": "상세 마스킹 및 PIN 원문 조회",
      "action": "BO - 텔레그램 발송 내역 계정으로 [BO] 텔레그램 발송 내역 항목을 확인",
      "expected": "BO - 텔레그램 발송 내역 계정에서 [BO] 텔레그램 발송 내역 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "확인을 끝내지 못했습니다: Error: BLOCKED: BO 텔레그램 발송 내역은 기간 확장 후에도 상세 검증 데이터가 없습니다.",
      "error": "Error: BLOCKED: BO 텔레그램 발송 내역은 기간 확장 후에도 상세 검증 데이터가 없습니다.",
      "failureCategory": "blocked",
      "failureCategoryText": "확인 조건 부족",
      "reproduction": {
        "required": false,
        "reason": "확인 조건이 부족해 본 시나리오를 끝까지 실행하지 못했습니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    }
  ]
}
