skills/peach-e2e-suite/SKILL.md
E2E 단위 시나리오를 조합한 통합 테스트 시나리오를 md로 생성·관리·실행하는 스킬. "통합 시나리오", "e2e suite", "통합 테스트", "시나리오 조합", "e2e 통합", "전체 흐름 테스트" 키워드로 트리거.
npx skillsauth add peachsolution/peach-harness peach-e2e-suiteInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
단위 시나리오(.js)를 비즈니스 플로우 단위로 조합한 통합 테스트 시나리오를 md로 생성하고, md를 읽어 순차 실행 + 단계별 검증 + 코드/DB 검증까지 처리한다.
peach-e2e-scenario(단위 실행)의 상위 오케스트레이션 레이어.
| 모드 | 트리거 | 동작 |
|------|--------|------|
| auto (기본) | /peach-e2e-suite [설명] | 생성 + 실행 |
| create | /peach-e2e-suite create [설명] | 통합 시나리오 md 생성만 |
| run | /peach-e2e-suite run [md 파일명] | 기존 md를 읽어 실행 |
| recheck | /peach-e2e-suite recheck | 소스 변경 감지 → 관련 시나리오만 선별 재실행 |
docs/e2e-suite/
└── {한글카테고리}/
└── {NN}-{스위트명}.md
예: 주문/01-주문-결제-검증.md
회원/01-회원가입-로그인-검증.md
공통검색/01-검색필터-자동검색.md
{한글카테고리}는 일반 업무 도메인 기준의 한글 폴더를 사용한다.NN- 두 자리 순번을 붙인다.상세: references/suite-scenario-파일구조.md 참조
Chrome Beta를 CDP 모드로 실행할 때는 고정 프로필 옵션이 필수다. 프로필 옵션이 빠진 실행은 세션 유지 실패로 간주한다.
cd e2e && ./e2e.sh chrome--remote-debugging-port=9222, --remote-allow-origins=*, --user-data-dir=$HOME/.chrome-beta-e2e-profile, --disable-extensions/usr/bin/open -na "Google Chrome Beta" --args ...open -a "Google Chrome Beta" 단독 실행, --args 없는 open 실행, --user-data-dir 없는 Chrome Beta 실행, 다른 프로필 경로 임의 사용, 기본 Chrome 또는 다른 브라우저 우회cd e2e && ./e2e.sh setup
cd e2e && ./e2e.sh status
status에서 ❌ Chrome CDP 미연결이 보이면 아래 순서로 자동 복구를 먼저 시도한다.
cd e2e && ./e2e.sh chrome & 실행sleep 4 대기cd e2e && ./e2e.sh status 재확인cd e2e && ./e2e.sh chrome 수동 실행을 안내한다
./e2e.sh chrome은 고정 프로필($HOME/.chrome-beta-e2e-profile)로 Chrome Beta를 실행하는 표준 경로다. 이 명령 대신 직접 Chrome을 실행할 때도--user-data-dir옵션을 생략하지 않는다.
탭 목록을 사용자에게 보여주고 탭 번호 확인.
Google/OAuth/관리자/결제/기존 Chrome Beta 프로필 세션 유지가 핵심인 통합 흐름은 md 생성/분석까지만 진행하고, 실제 Step 실행은 사용자 승인 후 시작한다.
탭 드리프트 방지: 탭 번호 응답 후
agent-browser tab N직후agent-browser eval "document.title + ' | ' + location.href"로 재검증한다. 예상과 다르면./e2e.sh status재출력 후 재선택.
파일 업로드 Step 포함 시: OS 네이티브 파일 다이얼로그 차단을 위해
Page.setInterceptFileChooserDialog방식을 사용한다. (상세:peach-e2e-browse/references/SPA-프레임워크-입력패턴.md §3)
cd e2e && ./e2e.sh list
ls e2e/시나리오/**/*.js
NN-)references/suite-템플릿.md 참조하여 작성docs/e2e-suite/{한글카테고리}/{NN}-{스위트명}.md
rm -f e2e/.tmp/e2e_*_state.json
find docs/e2e-suite -type f -name "*.md" | sort
사용자가 파일 지정하거나, 목록에서 선택 (카테고리 폴더 + flat 구조 모두 표시)cd e2e && ./e2e.sh run --tab N 시나리오/경로
b. 실패 시: peach-e2e-scenario의 자동수정 패턴 적용 (에러 파싱 → DOM 확인 → 수정 → 재실행, 최대 3회)
c. 검증 포인트 확인: agent-browser eval로 DOM/URL 상태 검증
d. 전달 데이터 추출: 다음 Step에 필요한 데이터를 컨텍스트에 보관 (예: orderId)
e. 데이터 주입: 다음 Step 실행 시 환경변수로 전달 (E2E_ORDER_ID=xxx)e2e/.tmp/*.json)의 registrations[]를 읽어 표로 출력한다.
등록이 발생한 단계·이름·PK·시각을 한 표로 정리하여 사용자에게 보고한다.
state 파일이 없거나 registrations가 비어 있으면 "신규 등록 없음"으로 표시한다.✅ suite 완료 — {기능명} ({통과수}/{전체수})
| 시나리오 | 결과 | 비고 |
|---|---|---|
| {그룹명} 01~0N | ✅ 전체 통과 | |
| {그룹명} 0N | ✅ | 신규 PK={값} ({이름}) |
| {그룹명} 0N | ❌ | {실패 원인 1줄} |
AI 판단:
- 자동 수정: {있으면 "XX 수정 (N회)" / 없으면 "없음"}
- 잔여 이슈: {있으면 1줄 / 없으면 "없음"}
팀장 확인 필요: {있으면만 표시, 없으면 이 줄 생략}
프로그램 소스 변경 후 관련 시나리오만 선별 재실행한다. 전체 suite를 돌리는 것보다 토큰·시간 절약.
변경 파일 감지
git diff --name-only HEAD~1 HEAD -- src/
관련 시나리오 선별
| 변경 파일 패턴 | 실행 대상 |
|---|---|
| lib/*/dao/ | 해당 모듈 전체 시나리오 |
| lib/*/service/ | 해당 모듈 전체 시나리오 |
| skin/.../insert.php | 등록 시나리오 |
| skin/.../update.php | 수정 시나리오 |
| controller/ | 해당 URL 관련 시나리오 전체 |
state.json 초기화
rm -f e2e/.tmp/e2e_*_state.json
선별된 시나리오만 순차 실행 (자동수정 루프 포함)
suite 완료 보고 (표준 형식, 실행 제외 시나리오 명시)
create → run 연속 실행. 생성 후 바로 실행하여 검증.
AI가 스스로 판단·처리하는 것과 사용자 확인이 필요한 것을 명확히 구분한다.
| 상황 | AI 자율 처리 | 사용자 확인 필요 | |---|:---:|:---:| | 시나리오 실행 | ✅ | | | 오류 원인 분석 | ✅ | | | 시나리오 코드 수정 (3회 이내) | ✅ | | | 3회 수정 후도 실패 | | ✅ | | suite 전체 통과 → 완료 보고 | ✅ | ✅ 피드백 | | 일부 실패 + 자동수정 성공 → 보고에 수정내역 포함 | ✅ | ✅ 피드백 | | 커밋·푸시 | | ✅ 항상 | | 시나리오 파일 신규 생성·삭제 | | ✅ 항상 |
| 상황 | 처리 | |------|------| | 단위 시나리오 실행 실패 | 자동수정 루프 3회 시도 (peach-e2e-scenario 패턴) | | 자동수정 3회 실패 | 해당 Step에서 중단, 실패 보고 | | 검증 포인트 불일치 (suite md 오류) | 실행 결과 기반으로 suite md 자율 보정 → 재실행 | | 전달 데이터 경로 오류 (suite md 오류) | 실제 DOM/URL 확인 후 suite md 자율 보정 → 재실행 | | 코드/DB 검증 실패 | 불일치 내용 보고, 사용자 판단 요청 |
AI가 자율로 보정 가능:
사용자 확인 필요:
Step 실패 시 후속 Step은 실행하지 않는다 (데이터 의존성 때문). suite 실패는 전체 suite를 바로 반복하지 않는다. 실패한 Step의 단위 시나리오를
peach-e2e-scenario run기준으로 먼저 재현/수정하고, 통과 후 suite를 재개한다.
단위 시나리오는 독립 프로세스(node)로 실행되어 메모리 공유 불가.
두 가지 방식을 상황에 맞게 사용한다.
// 01-등록 시나리오 마지막에 저장
const STATE_FILE = path.join(__dirname, '../../.tmp/e2e_{기능명}_state.json');
let state = {};
try { state = JSON.parse(fs.readFileSync(STATE_FILE, 'utf8')); } catch (_) {}
state.user = { {PK_FIELD}: N, name: TEST_NAME };
fs.mkdirSync(path.dirname(STATE_FILE), { recursive: true });
fs.writeFileSync(STATE_FILE, JSON.stringify(state, null, 2));
// 02-수정 시나리오 시작에서 로드
let state = {};
try { state = JSON.parse(fs.readFileSync(STATE_FILE, 'utf8')); } catch (_) {}
const PK = state.user?.{PK_FIELD}
? String(state.user.{PK_FIELD})
: (process.env.E2E_PK || null); // 단독 실행 fallback
if (!PK) throw new Error('state.json 없음. 01-등록 시나리오를 먼저 실행하세요.');
e2e/.gitignore에.tmp/반드시 추가. run 모드 시작 전 자동 초기화.
# Step 1에서 orderId 추출
agent-browser eval "location.pathname.split('/').pop()"
# → orderId = "12345"
# Step 2에 주입
cd e2e && E2E_ORDER_ID=12345 ./e2e.sh run --tab 0 시나리오/주문/02-결제.js
단위 시나리오 .js 코드에서
process.env.E2E_ORDER_ID로 접근 가능.
references/suite-템플릿.md 참조.
---
name: 주문-결제-검증
module: {PROJECT}
created: 2026-04-14
---
# {통합 시나리오 이름}
## 사전조건
- Chrome Beta CDP 연결, 로그인 완료
- {필요한 데이터/상태}
- 탭: {시작 페이지}
## 시나리오 흐름
### Step 1: {단계명}
- 실행: `시나리오/{한글카테고리}/{NN}-{시나리오명}.js`
- 검증:
- {DOM/URL 검증 포인트}
- 전달 데이터: `{변수명}` ({추출 방법})
### Step 2: {단계명}
- 실행: `시나리오/{한글카테고리}/{NN}-{시나리오명}.js`
- 사전 주입: `E2E_{변수명}=${값}`
- 검증:
- {검증 포인트}
### Step N: 결과 검증
- 실행: 없음 (AI가 직접 확인)
- DB 검증: `{SQL}` → {기대값}
- 코드 검증: `{파일경로}` — {확인할 로직}
## 최종 통합 기준
- {전체 통과 조건}
## 실행 이력
| 일시 | 결과 | 비고 |
|------|------|------|
시나리오 실행 시 E2E_BASE 환경변수로 도메인을 지정한다. 미지정 시 시나리오 파일의 기본값 사용.
# 로컬 (기본값)
./e2e.sh run --tab N 시나리오/경로.js
# 개발서버 지정
E2E_BASE=https://dev.example.com ./e2e.sh run --tab N 시나리오/경로.js
suite MD에 "도메인 설정" 섹션을 두 환경 실행법을 표로 정리한다 (references/suite-템플릿.md 참조).
같은 흐름이 단위에서 반복되면 통합 suite 조합으로 표현한다.
suite는 단위 시나리오를 조합하는 통합 문서다. 단위 시나리오는 재활용 대상이다.
peach-e2e-scenario로 돌려보낸다.peach-e2e-scenario를 거친다.자동수정 루프(3회) 중 단위 .js의 셀렉터/대기 패턴 보정처럼 재활용성을 깨지 않는 보완은 허용된다. 단, 단위의 책임 범위가 바뀌는 변경(흐름 분할/통합, 시작 상태 가정 변경)은 반드시
peach-e2e-scenario로 환송한다.
suite는 비즈니스 플로우 단위 검증을 조립하는 레이어다. 다음 분리 원칙을 강제한다.
peach-db-query 스킬에서만 수행한다.peach-gen-backend/peach-gen-store 참조). suite로 로직 분기 케이스를 모두 커버하려 하지 않는다.위반 사례(시나리오 내부 DB 읽기/쓰기, 시나리오 안 재시작)를 발견하면 사용자에게 알리고 fixture/Step 분리를 먼저 제안한다.
e2e.sh run을 통해 — 직접 node 호출 금지| 용도 | 도구 |
|------|------|
| 단위 시나리오 실행 | ./e2e.sh run |
| 검증 포인트 확인 | agent-browser eval |
| 코드 검증 | Read, Grep |
| DB 검증 | peach-db-query 또는 직접 SELECT |
| iframe 검증 | ./e2e/pwc.sh eval (fallback) |
| 문서 | 용도 | 로드 조건 |
|------|------|-----------|
| references/suite-템플릿.md | md 생성 템플릿 | create, auto |
| references/suite-scenario-파일구조.md | 카테고리/순번 폴더 규칙, 점진 이전 정책 | create, auto |
통합 시나리오가 완료되었습니다.
📄 파일: docs/e2e-suite/{한글카테고리}/{NN}-{스위트명}.md
**관련 스킬:**
- `/peach-e2e-scenario` — 단위 시나리오 생성/실행/자동수정
- `/peach-e2e-browse` — DOM 탐색/디버깅
- `/peach-e2e-suite run {파일명}` — 이 통합 시나리오 재실행
tools
기능 브랜치용 git worktree 라이프사이클을 관리하는 스킬. 생성(create) / 상태 진단(status) / PR 준비(finish) / 병합 후 정리(closeout) / 정리(cleanup) 모드를 자동 판단한다. "워크트리 만들어줘", "worktree 생성", "워크트리 정리", "워크트리 삭제", "기능 브랜치 워크트리", "워크트리 상태", "마무리", "PR 생성", "PR 머지 후 정리", "feature worktree" 키워드로 트리거. PR 전 base 비교와 안전한 동기화 필요 여부를 진단한다. 개발 완료 후 finish/closeout 모드에서는 한 번의 통합 체크포인트로 push/PR/merge/cleanup을 안전하게 진행한다.
development
Karpathy LLM Wiki 패턴 기반 지식 관리 스킬. 코드 프로젝트와 옵시디언 노트 모두 지원. Raw Source(코드·문서)를 읽어 docs/wiki/에 누적형 지식베이스를 구축·유지한다. "wiki", "위키", "ingest", "인제스트", "wiki 점검", "wiki lint", "wiki 업데이트", "문서화해줘", "아키텍처 설명해줘", "어떻게 동작해?" 키워드로 트리거. qmd 검색 도구와 연동하여 토큰 절약 + 높은 검색 정확도 제공.
development
Backend 없이 Mock 데이터 기반 프로토타입 UI를 생성·검증하는 기획 구체화 산출물 스킬. Vue 3 + TypeScript + NuxtUI v4. 별도 ui-proto 저장소(예: peach-ui-proto-backoffice)의 src/modules-task 폴더에 태스크별 화면을 누적한다. "프로토타입 만들어줘", "Mock 화면", "proto UI", "기획 화면 빠르게", "ui-proto 작업", "기획자 검토용 화면", "태스크 폴더 추가", "팀 ui-proto" 키워드로 트리거. 기획자가 직접 작업하는 화면 기획 + 현업 검토용 산출물 스킬이며, 개발용 Spec은 후속 peach-gen-spec이 생성한다. 실제 API 연동이 필요하면 peach-gen-ui를 사용한다.
development
Spec 필수 + ui-proto 보조 기준으로 E2E 환경 세팅 + 단위 시나리오 자동 분할 + 통합 suite 생성 + 실행 + 부합 검증을 한 번에 처리하는 통합 팀 스킬. "e2e 검증해줘", "통합 검증", "전체 흐름 테스트", "팀 e2e", "스펙대로 동작하는지 확인", "ui-proto와 다른지 확인", "최종 검증", "릴리스 전 검증" 키워드로 트리거. peach-e2e-setup + peach-e2e-scenario + peach-e2e-suite 3개 스킬의 패턴을 공유하고, 검증 기준은 본 프로젝트 Spec을 필수 기준으로 삼고, ui-proto는 화면/흐름 보조 기준으로 사용한다. peach-team-dev와 함께 하나의 개발-검증 납품 흐름을 이루되, 구현 컨텍스트와 검증 컨텍스트는 분리한다. 팀 실행 방식은 E2E 범위와 런타임 도구 가용성을 분석해 single-agent / role-queue / agent-team 중 선택한다. 단순 코드 동작 검증을 넘어, 기획 의도와 부합하는지 자동 검증하는 게 핵심 차별점.