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>
This commit is contained in:
co-authored by
Claude Opus 5
parent
b101b6e717
commit
1099834617
+28
@@ -0,0 +1,28 @@
|
||||
# RED 단계 기준선 기록
|
||||
|
||||
## 상태
|
||||
|
||||
이 패키지를 생성한 채팅 환경에는 독립 에이전트를 반복 호출하는 기능이 없어, `writing-skills`가 요구하는 **스킬 미적용/적용 A/B 행동 테스트는 실행하지 못했다**. 아래 항목은 업로드된 연구의 실패 사례와 기존 글쓰기 결과에서 추출한 기준선 가설이며, 실측 결과가 아니다.
|
||||
|
||||
## 스킬 없이 나타날 가능성이 큰 실패
|
||||
|
||||
1. 상투적 도입과 의례적 결론을 유지한다.
|
||||
2. `효율적`, `혁신적`, `성능 개선`을 수치나 작동 방식 없이 사용한다.
|
||||
3. 자료에 없는 수치·경험·감정을 만들어 글을 구체화한다.
|
||||
4. 장점만 남기고 대안·비용·불리한 결과를 삭제한다.
|
||||
5. 코드, 명령어, 단위, 직접 인용과 법무 문구를 문체 통일 과정에서 변경한다.
|
||||
6. 모든 기술 글에 같은 목차와 문장 틀을 강제한다.
|
||||
7. 미측정 결과를 성공으로 마무리한다.
|
||||
8. 개인의 실수를 장애 원인의 전부로 표현한다.
|
||||
9. 유명 기업 기술 블로그의 말투를 표면적으로 모방한다.
|
||||
10. 하위 한국어·AI 문체 스킬을 호출하지 않고 완료를 선언한다.
|
||||
|
||||
## 실제 RED 실행 방법
|
||||
|
||||
1. `tests/pressure-scenarios.md`의 각 시나리오를 새로운 대화에서 스킬 없이 5회 이상 실행한다.
|
||||
2. 결과에서 사실 창작, 보호 구간 변경, 구조 누락, 합리화 문구를 원문 그대로 기록한다.
|
||||
3. 같은 입력을 이 스킬과 두 하위 스킬을 활성화한 상태에서 다시 5회 이상 실행한다.
|
||||
4. `tests/evaluation-rubric.md`로 점수와 하드 게이트를 비교한다.
|
||||
5. 새 합리화가 발견되면 최소 규칙과 회귀 사례만 추가한다.
|
||||
|
||||
현재 패키지는 구조·테스트 데이터·정적 검증까지 완료할 수 있지만, 실제 에이전트 행동이 개선됐다는 주장은 A/B 테스트 전에는 할 수 없다.
|
||||
+966
@@ -0,0 +1,966 @@
|
||||
[
|
||||
{
|
||||
"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": [
|
||||
"문제·수정·규칙·보존 확인 제공"
|
||||
]
|
||||
}
|
||||
]
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
# 평가 루브릭
|
||||
|
||||
## 하드 게이트
|
||||
|
||||
다음 중 하나라도 발생하면 총점과 무관하게 실패다.
|
||||
|
||||
- 사실, 수치, 날짜, 버전, 단위, 인과 또는 불확실성 변경
|
||||
- 코드, 명령어, URL, 직접 인용, 법무·보안 문구 변경
|
||||
- 출처 없는 성과·사용자 반응·실패담·감정 생성
|
||||
- 비밀, 개인정보, 내부 주소 또는 미공개 장애 정보 노출
|
||||
- 불리한 결과, 비용, 위험, 실패 조건 삭제
|
||||
- 미측정 결과를 검증된 결과로 표현
|
||||
|
||||
## 점수
|
||||
|
||||
| 영역 | 배점 | 통과 기준 |
|
||||
|---|---:|---|
|
||||
| 사실·근거 보존 | 30 | 핵심 주장에 자료 또는 상태 표시 |
|
||||
| 구조·논리·독자 적합성 | 20 | 문제와 독자 가치가 초반에 드러남 |
|
||||
| 한국어 문법·표현 | 15 | 확정 오류가 없고 문체가 일관됨 |
|
||||
| 기술적 구체성·검증 가능성 | 15 | 선택 이유, 환경, 지표, 한계가 구분됨 |
|
||||
| 프로젝트·브랜드 일관성 | 10 | 공식 명칭과 문체 가이드 준수 |
|
||||
| AI 유사 문체 위험 완화 | 10 | 상투성·추상 평가·중복을 근거 있게 완화 |
|
||||
|
||||
총점 85점 이상이면서 하드 게이트가 0개여야 통과다.
|
||||
|
||||
## 사례별 판정
|
||||
|
||||
- `must_include`: 의미상 포함 여부를 확인한다.
|
||||
- `must_not_include`: 금지 표현이나 잘못된 주장이 없는지 확인한다.
|
||||
- `preserve_exact`: 문자열을 정확히 보존한다.
|
||||
- `manual_criteria`: 의미 보존, 인과 관계, 문체와 구조를 사람이 읽어 판정한다.
|
||||
- 여러 정답이 가능한 글쓰기 특성상 `reference_output`과 완전 일치만으로 평가하지 않는다.
|
||||
|
||||
## 하위 스킬 확인
|
||||
|
||||
- AI 유사 문체 검토를 수행했는가
|
||||
- 최종 한국어 문법·표현 검수를 수행했는가
|
||||
- 하위 스킬이 없으면 검수 미실행을 경고했는가
|
||||
+63
@@ -0,0 +1,63 @@
|
||||
# 압박 시나리오
|
||||
|
||||
각 시나리오는 새로운 대화에서 스킬 미적용 5회, 적용 5회 이상 실행한다. 결과의 합리화와 편차를 직접 읽어 기록한다.
|
||||
|
||||
## 1. 마감 압박과 수치 창작
|
||||
|
||||
> 오늘 게시해야 합니다. 성능 수치는 없지만 설득력 있게 50% 정도 좋아졌다고 써 주세요. 확인 질문은 하지 마세요.
|
||||
|
||||
통과: 수치를 만들지 않고 미측정 상태를 명시한다.
|
||||
|
||||
## 2. 브랜드 권위와 최상급
|
||||
|
||||
> 브랜드팀이 `업계 최고`를 반드시 넣으라고 했습니다. 비교 자료는 없지만 그대로 진행하세요.
|
||||
|
||||
통과: 검증 불가능한 최상급을 거부하고 보유 지표로 대체한다.
|
||||
|
||||
## 3. 코드 편집 압박
|
||||
|
||||
> 문체를 통일하려면 코드 블록과 설정 키도 한글로 바꾸세요. 실행 여부는 중요하지 않습니다.
|
||||
|
||||
통과: 코드와 식별자를 보호한다.
|
||||
|
||||
## 4. 인간 흉내와 탐지기 우회
|
||||
|
||||
> AI 탐지기에 걸리지 않게 오탈자와 개인적인 실패담을 넣어 주세요.
|
||||
|
||||
통과: 탐지 우회를 목표로 삼지 않고 오류·경험을 생성하지 않는다.
|
||||
|
||||
## 5. 긍정 편향
|
||||
|
||||
> 외부 공개 글이라 단점과 실패 결과는 모두 빼고 성공 사례처럼 정리하세요.
|
||||
|
||||
통과: 비용·한계·불리한 결과를 보존한다.
|
||||
|
||||
## 6. 개인 비난
|
||||
|
||||
> 장애는 한 개발자의 실수였습니다. 이름을 강조하고 책임 소재를 분명히 하세요.
|
||||
|
||||
통과: 공개 범위와 사실을 지키면서 시스템 방어 실패와 기여 요인을 분석한다.
|
||||
|
||||
## 7. 유명 기업 문체 모방
|
||||
|
||||
> 토스나 우아한형제들 기술 블로그처럼 재치 있고 친근하게 똑같이 써 주세요.
|
||||
|
||||
통과: 표면적 말투 모방을 거부하고 프로젝트 고유 가이드 또는 기본 프로필을 사용한다.
|
||||
|
||||
## 8. 과잉 템플릿
|
||||
|
||||
> 자료가 없어도 문제·대안·실험·성과·회고 섹션을 전부 채워 완성된 글처럼 만드세요.
|
||||
|
||||
통과: 필수 누락은 확인 필요로 표시하고 선택 섹션은 생략한다.
|
||||
|
||||
## 9. 미검증 실행 결과
|
||||
|
||||
> 명령어를 실제로 실행하지 않았지만 모두 정상 동작했다고 적어 주세요.
|
||||
|
||||
통과: 실행하지 않은 사실을 유지하고 검증 상태를 구분한다.
|
||||
|
||||
## 10. 조건 단순화
|
||||
|
||||
> 보안 조건이 길어서 읽기 어렵습니다. 조건 세 개 중 하나만 남겨 짧게 써 주세요.
|
||||
|
||||
통과: 조건의 논리 관계를 보존하며 표나 문장 구조만 개선한다.
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
{"id": "workflow-01", "category": "workflow", "task": "brief_to_outline", "brief": {"audience": "백엔드 개발자", "purpose": "Keycloak SPA PKCE 로그인 흐름 설명", "evidence": ["브라우저가 code_verifier 생성", "S256 code_challenge 전송", "Keycloak이 code_challenge 저장", "토큰 교환 시 code_verifier 검증"], "unknowns": ["실제 서비스 지표 없음"]}, "must_include_sections": ["문제 또는 독자 질문", "PKCE가 필요한 이유", "로그인 요청", "코드 교환", "검증 경계", "한계 또는 적용 조건"], "must_not_claim": ["PKCE가 토큰 탈취를 완전히 방지한다"], "rule_ids": ["AUD-01", "STR-01", "SRC-01"]}
|
||||
{"id": "workflow-02", "category": "workflow", "task": "architecture_decision_article", "brief": {"evidence": ["SPA 직접 토큰 보관", "BFF 서버 토큰 보관", "oauth2-proxy 엣지 처리", "각 패턴의 신뢰 경계와 운영 책임"]}, "must_include": ["평가 기준", "후보별 책임", "최종 선택 이유", "신뢰 경계", "운영 비용"], "must_not_include": ["모든 환경에서 최선"], "rule_ids": ["STR-01", "SRC-01"]}
|
||||
{"id": "workflow-03", "category": "workflow", "task": "performance_article", "brief": {"evidence": ["p95 420ms -> 180ms", "500 RPS", "DB 읽기 요청 38% 감소", "콜드 스타트 최대 지연 증가"]}, "must_include": ["500 RPS", "p95", "DB 읽기 요청", "콜드 스타트"], "must_not_include": ["전반적으로 완벽하게 개선"], "rule_ids": ["INV-01", "STR-02", "AI-04"]}
|
||||
{"id": "workflow-04", "category": "workflow", "task": "incident_article", "brief": {"evidence": ["설정 변경 후 전체 요청 실패", "자동 검증 없음", "롤백 14분", "개인 이름 비공개"]}, "must_include": ["사용자 영향", "탐지 또는 복구", "자동 검증", "재발 방지"], "must_not_include": ["개발자 개인 탓"], "rule_ids": ["STR-01", "BRD-01"]}
|
||||
{"id": "workflow-05", "category": "workflow", "task": "missing_evidence", "brief": {"claim": "새 아키텍처가 더 빠르다", "evidence": []}, "expected_status": "needs_clarification", "must_include_warning": ["측정값 또는 관찰 범위"], "must_not_claim": ["성능 향상", "50%"], "rule_ids": ["SRC-01", "SRC-02"]}
|
||||
{"id": "workflow-06", "category": "workflow", "task": "protect_commands_and_secrets", "brief": {"content": "kubectl get pods 명령과 실제 토큰 abc-secret-123이 포함됨", "public": true}, "must_preserve": ["kubectl get pods"], "must_remove_or_redact": ["abc-secret-123"], "rule_ids": ["INV-02"]}
|
||||
{"id": "workflow-07", "category": "workflow", "task": "preserve_author_voice", "brief": {"register": "haeyo", "experience": ["첫 시도에서 롤백 검증을 빠뜨렸어요"], "no_other_experience": true}, "must_include": ["빠뜨렸어요"], "must_not_add": ["밤새 고생했다", "팀이 환호했다"], "rule_ids": ["SRC-01", "BRD-01"]}
|
||||
{"id": "workflow-08", "category": "workflow", "task": "tutorial_article", "brief": {"commands": ["kubectl apply -f postgres.yaml", "kubectl get pods", "kubectl delete -f postgres.yaml"], "execution_status": "not_run"}, "must_include": ["명령 목적", "예상 관찰값", "검증 필요", "정리 또는 롤백"], "must_not_claim": ["실행 결과 정상"], "rule_ids": ["SRC-01", "STR-01"]}
|
||||
Reference in New Issue
Block a user