Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions .claude/commands/pr.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
---
description: 현재 브랜치로 Pull Request를 생성한다 (.github PR 템플릿 기반)
argument-hint: '[base 브랜치 — 생략 시 main]'
---

현재 브랜치의 변경으로 Pull Request를 만든다. 본문 구조의 단일 출처는 `.github/pull_request_template.md`이며, 이 커맨드는 그것을 채울 뿐 규칙을 다시 정의하지 않는다.

## 절차

1. **base 결정** — 인자로 받은 브랜치, 없으면 `main`. `origin/<base>`가 있으면 그것을 기준으로 삼는다. 현재 브랜치가 base면 "생성할 변경이 없다"고 알리고 멈춘다.
2. **맥락 수집**
- `git log origin/<base>..HEAD --oneline` — 커밋들이 곧 의도다
- `git diff origin/<base>..HEAD --stat` — 변경 파일
- 커밋 본문에서 결정·이탈을 읽는다
3. **본문 작성** — `.github/pull_request_template.md`를 읽어 각 섹션을 diff·커밋을 근거로 채운다.
- **의도적으로 안 한 것 / 후속**, **검증**, **공개 패키지 영향** 세 곳은 반드시 채운다 — diff에 담기지 않는 정보다
- 확실치 않으면 추측하지 말고 사용자에게 묻는다
- diff·커밋에서 그대로 읽히는 것은 중복하지 않는다(의도·제외·검증 결과 위주)
- 해당 없는 섹션은 템플릿 주석대로 삭제한다
4. **제목** — 지배적 변경으로 type을 정한다. 형식은 템플릿 상단 주석(Conventional Commits + 한국어 요약)을 따른다. squash 병합이라 이 제목이 그대로 main의 커밋이자 릴리즈 노트 한 줄이 된다.
5. **범위 체크** — 템플릿의 범위 목록을 `git diff --stat` 경로와 대조해 체크한다. 추측으로 체크하지 않는다.
6. **공개 패키지 영향** — `apps/zpl-core`·`apps/react-zpl`을 건드렸으면 필수다.
- 공개 API가 바뀌었는지: 두 패키지의 `src/index.ts` 및 재export 경로의 diff로 판단한다
- **생성되는 ZPL 문자열이 달라지는지**: 이 레포에서 사실상 breaking change 판정 기준이다. 달라지면 before/after를 본문에 적는다
- 버전·태그가 필요한지 (`zpl-core/vX.Y.Z` · `react-zpl/vX.Y.Z` 태그가 npm 발행을 트리거한다)
7. **검증** — `pnpm verify` 결과를 본문에 **값으로** 적는다. 못 돌렸으면 그 이유를 적는다. 통과 여부를 추측해 적지 않는다.
8. **라벨** — `gh label list`로 레포에 정의된 라벨 중에서 고른다. 어떤 라벨이 맞는지 애매하면 임의로 정하지 말고 사용자에게 묻는다.
9. **스크린샷 / 생성된 ZPL** — 다음에 해당할 때만 채운다.
- `apps/zpl-viewer`·`demos` UI가 바뀌면 스크린샷
- 생성되는 ZPL이 바뀌면 before/after를 코드블록으로 (스크린샷보다 이쪽이 리뷰에 쓸모 있다)
- 둘 다 아니면 섹션을 삭제한다
10. **다이어그램(mermaid)** — 기본은 **넣지 않는다**. 그림을 위한 그림은 노이즈다. 렌더 파이프라인(React 트리 → `LabelRootNode` → ZPL 문자열) 자체의 흐름이 바뀐 PR에 한해 `flowchart` 하나만 인라인한다.
11. **확인 후 생성** — 초안(제목·본문·라벨)을 사용자에게 보여주고 **승인받은 뒤에만** 실행한다.
- 브랜치가 원격에 없으면 먼저 `git push -u origin <branch>` (승인 후)
- `gh pr create --base <base> --title "…" --body "…" --assignee @me` 후 필요하면 `gh pr edit --add-label <label>`
- 담당자는 `@me`로 배정한다 — 계정명을 하드코딩하지 않는다

## 규칙

- **push·PR 생성·라벨 부여 등 외부 작업은 반드시 먼저 확인**받는다. 승인 전엔 실행하지 않는다.
- 저장소 식별자(GitHub 계정·URL)를 본문에 하드코딩하지 않는다.
58 changes: 45 additions & 13 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -1,25 +1,57 @@
## 📝 작업 내용
<!-- 제목: 커밋과 동일한 Conventional Commits + 한국어 요약
예) feat(react-zpl): Barcode 컴포넌트 추가 · fix(zpl-core): ^GB 두께 0일 때 잘못된 ZPL 생성 수정
squash 병합이므로 이 제목이 그대로 main의 커밋이자 릴리즈 노트 한 줄이 된다. -->

<!-- 이 PR에서 작업한 내용을 간단히 설명해주세요 -->
## 요약 / 의도

<!-- 무엇을, 왜. "계획한 것만 했는가"를 판단할 수 있게. 1~3문장 -->

## 범위

- [ ] `apps/zpl-core` — 렌더링 코어 (npm 공개)
- [ ] `apps/react-zpl` — React 어댑터 (npm 공개)
- [ ] `apps/zpl-viewer` — 뷰어 웹 (Vercel 배포)
- [ ] `demos` — 웹 · Electron 데모
- [ ] `docs` — 문서 사이트 (GitHub Pages)
- [ ] `tests`
- [ ] CI · 툴링 · 설정

### 이번에 한 것

-

### 의도적으로 안 한 것 / 후속

<!-- 빠진 게 누락이 아니라 의도임을 명시. 안 적으면 리뷰가 오판한다 -->

-

## 🔍 변경 범위
## 공개 패키지 영향

<!-- zpl-core·react-zpl을 건드렸다면 필수. 아니면 "해당 없음" -->

<!-- 변경된 영역을 선택해주세요 (여러 개 선택 가능) -->
- 공개 API 변경: <없음 / 추가 / 시그니처 변경 / 제거>
- 생성되는 ZPL 출력이 달라지는가: <아니오 / 예 — 어떤 명령이 어떻게>
- 버전·태그 필요: <불필요 / `zpl-core/vX.Y.Z` / `react-zpl/vX.Y.Z`>

- [ ] `apps/react-zpl` - React ZPL 라이브러리
- [ ] `docs` - 문서 사이트
- [ ] `tests` - 테스트 코드
- [ ] `demos` - 데모 애플리케이션
- [ ] 기타 (설명 필요)
## 설계 · 결정

## 📸 스크린샷 (선택사항)
<!-- 갈림길이 있었다면 고른 이유와 버린 대안. 없으면 삭제 -->

-

<!-- UI 변경이 있는 경우 스크린샷을 첨부해주세요 -->
## 검증 (체크가 아니라 값으로)

## 📚 추가 정보
- `pnpm verify`: <통과 / 실패 요약>
- 새 동작에 테스트를 추가했는가: <예 — 파일 / 해당없음 — 이유>
- 자동 검증이 불가능한 항목(확인 방법·이유):

<!-- 리뷰어가 알아야 할 추가 정보가 있다면 작성해주세요 -->
## 리뷰 포인트 / 위험 지점

<!-- 집중해서 볼 곳, 되돌리기 어려운 부분, 의견이 필요한 지점. 없으면 "없음" -->

-

## 스크린샷 / 생성된 ZPL

<!-- UI 변경이면 스크린샷, 출력이 바뀌면 before/after ZPL. 없으면 이 섹션 삭제 -->
Loading