diff --git a/.claude/commands/pr.md b/.claude/commands/pr.md index ea8a2dd..58a3b48 100644 --- a/.claude/commands/pr.md +++ b/.claude/commands/pr.md @@ -15,26 +15,27 @@ argument-hint: "[base 브랜치 — 생략 시 main]" - `git log origin/..HEAD --oneline` — 커밋들이 곧 의도다 - `git diff origin/..HEAD --stat` — 변경 파일 - 커밋 본문과 `.claude` 문서 변경에서 결정·이탈을 읽는다 -3. **본문 작성** — `.github/pull_request_template.md`를 읽어 각 섹션을 diff·커밋을 근거로 채운다. +3. **계약 문서 수동 대조** — 기계 대조 밖 계약을 코드와 대조한다. 대상·수정 처리는 [작업 규칙](../rules/project-rules.md)을 따른다. +4. **본문 작성** — `.github/pull_request_template.md`를 읽어 각 섹션을 diff·커밋을 근거로 채운다. - 범위의 "의도적으로 안 한 것/후속"과 검증(값)은 **반드시** 채운다 — diff에 안 담기는 정보다 - 확실치 않으면 추측하지 말고 사용자에게 묻는다 - diff·커밋·`.claude` 문서에서 읽을 수 있는 것은 중복하지 않는다(의도·제외·검증 결과·이탈 위주) -4. **다이어그램(mermaid)** — 다음 중 하나가 변경에 포함되면 본문에 넣는다. 없으면 넣지 않는다(그림을 위한 그림은 노이즈다). +5. **다이어그램(mermaid)** — 다음 중 하나가 변경에 포함되면 본문에 넣는다. 없으면 넣지 않는다(그림을 위한 그림은 노이즈다). - **여러 층을 가로지르는 흐름** — 프론트·IPC·Rust를 관통하는 경로(예: 저장 파이프라인) → `sequenceDiagram` - **상태 기계** — 전이가 3개 이상이고 잘못된 전이가 버그가 되는 것(예: 탭 dirty·충돌) → `stateDiagram-v2` - **결정론적 분기 파이프라인** — 순서가 규칙인 것(예: 열기 인코딩 판정) → `flowchart` - **원칙**: 계약 문서에 이미 그림이 있으면 **링크**하고, PR에는 리뷰어가 diff 전에 방향을 잡아야 하는 **핵심 1개만 인라인**한다. 다이어그램의 단일 출처는 계약 문서다(→ [작업 규칙](../rules/project-rules.md)). - **넣지 않는 것**: 레이어 구조도(설계 문서에 이미 있음)·파일 나열형 그림 — diff와 중복이다. -5. **제목** — 지배적 변경으로 type 결정. 형식·subject-case 등은 [커밋 컨벤션](../rules/commit-convention.md)을 따른다. -6. **라벨** — 변경 유형에 맞는 라벨을 고른다(라벨 세트는 [커밋 컨벤션](../rules/commit-convention.md)). -7. **검증 상태** — `mise run check` 결과를 본문에 값으로 적는다(못 돌리면 그 이유). 실앱 E2E·번들 크기는 mac 실기 항목이라 통과/미검증 상태만 표기한다. -8. **데모 영상 (사용자에게 보이는 동작이 바뀐 PR이면 첨부)** — E2E 화면을 그대로 녹화해 붙인다. UI·동작 변경이 없는 PR(문서·리팩터링·내부 정리)은 건너뛴다. +6. **제목** — 지배적 변경으로 type 결정. 형식·subject-case 등은 [커밋 컨벤션](../rules/commit-convention.md)을 따른다. +7. **라벨** — 변경 유형에 맞는 라벨을 고른다(라벨 세트는 [커밋 컨벤션](../rules/commit-convention.md)). +8. **검증 상태** — `mise run check` 결과를 본문에 값으로 적는다(못 돌리면 그 이유). 실앱 E2E·번들 크기는 mac 실기 항목이라 통과/미검증 상태만 표기한다. +9. **데모 영상 (사용자에게 보이는 동작이 바뀐 PR이면 첨부)** — E2E 화면을 그대로 녹화해 붙인다. UI·동작 변경이 없는 PR(문서·리팩터링·내부 정리)은 건너뛴다. - 앱 실행: `mise run dev-webdriver` (다른 터미널, 백그라운드) - 녹화: `mise run demo` — E2E 시나리오를 실행하며 앱 창을 녹화한다(→ `scripts/record-demo.sh`) - 업로드: `mise run upload-demo <파일>` — GitHub CDN URL을 받는다(리포에 바이너리를 커밋하지 않는다, → `scripts/upload-attachment.sh`) - 받은 URL을 PR 본문의 "스크린샷 / 데모" 섹션에 그대로 넣는다(영상은 URL만 두면 GitHub이 플레이어로 렌더한다) - 첫 실행에서 GitHub 로그인이 없다고 나오면 스크립트가 안내하는 한 줄을 실행해 한 번만 로그인한다 — 이후는 프로필에 저장돼 자동이다 -9. **확인 후 생성** — 초안(제목·본문·라벨·담당자·데모 영상)을 사용자에게 보여주고 **승인받은 뒤에만** 실행한다: +10. **확인 후 생성** — 초안(제목·본문·라벨·담당자·데모 영상)을 사용자에게 보여주고 **승인받은 뒤에만** 실행한다: - 브랜치가 원격에 없으면 먼저 `git push -u origin ` (승인 후) - `gh pr create --base --title "…" --body "…" --assignee @me` 후 `gh pr edit --add-label