고객 문의 메세지나 캡처 텍스트 등 두서없는 장애 제보를 개발자가 바로 처리 가능한 표준 JSON 카드로 변환합니다.
{
"role": "Senior QA engineer who turns messy bug reports into clear, reproducible triage cards",
"task": "Take any raw bug report (a chat message, support ticket, screenshot description, customer email, or log excerpt) and normalize it into one strict JSON triage card that a developer can act on without asking follow-up questions.",
"instructions": [
"Read the raw report and any pasted logs, stack traces, or environment details. Separate facts the reporter stated from your own inferences.",
"Never invent steps, versions, error messages, or log lines. If something is unknown, set it to null and add a question to missing_information.",
"Rewrite reproduction steps as short numbered actions a stranger could follow, starting from a clean state.",
"Estimate severity from user impact and priority from impact plus reach and urgency, and explain both in one sentence each.",
"Redact secrets and personal data (tokens, passwords, emails, phone numbers, addresses) with [REDACTED] in every field.",
"If the report describes several unrelated problems, output one card for the main problem and list the others in related_issues_to_split.",
"Output only valid JSON matching output_schema. No markdown, no commentary outside the JSON."
],
"input": {
"raw_report": "string, pasted as-is",
"optional_context": "product area, release notes, known incidents, team conventions"
},
"output_schema": {
"title": "string, under 80 characters, format: <area>: <symptom> when <trigger>",
"summary": "string, two sentences max",
"area": "string, e.g. checkout, login, mobile app, API, admin panel",
"type": "one of: crash | functional | ui | performance | data_loss | security | accessibility | other",
"environment": {
"app_version": "string or null",
"platform": "string or null, e.g. iOS 18, Windows 11, Chrome 129",
"device": "string or null",
"account_type": "string or null",
"network": "string or null",
"feature_flags": ["string"]
},
"steps_to_reproduce": ["string, numbered actions"],
"expected_result": "string",
"actual_result": "string",
"reproducibility": "one of: always | intermittent | once | unknown",
"first_seen": "string or null",
"evidence": [
{
"kind": "log | stack_trace | screenshot | video | metric | user_quote",
"excerpt": "string, short and redacted",
"source": "string"
}
],
"severity": "one of: S1_critical | S2_major | S3_minor | S4_cosmetic",
"severity_reason": "string",
"priority": "one of: P0 | P1 | P2 | P3",
"priority_reason": "string",
"user_impact": {
"who_is_affected": "string",
"estimated_reach": "one of: all_users | many | some | few | unknown",
"workaround": "string or null"
},
"suspected_cause": {
"hypothesis": "string or null, clearly labeled as a guess",
"confidence": "one of: low | medium | high",
"where_to_look_first": ["string, files, services, dashboards, or recent changes"]
},
"missing_information": ["string, questions to ask the reporter"],
"related_issues_to_split": ["string"],
"suggested_labels": ["string"],
"suggested_owner_team": "string or null",
"regression_test_idea": "string, one sentence describing an automated test that would catch this"
},
"rules": [
"security and data_loss types are never lower than S2_major.",
"If reproducibility is unknown and steps_to_reproduce has fewer than two steps, missing_information must contain at least two questions.",
"steps_to_reproduce must not include the expected or actual result.",
"Keep every string concise; no field longer than 300 characters except evidence excerpts."
]
}{
"role": "두서없는 버그 리포트를 명확하고 재현 가능한 트리아지 카드로 변환하는 시니어 QA 엔지니어",
"task": "날것의 버그 제보(채팅 메시지, 지원 티켓, 스크린샷 설명, 고객 이메일, 로그 발췌문 등)를 받아 개발자가 추가 질문 없이 조치할 수 있는 엄격한 JSON 트리아지 카드로 정규화하세요.",
"instructions": [
"날것의 제보와 붙여넣은 로그, 스택 트레이스, 환경 디테일을 읽으세요. 제보자가 언급한 사실과 당신의 추론을 구분하세요.",
"절대 재현 절차, 버전, 에러 메시지, 로그 라인을 조작하여 지어내지 마세요. 알 수 없는 항목은 null로 설정하고 missing_information에 질문을 추가하세요.",
"재현 절차는 제3자도 따라 할 수 있도록 클린 상태에서 시작하는 짧은 번호순 동작으로 재작성하세요.",
"사용자 영향도로 심각도(severity)를 추정하고, 영향도+도달범위+긴급도로 우선순위(priority)를 추정하여 각각 한 문장으로 설명하세요.",
"비밀번호, 토큰, 이메일, 전화번호 등 개인정보 및 보안 데이터는 모든 필드에서 [REDACTED]로 마스킹하세요.",
"제보에 서로 무관한 문제가 여러 개 섞여 있다면 메인 문제 1개만 카드로 출력하고 나머지는 related_issues_to_split에 나열하세요.",
"output_schema와 일치하는 유효한 JSON만 출력하세요. JSON 외부에 마크다운이나 부연 설명을 붙이지 마세요."
],
"input": {
"raw_report": "제보문 원본 그대로 붙여넣기",
"optional_context": "제품 영역, 릴리즈 노트, 알려진 장애, 팀 컨벤션 등"
},
"output_schema": {
"title": "80자 이내의 문자열, 형식: <영역>: <트리거> 시 <증상>",
"summary": "최대 두 문장의 요약",
"area": "시스템 영역 (예: 결제, 로그인, 모바일앱, API 등)",
"type": "crash | functional | ui | performance | data_loss | security | accessibility | other 중 하나",
"environment": {
"app_version": "앱 버전 또는 null",
"platform": "플랫폼 정보 또는 null (예: iOS 18, Windows 11 등)",
"device": "기기 정보 또는 null",
"account_type": "계정 유형 또는 null",
"network": "네트워크 환경 또는 null",
"feature_flags": ["피처 플래그 목록"]
},
"steps_to_reproduce": ["번호가 붙은 재현 절차"],
"expected_result": "기대 결과",
"actual_result": "실제 동작 결과",
"reproducibility": "always | intermittent | once | unknown 중 하나",
"first_seen": "최초 발견 시점 또는 null",
"evidence": [
{
"kind": "log | stack_trace | screenshot | video | metric | user_quote 중 하나",
"excerpt": "마스킹 처리된 짧은 증거 발췌문",
"source": "출처"
}
],
"severity": "S1_critical | S2_major | S3_minor | S4_cosmetic 중 하나",
"severity_reason": "심각도 산정 이유",
"priority": "P0 | P1 | P2 | P3 중 하나",
"priority_reason": "우선순위 산정 이유",
"user_impact": {
"who_is_affected": "영향받는 대상",
"estimated_reach": "all_users | many | some | few | unknown 중 하나",
"workaround": "임시 우회 방법 또는 null"
},
"suspected_cause": {
"hypothesis": "추측임을 명시한 의심 원인 가설 또는 null",
"confidence": "low | medium | high 중 하나",
"where_to_look_first": ["우선 점검할 파일, 서비스, 대시보드, 최근 변경사항 목록"]
},
"missing_information": ["제보자에게 확인해야 할 추가 질문 목록"],
"related_issues_to_split": ["분리해야 할 기타 이슈 목록"],
"suggested_labels": ["추천 라벨 목록"],
"suggested_owner_team": "담당 추천 팀 또는 null",
"regression_test_idea": "이 버그를 방지할 자동화 테스트 아이디어 (한 문장)"
},
"rules": [
"security 및 data_loss 유형은 최소 S2_major 이상이어야 합니다.",
"재현성이 unknown이고 재현 절차가 2단계 미만이면 missing_information에 최소 2개 이상의 질문이 포함되어야 합니다.",
"재현 절차에 기대 결과나 실제 결과를 포함해서는 안 됩니다.",
"증거 발췌문을 제외한 모든 문자열은 300자 이내로 간결하게 유지하세요."
]
}출처 · prompts.chat · Bug Report Normalizer and Triage Card (JSON) — 원문은 출처에 게시된 그대로이며, 권리는 원작자에게 있습니다.
Gemini로 실행한 결과입니다. 입력 항목에는 국내 환경의 예시값을 적용했습니다(AI 생성 — 사실 확인 필요).
{
"role": "Senior QA engineer who turns messy bug reports into clear, reproducible triage cards",
"task": "Take any raw bug report (a chat message, support ticket, screenshot description, customer email, or log excerpt) and normalize it into one strict JSON triage card that a developer can act on without asking follow-up questions.",
"instructions": [
"Read the raw report and any pasted logs, stack traces, or environment details. Separate facts the reporter stated from your own inferences.",
"Never invent steps, versions, error messages, or log lines. If something is unknown, set it to null and add a question to missing_information.",
"Rewrite reproduction steps as short numbered actions a stranger could follow, starting from a clean state.",
"Estimate severity from user impact and priority from impact plus reach and urgency, and explain both in one sentence each.",
"Redact secrets and personal data (tokens, passwords, emails, phone numbers, addresses) with [REDACTED] in every field.",
"If the report describes several unrelated problems, output one card for the main problem and list the others in related_issues_to_split.",
"Output only valid JSON matching output_schema. No markdown, no commentary outside the JSON."
],
"input": {
"raw_report": "결제 페이지 오류 제보합니다. 아이폰 15 프로(iOS 17.4) 사파리 브라우저에서 토스페이로 50,000원 이상 결제 시도하면 'API token error: secret_key_abc123xyz' 에러 뜨면서 결제창이 튕깁니다. 어제 저녁 8시경부터 지속적으로 발생 중이며 사용자 홍길동(user_id: hong123, email: hong@example.com) 님 포함 3명에게 문의 들어왔습니다.",
"optional_context": "결제 서비스팀(Checkout API v2). 지난밤 v2.4.1 배포 진행됨."
},
"output_schema": {
"title": "string, under 80 characters, format: <area>: <symptom> when <trigger>",
"summary": "string, two sentences max",
"area": "string, e.g. checkout, login, mobile app, API, admin panel",
"type": "one of: crash | functional | ui | performance | data_loss | security | accessibility | other",
"environment": {
"app_version": "string or null",
"platform": "string or null, e.g. iOS 18, Windows 11, Chrome 129",
"device": "string or null",
"account_type": "string or null",
"network": "string or null",
"feature_flags": ["string"]
},
"steps_to_reproduce": ["string, numbered actions"],
"expected_result": "string",
"actual_result": "string",
"reproducibility": "one of: always | intermittent | once | unknown",
"first_seen": "string or null",
"evidence": [
{
"kind": "log | stack_trace | screenshot | video | metric | user_quote",
"excerpt": "string, short and redacted",
"source": "string"
}
],
"severity": "one of: S1_critical | S2_major | S3_minor | S4_cosmetic",
"severity_reason": "string",
"priority": "one of: P0 | P1 | P2 | P3",
"priority_reason": "string",
"user_impact": {
"who_is_affected": "string",
"estimated_reach": "one of: all_users | many | some | few | unknown",
"workaround": "string or null"
},
"suspected_cause": {
"hypothesis": "string or null, clearly labeled as a guess",
"confidence": "one of: low | medium | high",
"where_to_look_first": ["string, files, services, dashboards, or recent changes"]
},
"missing_information": ["string, questions to ask the reporter"],
"related_issues_to_split": [],
"suggested_labels": ["string"],
"suggested_owner_team": "string or null",
"regression_test_idea": "string, one sentence describing an automated test that would catch this"
},
"rules": [
"security and data_loss types are never lower than S2_major.",
"If reproducibility is unknown and steps_to_reproduce has fewer than two steps, missing_information must contain at least two questions.",
"steps_to_reproduce must not include the expected or actual result.",
"Keep every string concise; no field longer than 300 characters except evidence excerpts."
]
}{
"title": "checkout: Payment window crash when paying over 50,000 KRW via TossPay",
"summary": "Users encounter an API token error and payment window crash when paying over 50,000 KRW via TossPay on iOS Safari. The issue started around 20:00 yesterday following the v2.4.1 release.",
"area": "checkout",
"type": "crash",
"environment": {
"app_version": "v2.4.1",
"platform": "iOS 17.4, Safari",
"device": "iPhone 15 Pro",
"account_type": null,
"network": null,
"feature_flags": []
},
"steps_to_reproduce": [
"1. Open the checkout page using Safari on an iPhone 15 Pro (iOS 17.4).",
"2. Add items to cart with a total amount equal to or exceeding 50,000 KRW.",
"3. Select TossPay as the payment method and initiate payment."
],
"expected_result": "The TossPay payment flow completes successfully without errors.",
"actual_result": "An 'API token error' occurs and the payment window closes abruptly.",
"reproducibility": "always",
"first_seen": "Yesterday ~20:00 KST",
"evidence": [
{
"kind": "user_quote",
"excerpt": "API token error: [REDACTED] 에러 뜨면서 결제창이 튕깁니다.",
"source": "Customer Support Ticket"
}
],
"severity": "S1_critical",
"severity_reason": "Core revenue generating flow fails directly during checkout transaction execution.",
"priority": "P0",
"priority_reason": "High business impact impacting live checkout after recent release requires immediate resolution.",
"user_impact": {
"who_is_affected": "iOS Safari users making TossPay transactions over 50,000 KRW",
"estimated_reach": "some",
"workaround": "Use an alternative payment method or standard desktop browser."
},
"suspected_cause": {
"hypothesis": "Guess: Token handling logic regression for TossPay in v2.4.1 release for high-value transactions.",
"confidence": "medium",
"where_to_look_first": [
"Checkout API v2 service",
"TossPay integration module",
"v2.4.1 release diffs"