name: pr description: kbo-cli 의 작업 브랜치에서 develop 으로 향하는 새 PR 을 만든다. 단순 push+gh pr create 가 아니라, /code-review 로 diff 검토 → biome check (format+lint) → tsc typecheck → bun build → bun test 5단계 검증을 통과시킨 뒤에 PR 을 올린다. PR 제목·본문은 모두 한국어 Angular 컨벤션 (CLAUDE.md 참조). 사용자가 "PR 올려줘", "pull request 만들어줘", "PR 생성해줘", "이거 PR 로 정리해줘", "리뷰 받게 올려줘" 같은 PR 생성 의도를 보이거나, 기능 작업이 끝나서 머지 흐름을 시작하려는 맥락이면 반드시 이 스킬을 쓴다. push 만 하고 끝나는 단순 push 요청과 다르다 — push 직전에 검증을 강제하는 게 핵심이다.
/pr
작업 브랜치 → develop PR 을 올린다. 단순 push + gh pr create 래퍼가 아니다. PR 직전에 코드 검증을 강제해서, 머지 후 develop 이 깨지는 일을 막는다. 검증 도중 실패가 나오면 PR 생성까지 가지 않고 중단한다.
브랜치 정책
- 베이스는 항상
develop(CLAUDE.md 의 브랜치 정책). main 으로 직접 PR 하지 않는다. - HEAD 는
main/develop이외의 작업 브랜치여야 한다. - 커밋 메시지·PR 제목·PR 본문은 모두 한국어, Angular 컨벤션 (
<type>(<scope>): <한국어 제목>).
실행 절차
각 단계는 실패 시 중단하고 사용자에게 원인을 보고한다. --force, --no-verify 같은 강제 옵션은 절대 쓰지 않는다 — 검증 실패는 우회 대상이 아니라 수정 대상이다.
1. Pre-flight 검증
다음을 모두 확인한다. 하나라도 어긋나면 중단.
- 현재 브랜치:
git rev-parse --abbrev-ref HEAD결과가develop또는main이면 중단 (작업 브랜치를 만들고 다시 시도하라고 안내). - HEAD 가 develop 보다 앞서 있어야 함:
git fetch origin develop후git rev-list --count origin/develop..HEAD가 1 이상. - gh CLI 인증:
gh auth status가 통과해야 함. 실패하면gh auth login안내 후 중단. - 워킹 트리 상태:
- 깨끗하면 그대로 진행.
- dirty 면
git status -s와git diff를 보여주고, "현재 변경분도 PR 에 포함하시겠어요?" 한 번 묻는다.- 동의 → 변경 성격을 보고 Angular 타입을 추론해 한 줄 한국어 메시지로 커밋 (예:
feat(watch): 진행중 경기 좌우 전환). scope 모호하면 생략. - 거부 → 중단.
- 동의 → 변경 성격을 보고 Angular 타입을 추론해 한 줄 한국어 메시지로 커밋 (예:
2. /code-review --fix 호출
Skill 도구로 code-review 스킬을 --fix 로 호출해, develop..HEAD diff 를 correctness 버그 관점에서 검토하고 findings 를 워킹 트리에 바로 반영한다 (effort 는 low/medium — 고신뢰 findings 위주). /code-review 가 실제로 파일을 수정했다면:
git diff --stat
git add -u
git commit -m "fix: /code-review 결과 반영"
scope 가 명확하면 fix(<scope>): /code-review 결과 반영 형태로. 수정이 없으면 커밋 없이 다음 단계로. 어떤 findings 가 반영됐는지는 §8 보고에 요약한다.
사용자가 "리뷰 없이 그대로 올려줘" 라고 미리 요청했다면 이 단계를 건너뛴다. 이후 단계(검증)는 그래도 모두 실행한다.
3. 코드 검증
순서대로 실행. 중간 결과를 절대 무시하지 않는다. 한 단계라도 실패하면 멈추고 보고.
bun run check # biome check --write . (format + 안전한 lint 자동 수정)
check가 파일을 변경했으면:git add -u git commit -m "style: biome check 자동 수정"check가 0 이 아닌 코드로 종료했으면 자동으로 못 고치는 lint 위반이 남은 것이다. 출력을 그대로 보여주고 중단 — 코드 수정은 사용자가 결정한다 (스킬이 임의로 lint 룰을 비활성화하거나 우회하지 않는다).
이어서:
bun run typecheck # tsc --noEmit
bun run build # bun run scripts/build.ts → dist/kbo.js
bun test # bun 내장 테스트 러너 (테스트 0개여도 0 종료)
- typecheck/build/test 실패는 자동 수정하지 않는다. 첫 실패 시점에 멈추고 사용자에게 위임한다.
dist/는.gitignore에 들어 있어 build 산출물이 워킹 트리에 남아도 PR 에 안 섞인다.bun test가 테스트 파일 0 개일 때 stderr 로error: 0 test files matching ...를 찍고 exit 0 으로 끝낸다. 이건 정상 — 실패로 다루지 말고 통과로 처리한다 (실제로 bun 의 종료 코드만 본다). 사용자에게 이 경고는 굳이 노출하지 않는다.
4. Push
upstream 이 없으면 -u 로 등록, 있으면 그대로 push.
BR=$(git rev-parse --abbrev-ref HEAD)
if git rev-parse --abbrev-ref --symbolic-full-name @{u} >/dev/null 2>&1; then
git push
else
git push -u origin "$BR"
fi
push 가 비-ff 로 거부되면 (원격에 다른 커밋이 있으면) 중단하고 보고 — --force / --force-with-lease 자동 사용 금지. 사용자에게 rebase/merge 결정을 위임한다.
5. 기존 PR 확인
같은 브랜치에 이미 열린 PR 이 있는지:
gh pr view --json number,url,state 2>/dev/null
- 열린 PR (
state=OPEN) 이 이미 있으면 새로 만들지 않는다 — 위 push 만으로 갱신됨. URL 만 보고하고 종료. - 없으면 다음 단계.
6. PR 메타데이터 작성
title — git log origin/develop..HEAD --pretty=format:"%s" 으로 본 커밋 제목들에서 한국어 Angular 컨벤션 한 줄 제목을 만든다:
- 의미 있는 커밋이 1 개면 그 메시지를 그대로 사용 (chore/style 만 모인 경우는 제외하고 가장 의미 있는 type 우선).
- 여러 개면 type 다수결 + 핵심을 종합한 한국어 제목. 50자 이내, 마침표 없음.
- 예:
feat(watch): 진행중 경기 좌우 전환 추가,fix(api): 응답 success=false 시 에러 처리.
body — 다음 한국어 템플릿:
## 요약
- <변경 핵심 1~3 bullet, 한국어>
## 테스트
- [x] `bun run check` (biome format + lint)
- [x] `bun run typecheck`
- [x] `bun run build`
- [x] `bun test`
- [ ] CLI 동작 확인 (`bun run dev today`, `bun run dev watch --game <id>`)
- [ ] fixture 화면 검증 (`bun run render:fixture` — 라이브 없을 때 STARTED/RESULT/BEFORE 한 프레임씩)
## 관련
- (이슈 / 문서 / 외부 컨텍스트 링크가 있으면, 없으면 섹션 통째로 생략)
세부 규칙:
- UI/렌더(
src/render.ts,src/watch.ts) 또는 CLI 동작(src/index.ts)이 바뀌지 않았다면 "CLI 동작 확인" 과 "fixture 화면 검증" 두 체크박스를 제외. - UI/렌더가 바뀐 PR 이고 라이브 경기가 없는 시간대라면, "CLI 동작 확인" 체크박스는 제외하고 "fixture 화면 검증" 만 남긴다 — 라이브 없이도 모드별 렌더를 그려볼 수 있도록
scripts/snapshot.ts/scripts/render-fixture.ts가 준비돼 있다 (CLAUDE.md 자주 쓰는 명령 참조). src/api.ts,src/types.ts가 수정된 PR 이라면 "테스트" 섹션 끝에--debug 로 raw 응답 확인항목을 추가한다 — Naver 비공식 API 응답 구조 변경 위험이 있어서 (CLAUDE.md 데이터 소스 항목).- 본문은 한국어. 머릿글
## 요약,## 테스트는 그대로 유지 — 리뷰어가 빠르게 스캔할 수 있게 형식이 일관되어야 한다.
7. PR 생성
gh pr create \
--base develop \
--head "$BR" \
--title "$TITLE" \
--body "$(cat <<'EOF'
$BODY
EOF
)"
HEREDOC 으로 본문을 전달해 따옴표·백틱이 깨지지 않게 한다.
8. 사용자에게 보고
다음을 한 번에 정리:
- 거친 검증 단계와 각각의 결과 (✓ code-review, ✓ check, ✓ typecheck, ✓ build, ✓ test)
- /code-review 가 --fix 로 반영한 findings 요약 (있었으면)
- 스킬이 만든 추가 커밋 목록 (
fix: /code-review 결과 반영,style: biome check 자동 수정등) - push 한 브랜치 이름과 upstream
- 생성된 PR URL (또는 이미 열려있던 PR URL)
주의사항
- /code-review --fix 와 biome check 가 만드는 자동 수정 커밋은 PR diff 를 어지럽힐 수 있다. 사용자가 "자동 수정 커밋 없이 가고 싶다" 고 미리 말했으면 §2 와 §3 의 자동 수정 단계를 건너뛴다 — 단, typecheck/build/test 는 반드시 통과해야 PR 을 만든다 (검증 자체를 건너뛰지는 않는다).
- biome 이 처음 적용되는 PR 은 포매팅 변경이 광범위할 수 있다. 첫 PR 에서는 검증 커밋이 큰 게 정상 — 사용자에게 미리 알린다.
- 작업 브랜치가 origin 에 없을 수 있다. 첫 push 는
-u origin <branch>로 upstream 을 만들어 둔다. - PR 본문에 본인이 만든 커밋 SHA 를 나열하지 않는다 — gh 가 자동으로 commits 탭에 보여주고, 본문 중복은 노이즈다.
- 코드 식별자(함수명, 옵션명) 는 영문 그대로. 한국어 번역하지 않는다.
- 이 스킬은
git push와gh pr create를 실행한다 — 둘 다 사용자 외 영향 (원격 갱신, 리뷰어 알림). pre-flight 검증을 다 통과한 뒤에야 push 하므로, 사전 동의는 "PR 올려줘" 발화 자체로 보고 별도 확인은 묻지 않는다. 단 dirty 워킹 트리를 PR 에 포함할지(§1)는 명시적으로 한 번 묻는다.
Expert Next.js App Router
Developpement
Un skill qui transforme Claude en expert Next.js App Router.
Générateur de README
Developpement
Crée des README.md professionnels et complets pour vos projets.
Rédacteur de Documentation API
Developpement
Génère de la documentation API complète au format OpenAPI/Swagger.