{
  "issueId": "4071",
  "environment": "dev",
  "generatedAt": "2026-09-11T09:37:58+09:00",
  "sourceResult": "qa-results redacted from tracked output",
  "timings": {
    "issueId": "4071",
    "environment": "dev",
    "generatedAt": "2026-09-10T15:36:50.028Z",
    "exitStatus": 0,
    "timings": [
      {
        "name": "qa:run",
        "startedAt": "2026-09-10T15:35:00.350Z",
        "detail": {
          "issueId": "4071",
          "environment": "dev",
          "exitStatus": 0
        },
        "finishedAt": "2026-09-10T15:36:50.027Z",
        "durationMs": 109677,
        "status": "ok"
      },
      {
        "name": "prepare-results",
        "startedAt": "2026-09-10T15:35:00.351Z",
        "detail": {},
        "finishedAt": "2026-09-10T15:35:00.359Z",
        "durationMs": 8,
        "status": "ok"
      },
      {
        "name": "auth-refresh",
        "startedAt": "2026-09-10T15:35:00.359Z",
        "detail": {},
        "finishedAt": "2026-09-10T15:35:04.895Z",
        "durationMs": 4536,
        "status": "ok"
      },
      {
        "name": "auth-refresh:admin/dev/ADMIN",
        "startedAt": "2026-09-10T15:35:00.360Z",
        "detail": {
          "application": "admin",
          "role": "ADMIN",
          "businessRole": "ADMIN"
        },
        "finishedAt": "2026-09-10T15:35:04.895Z",
        "durationMs": 4535,
        "status": "ok"
      },
      {
        "name": "auth-refresh:admin/dev/TA",
        "startedAt": "2026-09-10T15:35:00.365Z",
        "detail": {
          "application": "admin",
          "role": "TA",
          "businessRole": "TA"
        },
        "finishedAt": "2026-09-10T15:35:04.692Z",
        "durationMs": 4327,
        "status": "ok"
      },
      {
        "name": "playwright",
        "startedAt": "2026-09-10T15:35:04.896Z",
        "detail": {
          "command": "npx playwright test qa/issues/4071/dev --trace retain-on-failure",
          "exitStatus": 0
        },
        "finishedAt": "2026-09-10T15:36:50.027Z",
        "durationMs": 105131,
        "status": "ok"
      }
    ]
  },
  "summary": {
    "status": "PASS",
    "passed": 11,
    "failed": 0,
    "skipped": 0,
    "blocked": 0,
    "flaky": 0,
    "durationMs": 707578
  },
  "rows": [
    {
      "title": "4071/dev/ban-log-user-id-masking.spec.ts / [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 / 1. ADMIN과 TA 모두 BAN 로그 최초 조회 시 사용자 ID가 마스킹되는지 확인",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 8084,
      "evidence": [
        "artifacts/logs/01-initial-masked.md",
        "artifacts/screenshots/01-initial-masked-screenshot.png",
        "artifacts/logs/02-initial-masked.md",
        "artifacts/screenshots/02-initial-masked-screenshot.png"
      ],
      "screenshots": [
        "artifacts/screenshots/01-initial-masked-screenshot.png",
        "artifacts/screenshots/02-initial-masked-screenshot.png"
      ],
      "traces": [],
      "logs": [
        "artifacts/logs/01-initial-masked.md",
        "artifacts/logs/02-initial-masked.md"
      ],
      "files": [],
      "role": "전체",
      "page": "[4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회",
      "checklistItem": "1. ADMIN과 TA 모두 BAN 로그 최초 조회 시 사용자 ID가 마스킹되는지 확인",
      "action": "전체 계정으로 [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 항목을 확인",
      "expected": "전체 계정에서 [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4071/dev/ban-log-user-id-masking.spec.ts / [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 / 2. 인증 전 검색, 새로고침, 페이지 이동 후에도 마스킹이 유지되는지 확인",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 37231,
      "evidence": [
        "artifacts/logs/03-masked-search-refresh-page.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/03-masked-search-refresh-page.md"
      ],
      "files": [],
      "role": "전체",
      "page": "[4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회",
      "checklistItem": "2. 인증 전 검색, 새로고침, 페이지 이동 후에도 마스킹이 유지되는지 확인",
      "action": "ADMIN·TA에서 2026-04-01~2026-09-11로 조회한 뒤 인증 전 검색, 무한 스크롤 page=1 적재, 새로고침을 확인",
      "expected": "검색·무한 스크롤 추가 적재·새로고침 후에도 사용자 ID가 마스킹 상태로 유지되어야 합니다.",
      "actual": "ADMIN과 TA 모두 page=1 추가 적재가 발생했고 전 과정에서 사용자 ID 마스킹이 유지되었습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4071/dev/ban-log-user-id-masking.spec.ts / [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 / 3. ADMIN(NONE) 원문 조회는 인증창 없이 즉시 원문 표시 및 버튼 전환",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 4196,
      "evidence": [
        "artifacts/logs/04-none-immediate-original.md",
        "artifacts/screenshots/05-none-immediate-original-screenshot.png"
      ],
      "screenshots": [
        "artifacts/screenshots/05-none-immediate-original-screenshot.png"
      ],
      "traces": [],
      "logs": [
        "artifacts/logs/04-none-immediate-original.md"
      ],
      "files": [],
      "role": "전체",
      "page": "[4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회",
      "checklistItem": "3. ADMIN(NONE) 원문 조회는 인증창 없이 즉시 원문 표시 및 버튼 전환",
      "action": "전체 계정으로 [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 항목을 확인",
      "expected": "전체 계정에서 [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4071/dev/ban-log-user-id-masking.spec.ts / [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 / 4. ADMIN 원문 상태에서 검색/페이지 이동 후 유효 세션 동안 원문 유지",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 10324,
      "evidence": [
        "artifacts/logs/05-original-search-page.md",
        "artifacts/screenshots/06-original-after-search-screenshot.png"
      ],
      "screenshots": [
        "artifacts/screenshots/06-original-after-search-screenshot.png"
      ],
      "traces": [],
      "logs": [
        "artifacts/logs/05-original-search-page.md"
      ],
      "files": [],
      "role": "전체",
      "page": "[4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회",
      "checklistItem": "4. ADMIN 원문 상태에서 검색/페이지 이동 후 유효 세션 동안 원문 유지",
      "action": "ADMIN 원문 전환 후 2026-04-01~2026-09-11로 검색하고 무한 스크롤 page=1 적재를 확인",
      "expected": "검색과 무한 스크롤 추가 적재 후에도 사용자 ID 원문 상태가 유지되어야 합니다.",
      "actual": "검색 후와 page=1 추가 적재 후 모두 사용자 ID 원문 상태가 유지되었습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4071/dev/ban-log-user-id-masking.spec.ts / [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 / 5. ADMIN 수동 마스킹 후 재노출 방지 및 재요청 시에만 원문 전환",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 12317,
      "evidence": [
        "artifacts/logs/06-manual-remask.md",
        "artifacts/screenshots/07-manual-remask-reopen-screenshot.png"
      ],
      "screenshots": [
        "artifacts/screenshots/07-manual-remask-reopen-screenshot.png"
      ],
      "traces": [],
      "logs": [
        "artifacts/logs/06-manual-remask.md"
      ],
      "files": [],
      "role": "전체",
      "page": "[4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회",
      "checklistItem": "5. ADMIN 수동 마스킹 후 재노출 방지 및 재요청 시에만 원문 전환",
      "action": "전체 계정으로 [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 항목을 확인",
      "expected": "전체 계정에서 [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4071/dev/ban-log-user-id-masking.spec.ts / [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 / 6. TA(EMAIL) 원문 조회 시 인증창, 마스킹 이메일, 유효시간 표시",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 6247,
      "evidence": [
        "artifacts/logs/07-email-auth-dialog.md",
        "artifacts/screenshots/08-email-auth-dialog-screenshot.png"
      ],
      "screenshots": [
        "artifacts/screenshots/08-email-auth-dialog-screenshot.png"
      ],
      "traces": [],
      "logs": [
        "artifacts/logs/07-email-auth-dialog.md"
      ],
      "files": [],
      "role": "전체",
      "page": "[4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회",
      "checklistItem": "6. TA(EMAIL) 원문 조회 시 인증창, 마스킹 이메일, 유효시간 표시",
      "action": "전체 계정으로 [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 항목을 확인",
      "expected": "전체 계정에서 [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4071/dev/ban-log-user-id-masking.spec.ts / [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 / 7. TA 빈 값/6자리 미만/잘못된 인증번호 거부 및 원문 미노출",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 7190,
      "evidence": [
        "artifacts/logs/08-email-auth-validation.md",
        "artifacts/screenshots/09-email-auth-invalid-screenshot.png"
      ],
      "screenshots": [
        "artifacts/screenshots/09-email-auth-invalid-screenshot.png"
      ],
      "traces": [],
      "logs": [
        "artifacts/logs/08-email-auth-validation.md"
      ],
      "files": [],
      "role": "전체",
      "page": "[4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회",
      "checklistItem": "7. TA 빈 값/6자리 미만/잘못된 인증번호 거부 및 원문 미노출",
      "action": "전체 계정으로 [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 항목을 확인",
      "expected": "전체 계정에서 [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4071/dev/ban-log-user-id-masking.spec.ts / [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 / 8-10. TA 정상 이메일 인증 후 원문 유지 및 수동 마스킹 세션 폐기",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 0,
      "evidence": [
        "artifacts/logs/11-ta-auth-success-remask.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/11-ta-auth-success-remask.md"
      ],
      "files": [],
      "role": "전체",
      "page": "[4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회",
      "checklistItem": "8-10. TA 정상 이메일 인증 후 원문 유지 및 수동 마스킹 세션 폐기",
      "action": "TA 이메일 인증 성공 후 원문 표시와 검색 유지 상태를 확인하고 사용자 ID 마스킹으로 서버 인증 세션 폐기를 요청",
      "expected": "정상 인증 후 원문이 유지되고 수동 마스킹 시 DELETE 인증 세션 폐기 요청이 HTTP 200으로 성공해야 합니다.",
      "actual": "정상 인증, 검색 후 원문 유지, 인증 세션 DELETE HTTP 200, 즉시 재마스킹을 확인했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "수정 후 정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4071/dev/ban-log-user-id-masking.spec.ts / [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 / 11. TA 미인증 인증창 종료 후 재요청 시 새 인증 절차 시작",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 16259,
      "evidence": [
        "artifacts/logs/09-email-auth-restart.md",
        "artifacts/screenshots/10-email-auth-restart-screenshot.png"
      ],
      "screenshots": [
        "artifacts/screenshots/10-email-auth-restart-screenshot.png"
      ],
      "traces": [],
      "logs": [
        "artifacts/logs/09-email-auth-restart.md"
      ],
      "files": [],
      "role": "전체",
      "page": "[4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회",
      "checklistItem": "11. TA 미인증 인증창 종료 후 재요청 시 새 인증 절차 시작",
      "action": "전체 계정으로 [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 항목을 확인",
      "expected": "전체 계정에서 [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4071/dev/ban-log-user-id-masking.spec.ts / [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 / 12. 인증 세션 만료 후 자동 마스킹 전환 및 안내 확인",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 603039,
      "evidence": [
        "artifacts/logs/12-ta-expiry-retest.md"
      ],
      "screenshots": [],
      "traces": [],
      "logs": [
        "artifacts/logs/12-ta-expiry-retest.md"
      ],
      "files": [],
      "role": "TA",
      "page": "[4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회",
      "checklistItem": "12. 인증 세션 만료 후 자동 마스킹 전환 및 안내 확인",
      "action": "2026-04-01~2026-09-11 범위의 BAN 로그 1,305건을 조회하고 TA 이메일 인증 성공 후 실제 10분 동안 자동 재마스킹을 감시",
      "expected": "인증 직후 원문이 표시되고 10분 만료 후 자동 마스킹 및 안내가 나타나야 합니다.",
      "actual": "인증 직후 원문이 표시되었고 603,039ms 후 자동 재마스킹, 원문 조회 버튼 복구, 만료 안내를 확인했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "4071/dev/ban-log-user-id-masking.spec.ts / [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 / 13. ADMIN과 TA의 NONE/EMAIL 정책이 뒤바뀌지 않는지 확인",
      "status": "PASS",
      "statusText": "통과",
      "durationMs": 12948,
      "evidence": [
        "artifacts/screenshots/11-policy-not-swapped-screenshot.png",
        "artifacts/screenshots/12-policy-not-swapped-screenshot.png",
        "artifacts/logs/10-policy-not-swapped.md"
      ],
      "screenshots": [
        "artifacts/screenshots/11-policy-not-swapped-screenshot.png",
        "artifacts/screenshots/12-policy-not-swapped-screenshot.png"
      ],
      "traces": [],
      "logs": [
        "artifacts/logs/10-policy-not-swapped.md"
      ],
      "files": [],
      "role": "전체",
      "page": "[4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회",
      "checklistItem": "13. ADMIN과 TA의 NONE/EMAIL 정책이 뒤바뀌지 않는지 확인",
      "action": "전체 계정으로 [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 항목을 확인",
      "expected": "전체 계정에서 [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 일치했습니다.",
      "error": "",
      "failureCategory": "none",
      "failureCategoryText": "문제 없음",
      "reproduction": {
        "required": false,
        "reason": "정상 확인된 항목입니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    }
  ]
}
