← ClaudeAtlas

eval-forgelisted

Turn an observed agent defect into a machine-checkable eval scenario, generated and self-validated in one step. Use after a defect lands in the feedback ledger, or before changing an agent definition that has no eval coverage. Trigger with /eval-forge.
This-HW/claude-code-kit · ★ 4 · AI & Automation · score 80
Install: claude install-skill This-HW/claude-code-kit
# Eval Forge — 결함을 회귀 게이트로 굳히기 `/self-improve`의 HARD-GATE는 **eval 커버리지가 있는 대상에서만** 이중 게이트다. 실제 커버리지는 33개 에이전트 중 소수뿐이라, 대부분의 정의 파일 수정은 "사용자 승인 단일 게이트"로 퇴화한다. 스킬이 그 한계를 정직하게 고지하고는 있지만, **고지는 해결이 아니다.** 이 스킬은 커버리지를 늘리는 비용을 낮춰 그 구멍을 메운다. > **적용 범위**: 이 스킬은 `evals/` 하네스(`evals/run.py`)가 있는 프로젝트 — > 즉 **kit 레포 자체의 개발**에서 동작한다. 그 하네스가 없는 소비자 프로젝트에서는 > 스크립트가 exit 2(SKIPPED)로 정직하게 멈춘다. `/self-improve`·`/native-watch`와 같은 > kit-개발용 스킬 계열이다. ## 사용 시점 | 상황 | 왜 | | --- | --- | | ledger에 에이전트 행동 결함이 올라왔다 | 같은 결함이 다시 나면 기계가 잡게 만든다 | | eval 커버리지 없는 에이전트의 정의를 고치려 한다 | 고치기 **전에** 안전망을 깐다 (없으면 self-improve가 게이트 없이 돈다) | | 리뷰형 에이전트가 결함을 놓치는 걸 목격했다 | 거짓 음성은 eval의 1순위 표적이다 | ## 절차 ### 1. 대상과 실패 형태를 확정한다 [건너뛰기 금지] "무엇을 놓쳤는가"가 아니라 **"통과/실패를 무엇으로 판정할 것인가"**를 먼저 정한다. 판정 기준 없이 시나리오를 만들면 채점 불가능한 자산이 트리에 남는다. - 리뷰/스캔형 → 출력에 **반드시 등장할 표현**(OR 묶음)과 **등장하면 실패인 표현** - 수정/구현형 → `pytest_green` + 필요하면 `file_contains` ### 2. 픽스처를 준비한다 결함을 심은 최소 코드. 아래는 **강제 규칙**이다 (러너가 거부한다): - `conftest.py` 금지 — 채점 시 임의 코드 실행 통로 (있으면 생성기가 제거한다) - **모듈 스코프(=import 시 실행되는 위치)에서 위험 호출 금지.** 러너가 AST로 판정하며, 대상은 최상위 문장뿐 아니라 **클래스 본문·데코레이터 표현식·함수 기본 인자 값**까지다 (전부 import 시 실행된다). 함수/메서드 **본문**은 실행되지 않으므로 자유롭다 — 결함 코드는 함수 안에 두면 된다. - 차단: `os.system`·`os.popen`·`os.remove` 류, `subprocess.*`, `socket.*`, `requests.*`, `shutil.rmtree`, `eval`/`exec`/`__import__`/`getattr`/`setattr`, `importlib.*` - 차단: 별칭·재바인딩·`from X import *` 우회 (`import os as x`, `f = os.system`, `getattr(os,"system")` 모두 잡힌다) - **허용**: `o