{
  "issueId": "4104",
  "environment": "dev",
  "generatedAt": "2026-09-08T12:02:19+09:00",
  "sourceResult": "qa-results redacted from tracked output",
  "timings": {
    "issueId": "4104",
    "environment": "dev",
    "generatedAt": "2026-09-08T02:25:52.198Z",
    "exitStatus": 1,
    "timings": [
      {
        "name": "qa:run",
        "startedAt": "2026-09-08T02:22:35.105Z",
        "detail": {
          "issueId": "4104",
          "environment": "dev",
          "exitStatus": 1
        },
        "finishedAt": "2026-09-08T02:25:52.197Z",
        "durationMs": 197092,
        "status": "failed"
      },
      {
        "name": "prepare-results",
        "startedAt": "2026-09-08T02:22:35.106Z",
        "detail": {},
        "finishedAt": "2026-09-08T02:22:35.107Z",
        "durationMs": 1,
        "status": "ok"
      },
      {
        "name": "auth-refresh",
        "startedAt": "2026-09-08T02:22:35.107Z",
        "detail": {},
        "finishedAt": "2026-09-08T02:22:35.107Z",
        "durationMs": 0,
        "status": "ok"
      },
      {
        "name": "playwright",
        "startedAt": "2026-09-08T02:22:35.107Z",
        "detail": {
          "command": "npx playwright test qa/issues/4104/dev --trace retain-on-failure",
          "exitStatus": 1
        },
        "finishedAt": "2026-09-08T02:25:52.197Z",
        "durationMs": 197090,
        "status": "failed"
      }
    ]
  },
  "summary": {
    "status": "FAIL",
    "passed": 0,
    "failed": 3,
    "skipped": 0,
    "blocked": 1,
    "flaky": 0,
    "durationMs": 196271
  },
  "rows": [
    {
      "title": "4104/dev/duplicate-login-second-factor.spec.ts / [4104][dev] SMS/Email 2차 인증 중복 로그인 강제로그인 모달 검증 / jjm_email: Email 2차 인증으로 일반/중복 로그인을 완료하고 강제로그인 후 현재 세션 활성화와 기존 세션 종료를 확인",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 111771,
      "evidence": [
        "artifacts/logs/01-email-duplicate-result.md",
        "artifacts/screenshots/01-email-duplicate-result.png",
        "artifacts/screenshots/02-screenshot.png",
        "artifacts/screenshots/03-screenshot.png",
        "artifacts/logs/02-error-context.md",
        "artifacts/traces/01-trace.zip"
      ],
      "screenshots": [
        "artifacts/screenshots/01-email-duplicate-result.png",
        "artifacts/screenshots/02-screenshot.png",
        "artifacts/screenshots/03-screenshot.png"
      ],
      "traces": [
        "artifacts/traces/01-trace.zip"
      ],
      "logs": [
        "artifacts/logs/01-email-duplicate-result.md",
        "artifacts/logs/02-error-context.md"
      ],
      "files": [],
      "role": "ADMIN",
      "page": "개발계 어드민 로그인",
      "checklistItem": "jjm_email: Email 2차 인증으로 일반/중복 로그인을 완료하고 강제로그인 후 현재 세션 활성화와 기존 세션 종료를 확인",
      "action": "ADMIN 계정으로 개발계 어드민 1차 로그인 세션을 유지한 상태에서 같은 계정의 독립 브라우저 로그인을 2차 인증까지 완료해 강제로그인 모달과 기존 세션 종료 여부를 확인",
      "expected": "ADMIN 계정에서 개발계 어드민 로그인 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: 이메일 2차 인증 중복 로그인 시 강제로그인 확인 모달이 단독으로 표시되어야 합니다.  expect(received).toBe(expected) // Object.is equality",
      "error": "Error: 이메일 2차 인증 중복 로그인 시 강제로그인 확인 모달이 단독으로 표시되어야 합니다.  expect(received).toBe(expected) // Object.is equality",
      "failureCategory": "assertion",
      "failureCategoryText": "기대 결과와 다름",
      "reproduction": {
        "required": true,
        "reason": "화면에서 확인한 값이 체크리스트의 기대 결과와 달랐습니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4104\" --env \"dev\" --role \"ADMIN\" --case \"jjm_email: Email 2차 인증으로 일반/중복 로그인을 완료하고 강제로그인 후 현재 세션 활성화와 기존 세션 종료를 확인\"",
        "notifyMessage": "[QA 확인 요청] ADMIN / 개발계 어드민 로그인 / jjm_email: Email 2차 인증으로 일반/중복 로그인을 완료하고 강제로그인 후 현재 세션 활성화와 기존 세션 종료를 확인: 기대 결과와 다름 상태입니다. npm run qa:debug -- --issue \"4104\" --env \"dev\" --role \"ADMIN\" --case \"jjm_email: Email 2차 인증으로 일반/중복 로그인을 완료하고 강제로그인 후 현재 세션 활성화와 기존 세션 종료를 확인\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4104/dev/duplicate-login-second-factor.spec.ts / [4104][dev] SMS/Email 2차 인증 중복 로그인 강제로그인 모달 검증 / jjm_sms: SMS 2차 인증으로 일반/중복 로그인을 완료하고 강제로그인 후 현재 세션 활성화와 기존 세션 종료를 확인",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 67398,
      "evidence": [
        "artifacts/screenshots/04-screenshot.png",
        "artifacts/screenshots/05-screenshot.png",
        "artifacts/logs/03-error-context.md",
        "artifacts/traces/02-trace.zip",
        "artifacts/logs/04-sms-duplicate-session-verification.md"
      ],
      "screenshots": [
        "artifacts/screenshots/04-screenshot.png",
        "artifacts/screenshots/05-screenshot.png"
      ],
      "traces": [
        "artifacts/traces/02-trace.zip"
      ],
      "logs": [
        "artifacts/logs/03-error-context.md",
        "artifacts/logs/04-sms-duplicate-session-verification.md"
      ],
      "files": [],
      "role": "ADMIN",
      "page": "개발계 어드민 로그인",
      "checklistItem": "jjm_sms: SMS 2차 인증으로 일반/중복 로그인을 완료하고 강제로그인 후 현재 세션 활성화와 기존 세션 종료를 확인",
      "action": "ADMIN 계정으로 개발계 어드민 1차 로그인 세션을 유지한 상태에서 같은 계정의 독립 브라우저 로그인을 2차 인증까지 완료해 강제로그인 모달과 기존 세션 종료 여부를 확인",
      "expected": "ADMIN 계정에서 개발계 어드민 로그인 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: SMS 2차 인증 중복 로그인 후 강제로그인 확인 모달 없이 두 번째 브라우저가 홈에 진입했고, 기존 로그인 세션도 새로고침 후 유지되었습니다.",
      "error": "Error: SMS 2차 인증 중복 로그인 후 강제로그인 확인 모달 없이 두 번째 브라우저가 홈에 진입했고, 기존 로그인 세션도 새로고침 후 유지되었습니다.",
      "failureCategory": "assertion",
      "failureCategoryText": "기대 결과와 다름",
      "reproduction": {
        "required": true,
        "reason": "화면에서 확인한 값이 체크리스트의 기대 결과와 달랐습니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4104\" --env \"dev\" --role \"ADMIN\" --case \"jjm_sms: SMS 2차 인증으로 일반/중복 로그인을 완료하고 강제로그인 후 현재 세션 활성화와 기존 세션 종료를 확인\"",
        "notifyMessage": "[QA 확인 요청] ADMIN / 개발계 어드민 로그인 / jjm_sms: SMS 2차 인증으로 일반/중복 로그인을 완료하고 강제로그인 후 현재 세션 활성화와 기존 세션 종료를 확인: 기대 결과와 다름 상태입니다. npm run qa:debug -- --issue \"4104\" --env \"dev\" --role \"ADMIN\" --case \"jjm_sms: SMS 2차 인증으로 일반/중복 로그인을 완료하고 강제로그인 후 현재 세션 활성화와 기존 세션 종료를 확인\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4104/dev/duplicate-login-second-factor.spec.ts / [4104][dev] SMS/Email 2차 인증 중복 로그인 강제로그인 모달 검증 / jjm_pin: PIN 2차 인증으로 일반/중복 로그인을 완료하고 강제로그인 후 현재 세션 활성화와 기존 세션 종료를 확인",
      "status": "FAIL",
      "statusText": "실패",
      "durationMs": 14304,
      "evidence": [
        "artifacts/logs/05-pin-duplicate-result.md",
        "artifacts/screenshots/06-pin-duplicate-result.png",
        "artifacts/screenshots/07-screenshot.png",
        "artifacts/screenshots/08-screenshot.png",
        "artifacts/logs/06-error-context.md",
        "artifacts/traces/03-trace.zip"
      ],
      "screenshots": [
        "artifacts/screenshots/06-pin-duplicate-result.png",
        "artifacts/screenshots/07-screenshot.png",
        "artifacts/screenshots/08-screenshot.png"
      ],
      "traces": [
        "artifacts/traces/03-trace.zip"
      ],
      "logs": [
        "artifacts/logs/05-pin-duplicate-result.md",
        "artifacts/logs/06-error-context.md"
      ],
      "files": [],
      "role": "ADMIN",
      "page": "개발계 어드민 로그인",
      "checklistItem": "jjm_pin: PIN 2차 인증으로 일반/중복 로그인을 완료하고 강제로그인 후 현재 세션 활성화와 기존 세션 종료를 확인",
      "action": "ADMIN 계정으로 개발계 어드민 1차 로그인 세션을 유지한 상태에서 같은 계정의 독립 브라우저 로그인을 2차 인증까지 완료해 강제로그인 모달과 기존 세션 종료 여부를 확인",
      "expected": "ADMIN 계정에서 개발계 어드민 로그인 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "기대한 동작과 달랐습니다: Error: PIN 2차 인증 중복 로그인 시 강제로그인 확인 모달이 단독으로 표시되어야 합니다.  expect(received).toBe(expected) // Object.is equality",
      "error": "Error: PIN 2차 인증 중복 로그인 시 강제로그인 확인 모달이 단독으로 표시되어야 합니다.  expect(received).toBe(expected) // Object.is equality",
      "failureCategory": "assertion",
      "failureCategoryText": "기대 결과와 다름",
      "reproduction": {
        "required": true,
        "reason": "화면에서 확인한 값이 체크리스트의 기대 결과와 달랐습니다.",
        "debugCommand": "npm run qa:debug -- --issue \"4104\" --env \"dev\" --role \"ADMIN\" --case \"jjm_pin: PIN 2차 인증으로 일반/중복 로그인을 완료하고 강제로그인 후 현재 세션 활성화와 기존 세션 종료를 확인\"",
        "notifyMessage": "[QA 확인 요청] ADMIN / 개발계 어드민 로그인 / jjm_pin: PIN 2차 인증으로 일반/중복 로그인을 완료하고 강제로그인 후 현재 세션 활성화와 기존 세션 종료를 확인: 기대 결과와 다름 상태입니다. npm run qa:debug -- --issue \"4104\" --env \"dev\" --role \"ADMIN\" --case \"jjm_pin: PIN 2차 인증으로 일반/중복 로그인을 완료하고 강제로그인 후 현재 세션 활성화와 기존 세션 종료를 확인\" 로 동일 계정과 항목을 다시 열어 확인하세요.",
        "manualSteps": [
          "작업자가 위 명령을 실행하면 대상 계정의 로그인 세션을 새로 만든 뒤 브라우저가 열립니다.",
          "브라우저에서 자동화가 멈춘 화면, 현재 URL, 화면 문구, 다운로드 알림 또는 문서보관함 상태를 확인합니다.",
          "확인한 화면과 필요한 조치 내용을 Redmine/GitHub QA 이슈에 남깁니다."
        ]
      }
    },
    {
      "title": "4104/dev/duplicate-login-second-factor.spec.ts / [4104][dev] SMS/Email 2차 인증 중복 로그인 강제로그인 모달 검증 / Email/SMS 강제로그인 확인 모달의 화면 및 문구가 기존 PIN 모달과 동일한지 확인",
      "status": "BLOCKED",
      "statusText": "확인 불가",
      "durationMs": 1,
      "evidence": [
        "artifacts/logs/07-force-modal-copy-comparison.md",
        "artifacts/logs/08-error-context.md",
        "artifacts/traces/04-trace.zip"
      ],
      "screenshots": [],
      "traces": [
        "artifacts/traces/04-trace.zip"
      ],
      "logs": [
        "artifacts/logs/07-force-modal-copy-comparison.md",
        "artifacts/logs/08-error-context.md"
      ],
      "files": [],
      "role": "ADMIN",
      "page": "[4104][dev] SMS/Email 2차 인증 중복 로그인 강제로그인 모달 검증",
      "checklistItem": "Email/SMS 강제로그인 확인 모달의 화면 및 문구가 기존 PIN 모달과 동일한지 확인",
      "action": "ADMIN 계정으로 [4104][dev] SMS/Email 2차 인증 중복 로그인 강제로그인 모달 검증 항목을 확인",
      "expected": "ADMIN 계정에서 [4104][dev] SMS/Email 2차 인증 중복 로그인 강제로그인 모달 검증 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "확인을 끝내지 못했습니다: Error: BLOCKED: Email/SMS/PIN 중 하나 이상에서 강제로그인 모달이 노출되지 않아 화면 및 문구를 비교할 수 없습니다.",
      "error": "Error: BLOCKED: Email/SMS/PIN 중 하나 이상에서 강제로그인 모달이 노출되지 않아 화면 및 문구를 비교할 수 없습니다.",
      "failureCategory": "blocked",
      "failureCategoryText": "확인 조건 부족",
      "reproduction": {
        "required": false,
        "reason": "확인 조건이 부족해 본 시나리오를 끝까지 실행하지 못했습니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    }
  ]
}
