From 3dd0702fa2e63530401febedddc98a14745e90f3 Mon Sep 17 00:00:00 2001 From: Zhongwei Li Date: Sat, 29 Nov 2025 18:26:23 +0800 Subject: [PATCH] Initial commit --- .claude-plugin/plugin.json | 14 + README.md | 3 + agents/coderabbit-feedback.md | 829 ++++++++++++++++++++++++++++++++++ commands/coderabbit/fix.md | 5 + commands/consulting/review.md | 17 + commands/git/commit.md | 8 + commands/git/pr.md | 8 + commands/git/push.md | 8 + plugin.lock.json | 65 +++ 9 files changed, 957 insertions(+) create mode 100644 .claude-plugin/plugin.json create mode 100644 README.md create mode 100644 agents/coderabbit-feedback.md create mode 100644 commands/coderabbit/fix.md create mode 100644 commands/consulting/review.md create mode 100644 commands/git/commit.md create mode 100644 commands/git/pr.md create mode 100644 commands/git/push.md create mode 100644 plugin.lock.json diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json new file mode 100644 index 0000000..5369c0b --- /dev/null +++ b/.claude-plugin/plugin.json @@ -0,0 +1,14 @@ +{ + "name": "skill-set", + "description": "Comprehensive productivity skills and development tools for Claude Code, including git workflow automation, code context understanding, browser automation, peer LLM consulting, and CodeRabbit feedback processing.", + "version": "1.0.1", + "author": { + "name": "ether-moon" + }, + "agents": [ + "./agents/coderabbit-feedback.md" + ], + "commands": [ + "./commands/" + ] +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..a2f375e --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# skill-set + +Comprehensive productivity skills and development tools for Claude Code, including git workflow automation, code context understanding, browser automation, peer LLM consulting, and CodeRabbit feedback processing. diff --git a/agents/coderabbit-feedback.md b/agents/coderabbit-feedback.md new file mode 100644 index 0000000..2866896 --- /dev/null +++ b/agents/coderabbit-feedback.md @@ -0,0 +1,829 @@ +--- +name: coderabbit-feedback +description: Use when CodeRabbit AI has posted review comments on a PR - interactively classify feedback by severity, discuss recommendations with user, apply agreed changes, and ensure mandatory commit and PR comment workflow with verification +--- + +# CodeRabbit Feedback + +## Overview + +Interactive processing of CodeRabbit AI review comments through user conversation: collect and classify feedback, discuss CRITICAL/MAJOR items for immediate action, analyze MINOR items with recommendations, and complete workflow with verified git commits and PR comments. + +**Core principle:** Interactive severity-based workflow with user conversation (collect → discuss → apply together → verify completion). + +## When to Use + +**Use when:** +- CodeRabbit has posted review comments on your current PR +- You need to process AI feedback with user input +- You want to discuss which suggestions to apply +- You need guided review with recommendations and rationale + +**Don't use when:** +- No PR exists or no CodeRabbit comments +- Uncommitted changes exist (must commit first) +- Fully automated processing without interaction is required + +## Quick Reference + +| Phase | Mode | Key Actions | +|-------|------|-------------| +| **Collection** | Auto | Pre-check → Discover PR → Collect 200 comments → Filter & Classify | +| **Discussion** | **Interactive** | Present items → Get user decisions → Analyze MINOR with rationale | +| **Application** | Auto | Apply agreed changes → Commit & Push | +| **Verification** | Auto | Post PR comment → Verify @coderabbitai resolve tag | + +## Severity Classification + +### CRITICAL (Immediate Discussion Required) +- **Security**: SQL injection, XSS, CSRF, auth bypass, sensitive data exposure +- **Data Loss**: Destructive operations, cascade deletes, corruption risks +- **Breaking Bugs**: Nil pointer errors, type crashes, unhandled exceptions +- **Critical Logic**: Payment errors, authorization failures, data integrity violations + +### MAJOR (Important Discussion) +- **Performance**: N+1 queries, memory leaks, slow algorithms, missing indexes +- **Resource Issues**: File handle leaks, connection pool exhaustion, unbounded loops +- **Significant Bugs**: Wrong calculations, incorrect validations, race conditions +- **Production Impact**: High error rates, significant user impact, reliability issues + +### MINOR (Analyze & Recommend) +- **Code Quality**: Variable naming, method extraction, DRY violations +- **Style**: Formatting preferences, comment style, code organization +- **Documentation**: Missing comments, outdated docs, unclear naming +- **Speculative**: "Could be", "might consider", optional improvements + +### ALWAYS SKIP (Never Process) +- Comments with resolution markers: ✅☑️🟢 or "resolved", "fixed", "applied" +- Threads with `@coderabbitai resolve` command +- Developer confirmation replies: "Applied", "Done", "Fixed" +- Duplicate suggestions (process once only) + +## Language Detection + +**IMPORTANT: Detect and use user's preferred language for all communication.** + +**Detection priority (check in order):** +1. **User's current messages** - What language is the user speaking in this conversation? +2. **Project context** - Check CLAUDE.md, README.md, recent commits for language patterns +3. **Git history** - `git log --oneline -5` to see commit message language +4. **Default** - If no clear indication, use **English** + +**Apply detected language to:** +- All conversational messages with user +- PR comment content +- Reports and summaries +- Error messages and warnings +- Status updates + +**Always keep in English:** +- Code examples +- Bash commands and scripts +- File paths +- Technical API calls + +**Language variable usage in templates:** +``` +[In user's language] ← This marker means content should be in detected language +``` + +**Example detection:** +``` +# User writes in Korean → Use Korean +# User writes in English → Use English +# User writes in Spanish → Use Spanish +# No clear signal → Use English (default) +``` + - [ ] Apply agreed changes + - [ ] Commit and push changes + - [ ] Post PR comment with verification + ``` + +3. **Discover PR**: Find current PR from branch + ```bash + BRANCH=$(git branch --show-current) + gh pr list --head "$BRANCH" --json number,title,url + ``` + +4. **Collect Comments with Pagination** (up to 200 comments): + + **Method 1: GraphQL with Pagination (Recommended)** + ```bash + get_all_comments() { + local pr_number=$1 + local owner=$2 + local repo=$3 + local cursor="" + local has_next=true + local all_comments="[]" + + while [ "$has_next" = "true" ]; do + local query='query($owner:String!, $repo:String!, $number:Int!, $cursor:String) { + repository(owner:$owner, name:$repo) { + pullRequest(number:$number) { + comments(first:100, after:$cursor) { + pageInfo { hasNextPage endCursor } + nodes { + id + author { login } + body + createdAt + replies(first:10) { + nodes { author { login } body createdAt } + } + } + } + } + } + }' + + local result=$(gh api graphql -f query="$query" \ + -F owner="$owner" -F repo="$repo" -F number="$pr_number" \ + ${cursor:+-F cursor="$cursor"}) + + local page_comments=$(echo "$result" | jq '.data.repository.pullRequest.comments.nodes') + all_comments=$(echo "$all_comments" | jq ". + $page_comments") + + has_next=$(echo "$result" | jq -r '.data.repository.pullRequest.comments.pageInfo.hasNextPage') + cursor=$(echo "$result" | jq -r '.data.repository.pullRequest.comments.pageInfo.endCursor') + + [ "$has_next" = "false" ] && break + [ $(echo "$all_comments" | jq 'length') -ge 200 ] && break + done + + echo "$all_comments" | jq 'sort_by(.createdAt) | reverse | .[:200]' + } + ``` + + **Method 2: REST API with Pagination (Alternative)** + ```bash + get_all_comments_rest() { + local pr_number=$1 + local page=1 + local per_page=100 + local all_comments="[]" + + while [ $page -le 2 ]; do # Max 2 pages = 200 comments + local result=$(gh api "repos/$OWNER/$REPO/issues/$pr_number/comments?per_page=$per_page&page=$page") + + [ "$(echo "$result" | jq 'length')" -eq 0 ] && break + + all_comments=$(echo "$all_comments" | jq ". + $result") + ((page++)) + done + + echo "$all_comments" | jq 'sort_by(.created_at) | reverse | .[:200]' + } + ``` + +5. **Filter**: Process only unresolved CodeRabbit comments + - Filter for author containing "coderabbitai" or "bot" + - Exclude bodies with: "resolved", "fixed", "applied", "@coderabbitai resolve" + - Check entire thread (including replies) for resolution markers + - Sort by recency (newest first) + +6. **Classify**: Assign severity to each actionable item + - Extract file path, line number, and specific change + - Match against severity criteria (CRITICAL > MAJOR > MINOR) + - Skip summaries without actionable items + +### Phase 2: Interactive Discussion + +**Step 2.1 - Present Summary and CRITICAL/MAJOR Items:** + +``` +[In user's language] + +Found feedback: 23 items total +- CRITICAL: 2 items (security vulnerability 1, data loss risk 1) +- MAJOR: 5 items (performance issues 3, significant bugs 2) +- MINOR: 16 items (code quality improvements) + +## Items Requiring Immediate Attention (CRITICAL/MAJOR 7 items) + +### CRITICAL +1. `auth/login.ts:45` - SQL Injection vulnerability + - Issue: User input directly in query + - Suggestion: Use prepared statements + - Risk: ⚠️ High (security) + +2. `data/sync.ts:89` - Data loss risk + - Issue: Sequential deletes without transaction + - Suggestion: Add transaction wrapper + - Risk: ⚠️ High (data integrity) + +### MAJOR +3. `api/users.ts:123` - N+1 query problem + - Issue: Individual queries in loop + - Suggestion: Use eager loading for batch retrieval + - Impact: Performance (currently 101 queries for 100 items) + +4. `cache/redis.ts:56` - Memory leak + - Issue: Missing connection close + - Suggestion: Add close() in finally block + - Impact: Resource exhaustion + +[...more items] + +How would you like to proceed? +- [1] Apply all (recommended - CRITICAL/MAJOR are mandatory fixes) +- [2] Review individually (confirm each item) +- [3] See details first +- [4] Start with MINOR analysis +``` + +**Step 2.2 - Individual Selection Mode (Option 2):** + +``` +[In user's language] + +Reviewing each item individually. + +[1/7] CRITICAL: `auth/login.ts:45` - SQL Injection vulnerability + +Current code: +```typescript +const user = await db.query( + `SELECT * FROM users WHERE email = '${email}'` +); +``` + +Suggested change: +```typescript +const user = await db.query( + 'SELECT * FROM users WHERE email = $1', + [email] +); +``` + +**CodeRabbit Analysis:** +- SQL Injection attack possible +- Risk of full data breach with malicious input + +**Severity:** ⚠️ CRITICAL (immediate fix required) + +Apply this change? [Y/n/skip] +> Y + +✅ Added to apply list + +[2/7] CRITICAL: `data/sync.ts:89` - Data loss risk +[...] +``` + +**Step 2.3 - MINOR Analysis & Recommendations:** + +``` +[In user's language] + +✅ CRITICAL/MAJOR selection complete (7 items) + +Now analyzing 16 MINOR recommendations. +Reviewing each item to provide application recommendations. + +[Analyzing...] + +## MINOR Recommendations Analysis Complete + +### ✅ Recommended to Apply (4 items) +Items with clear improvement benefits. + +1. `utils/format.ts:34` - Variable name clarification (`data` → `formattedUserData`) + - Rationale: Improved type inference, better readability, avoids conflicts with other data variables in scope + - Impact: Very low (variable rename only, 5 lines) + - Expected benefit: Increased code comprehension, easier maintenance + - Recommendation: ✅ Apply + +2. `api/response.ts:67` - Error handling improvement + - Current: try-catch만 있고 에러 로깅 없음 + - Suggestion: logger.error() 추가 + - Rationale: 프로덕션 디버깅 시 에러 추적 불가능 + - Impact: 낮음 (1줄 추가) + - Expected benefit: 문제 발생 시 빠른 원인 파악 + - recommended: ✅ applied / apply + +3. `models/user.ts:123` - Remove type assertion + - Current: `as User` 강제 캐스팅 + - Suggestion: 타입 가드 함수 사용 + - Rationale: 런타임 타입 불일치 위험 + - Impact: 중간 (타입 가드 함수 추가 필요, 10줄) + - Expected benefit: 타입 안정성 증가 + - recommended: ✅ applied / apply + +4. `services/notification.ts:45` - Extract magic number to constant + - Current: `setTimeout(() => ..., 5000)` + - Suggestion: `const RETRY_DELAY_MS = 5000` + - Rationale: 의미 명확화, 재사용 가능 + - Impact: 매우 낮음 (상수 선언 1줄) + - Expected benefit: 코드 가독성, 설정 변경 용이 + - recommended: ✅ applied / apply + +### 🔄 선택 applied / apply (9items) +프로젝트 스타일이나 향후 확장성에 따라 결정할 사항들입니다. + +5. `components/Button.tsx:89` - Function extraction suggestion + - Current: 25줄 단일 함수 + - Suggestion: 3개 함수로 분리 (렌더링/이벤트/스타일) + - Assessment: 현재도 충분히 읽기 쉬움, 분리 시 오버헤드 발생 + - recommended: 🔄 향후 기능 추가 시 고려 (현재는 Unnecessary) + +6. `hooks/useAuth.ts:34` - Extract custom hook + - Current: 동일 패턴 3곳에서 반복 + - Suggestion: useAuthCheck 훅으로 추출 + - Assessment: 추상화 이득 vs 복잡도 증가 trade-off + - recommended: 🔄 4개 이상 반복 시 고려 + +7. `api/middleware.ts:78` - Detailed error messages + - Current: "Invalid request" + - Suggestion: "Invalid request: missing required field 'email'" + - Assessment: 보안과 사용성 사이 균형 문제 + - recommended: 🔄 프로젝트 정책에 따라 결정 + +[... 더 많은 선택 applied / apply 항목] + +### ❌ Unnecessary (3items) +applied / apply하지 않는 것이 더 좋은 항목들입니다. + +14. `config/db.ts:12` - Add comments suggestion + - Suggestion: 각 설정값에 주석 설명 추가 + - Assessment: 코드가 충분히 자명하며, Excessive comments은 유지보수 부담 + - Rationale: + * 설정명이 명확 (`maxConnections`, `timeoutMs`) + * 타입과 기본값이 문서화 역할 + * 주석은 *왜*를 설명해야 하는데 *무엇*을 반복 + - recommended: ❌ Unnecessary + +15. `utils/array.ts:56` - Lodash 사용 제안 + - Current: 네이티브 map/filter 체이닝 + - Suggestion: Lodash chain 사용 + - Assessment: Unnecessary dependency 추가 + - Rationale: + * 네이티브 메서드로 충분히 명확 + * 번들 사이즈 증가 (수십 KB) + * 팀원 모두 네이티브 메서드에 익숙 + - recommended: ❌ Unnecessary + +16. `tests/user.test.ts:123` - Add test cases 제안 + - Suggestion: 엣지 케이스 10개 추가 + - Assessment: 과도한 테스트, 실용성 낮음 + - Rationale: + * 제안된 케이스들이 실제 발생 가능성 극히 낮음 + * 테스트 유지보수 비용 증가 + * 핵심 시나리오는 이미 커버 + - recommended: ❌ Unnecessary + +--- + +## processing 방안 제안 + +**즉시 applied / apply recommended:** CRITICAL 2items + MAJOR 5items + MINOR applied / applyrecommended 4items = 11items +**Consider in future:** MINOR 선택applied / apply 9items +**applied / apply 안 함:** MINOR Unnecessary 3items + +How would you like to proceed? +- [1] recommended사항 모두 applied / apply (11items) - 추천 +- [2] CRITICAL/MAJOR만 applied / apply (7items) +- [3] 개별 선택 (원하는 항목만 선택) +- [4] 선택 applied / apply 항목도 함께 review +- [5] 전체 중단 + +> [사용자 선택 대기] +``` + +**Step 2.4 - Individual Selection for MINOR (Option 3 or 4):** + +``` +> 3 + +개별 선택 모드로 진행하겠습니다. +먼저 CRITICAL/MAJOR부터 확인합니다. (강력 recommended) + +[CRITICAL/MAJOR 7items 개별 확인... 위의 2.2 과정] + +이제 MINOR applied / apply recommended 항목을 확인하시겠습니까? [Y/n] +> Y + +[recommended 1/4] `utils/format.ts:34` - 변수명 명확화 + +현재 코드: +```typescript +function formatUser(raw: any) { + const data = { + name: raw.userName, + email: raw.userEmail + }; + return data; +} +``` + +제안 변경: +```typescript +function formatUser(raw: any) { + const formattedUserData = { + name: raw.userName, + email: raw.userEmail + }; + return formattedUserData; +} +``` + +**analysis / analyzing:** +- ✅ 가독성 향상 확실 +- ✅ 영향 범위 최소 (5줄) +- ✅ 부작용 없음 +- ✅ 다른 data 변수와 구분 명확 + +applied / apply하시겠습니까? [Y/n/skip/detail] +> Y + +✅ applied / apply 목록에 추가 + +[recommended 2/4] `api/response.ts:67` - Error handling improvement +[...] +``` + +**Step 2.5 - Final Confirmation:** + +``` +## 최종 processing 요약 + +✅ applied / apply 예정: 11items +- CRITICAL: 2items + * auth/login.ts:45 - SQL Injection 수정 + * data/sync.ts:89 - 트랜잭션 추가 +- MAJOR: 5items + * api/users.ts:123 - N+1 쿼리 해결 + * cache/redis.ts:56 - 메모리 누수 수정 + * [...3items 더] +- MINOR (applied / apply recommended): 4items + * utils/format.ts:34 - 변수명 명확화 + * api/response.ts:67 - 에러 로깅 추가 + * models/user.ts:123 - 타입 가드 사용 + * services/notification.ts:45 - Extract magic number to constant + +🔄 skipped - Consider in future: 9items +- components/Button.tsx:89 - 함수 분리 (현재 복잡도 적정) +- hooks/useAuth.ts:34 - 커스텀 훅 (반복 3회, 4회부터 고려) +- [...7items 더] + +❌ skipped - Unnecessary: 3items +- config/db.ts:12 - Excessive comments (코드가 자명) +- utils/array.ts:56 - Unnecessary dependency 추가 +- tests/user.test.ts:123 - 과도한 엣지 케이스 + +--- + +Proceed as planned? +- [1] 예, 진행 (11items applied / apply) +- [2] review 내용 수정 (추가/제거) +- [3] 전체 중단 + +> [사용자 선택 대기] +``` + +### Phase 3: Application & Completion (Automatic with Verification) + +**Step 3.1 - Apply Changes:** + +``` +changes을 applied / apply하겠습니다. + +[1/11] CRITICAL: auth/login.ts:45 - SQL Injection 수정 +✅ complete / completed + +[2/11] CRITICAL: data/sync.ts:89 - 트랜잭션 추가 +✅ complete / completed + +[3/11] MAJOR: api/users.ts:123 - N+1 쿼리 해결 +✅ complete / completed + +[...] + +[11/11] MINOR: services/notification.ts:45 - 상수화 +✅ complete / completed + +✅ 모든 changes applied / apply complete / completed (11/11) +``` + +**Step 3.2 - Commit & Push:** + +``` +changes을 commit하고 push합니다. + +commit 메시지: "fix: Apply CodeRabbit feedback + +- CRITICAL: SQL injection, transaction safety +- MAJOR: N+1 queries, memory leaks, resource handling +- MINOR: Code quality improvements + +Applied 11 items (2 critical, 5 major, 4 minor recommended)" + +[실행] git add . +✅ Staged 6 files + +[실행] git commit -m "..." +✅ Commit created: a1b2c3d + +[실행] git push +✅ Pushed to origin/coderabbit-review-skill + +모든 changes이 commit되고 push되었습니다. +``` + +**Step 3.3 - Generate & Review PR Comment:** + +``` +PR에 post할 코멘트를 작성했습니다. + +--- +@coderabbitai resolve + +## CodeRabbit 피드백 processing complete / completed + +### applied / apply complete / completed (11items) + +**CRITICAL (2items)** +- `auth/login.ts:45` - SQL Injection 취약점 수정 (Prepared statement applied / apply) +- `data/sync.ts:89` - 트랜잭션 추가로 데이터 손실 위험 제거 + +**MAJOR (5items)** +- `api/users.ts:123` - N+1 쿼리 해결 (eager loading으로 101→1 쿼리 감소) +- `cache/redis.ts:56` - 메모리 누수 수정 (finally 블록 추가) +- `services/payment.ts:234` - 결제 실패 시 롤백 로직 추가 +- `api/search.ts:89` - 인덱스 누락 경고 해결 (복합 인덱스 추가) +- `workers/job.ts:156` - 무한 루프 위험 제거 (최대 재시도 횟수 설정) + +**MINOR - applied / apply recommended (4items)** +- `utils/format.ts:34` - 변수명 명확화 (data → formattedUserData) +- `api/response.ts:67` - 에러 로깅 추가 +- `models/user.ts:123` - 타입 가드 사용으로 안정성 향상 +- `services/notification.ts:45` - Extract magic number to constant + +### review complete / completed - applied / apply 안 함 (12items) + +**Consider in future 항목 (9items)** +- `components/Button.tsx:89` - Function extraction suggestion (현재 복잡도 적정) +- `hooks/useAuth.ts:34` - Extract custom hook (반복 3회, 4회부터 고려) +- `api/middleware.ts:78` - Detailed error messages (보안 정책 review 필요) +- `utils/validator.ts:45` - 정규식 성능 최적화 (현재 사용량에서 영향 미미) +- `components/Modal.tsx:123` - 접근성 속성 추가 (다음 스프린트 일괄 applied / apply 예정) +- `services/cache.ts:67` - 캐시 무효화 전략 개선 (아키텍처 논의 후 결정) +- `api/pagination.ts:34` - 커서 기반 페이지네이션 (현재 offset 방식 충분) +- `tests/integration/api.test.ts:89` - 테스트 격리 개선 (리팩토링 시 함께 진행) +- `docs/api.md:12` - API 문서 업데이트 (다음 릴리스 전 일괄 작업) + +**Unnecessary (3items)** +- `config/db.ts:12` - Excessive comments 추가 (코드가 충분히 자명함) +- `utils/array.ts:56` - Lodash 사용 제안 (Unnecessary dependency, 네이티브로 충분) +- `tests/user.test.ts:123` - 극단적 엣지 케이스 테스트 (실용성 낮음) + +### Statistics +- Total 23items review +- applied / apply: 11items (CRITICAL 2 + MAJOR 5 + MINOR 4) +- Consider in future: 9items +- Unnecessary: 3items + +--- + +이 코멘트를 PR에 post하시겠습니까? +- [1] 예, post +- [2] 내용 수정 +- [3] post 안 함 (recommended하지 않음) + +> [사용자 선택 대기] +``` + +**Step 3.4 - Edit Mode (Option 2):** + +``` +> 2 + +코멘트를 어떻게 수정하시겠습니까? +- [1] applied / apply 항목 설명 추가/수정 +- [2] items너뛴 항목 설명 추가/수정 +- [3] 직접 편집 (전체 텍스트) +- [4] 취소하고 그대로 post + +> 1 + +applied / apply 항목 중 수정할 항목의 번호나 파일명을 입력하세요: +(예: "1", "auth/login.ts:45", 또는 "done"으로 complete / completed) + +> api/users.ts:123 + +현재 설명: +"N+1 쿼리 해결 (eager loading으로 101→1 쿼리 감소)" + +새 설명을 입력하세요: (빈 줄 입력 시 현재 유지) +> N+1 쿼리 해결 (includes를 사용한 eager loading으로 성능 개선) + +✅ 업데이트 complete / completed + +다음 항목? (번호/파일명 또는 "done") +> done + +수정된 코멘트를 확인하시겠습니까? [Y/n] +> Y + +[수정된 코멘트 전체 다시 표시] + +post하시겠습니까? [Y/n/edit] +> Y +``` + +**Step 3.5 - Post & Verify:** + +``` +PR 코멘트를 post하고 검증합니다. + +[실행] gh pr comment 123 --body "..." +✅ 코멘트 post 성공 + +[대기] GitHub API 동기화 중... (2초) + +[검증 1/3] 최신 코멘트 조회 중... +✅ 코멘트 확인 + +[검증 2/3] @coderabbitai resolve 태그 존재 확인... +✅ 태그 확인 + +[검증 3/3] 코멘트 내용 무결성 확인... +✅ 모든 섹션 포함 확인 + +--- + +✅ 모든 단계 complete / completed! 🎉 + +## 최종 요약 +- ✅ 11items 코드 변경 applied / apply +- ✅ changes commit 및 push (a1b2c3d) +- ✅ PR 코멘트 post 및 검증 +- ✅ CodeRabbit 해결 마킹 complete / completed + +processing 내용: +- CRITICAL: 2items (보안 취약점, 데이터 손실 위험 해결) +- MAJOR: 5items (성능 및 중요 버그 수정) +- MINOR: 4items (코드 품질 개선) + +Consider in future 항목 9items은 적절한 시점에 review하시면 됩니다. +``` + +## The Iron Law: PR Comment is MANDATORY + +**PR comment with @coderabbitai resolve is NOT optional.** + +### Triple Verification System + +1. **Create Dedicated TodoWrite Item:** + ``` + - [ ] Post @coderabbitai resolve comment to PR (MANDATORY) + ``` + +2. **Post Comment:** + ```bash + gh pr comment "$PR_NUMBER" --body "$(cat <<'COMMENT_EOF' + @coderabbitai resolve + + ## CodeRabbit 피드백 processing complete / completed + [내용...] + COMMENT_EOF + )" + ``` + +3. **Immediate Verification (3 Checks):** + ```bash + # Check 1: Command succeeded + if [ $? -ne 0 ]; then + echo "❌ CRITICAL: Comment post failed" + # Retry logic + fi + + # Wait for API sync + sleep 2 + + # Check 2: Comment exists + LAST_COMMENT=$(gh pr view "$PR_NUMBER" --json comments --jq '.comments[-1].body') + + # Check 3: Contains resolve tag + if ! echo "$LAST_COMMENT" | grep -q "@coderabbitai resolve"; then + echo "❌ CRITICAL: PR comment missing @coderabbitai resolve tag" + # Retry logic + else + echo "✅ VERIFIED: PR comment posted with @coderabbitai resolve" + fi + ``` + +4. **Retry Logic:** + ```bash + post_pr_comment_with_verification() { + local pr_number=$1 + local comment_body=$2 + local max_attempts=3 + local attempt=1 + + while [ $attempt -le $max_attempts ]; do + echo "[Attempt $attempt/$max_attempts] Posting PR comment..." + + if gh pr comment "$pr_number" --body "$comment_body"; then + sleep 2 + + local last_comment=$(gh pr view "$pr_number" --json comments --jq '.comments[-1].body') + if echo "$last_comment" | grep -q "@coderabbitai resolve"; then + echo "✅ SUCCESS: PR comment verified" + return 0 + fi + fi + + echo "⚠️ Attempt $attempt failed, retrying..." + ((attempt++)) + sleep 3 + done + + echo "❌ CRITICAL FAILURE: Failed after $max_attempts attempts" + return 1 + } + ``` + +### Why This Matters + +- CodeRabbit tracks resolution through these comments +- Without comment, feedback thread stays open indefinitely +- Team members can't see what was addressed +- Automated workflows depend on resolution markers +- GitHub PR timeline needs closure for audit trail + +### Success Checklist + +Before marking workflow complete, verify ALL: +- [ ] `gh pr comment` command executed +- [ ] Command exit code = 0 +- [ ] Waited 2 seconds for API sync +- [ ] Latest PR comment retrieved successfully +- [ ] Comment contains "@coderabbitai resolve" +- [ ] Comment contains summary of applied changes +- [ ] Comment contains summary of skipped items +- [ ] TodoWrite item marked completed +- [ ] Output: "✅ VERIFIED: PR comment posted" + +**No shortcuts. No assumptions. Verify every time.** + +## Red Flags - Signs You're Skipping Verification + +**STOP immediately if you think:** +- "I'll just post the comment, verification is overkill" +- "The command succeeded, that's enough" +- "I'll check manually later" +- "User can verify in the PR" +- "Let me mark this todo as done..." + +**ALL OF THESE ARE FAILURES - VERIFY THE COMMENT** + +## Common Mistakes + +### ❌ Skipping Pagination +**Problem:** Missing comments when PR has 100+ comments +**Fix:** Use GraphQL/REST pagination to collect up to 200 comments + +### ❌ Not Providing Rationale +**Problem:** User doesn't understand why suggestions are categorized as recommended/optional/unnecessary +**Fix:** Include 1-2 line rationale for each MINOR item classification + +### ❌ Skipping PR Comment Verification +**Problem:** Assuming comment was posted without verification +**Fix:** Always run triple-verification (command success + API sync + tag check) + +### ❌ Auto-Applying Without Discussion +**Problem:** Applying changes user didn't explicitly approve +**Fix:** Present summary, get user decision, then apply only agreed items + +### ❌ Incomplete Error Recovery +**Problem:** Stopping workflow when single item fails +**Fix:** Skip failed item with explanation, continue with others, complete Phase 3 + +## Success Criteria + +- ✅ Collected all unresolved comments (up to 200 with pagination) +- ✅ Classified each item by severity (CRITICAL/MAJOR/MINOR) +- ✅ Discussed CRITICAL/MAJOR items with user +- ✅ Analyzed MINOR items with clear rationale +- ✅ Applied only user-approved changes +- ✅ Committed and pushed all changes +- ✅ Posted PR comment with @coderabbitai resolve +- ✅ Verified comment posting with triple-check system +- ✅ All TodoWrite items marked completed + +## Real-World Impact + +**Before this skill:** +- Manual classification of 20+ CodeRabbit comments took 15+ minutes +- Unclear why certain suggestions weren't applied +- Risk of missing important items due to pagination limits +- Inconsistent PR comment posting +- No verification that CodeRabbit received resolution + +**After this skill:** +- Interactive guided review in 5-7 minutes +- Clear rationale for each classification decision +- Complete coverage up to 200 comments with pagination +- Guaranteed PR comment posting with triple verification +- User feels confident about decisions with analysis support diff --git a/commands/coderabbit/fix.md b/commands/coderabbit/fix.md new file mode 100644 index 0000000..9ac0f97 --- /dev/null +++ b/commands/coderabbit/fix.md @@ -0,0 +1,5 @@ +--- +description: Process CodeRabbit AI feedback from current PR with severity-based classification and mandatory completion workflow +--- + +Launch the `coderabbit-feedback` agent to process CodeRabbit AI review comments from the current PR. diff --git a/commands/consulting/review.md b/commands/consulting/review.md new file mode 100644 index 0000000..4ceb11d --- /dev/null +++ b/commands/consulting/review.md @@ -0,0 +1,17 @@ +--- +description: Execute peer LLM reviews with specified CLI tools using the consulting-peer-llms skill +model: claude-sonnet-4-5 +--- + +Use the consulting-peer-llms skill to execute peer LLM reviews. + +**Arguments:** +- Optional: Specify one or more CLI tools to use (e.g., `gemini`, `codex`, `claude`) +- If no arguments provided: Auto-detect and use all installed CLI tools + +**Examples:** +- `/consulting-peer-llms:review gemini` - Review with Gemini only +- `/consulting-peer-llms:review gemini codex` - Review with Gemini and Codex +- `/consulting-peer-llms:review` - Review with all installed CLIs + +Execute the review workflow from the skill with the specified CLI arguments. diff --git a/commands/git/commit.md b/commands/git/commit.md new file mode 100644 index 0000000..73d59c4 --- /dev/null +++ b/commands/git/commit.md @@ -0,0 +1,8 @@ +--- +description: Create a git commit using the managing-git-workflow skill +model: claude-haiku-4-5 +--- + +Use the managing-git-workflow skill to create a git commit with Korean commit messages and automatic ticket extraction. + +Execute the commit workflow from the skill. diff --git a/commands/git/pr.md b/commands/git/pr.md new file mode 100644 index 0000000..969e90e --- /dev/null +++ b/commands/git/pr.md @@ -0,0 +1,8 @@ +--- +description: Create a pull request using the managing-git-workflow skill +model: claude-haiku-4-5 +--- + +Use the managing-git-workflow skill to create a pull request with automatic push and commit if needed. + +Execute the PR workflow from the skill. diff --git a/commands/git/push.md b/commands/git/push.md new file mode 100644 index 0000000..5492f2a --- /dev/null +++ b/commands/git/push.md @@ -0,0 +1,8 @@ +--- +description: Push changes to remote using the managing-git-workflow skill +model: claude-haiku-4-5 +--- + +Use the managing-git-workflow skill to push changes to remote repository with automatic commit if there are uncommitted changes. + +Execute the push workflow from the skill. diff --git a/plugin.lock.json b/plugin.lock.json new file mode 100644 index 0000000..3d1dd99 --- /dev/null +++ b/plugin.lock.json @@ -0,0 +1,65 @@ +{ + "$schema": "internal://schemas/plugin.lock.v1.json", + "pluginId": "gh:ether-moon/skill-set:plugins/skill-set", + "normalized": { + "repo": null, + "ref": "refs/tags/v20251128.0", + "commit": "f9e096c884d85845c4ed22744e8c4cb5c0c02a85", + "treeHash": "2684b978aefcd5b0ced0b4f6b737f96019818fd665e28769acdbf1b96746d5a2", + "generatedAt": "2025-11-28T10:16:49.765893Z", + "toolVersion": "publish_plugins.py@0.2.0" + }, + "origin": { + "remote": "git@github.com:zhongweili/42plugin-data.git", + "branch": "master", + "commit": "aa1497ed0949fd50e99e70d6324a29c5b34f9390", + "repoRoot": "/Users/zhongweili/projects/openmind/42plugin-data" + }, + "manifest": { + "name": "skill-set", + "description": "Comprehensive productivity skills and development tools for Claude Code, including git workflow automation, code context understanding, browser automation, peer LLM consulting, and CodeRabbit feedback processing.", + "version": "1.0.1" + }, + "content": { + "files": [ + { + "path": "README.md", + "sha256": "66552dc92db54f4c3236f513bcba87e5372f89b96722e06cf64f4c3bf30baf90" + }, + { + "path": "agents/coderabbit-feedback.md", + "sha256": "07e88da8f3789869bcb22717bf1f37f7574c00b17ad219d5c3c80178779d2f0f" + }, + { + "path": ".claude-plugin/plugin.json", + "sha256": "a3624f64d9a143f78ff23b48c7f137467683c6a171c92c3e0037845157896fe5" + }, + { + "path": "commands/coderabbit/fix.md", + "sha256": "ba4c5ce7900ed715823e25b3a1348ca3176d4f8a08bb05b868d4946512ea96a7" + }, + { + "path": "commands/consulting/review.md", + "sha256": "31a181e39e4ecf728847dee2f9d9ffacd8cb4dc57dd7fed52a314407d7e04e3b" + }, + { + "path": "commands/git/pr.md", + "sha256": "fa40de92a074a624910b9d887614e45c5ad087b4b779eae4f98a7035cc70b258" + }, + { + "path": "commands/git/push.md", + "sha256": "9df0afed131d01c2c47ec8cbd4189c54875bc0e12968318ef60b90f4e5f69976" + }, + { + "path": "commands/git/commit.md", + "sha256": "60e100a5c5a3dbe3f9e6d2a44651bcccc61fe6b65fdc70f338d1e2056ecd097a" + } + ], + "dirSha256": "2684b978aefcd5b0ced0b4f6b737f96019818fd665e28769acdbf1b96746d5a2" + }, + "security": { + "scannedAt": null, + "scannerVersion": null, + "flags": [] + } +} \ No newline at end of file