Use when adding new error messages to React, or seeing "unknown error code" warnings.
npx skills add raki-1203/claude-config --skill "fix-issue"
Install specific skill from multi-skill repository
# Description
GitHub 이슈를 TDD 기반으로 해결. 브랜치 생성 → TDD → 리뷰 → (통과 시) 커밋/PR → 배포. 리뷰 실패 시 수정 후 재리뷰. Use when: '/fix-issue [이슈번호]', 'fix issue', '이슈 수정', '이슈 해결', 'resolve issue'. ALWAYS uses tdd-guide skill for test-first development.
# SKILL.md
name: fix-issue
description: "GitHub 이슈를 TDD 기반으로 해결. 브랜치 생성 → TDD → 리뷰 → (통과 시) 커밋/PR → 배포. 리뷰 실패 시 수정 후 재리뷰. Use when: '/fix-issue [이슈번호]', 'fix issue', '이슈 수정', '이슈 해결', 'resolve issue'. ALWAYS uses tdd-guide skill for test-first development."
Fix Issue with TDD
GitHub 이슈 해결: TDD (테스트 먼저) + 자동 배포
Quick Start
/fix-issue 68
Workflow Overview
이슈 분석 → 브랜치 생성 → TDD (테스트→수정→리팩토링) → 리뷰 → [통과] → 커밋 → PR → 배포
↑ ↓
└─ [실패] ←┘ (수정 후 재리뷰)
Required Skills
자동 로드: 이 skill 사용 시 tdd-guide skill도 함께 로드
delegate_task(load_skills=["fix-issue", "tdd-guide"], ...)
Phase 1: Issue Analysis
gh issue view $ISSUE_NUMBER
Extract from issue:
- Title: 브랜치명 및 커밋 메시지용
- Labels: bug/feature/enhancement 분류
- Body: 재현 단계, 관련 컴포넌트 힌트
Phase 2: Branch Creation
git checkout main
git pull origin main
git checkout -b {issue_number}-{kebab-case-title}
Branch naming: 68-fix-login-button-mobile
Phase 3: TDD-based Resolution
핵심: 테스트 먼저, 코드 나중 (tdd-guide skill 참조)
3.1 Write Failing Test (RED)
이슈를 재현하는 테스트 작성:
// Bug: "로그인 버튼이 비활성화 안됨"
describe('LoginButton', () => {
it('should be disabled when email is empty', () => {
render(<LoginButton email="" password="123" />)
expect(screen.getByRole('button')).toBeDisabled() // 이게 실패해야 함
})
})
3.2 Verify Test FAILS
npm test # 반드시 실패 확인
테스트가 통과하면: 잘못된 테스트 → 다시 작성
3.3 Write Minimal Fix (GREEN)
테스트 통과하는 최소한의 코드만 작성:
// 최소 수정
function LoginButton({ email, password }) {
const isDisabled = !email || !password // 이 한 줄 추가
return <button disabled={isDisabled}>Login</button>
}
3.4 Verify Test PASSES
npm test # 이제 통과
3.5 Refactor (IMPROVE)
테스트 유지하며 코드 정리:
- 중복 제거
- 이름 개선
- OCP 원칙 적용
3.6 OCP Principle (Open-Closed Principle)
리팩토링 시 우선순위:
| 순위 | 접근 방식 | 예시 |
|---|---|---|
| 1순위 | 새 파일/클래스 추가 | 새 Provider, Service 생성 |
| 2순위 | 기존 인터페이스 확장 | 필드/메서드 추가 (시그니처 유지) |
| 3순위 | 기존 코드 최소 수정 | 호출부만 수정, 로직은 새 코드에 위임 |
3.7 Verify Coverage
npm test -- --coverage # 80%+ 목표
Phase 4: Code Review (커밋 전 필수)
핵심: 리뷰 통과 전까지 커밋/PR 진행하지 않음
4.1 code-reviewer 에이전트로 리뷰 수행
# code-reviewer 에이전트 활성화하여 변경사항 리뷰
delegate_task(
subagent_type="code-reviewer",
load_skills=["security-review"],
prompt="Review the changes for issue #{issue_number}. Check: security, code quality, performance, best practices."
)
4.2 리뷰 항목
| 카테고리 | 체크 포인트 |
|---|---|
| 보안 | 하드코딩된 자격증명, SQL 주입, XSS 취약점 |
| 코드 품질 | 함수 크기, 중첩 깊이, 에러 처리, 테스트 커버리지 |
| 성능 | 알고리즘 효율성, 캐싱, N+1 쿼리 패턴 |
| 모범 사례 | 명명 규칙, 문서화, 접근성 |
4.3 리뷰 결과 처리
✅ APPROVE → Phase 5 (커밋) 진행
⚠️ WARNING → 권장 사항 검토 후 결정 (진행 or 수정)
❌ BLOCK → 반드시 수정 후 Phase 4 재실행
4.4 리뷰 실패 시 수정 루프
리뷰 실패 (❌ BLOCK)
↓
지적 사항 분석
↓
코드 수정 (Phase 3의 TDD 방식 유지)
↓
테스트 재실행
↓
Phase 4 재실행 (재리뷰)
↓
통과할 때까지 반복
재리뷰 시 이전 지적 사항이 해결되었는지 명시적으로 확인
Phase 5: Commit & Push (리뷰 통과 후)
선행 조건: Phase 4 리뷰 ✅ APPROVE 또는 ⚠️ WARNING (사용자 승인)
git add .
git commit -m "{type}: {summary} (#{issue_number})"
git push -u origin {branch_name}
Commit types: fix, feat, refactor, chore, docs
Phase 6: PR Creation
gh pr create --title "{type}: {title}" --body "$(cat <<'EOF'
Fixes #{issue_number}
## Changes
- {변경 내용}
## Testing
- {테스트 방법}
## Code Review
- ✅ Reviewed by code-reviewer agent
- {리뷰 결과 요약}
EOF
)"
Phase 7: Auto Deploy
프로젝트 타입을 자동 감지하여 적절한 배포 수행.
7.1 Project Type Detection
# Detection order (first match wins)
if [ -f "pubspec.yaml" ]; then
PROJECT_TYPE="flutter"
elif [ -d "*.xcodeproj" ] || [ -d "*.xcworkspace" ]; then
PROJECT_TYPE="ios-native"
elif [ -f "package.json" ]; then
PROJECT_TYPE="web"
fi
7.2 Custom Deploy Config (Optional)
프로젝트 루트에 .deploy.yaml 파일이 있으면 커스텀 설정 사용:
# .deploy.yaml example
type: flutter # flutter | ios-native | web
platform: ios # ios | android | web
modes:
local:
commands:
- flutter build ios --debug
- flutter install
remote:
commands:
- flutter build ipa --release
- cd ios && fastlane beta
7.3 Deploy by Project Type
iOS/Flutter Projects
# Check USB connection
ios-deploy --detect 2>/dev/null
if [ $? -eq 0 ]; then
# USB connected → Local install (fast)
DEPLOY_MODE="local"
else
# No USB → TestFlight (remote)
DEPLOY_MODE="remote"
fi
Local Deploy (USB):
- Flutter: flutter install
- iOS Native: ios-deploy --bundle build/ios/iphoneos/Runner.app
Remote Deploy (TestFlight):
- Flutter: flutter build ipa && cd ios && fastlane pilot upload
- iOS Native: fastlane pilot upload
See references/deploy-ios.md for detailed commands.
Web Projects
웹 프로젝트는 로컬 테스트가 쉬우므로 배포는 선택적:
"Preview 배포를 할까요? (Vercel/Netlify)"
├─ Yes → Preview URL 생성
└─ No → 스킵
If Yes:
- Vercel: vercel
- Netlify: netlify deploy
- Custom: .deploy.yaml 참조
See references/deploy-web.md for detailed commands.
Phase 8: Completion Report
✅ 이슈 #68 해결 완료
📌 Branch: 68-fix-login-button-mobile
🔀 PR: #69 (URL)
📱 Deploy: TestFlight (build 1.2.3)
🔍 Code Review: ✅ Approved
💡 다음 단계:
- PR 리뷰 요청
- TestFlight에서 테스트 확인
Error Handling
| 상황 | 처리 |
|---|---|
| 이슈 없음 | "이슈 #N을 찾을 수 없습니다" |
| 브랜치 이미 존재 | 기존 브랜치 checkout |
| 빌드 실패 | 에러 로그 표시, 배포 스킵 |
| ios-deploy 미설치 | "npm install -g ios-deploy 실행" |
| fastlane 미설치 | "gem install fastlane 실행" |
Examples
Example 1: Flutter iOS Bug Fix (리뷰 통과)
/fix-issue 68
→ 이슈 분석: "로그인 버튼 모바일 크기 문제"
→ 브랜치: 68-fix-login-button-mobile
→ TDD: 테스트 작성 → 수정 → 테스트 통과
→ Code Review (code-reviewer): ✅ APPROVE
→ 커밋 & 푸시
→ PR #69 생성
→ USB 연결 감지됨 → flutter install
→ "iPhone에 설치 완료! 테스트해주세요"
Example 2: 리뷰 실패 후 재수정
/fix-issue 42
→ 이슈 분석: "프로필 사진 업로드 실패"
→ 브랜치: 42-fix-profile-upload
→ TDD: 수정 완료, 테스트 통과
→ Code Review (code-reviewer): ❌ BLOCK
- "보안 이슈: 파일 타입 검증 누락"
→ 수정: 파일 타입 검증 추가
→ 테스트 재실행 → 통과
→ Code Review (재리뷰): ✅ APPROVE
→ 커밋 & 푸시
→ PR #43 생성
→ TestFlight 업로드 완료
Example 3: Web Project (경고 수준 통과)
/fix-issue 15
→ 이슈 분석: "다크모드 토글 버그"
→ 브랜치: 15-fix-darkmode-toggle
→ 수정 완료
→ Code Review (code-reviewer): ⚠️ WARNING
- "성능: 불필요한 리렌더링 있음 (권장 수정)"
→ 사용자 확인: "진행할까요?" → Yes
→ 커밋 & 푸시
→ PR #16 생성
→ "Preview 배포할까요?" → No
→ "완료! npm run dev로 로컬 테스트 가능"
Integration
Required Skills:
- tdd-guide: TDD 워크플로우 (자동 로드)
Related Agents:
- code-reviewer: 커밋 전 자동 코드 리뷰 (Phase 4) - 리뷰 통과 필수
Works with:
- /gh-issue: 이슈 생성
- /commit-pr-merge: PR 머지
- kent-beck-refactor: 리팩토링 후처리
- code-review: 수동 코드 리뷰
Bugfix Rule
버그 수정 시 최소한의 변경만 수행. 리팩토링 금지.
예외:
- 명백한 버그 수정 (로직/타입 오류)
- 보안 취약점 패치
- 잘못된 설계 (사전 협의 필요)
# Supported AI Coding Agents
This skill is compatible with the SKILL.md standard and works with all major AI coding agents:
Learn more about the SKILL.md standard and how to use these skills with your preferred AI coding agent.