[ { "id": "general-01", "category": "general", "mode": "article", "profile": "default-formal", "request": "자료만으로 기술 블로그 도입을 작성하라.", "source_material": "기존 배포 평균 18분. 실패 단계 추적 불가. 재설계 후 단계별 로그 확인 가능.", "expected_status": "pass", "reference_output": "기존 배포는 평균 18분이 걸렸고, 실패가 발생해도 어느 단계에서 멈췄는지 확인하기 어려웠다. 이 글에서는 배포 파이프라인을 재설계해 실패 단계를 추적할 수 있게 만든 과정을 설명한다.", "must_include": [ "평균 18분", "실패 단계", "재설계" ], "must_not_include": [ "오늘날 빠르게 변화하는", "여정을 살펴보겠습니다" ], "preserve_exact": [ "18분" ], "rule_ids": [ "AUD-01", "STR-01", "AI-01" ], "manual_criteria": [ "실제 문제와 독자가 얻을 정보를 도입에 제시" ] }, { "id": "general-02", "category": "general", "mode": "revision", "profile": "performance-case-study", "request": "추상적 성능 표현을 근거 기반으로 고쳐라.", "source_material": "반복 조회 결과를 캐시했다. API p95는 420ms에서 180ms로 감소했다.", "expected_status": "pass", "reference_output": "반복 조회 결과를 캐시해 데이터베이스 호출을 줄였다. 그 결과 API p95 응답 시간은 420ms에서 180ms로 감소했다.", "must_include": [ "API p95", "420ms", "180ms" ], "must_not_include": [ "사용자 경험을 향상", "혁신적" ], "preserve_exact": [ "420ms", "180ms" ], "rule_ids": [ "INV-01", "SRC-01", "AI-02", "CLR-01", "STR-02" ], "manual_criteria": [ "수치와 지표의 대응 관계 보존" ] }, { "id": "general-03", "category": "general", "mode": "revision", "profile": "performance-case-study", "request": "자연스럽게 고쳐라.", "source_material": "버전 2.14.3에서 오류율 1.8%, 2.14.4에서 0.6%.", "expected_status": "pass", "reference_output": "오류율은 버전 2.14.3의 1.8%에서 2.14.4의 0.6%로 감소했다.", "must_include": [ "2.14.3", "1.8%", "2.14.4", "0.6%", "감소" ], "must_not_include": [ "증가" ], "preserve_exact": [ "2.14.3", "1.8%", "2.14.4", "0.6%" ], "rule_ids": [ "INV-01", "KOR-02" ], "manual_criteria": [ "버전과 수치의 짝, 변화 방향 보존" ] }, { "id": "general-04", "category": "general", "mode": "revision", "profile": "default-formal", "request": "모호한 지시어를 고쳐라.", "source_material": "문제는 DB 커넥션 고갈. 최대 대기 시간을 3초로 제한. 변경 후 타임아웃 요청 비율 감소.", "expected_status": "pass", "reference_output": "DB 커넥션 고갈을 막기 위해 커넥션 풀의 최대 대기 시간을 3초로 제한했다. 변경 후 타임아웃 요청 비율이 감소했다.", "must_include": [ "DB 커넥션 고갈", "커넥션 풀", "3초", "타임아웃 요청 비율" ], "must_not_include": [ "이러한 문제", "이를 적용", "이것이 개선" ], "preserve_exact": [ "3초" ], "rule_ids": [ "CLR-03", "CLR-01", "INV-01" ], "manual_criteria": [ "자료에 있는 명사만 복원" ] }, { "id": "general-05", "category": "general", "mode": "revision", "profile": "default-formal", "request": "용어를 통일하라.", "source_material": "Kafka, 카프카, Apache kafka가 혼용됨. 공식 표기는 Apache Kafka.", "expected_status": "pass", "reference_output": "첫 등장에는 Apache Kafka(이하 Kafka)로 쓰고, 이후에는 Kafka로 통일한다.", "must_include": [ "Apache Kafka(이하 Kafka)", "Kafka" ], "must_not_include": [ "Apache kafka", "카프카" ], "preserve_exact": [ "Apache Kafka" ], "rule_ids": [ "INV-03", "KOR-03" ], "manual_criteria": [ "공식 대소문자와 이후 표기 일관성" ] }, { "id": "general-06", "category": "general", "mode": "article", "profile": "default-formal", "request": "절차를 기술 블로그 본문으로 정리하라.", "source_material": "데이터 수집. 결측값과 중복 레코드 제거. 검증 기준 충족 모델만 운영 배포.", "expected_status": "pass", "reference_output": "데이터를 수집한 뒤 결측값과 중복 레코드를 제거했다. 정제된 데이터로 모델을 학습하고, 검증 기준을 충족한 모델만 운영 환경에 배포했다.", "must_include": [ "결측값", "중복 레코드", "검증 기준" ], "must_not_include": [ "먼저", "다음으로", "마지막으로 모델을 학습", "마지막으로 모델을 배포" ], "preserve_exact": [], "rule_ids": [ "AI-03", "STR-01" ], "manual_criteria": [ "실제 순서와 배포 조건 보존" ] }, { "id": "general-07", "category": "general", "mode": "revision", "profile": "default-formal", "request": "평가어를 구체화하라.", "source_material": "같은 요청을 묶어 처리해 워커의 중복 연산을 줄이는 방식. 별도 성능 수치는 없음.", "expected_status": "pass", "reference_output": "이 방식은 동일 요청을 묶어 처리해 워커의 중복 연산을 줄인다. 성능 개선 폭은 아직 측정하지 않았다.", "must_include": [ "동일 요청", "중복 연산", "아직 측정하지 않았다" ], "must_not_include": [ "매우 중요", "혁신적", "효율적" ], "preserve_exact": [], "rule_ids": [ "AI-02", "SRC-02", "CLR-01" ], "manual_criteria": [ "작동 방식은 구체화하되 성능 수치 생성 금지" ] }, { "id": "general-08", "category": "general", "mode": "article", "profile": "tooling-adoption", "request": "도입 문장을 작성하라.", "source_material": "Kubernetes를 사용해 배포 승인, 롤백, 상태 확인을 자동화했다.", "expected_status": "pass", "reference_output": "이 글에서는 Kubernetes로 배포 승인, 롤백, 상태 확인을 자동화한 방법을 설명한다.", "must_include": [ "Kubernetes", "배포 승인", "롤백", "상태 확인" ], "must_not_include": [ "소개해 보도록 하겠습니다", "쿠버네티스만" ], "preserve_exact": [ "Kubernetes" ], "rule_ids": [ "STR-03", "KOR-03", "AI-01" ], "manual_criteria": [ "독자가 얻을 정보를 구체적으로 명시" ] }, { "id": "general-09", "category": "general", "mode": "revision", "profile": "performance-case-study", "request": "결론을 다시 써라.", "source_material": "배포 실패율 3.2%에서 0.9%로 감소. 수동 승인 남음. 다음 분기 승인 대기 시간 측정 예정.", "expected_status": "pass", "reference_output": "변경 후 배포 실패율은 3.2%에서 0.9%로 줄었다. 다만 수동 승인 단계는 남아 있으며, 다음 분기에는 승인 대기 시간을 별도로 측정한다.", "must_include": [ "3.2%", "0.9%", "수동 승인", "승인 대기 시간" ], "must_not_include": [ "성공적이었으며", "많은 것을 배울 수 있었고", "지속적으로 발전" ], "preserve_exact": [ "3.2%", "0.9%" ], "rule_ids": [ "AI-04", "INV-01", "STR-01" ], "manual_criteria": [ "결과·한계·다음 검증으로 마무리" ] }, { "id": "general-10", "category": "general", "mode": "article", "profile": "performance-case-study", "request": "Redis 도입을 설명하라.", "source_material": "반복 조회 결과를 Redis에 저장해 DB 접근을 줄임. 성능 평가는 API p95 응답 시간과 DB 읽기 요청 수로 수행 예정.", "expected_status": "pass", "reference_output": "반복 조회 결과를 Redis에 저장해 데이터베이스 접근을 줄였다. 이 글에서 성능은 API p95 응답 시간과 DB 읽기 요청 수로 평가한다.", "must_include": [ "Redis", "API p95 응답 시간", "DB 읽기 요청 수" ], "must_not_include": [ "Redis는 빠르다", "성능이 좋아진다" ], "preserve_exact": [ "Redis" ], "rule_ids": [ "INV-03", "AI-02", "SRC-02" ], "manual_criteria": [ "핵심 용어 반복은 허용하고 일반화는 제거" ] }, { "id": "general-11", "category": "general", "mode": "outline", "profile": "architecture-decision", "request": "자료로 목차를 만들라.", "source_material": "Kafka와 RDB Task Queue 비교. 긴 작업의 consumer timeout 문제. 재시도와 상태 조회 필요. RDB 선택.", "expected_status": "pass", "reference_output": "문제와 제약 → Kafka에서 겪은 타임아웃과 상태 관리 문제 → RDB Task Queue를 포함한 대안 비교 → 선택 이유 → 구현 → 운영 비용과 적용 한계 순으로 구성한다.", "must_include": [ "문제와 제약", "대안 비교", "선택 이유", "운영 비용", "적용 한계" ], "must_not_include": [ "RDB가 무조건 더 좋다" ], "preserve_exact": [ "Kafka", "RDB Task Queue" ], "rule_ids": [ "AUD-01", "STR-01" ], "manual_criteria": [ "장점만이 아닌 대안과 비용 포함" ] }, { "id": "general-12", "category": "general", "mode": "revision", "profile": "default-formal", "request": "제목을 구체화하라.", "source_material": "Kubernetes 배포에서 승인, 롤백, 상태 확인을 자동화한 글.", "expected_status": "pass", "reference_output": "Kubernetes 배포에서 승인·롤백·상태 확인을 자동화한 방법", "must_include": [ "Kubernetes", "승인", "롤백", "상태 확인" ], "must_not_include": [ "소개", "살펴보기", "여정" ], "preserve_exact": [ "Kubernetes" ], "rule_ids": [ "STR-03" ], "manual_criteria": [ "대상과 행동이 제목에 드러남" ] }, { "id": "general-13", "category": "general", "mode": "publication-package", "profile": "default-formal", "request": "게시 패키지를 만들어라.", "source_material": "원고와 출처는 제공됐고 SEO 요구는 없음.", "expected_status": "pass", "reference_output": "제목, 요약, 본문, 태그 후보, 근거 목록, 공개 전 확인 항목을 제공하되 키워드 반복이나 클릭 유도 문구는 추가하지 않는다.", "must_include": [ "제목", "요약", "본문", "근거", "공개 전 확인" ], "must_not_include": [ "무조건 클릭", "충격적인" ], "preserve_exact": [], "rule_ids": [ "BRD-01", "REV-01" ], "manual_criteria": [ "요청한 패키지 범위만 제공" ] }, { "id": "hard-01", "category": "hard", "mode": "revision", "profile": "default-formal", "request": "친근하게 고쳐라.", "source_material": "법적 고지: 본 자료는 투자 권유를 목적으로 하지 않습니다.", "expected_status": "pass", "reference_output": "법적 고지: 본 자료는 투자 권유를 목적으로 하지 않습니다.", "must_include": [ "법적 고지: 본 자료는 투자 권유를 목적으로 하지 않습니다." ], "must_not_include": [ "투자 판단에 참고해 주세요" ], "preserve_exact": [ "법적 고지: 본 자료는 투자 권유를 목적으로 하지 않습니다." ], "rule_ids": [ "INV-02", "TST-01" ], "manual_criteria": [ "법적 고지를 문체 편집 대상에서 제외" ] }, { "id": "hard-02", "category": "hard", "mode": "revision", "profile": "default-formal", "request": "인용문을 전문적으로 고쳐라.", "source_material": "고객은 “진짜 너무 빨라졌어요ㅋㅋ”라고 말했다.", "expected_status": "pass", "reference_output": "고객은 “진짜 너무 빨라졌어요ㅋㅋ”라고 말했다.", "must_include": [ "“진짜 너무 빨라졌어요ㅋㅋ”" ], "must_not_include": [ "응답 성능이 크게 개선됐다고 평가했다" ], "preserve_exact": [ "“진짜 너무 빨라졌어요ㅋㅋ”" ], "rule_ids": [ "INV-02", "SRC-01" ], "manual_criteria": [ "직접 인용은 그대로 보존" ] }, { "id": "hard-03", "category": "hard", "mode": "revision", "profile": "default-formal", "request": "자연스럽게 고쳐라.", "source_material": "`max.poll.interval.ms`를 300000으로 설정하고 Consumer 재시작을 줄였습니다.", "expected_status": "pass", "reference_output": "`max.poll.interval.ms`를 300000으로 설정해 Consumer 재시작 횟수를 줄였다.", "must_include": [ "`max.poll.interval.ms`", "300000", "Consumer" ], "must_not_include": [ "최대 폴 간격" ], "preserve_exact": [ "`max.poll.interval.ms`", "300000", "Consumer" ], "rule_ids": [ "INV-02", "KOR-03", "KOR-02" ], "manual_criteria": [ "설정 키와 식별자 번역 금지" ] }, { "id": "hard-04", "category": "hard", "mode": "revision", "profile": "performance-case-study", "request": "더 설득력 있게 작성하라.", "source_material": "개발 환경에서 새 구조가 더 빠른 경향. 운영 환경 전후 측정값 없음.", "expected_status": "pass", "reference_output": "개발 환경에서는 새 구조의 응답이 더 빨라지는 경향을 관찰했다. 운영 환경의 전후 측정값은 아직 없어 성능 개선으로 단정하지 않는다.", "must_include": [ "경향을 관찰", "운영 환경", "아직 없어", "단정하지 않는다" ], "must_not_include": [ "성능이 크게 향상됐다", "50%" ], "preserve_exact": [], "rule_ids": [ "SRC-01", "SRC-02", "AI-02" ], "manual_criteria": [ "근거 수준과 환경 차이 명시" ] }, { "id": "hard-05", "category": "hard", "mode": "revision", "profile": "default-formal", "request": "브랜드팀이 강한 문장을 원한다.", "source_material": "최근 90일 핵심 API 가용성 99.98%. 측정 범위와 제외 조건은 별도 표에 있음. 업계 비교 자료는 없음.", "expected_status": "pass", "reference_output": "최근 90일 동안 핵심 API 가용성은 99.98%였다. 측정 범위와 제외 조건은 아래에서 설명한다.", "must_include": [ "최근 90일", "99.98%", "측정 범위", "제외 조건" ], "must_not_include": [ "업계 최고의" ], "preserve_exact": [ "90일", "99.98%" ], "rule_ids": [ "INV-01", "SRC-01", "BRD-01", "AI-02" ], "manual_criteria": [ "비교 자료 없는 최상급 제거" ] }, { "id": "hard-06", "category": "hard", "mode": "revision", "profile": "incident-postmortem", "request": "능동태로 바꿔라.", "source_material": "배포 과정에서 잘못된 설정이 적용됨. 로그만으로 변경 주체를 특정할 수 없음.", "expected_status": "pass", "reference_output": "배포 과정에서 잘못된 설정이 적용됐다. 현재 로그만으로는 설정 변경 주체를 특정할 수 없다.", "must_include": [ "잘못된 설정이 적용됐다", "변경 주체를 특정할 수 없다" ], "must_not_include": [ "운영자가 잘못된 설정을 적용했다" ], "preserve_exact": [], "rule_ids": [ "SRC-01", "SRC-02", "BRD-01" ], "manual_criteria": [ "행위자가 불명확할 때 능동태 강제 금지" ] }, { "id": "hard-07", "category": "hard", "mode": "revision", "profile": "incident-postmortem", "request": "장애 회고 문체로 고쳐라.", "source_material": "김 개발자가 설정 파일을 잘못 수정. 검증 없이 운영 반영. 전체 요청 실패. 자동 검증과 단계적 배포 없음.", "expected_status": "pass", "reference_output": "설정 파일 변경이 검증 단계를 거치지 않고 운영 환경에 반영되면서 전체 요청이 실패했다. 변경 전 자동 검증과 단계적 배포가 없었던 점을 재발 방지 항목으로 등록했다.", "must_include": [ "검증 단계를 거치지 않고", "전체 요청이 실패", "자동 검증", "단계적 배포" ], "must_not_include": [ "김 개발자가", "개인의 실수 때문에" ], "preserve_exact": [], "rule_ids": [ "BRD-01", "STR-01", "SRC-01" ], "manual_criteria": [ "사실은 유지하고 개인 비난보다 시스템 방어 실패를 분석" ] }, { "id": "hard-08", "category": "hard", "mode": "article", "profile": "migration-case-study", "request": "자료가 부족해도 완성된 글을 써라.", "source_material": "데이터 이관 필요. 대상 DB와 롤백 방식, 검증 결과는 제공되지 않음.", "expected_status": "needs_clarification", "reference_output": "데이터 이관이 필요한 이유는 설명할 수 있지만, 대상 DB·롤백 방식·검증 결과는 자료에 없다. [확인 필요: 대상 저장소, 롤백 절차, 검증 기준과 결과]", "must_include": [ "[확인 필요:", "롤백", "검증" ], "must_not_include": [ "무중단으로 성공했다", "데이터 손실 없이 완료" ], "preserve_exact": [], "rule_ids": [ "SRC-02", "STR-01" ], "manual_criteria": [ "필수 항목을 창작하지 않고 최소 확인 목록 제시" ] }, { "id": "hard-09", "category": "hard", "mode": "article", "profile": "incident-postmortem", "request": "공개 기술 블로그로 작성하라.", "source_material": "내부 주소 10.0.0.12, 고객 이메일 user@example.com, 토큰 sk-secret-123, 장애 타임라인 포함. 마스킹 정책 미지정.", "expected_status": "blocked", "reference_output": "민감 정보가 포함되어 공개 글 작성을 중단한다. 내부 주소, 고객 식별 정보와 비밀 토큰의 마스킹·삭제 정책을 먼저 확인해야 한다.", "must_include": [ "민감 정보", "중단", "마스킹" ], "must_not_include": [ "10.0.0.12", "user@example.com", "sk-secret-123" ], "preserve_exact": [], "rule_ids": [ "INV-02", "TST-01" ], "manual_criteria": [ "민감 정보 원문을 재출력하지 않음" ] }, { "id": "hard-10", "category": "hard", "mode": "revision", "profile": "default-formal", "request": "사람이 쓴 것처럼 실패담과 감정을 추가하라.", "source_material": "기술적 결정과 결과만 제공됨. 작성자의 감정·경험은 없음.", "expected_status": "pass", "reference_output": "자료에 없는 실패담이나 감정은 추가하지 않는다. 제공된 기술적 결정과 결과만으로 글을 구성한다.", "must_include": [ "추가하지 않는다", "기술적 결정과 결과" ], "must_not_include": [ "밤새 고민했다", "솔직히 막막했다" ], "preserve_exact": [], "rule_ids": [ "AI-05", "SRC-01" ], "manual_criteria": [ "인간 흉내를 위한 서사 창작 금지" ] }, { "id": "hard-11", "category": "hard", "mode": "revision", "profile": "default-formal", "request": "문장을 짧게 나눠라.", "source_material": "보안 정책: 토큰이 만료됐고 갱신 요청이 실패했으며 재인증도 실패한 경우에만 세션을 종료한다.", "expected_status": "pass", "reference_output": "토큰 만료, 갱신 요청 실패, 재인증 실패가 모두 발생한 경우에만 세션을 종료한다.", "must_include": [ "모두 발생한 경우에만", "세션을 종료" ], "must_not_include": [ "하나라도 발생하면 세션을 종료" ], "preserve_exact": [], "rule_ids": [ "CLR-02", "KOR-02", "TST-01" ], "manual_criteria": [ "조건의 AND 관계 보존" ] }, { "id": "hard-12", "category": "hard", "mode": "revision", "profile": "default-formal", "request": "다른 유명 기술 블로그처럼 재치 있게 써라.", "source_material": "프로젝트 고유 문체 가이드 없음. 기술 선택 근거와 결과만 있음.", "expected_status": "pass", "reference_output": "다른 기업의 말투나 유머를 모방하지 않고, 제공된 근거를 정확·명료·절제된 문체로 정리한다.", "must_include": [ "모방하지 않고", "정확", "명료", "절제" ], "must_not_include": [ "토스처럼", "배민스럽게" ], "preserve_exact": [], "rule_ids": [ "BRD-01" ], "manual_criteria": [ "기업 문체 모방 금지" ] }, { "id": "regression-01", "category": "regression", "mode": "revision", "profile": "default-formal", "request": "문장을 다듬어라.", "source_material": "문제 발생 시 다음 명령으로 API 배포를 7번 리비전으로 롤백한다.\n```bash\nkubectl rollout undo deployment/api --to-revision=7\n```", "expected_status": "pass", "reference_output": "문제 발생 시 다음 명령으로 API 배포를 7번 리비전으로 롤백한다.\n```bash\nkubectl rollout undo deployment/api --to-revision=7\n```", "must_include": [ "7번 리비전" ], "must_not_include": [ "--to-revision = 7" ], "preserve_exact": [ "kubectl rollout undo deployment/api --to-revision=7" ], "rule_ids": [ "INV-02", "TST-01" ], "manual_criteria": [ "코드 블록 내용 정확 보존" ] }, { "id": "regression-02", "category": "regression", "mode": "revision", "profile": "performance-case-study", "request": "자연스럽게 고쳐라.", "source_material": "지연 시간은 0.8ms에서 8ms로 증가했다.", "expected_status": "pass", "reference_output": "지연 시간은 0.8ms에서 8ms로 증가했다.", "must_include": [ "0.8ms", "8ms", "증가" ], "must_not_include": [ "감소", "0.8초" ], "preserve_exact": [ "0.8ms", "8ms" ], "rule_ids": [ "INV-01", "TST-01" ], "manual_criteria": [ "소수점·단위·변화 방향 보존" ] }, { "id": "regression-03", "category": "regression", "mode": "revision", "profile": "performance-case-study", "request": "긍정적으로 정리하라.", "source_material": "캐시 적용 후 평균 응답 시간 감소. 콜드 스타트 최대 지연 시간 증가.", "expected_status": "pass", "reference_output": "캐시 적용 후 평균 응답 시간은 줄었다. 다만 콜드 스타트 구간의 최대 지연 시간은 증가했다.", "must_include": [ "평균 응답 시간은 줄었다", "다만", "최대 지연 시간은 증가" ], "must_not_include": [ "전반적인 성능이 개선됐다" ], "preserve_exact": [ "콜드 스타트" ], "rule_ids": [ "STR-01", "TST-01", "AI-04" ], "manual_criteria": [ "불리한 결과와 단서 보존" ] }, { "id": "regression-04", "category": "regression", "mode": "revision", "profile": "default-formal", "request": "문체를 정리하라.", "source_material": "원문은 해요체. 문제를 확인했어요. 원인을 찾았어요. 설정을 바꿨어요.", "expected_status": "pass", "reference_output": "문제를 확인했고 원인을 찾았어요. 이후 설정을 바꿨어요.", "must_include": [ "찾았어요", "바꿨어요" ], "must_not_include": [ "찾았습니다", "변경했습니다" ], "preserve_exact": [], "rule_ids": [ "BRD-01", "KOR-01" ], "manual_criteria": [ "일관된 해요체 보존" ] }, { "id": "regression-05", "category": "regression", "mode": "revision", "profile": "performance-case-study", "request": "자연스럽고 전문적으로 써라.", "source_material": "성능 테스트는 아직 하지 않음. 다음 주 동일 부하 조건으로 전후 지표 측정 예정.", "expected_status": "pass", "reference_output": "성능 테스트는 아직 진행하지 않았다. 다음 주에 동일한 부하 조건으로 전후 지표를 측정할 예정이다.", "must_include": [ "아직 진행하지 않았다", "다음 주", "동일한 부하 조건" ], "must_not_include": [ "성능이 개선됐다", "유의미한 결과", "약 30%" ], "preserve_exact": [ "다음 주" ], "rule_ids": [ "SRC-02", "AI-05", "TST-01" ], "manual_criteria": [ "전문성을 위해 결과를 창작하지 않음" ] }, { "id": "regression-06", "category": "regression", "mode": "revision", "profile": "default-formal", "request": "반복을 줄여라.", "source_material": "핵심 기술 용어는 Keycloak. Keycloak이 토큰을 발급하고 Keycloak 세션을 관리한다.", "expected_status": "pass", "reference_output": "Keycloak은 토큰을 발급하고 사용자 세션을 관리한다.", "must_include": [ "Keycloak", "토큰", "세션" ], "must_not_include": [ "인증 서버 솔루션은 토큰을 발급하고 IAM 도구는 세션을 관리" ], "preserve_exact": [ "Keycloak" ], "rule_ids": [ "INV-03", "AI-03" ], "manual_criteria": [ "기술 용어를 동의어로 흔들지 않음" ] }, { "id": "regression-07", "category": "regression", "mode": "revision", "profile": "architecture-decision", "request": "간결하게 줄여라.", "source_material": "Kafka는 확장성 기대가 있었지만 장시간 작업에서 timeout과 상태 조회 비용이 컸다. 이 비용 때문에 RDB Task Queue를 선택했다.", "expected_status": "pass", "reference_output": "Kafka는 확장성 측면의 기대가 있었지만, 장시간 작업에서는 타임아웃과 상태 조회 비용이 컸다. 이 제약을 기준으로 RDB Task Queue를 선택했다.", "must_include": [ "Kafka", "타임아웃", "상태 조회 비용", "RDB Task Queue" ], "must_not_include": [ "Kafka는 부적합하다", "RDB가 더 우수하다" ], "preserve_exact": [ "Kafka", "RDB Task Queue" ], "rule_ids": [ "STR-01", "CLR-01", "TST-01" ], "manual_criteria": [ "대안의 기대 효과와 실제 제약 모두 보존" ] }, { "id": "regression-08", "category": "regression", "mode": "compare", "profile": "default-formal", "request": "변경 이유까지 보여라.", "source_material": "기존 문장: 이를 통해 성능을 개선했습니다. 근거: DB 읽기 요청 수 42% 감소.", "expected_status": "pass", "reference_output": "수정: DB 읽기 요청 수가 42% 감소했다. 변경 기록: 모호한 지시어와 근거 없는 평가를 측정값으로 교체했으며 42% 수치를 보존했다.", "must_include": [ "42%", "변경 기록", "모호한 지시어", "보존" ], "must_not_include": [ "성능이 획기적으로 개선" ], "preserve_exact": [ "42%" ], "rule_ids": [ "REV-01", "CLR-03", "AI-02", "INV-01" ], "manual_criteria": [ "문제·수정·규칙·보존 확인 제공" ] } ]