| name | triage-pr |
| description | Triage a single GitHub PR by PR number. Check out the PR's branch, detect conflicts with the target branch via `gh pr status` (and label the PR with `cc-resolve-conflict` if any are found), generate and evaluate a fix plan via create-review-fix-plan, then take action (add cc-fix-onetime label if fixes are needed, or merge the PR if it's ready). |
| argument-hint | [pr-number] |
| hooks | {"Stop":[{"matcher":"","hooks":[{"type":"command","command":"docker compose down --volumes --remove-orphans"}]}]} |
Triage PR
æå®ãããPRçªå·ã®PRã«å¯ŸããŠãã³ã³ããªã¯ãæ€ç¥ããä¿®æ£ãã©ã³ã®è©äŸ¡ãæçµã¢ã¯ã·ã§ã³ïŒã©ãã«ä»äžãŸãã¯ããŒãžïŒãŸã§ãäžè²«ããŠå®è¡ããã¹ãã«ã§ããInstructionsã«åŸã£ãŠãPRã®ç¶æ
ã確èªããé©åãªã¢ã¯ã·ã§ã³ãå®è¡ããŠãã ããã
ãã®ã¹ãã«ãããããšã»ãããªãããš
ããããš:
- ã¹ããã1ã®ã³ã³ããªã¯ãæ€ç¥ïŒ
gh pr statusã§ç¢ºèªããã³ã³ããªã¯ããããã°cc-resolve-conflictã©ãã«ä»äžã®ã¿ã§çµäºïŒ
- ã¹ããã2ã®ä¿®æ£ãã©ã³çæãšè©äŸ¡ïŒãã©ã³ã®åæã»å€å®ã®ã¿ïŒ
- ã¹ããã3ã®ã©ãã«ä»äžïŒ
cc-fix-onetimeïŒãŸãã¯ããŒãž
絶察ã«ãããªãããš:
- PRã®ã³ãŒãä¿®æ£ã»å®è£
: ä¿®æ£ãã©ã³ã§ã察å¿ãã¹ãããšå€å®ãããé
ç®ããã£ãŠãããã®ã¹ãã«å
ã§ã¯äžåã³ãŒãã倿Žããªããä¿®æ£ã®å®è¡ã¯
cc-fix-onetimeã©ãã«ä»äžåŸã«å¥ã¹ãã«ïŒfix-review-pointãªã©ïŒã®è²¬å
- ã³ã³ããªã¯ãè§£æ¶ã®çŽæ¥å®è¡: rebaseã»ã³ã³ããªã¯ããã¡ã€ã«ã®ç·šéã»force-pushã¯è¡ããªããæ€ç¥ããã
cc-resolve-conflictã©ãã«ãä»ããŠçµäºããå®éã®è§£æ¶ã¯åã©ãã«ãããªã¬ãŒã«å¥ã¹ãã«ïŒresolve-pr-conflictçïŒãæ
åœãã
create-review-fix-planãè¿ãããã©ã³ã®å®è¡: ãã©ã³ã¯å€å®ææãšããŠèªãã ãã§ããã¡ã€ã«ã倿ŽããŠã¯ãªããªã
- æ°èŠã³ãããã®äœæ: ã³ãããã»pushã»commit amendãè¡ããªã
- ãã¹ã远å ã»Lintä¿®æ£ã»ãªãã¡ã¯ã¿ãªã³ã°: è©äŸ¡å¯Ÿè±¡ã§ãã£ãŠããå®è¡ããã©ãã«ä»äžã«ãšã©ãã
ãã¡ã€ã«ç·šéããŒã«ïŒEdit / Write / MultiEdit / NotebookEditïŒã¯ãã®ã¹ãã«ã®æ¬æã§ã¯äžååŒã³åºããªããã³ãŒããè§Šãäœæ¥ã¯ãã¹ãŠãã©ãã«ä»äž â å¥ã¹ãã«ãæŸã£ãŠå®è¡ãã®æµãã«å§ããïŒã¹ããã1ã®cc-resolve-conflictãã¹ããã3ãã¿ãŒã³Aã®cc-fix-onetimeïŒã
Instructions
!git fetch -p >/dev/null 2>&1
!gh pr checkout $ARGUMENTS >/dev/null 2>&1
å®è¡ã¢ãŒãã®å¶çŽ: ãµããšãŒãžã§ã³ãã»ãµãã¹ãã«ã»Bashãããã¯ã°ã©ãŠã³ãå®è¡ããªãããš
æ¬ã¹ãã«ã¯ claude-task-worker ã® triage-pr ã¯ãŒã«ãŒïŒcc-triage-scope ã©ãã«ïŒããèªåèµ·åãããæ³å®ãã¯ãŒã«ãŒã¯ã¹ãã«ããã»ã¹ã®åæå®äºãæ ¹æ ã« cc-fix-onetime ã®ä»äžãããŒãžãcc-triage-scope ã®é€å»ãé²ãããããããã¯ã°ã©ãŠã³ãåãããšå€å®æªç¢ºå®ã®ãŸãŸ cc-fix-onetime ãä»ãã fix-review-point ã¯ãŒã«ãŒãžã®åŒãç¶ãã空æ¯ãããããããŒãžå€å®åã«ã©ãã«ãå€ããŠPRãæŸçœ®ãããç¶æ
å£ããèµ·ãããå
éšåŠçã¯ãã¹ãŠåæå®è¡ã§å®çµãããããšã
Agent ããŒã«ã¯æ¢å®ã run_in_background: trueïŒããã¯ã°ã©ãŠã³ãïŒãåŒã³åºãããšã« å¿
ã run_in_background: false ãæç€ºæå® ãããã©ã¢ã°ã©ãŠã³ãã§åæçã«çµæãåãåã£ãŠããæ¬¡ã®åŠçã«é²ããæå®ãçç¥ããå Žåã¯ããã¯ã°ã©ãŠã³ãã§èµ°ããæ¬ã¹ãã«ãæªå®ã®ãŸãŸçµäºãã
Skill / Bash ããŒã«åŒã³åºãæã« run_in_background: true ãæå®ããªãïŒæ¢å®ã¯åæïŒãç¹ã« create-review-fix-plan ã¯ãè¿åŽãããä¿®æ£ãã©ã³ã®æ§é åãµããªãåãåã£ãŠããå€å®ã»ã©ãã«ä»äžã«é²ã
- ã·ã§ã«ã³ãã³ãæ«å°Ÿã«
& ãä»ããªããnohup / disown / setsid ã§ã®ãã¿ãããScheduleWakeup çã§ã®åŸåããçŠæ¢
- åäžã¡ãã»ãŒãžå
ã§è€æ°ã®
Agent / Skill ã䞊åã«æããã®ã¯ã䞊åå®è¡ãã§ãã£ãŠãããã¯ã°ã©ãŠã³ãå®è¡ãã§ã¯ãªããã蚱容ãããïŒåå®äºã¯ãã®å Žã§åæçã«åŸ
ã€ïŒ
å®è¡å
容
ã¹ããã1: ã³ã³ããªã¯ãæ€ç¥ãšã©ãã«ä»äž
gh pr status ã§PRã®statusïŒmergeable / ã³ã³ããªã¯ãæç¡ïŒãååŸããã
gh pr status
åºåãã #$ARGUMENTS ã®è¡ãç¹å®ããã³ã³ããªã¯ã衚瀺ïŒ"Conflict" / è¡çªããŒã¯çïŒãããããå€å®ãããgh pr status ã¯çŸåšã®ãŠãŒã¶ãŒã«é¢é£ããPRïŒäœæè
ã»ã¬ãã¥ã¢ãŒã»assigneeïŒã®ã¿è¡šç€ºããããã察象PRãåºåã«å«ãŸããªãå Žåã¯ãã©ãŒã«ããã¯ãšããŠä»¥äžã§åãæ
å ±ãååŸããã
gh pr view $ARGUMENTS --json mergeable -q .mergeable
è¿åŽå€ MERGEABLE / CONFLICTING / UNKNOWN ã®ãã¡ CONFLICTING ã®ãšãã³ã³ããªã¯ããããšå€å®ãããUNKNOWN ã®å Žåã¯GitHubåŽã§å€å®äžã®ãããæ°ç§ã®ã¹ãªãŒãåŸã«1åã ããªãã©ã€ããããã§ã UNKNOWN ãªãã³ã³ããªã¯ããªãæ±ãã§å
ã«é²ãã
å€å®ã«å¿ããŠåå²ããã
-
ã³ã³ããªã¯ãããïŒCONFLICTINGïŒ: cc-resolve-conflict ã©ãã«ãä»äžããŠãã®ã¹ãã«ãçµäºãããã¹ããã2ã»ã¹ããã3ã«ã¯é²ãŸãªãïŒã³ã³ããªã¯ãè§£æ¶åã«ä¿®æ£ãã©ã³è©äŸ¡ãããŒãžãè¡ã£ãŠãæå³ããªãããïŒ
gh pr edit $ARGUMENTS --add-label "cc-resolve-conflict"
-
ã³ã³ããªã¯ããªãïŒMERGEABLE ãŸã㯠UNKNOWN ã®ãªãã©ã€åŸãå€å®äžèœïŒ: ã¹ããã2ã«é²ã
ã¹ããã2: ä¿®æ£ãã©ã³ã®çæãšè©äŸ¡ïŒå€å®ã®ã¿ã»å®è¡çŠæ¢ïŒ
create-review-fix-plan skillãçšããŠPRã®ä¿®æ£ãã©ã³ãçæããã
éèŠ: ãã©ã³ã¯ãPRãããŒãžå¯èœãããå€å®ããææã«éããªãããã©ã³ã«å«ãŸããã¿ã¹ã¯ããã®ã¹ãã«å
ã§å®è£
ããŠã¯ãªããªãã察å¿ãã¹ãé
ç®ããããšå€æããã ã³ãŒãã«æãå ãã ã¹ããã3ã®ãã¿ãŒã³AïŒã©ãã«ä»äžïŒãžé²ãããšãå€å®ã¯å
éšçãªæèã«ãšã©ãããã¡ã€ã«ã®ç·šéã»ã³ãã³ãã®å®è¡ã¯è¡ããªãïŒåç
§ã®ããã®Read/Grepã¯èš±å®¹ïŒã
ä¿®æ£ãã©ã³ã®åé
ç®ã以äžã®è©äŸ¡åºæºã§åæãã察å¿èŠåŠãå€å®ããã
察å¿ãã¹ã
- ãã°ã»æ£ç¢ºæ§ã®åé¡: ããžãã¯ãšã©ãŒãäžæ£ãªåäœãæ¬ èœãããšããžã±ãŒã¹
- ã»ãã¥ãªãã£è匱æ§: SQLã€ã³ãžã§ã¯ã·ã§ã³ãXSSãèªèšŒãã€ãã¹ãããŒã¿æŒæŽ©
- ç Žå£ç倿Ž: APIã³ã³ãã©ã¯ãéåããã€ã°ã¬ãŒã·ã§ã³ãªãã®åŸæ¹äºææ§ã®ç Žå£
- åå®å
šæ§ã®éå: TypeScriptåãšã©ãŒãã©ã³ã¿ã€ã é害ãåŒãèµ·ããå¯èœæ§ã®ããå®å
šã§ãªããã£ã¹ã
- ãã¹ã倱æ: å£ãããã¹ããæ°ããããžãã¯ã«å¯ŸããéèŠãªãã¹ãã«ãã¬ããžã®æ¬ åŠ
- Lintãšã©ãŒ: ãã€ãã©ã€ã³ããããã¯ããéå
- ããŒã¿æŽåæ§ãªã¹ã¯: ã¬ãŒã¹ã³ã³ãã£ã·ã§ã³ãéèŠãªããŒã¿ã«å¯ŸããããªããŒã·ã§ã³ã®æ¬ åŠ
- CIããªãŒã«ã°ãªãŒã³ã«ãªã£ãŠããªã: CIã倱æããŠãã
察å¿äžèŠã®å¯èœæ§ãã
- çŽç²ãªã¹ã¿ã€ã«å¥œã¿: ã³ãŒãããŒã¹ãã¿ãŒã³ãšäžè²«æ§ã®ãããã©ãŒãããéžæ
- 䞻芳çãªåœåææ¡: æ¢åã®ååãæç¢ºã§èŠçŽã«åŸã£ãŠããå Žå
- éå°èšèšã®ææ¡: ãŸã å¿
èŠã®ãªãã³ãŒãã«å¯Ÿããæœè±¡åã®è¿œå
- ã¹ã³ãŒãã¯ãªãŒã: PRç¯å²å€ã®ç¡é¢ä¿ãªã³ãŒãã®ãªãã¡ã¯ã¿ãªã³ã°ãæ©èœè¿œå ã®ææ¡
- æ¢åãã¿ãŒã³ãšã®åé·: 確ç«ãããã³ãŒãããŒã¹èŠçŽãšççŸããææ¡
- éã¯ãªãã£ã«ã«ãã¹ãžã®ææ: æ£ç¢ºæ§ãä¿å®æ§ã«åœ±é¿ããªãè»œåŸ®ãªæ¹å
ã¹ããã3: å€å®ã«åºã¥ãã¢ã¯ã·ã§ã³
è©äŸ¡çµæã«åºã¥ãã以äžã®2ãã¿ãŒã³ã§å€å®ããå¿
ãã©ã¡ããã®ã¢ã¯ã·ã§ã³ãå®è¡ãããå€å®ã®ã¿ã§çµäºãããã³ãã³ãã®å®è¡ãŸã§ç¢ºå®ã«è¡ãã
ãã¿ãŒã³A: ä¿®æ£ãå¿
èŠãªå Žå
ã察å¿ãã¹ãããšå€å®ãããé
ç®ã1ã€ã§ãããå Žåã以äžãå®è¡ããŠcc-fix-onetimeã©ãã«ã远å ãããã©ãã«ä»äžã®ã¿ã§çµäºããã³ãŒãä¿®æ£ã¯è¡ããªããããšãä¿®æ£é
ç®ãæç¢ºã§å®è£
ã容æã«èŠããŠããã³ãŒã倿Žã»ã³ãããã»pushãè¡ã£ãŠã¯ãªããªãïŒå®éã®ä¿®æ£ã¯cc-fix-onetimeã©ãã«ãããªã¬ãŒã«å¥ã¹ãã«ãæ
åœããïŒã
gh pr edit $ARGUMENTS --add-label "cc-fix-onetime"
ãã¿ãŒã³B: ããŒãžå¯èœãªå Žå
ãã¹ãŠã®é
ç®ãã察å¿äžèŠãããŸãã¯ä¿®æ£ãã©ã³ã«é
ç®ããªãå Žåã以äžã®æé ã§ããŒãžããå¿
èŠã«å¿ããŠé¢é£Issueãæç€ºçã«ã¯ããŒãºãããå€å®ã ãã§çµäºããªãããšã
- ããŒãžåã«ãPRã®baseãã©ã³ããšããã©ã«ããã©ã³ãåãååŸããã
BASE_BRANCH=$(gh pr view $ARGUMENTS --json baseRefName -q .baseRefName)
DEFAULT_BRANCH=$(gh repo view --json defaultBranchRef -q .defaultBranchRef.name)
- å¿
ã以äžã®ã³ãã³ããå®è¡ããŠããŒãžããã
gh pr merge $ARGUMENTS --merge --delete-branch
ããŒãžã³ãã³ãã倱æããå Žåã¯ããšã©ãŒå
容ãèšé²ããŠå ±åãã以éã®æé ã«é²ãŸãªãã
-
ããŒãžæååŸãBASE_BRANCH ã DEFAULT_BRANCH ãš äžèŽããªãïŒcc-epic-<N> ã®ãããªéããã©ã«ããã©ã³ããžã®ããŒãžïŒå Žåã®ã¿ãé¢é£Issueãæç€ºçã«ã¯ããŒãºãããGitHubã®Closes #<issueçªå·>èšæ³ã«ããIssueèªåã¯ããŒãºã¯PRãããã©ã«ããã©ã³ããžããŒãžãããå Žåã«ã®ã¿çºåããéããã©ã«ããã©ã³ããžã®ããŒãžã§ã¯çºåããªããããEpicãããŒã§ãµãIssueãéããããEpic PRäœæãæ¢ãŸãã®ãé²ãå¿
èŠããããBASE_BRANCH ã DEFAULT_BRANCH ãšäžèŽããå Žåã¯GitHubãèªåã§ã¯ããŒãºããããããã®æé ã¯ã¹ãããããã
3-1. PRæ¬æããé¢é£Issueã®çªå·ãæœåºããïŒãPRã¯ããŒãºæã®Issueé£åCloseããšåãæœåºã³ãã³ããæµçšïŒã
gh pr view $ARGUMENTS --json body --jq '.body' | grep -ioE '(close[sd]?|fix(e[sd])?|resolve[sd]?)[[:space:]]+#[0-9]+' | grep -oE '[0-9]+'
3-2. æœåºããIssueçªå·ããããã«å¯ŸããŠãå®äºã¯ããŒãºãå®è¡ããïŒè€æ°ããå Žåã¯å
šãŠïŒãå®è£
ãEpicãã©ã³ãã«åã蟌ãŸããå®äºã¯ããŒãºã®ãããããŒãžããã¯ããŒãºããå Žåã®--reason "not planned"ãšã¯ç°ãªã--reason completedãçšããã
gh issue close <issueçªå·> --reason completed
é¢é£Issueãæœåºã§ããªãå Žåã¯ããã®æšãå ±åã«å«ããããšã
æææ±ºå®ã®åå
- æ£ç¢ºæ§ã¯ã¹ã¿ã€ã«ã«åªå
: æ©èœçãªæ£ç¢ºæ§ãåžžã«åªå
ãã
- ã¬ãã¥ã¢ãŒã®æå³ãå°é: å
·äœçãªææ¡ãåŽäžããå Žåã§ããã¬ãã¥ã¢ãŒãéæããããšããŠããããšãçè§£ãã
- ã³ãŒãããŒã¹ã®äžè²«æ§: ãããžã§ã¯ãã§ç¢ºç«ããããã¿ãŒã³ãåªå
ãã
- å®çšäž»çŸ©: å倿Žã®ã³ã¹ãå¯Ÿå¹æãèæ
®ãã
- 倿ã«è¿·ãå Žåã¯å¯Ÿå¿ãã¹ãã«å¯ãã
PRã¯ããŒãºæã®Issueé£åClose
äœãããã®çç±ã§gh pr closeã«ããPRãã¯ããŒãºããå Žåãå¿
ãé¢é£ããIssueã䜵ããŠCloseããããšãGitHubã¯PRãããŒãžãããã«Closeãããå ŽåãCloses #<issueçªå·>èšæ³ã§çŽã¥ããIssueãèªåCloseããªããããæç€ºçã«Closeããå¿
èŠãããã
æé :
- PRã®descriptionããé¢é£Issueã®çªå·ãååŸããã
gh pr view $ARGUMENTS --json body --jq '.body' | grep -ioE '(close[sd]?|fix(e[sd])?|resolve[sd]?)[[:space:]]+#[0-9]+' | grep -oE '[0-9]+'
- PRãCloseããã
gh pr close $ARGUMENTS --delete-branch
- ååŸããIssueçªå·ããããã«å¯ŸããŠCloseãå®è¡ããïŒè€æ°ããå Žåã¯å
šãŠïŒã
gh issue close <issueçªå·> --reason "not planned"
é¢é£IssueãååŸã§ããªãå Žåã¯ããã®æšãå ±åã«å«ããããšã
泚æäºé
- äœæ¥ã¯å
šãŠworktreeäžã§è¡ããããã©ã«ããã©ã³ãã§äœæ¥ã¯çµ¶å¯Ÿã«è¡ããªãããš
- ãã¡ã€ã«ç·šéãªã©ã®äœæ¥ãè¡ãéã¯ãpwdã³ãã³ãã§worktreeå
éšã§ããããšã確èªããŠããè¡ãããš
- äœæ¥ãã£ã¬ã¯ããª: !
pwd
cc-triage-scopeã©ãã«ãPRã«ä»äžãããŠããå Žåããããªãæäœã«ãããŠã絶察ã«åé€ããªãããšãgh pr editã§--remove-labelã䜿çšããéãcc-triage-scopeã察象ã«å«ããªã
- ãã®ã¹ãã«æ¬æã§ã¯äžåã³ãŒãã倿ŽããªãïŒãããããšã»ãããªãããšãåç
§ïŒãã³ã³ããªã¯ãè§£æ¶ãä¿®æ£å®è¡ãã©ãã«çµç±ã§å¥ã¹ãã«ã«å§è²ãã
åºå
åŠççµæãšããŠä»¥äžãå ±åããïŒ
- å€å®: ã³ã³ããªã¯ãæ€ç¥ïŒ
cc-resolve-conflictã©ãã«ä»äžïŒ / ãã¿ãŒã³AïŒä¿®æ£ãå¿
èŠã»cc-fix-onetimeã©ãã«ä»äžïŒ / ãã¿ãŒã³BïŒããŒãžæžã¿ãéããã©ã«ããã©ã³ããžã®ããŒãžæã¯é£åCloseããé¢é£Issueçªå·ãæèšïŒ / PRã¯ããŒãºïŒé¢é£IssueãCloseïŒ / ãšã©ãŒ
- çç±: å€å®ã®æ ¹æ ïŒã³ã³ããªã¯ãæ€ç¥æã¯ã¿ãŒã²ãããã©ã³ãåã察å¿ãã¹ãé
ç®ã®èŠçŽãããŒãžå¯èœãšå€æããçç±ãéããã©ã«ããã©ã³ããžã®ããŒãžã§
--reason completedã«ããé£åCloseããé¢é£Issueçªå·ããŸãã¯ã¯ããŒãºçç±ãšé£åCloseããé¢é£Issueçªå·ïŒ