Files
T
DongHyeonkaandClaude Opus 5 1099834617 chore: snapshot working tree before harness removal
미추적 파일과 미커밋 수정을 전부 담아 pre-harness-removal 태그의 복구
범위를 확보한다. .agents/skills/writing-natural-korean 9개와
korean-technical-blog-skills-bundle-v1 61개가 여기 포함된다.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-07 14:19:24 +09:00

967 lines
29 KiB
JSON

[
{
"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": [
"문제·수정·규칙·보존 확인 제공"
]
}
]