gh-pr plugin · skill guide

reply

PR 의 모든 리뷰 코멘트에 개별 답글을 달고, 타당한 지적은 실제 수정 커밋으로 반영한다. 요약 코멘트 1개를 남기는 것은 답글 패스가 아니다.

리뷰 코멘트 전부 ──▶ /gh-pr:reply ──▶ 코멘트별 답글 + 반영된 수정

1언제 쓰고 언제 안 쓰는가

이 스킬을 쓴다

PR 에 리뷰 코멘트가 달린 뒤. 사람이든 봇이든(gemini-code-assist, sourcery-ai, copilot) 아직 답하지 않은 스레드가 있으면 이 스킬의 대상이다.

2차 의견을 새로 받는다 → /gh-pr:review

그쪽은 집계 코멘트 1개만 남기고 코멘트별 답글을 달지 않는다. 이 스킬은 반대로 집계 코멘트를 남기는 스킬이 아니다.

판정을 내린다 → /gh-pr:approve

이 스킬은 판정을 제출하지 않고, PR 카드를 Approved 컬럼으로 올리지도 않는다.

스레드 resolve / scope 확장

스레드를 닫거나 resolve 하는 것은 사용자의 몫이며 프로그램으로 하지 않는다. PR diff 밖의 파일 수정도 하지 않는다 — 필요하면 scope creep 을 먼저 알린다.

2호출 형식

근거: skills/reply/references/help.md.

/gh-pr:reply [<PR#>] [<remote>]
#기본값설명
1현재 브랜치의 PR대상 PR 번호. -h / --help / help 면 도움말만 출력하고 종료
2origin대상 repo(owner/repo) 를 해석할 git remote
호출의미
/gh-pr:reply현재 브랜치 PR 의 리뷰 코멘트를 처리한다
/gh-pr:reply 123다른 브랜치에서도 PR #123 을 강제 지정한다
/gh-pr:reply 123 upstreamfork 워크플로에서 upstream 쪽 repo 를 대상으로 한다
현재 브랜치에 PR 이 없으면 멈추고 묻는다. "가장 최근 PR" 을 추측하지 않는다.

3동작 단계

근거: skills/reply/SKILL.md.

  1. 대상 PR + repo 해석

    START_TS 를 즉시 기록한다. PR 번호는 명시 인자 우선, 없으면 현재 브랜치에서 탐지한다. TARGET_REPO 와 TARGET_HOST 는 같은 remote URL 하나에서 바인딩하고, 이후 모든 gh 호출은 GH_HOST="$TARGET_HOST" gh ... --repo "$TARGET_REPO" 로 나간다 (gh api 는 --repo 가 없으므로 경로에 repo 를 넣는다).

  2. 리뷰 코멘트 전량 수집

    세 엔드포인트를 모두 조회한다: pulls/<N>/comments(인라인), issues/<N>/comments(대화), pulls/<N>/reviews(리뷰 요약). 봇은 내용을 이 셋에 흩뿌리므로 하나라도 빠뜨리면 코멘트를 놓친다. 스레드의 마지막 코멘트 작성자가 본인/Claude 일 때만 건너뛴다.

  3. Step 2.5 — 조기 종료

    dedup 후 미처리 스레드가 0건이면 reply-pending 라벨 제거 블록을 돌린 뒤 No unaddressed review comments — nothing to do. 만 출력하고 멈춘다. Step 3~7 도, ai-metrics 도, push 도 없다.

  4. 코멘트별 평가

    참조된 path/line 을 읽고 네 가지로 분류한다. 봇 코멘트도 같은 규칙을 적용한다. 각 항목의 출처를 <reviewer>:<severity>:<verdict> 형태로 ORIGINS 스트림에 기록한다 — Step 6 과 Step 7 이 같은 스트림을 읽는다.

    ACCEPT

    지적이 타당하다 — 고친다.

    ACCEPT-PARTIAL

    우려는 타당하나 다른 방식으로 고친다.

    DECLINE

    기각 — 코드/맥락에 근거한 사유를 답글로 남긴다.

    QUESTION

    질문 — 직접 답한다.

  5. 수정 적용 (ACCEPT / ACCEPT-PARTIAL 만)

    각 수정은 최소·국소로 유지하고, 코멘트 단위가 아니라 주제 단위로 커밋을 묶는다. --amend 도 --no-verify 도 쓰지 않는다.

  6. 전 코멘트 답글

    협상 불가 항목이다. 거절한 건과 봇 코멘트를 포함해 Step 2 에서 수집한 모든 코멘트가 답글을 받는다. 인라인 코멘트는 replies 서브리소스로, 대화 코멘트와 리뷰 요약은 원문을 인용한 새 top-level 코멘트로 답한다. 리뷰어가 쓴 언어로 답한다.

  7. push + 보드 동기화 + 판정 라벨

    수정 커밋이 있으면 git push(force-push 금지)하고 새 SHA 를 보고한다. PUSHED_FIXES > 0 이면 카드를 In review 로 되돌리고 낡은 review-passed 를 해제한다. 이어서 review-passed 게이트를 돌린다: 외부 리뷰 근거(ai-review 마커)를 확인하고, 미해결 BLOCKER 심각도 항목이 하나도 없을 때만 review-passed 를 붙인다. 마지막으로 reply-pending 라벨 제거 블록을 무조건 한 번 더 돌린다.

  8. 보고

    Accepted / Declined / Answered 카운트, 리뷰어별·심각도별 breakdown, review-passed 게이트 결과 한 줄, 커밋 SHA, 건너뛴 코멘트, 그리고 reviewDecision 이 아직 CHANGES_REQUESTED 면 그 안내 한 줄을 출력한다. 이어서 ai-metrics PR 코멘트를 게시한다(soft-fail, GH_DISABLE_AI_METRICS=1 이면 생략).

4주의사항과 제약

근거: skills/reply/references/constraints.md.

마이그레이션 부채 — 이 스킬은 dotfiles 의 shell-common/{functions,lib}/ 헬퍼(gh_pr_review.sh, gh_host.sh, gh_pr_edit_safe.sh, gh_pr_reply_targeted_review.sh 등)를 source 한다. dotfiles 체크아웃이 없는 머신에서는 해당 단계가 degrade 한다.