test · git:20260926.64cea16 · 2026-09-26 · sha256 1f5f53161353b7be

test git:20260926.64cea16A

Immutable. This exact content never changes and is served at /api/v1/blob/1f5f53161353b7be.

---
name: test
description: Run tests and auto-fix failures. Detects the test framework, executes tests, and iterates on fixes until all pass.
---

# 테스트 실행

호출되면 바로 파이프라인을 시작한다. 단계가 바뀔 때 한 줄로 진행을 알린다.

대상: $ARGUMENTS

---

## 파이프라인 구조

```
┌──────────────┐   ┌──────────────┐   ┌──────────────┐
│ 테스트 실행  │ → │ verify-code  │ → │ fix-bugs     │
│ (Bash)       │   │ (haiku)      │   │ (sonnet)     │
└──────────────┘   └──────────────┘   └──────────────┘
                         │                    │
                         ▼                    │
                   실패 분석 필요 ─────────────┘
```

---

## 1단계: 프로젝트 타입 감지 및 테스트 실행

프로젝트에 맞는 테스트 명령 실행:

```bash
# Python 프로젝트
pytest $ARGUMENTS -v --tb=short

# Node.js 프로젝트
npm test $ARGUMENTS

# Go 프로젝트
go test $ARGUMENTS ./...

# Rust 프로젝트
cargo test $ARGUMENTS
```

---

---

## 위임 수단이 없는 하네스 — 강등 경로 (이 스킬의 **모든** 위임 블록에 적용)

아래 단계들은 `Task tool 사용:` / `subagent_type:` 형태로 전용 에이전트에게 위임한다.
**그 위임은 계약을 실행하는 한 가지 운송 수단일 뿐이고, 불변식은 각 블록의 `prompt:`
본문에 적힌 계약이다** — 페르소나·검사 항목·출력 형식·완료 선언이 그것이다.

운송은 **사다리**다. 위에서부터 쓸 수 있는 것을 쓰고, **한 칸씩 내려간다 — 건너뛰지 않는다.**
쓸 수 있는 수단은 호스트에 직접 확인한다 — 이 문서는 위임이 가능하다고 보증하지 않는다.

**1단 — 네이티브 서브에이전트.** 아래 블록을 그대로 쓴다. **격리 있음.**

**2단 — 호스트가 제공하는 위임 수단.** 네이티브 서브에이전트가 없어도, **격리된 별도
작업을 띄우는 수단을 호스트가 제공할 수 있다.** 있으면 그것을 쓴다 — 수단의 이름은
하네스마다 다르므로 여기 적지 않는다(배포물이 특정 하네스를 전제하면 다른 하네스에서
그 지시가 죽는다). 넘기는 방법이 이 단의 전부다:

- 지시문은 **에이전트 정의 파일의 본문을 그대로** 넘긴다 — 설치본의
  `<플러그인 루트>/agents/<카테고리>/<이름>.md`. `$CLAUDE_PLUGIN_ROOT` 가 설정돼
  있으면 그것이 플러그인 루트지만 **빈 값일 수 있으니 파일 존재를 확인하고**, 없으면
  플러그인 캐시에서 같은 상대경로를 찾는다.
- **요약해서 넘기지 마라.** 페르소나·검사 항목·출력 형식·완료 선언이 그 본문에 있고,
  요약하면 그 계약이 손실된다 — 그러면 2단은 운송이 아니라 다른 작업이 된다.
- 정의 본문 **뒤에** 이 블록의 `prompt:` 를 붙여 대상·범위를 준다.
- **회신은 자기보고다.** 위임 수단이 "했다"고 돌려준 요약이 아니라 **계약이 요구하는
  산출물 자체**(리포트 본문·완료 선언·파일)로 판정하라.
- **격리는 유지된다** — 별도 컨텍스트에서 돌므로 사각지대 분리 효과가 살아 있다.
  따라서 아래 3단의 강등 표시를 붙이지 않는다.

**3단 — 이 세션에서 직접 수행.** 1·2단이 **모두** 없을 때만 여기로 내려온다.
**서브에이전트 위임 수단이 없는 하네스에서는 같은 계약을 이 세션에서 직접 수행한다.**
각 블록의 `prompt:` 를 자기 지시로 읽고, 같은 항목을 같은 형식으로 산출한다.
**수단이 없다고 단계를 건너뛰지 마라. 하지 않은 위임을 했다고 보고하지도 마라.**

> **3단(직접 수행)의 대가 — 격리 이점은 사라진다.** 직접 수행은 이 세션의 컨텍스트를
> 공유하므로 별도 에이전트의 **사각지대 분리** 효과가 없다. 테스트를 돌린 세션이 그 결과를 검증하므로 *통과했다고 믿는 것* 과 *통과를 확인한 것* 이 섞인다. 상쇄책: 판정을 요약으로 대체하지 말고 **테스트 러너의 실제 마지막 줄을 그대로 인용**하라(종료코드를 파이프로 죽이지 말 것).
> 없는 이점을 있다고 쓰지 않기 위해 명시한다.

## 2단계: 결과 검증

러너의 요약 줄과 종료 코드를 직접 읽어 통과/실패/스킵 수를 확정한다(별도 에이전트 불필요).
실패가 있으면 실패 출력을 그대로 3단계로 넘긴다 — 원인 분석은 fix-bugs 가 한다.

---

## 3단계: 실패 시 버그 수정

실패가 있으면 fix-bugs 에이전트로 수정:

```
Task tool 사용:
subagent_type: fix-bugs
model: sonnet
prompt: |
  다음 테스트 실패를 수정해주세요:
  [실패한 테스트 출력]

  각 실패에 대해:
  1. 실패한 테스트명
  2. 에러 메시지
  3. 예상 vs 실제 값
  4. 코드 수정
```

---

## 출력 형식

### 테스트 결과

| 항목      | 결과 |
| --------- | ---- |
| 총 테스트 | N개  |
| 통과      | N개  |
| 실패      | N개  |
| 스킵      | N개  |

### 실패 상세 (있으면)

[테스트별 원인과 수정 방안]

### 수정 결과 (실패 시)

[fix-bugs 에이전트 적용 결과]