user-scope-skills/jira-assess/SKILL.md
Use when "/jira:assess", "지라 스코프", "지라 영향도", "코드베이스 분석", "jira assess", "jira scope", "ticket scope", "impact assessment", "스코프 분석해줘", "영향도 분석", "코드 영향 분석", "이 티켓 코드베이스에서 뭘 바꿔야 해". Also use as the second step after /jira:recon completes.
npx skillsauth add onejaejae/skills jira-assessInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
리서치 리포트(specs/{KEY}-research.md)를 읽고 대상 프로젝트 코드베이스를 2라운드 6에이전트 병렬 분석하여 구조화된 스코프 리포트를 생성한다.
Phase 0: Prerequisites (리포트 로드 + 프로젝트 경로 확인)
Phase 1: State Discovery (3 parallel agents)
Phase 2: Deep Analysis (3 parallel agents, Phase 1 결과 주입)
Phase 3: Synthesis → ~/.claude/specs/{KEY}-scope.md
티켓 키 추출: 입력에서 Jira 키를 파싱한다.
https://khc.atlassian.net/browse/DPHRS-8?... → DPHRS-8DPHRS-8 → DPHRS-8([A-Z][A-Z0-9]+-\d+)리서치 리포트 로드:
ls ~/.claude/specs/{KEY}-research.md
/jira:recon {KEY}를 실행해주세요." → STOP리서치 리포트 파싱: 로드된 리포트에서 핵심 정보 추출
대상 프로젝트 경로 확인 (교차 검증 필수):
Step 4-A: 티켓 컨텍스트에서 프로젝트 힌트 추출
[통합홈], [연구검색], [지표모니터] 등[FE/with-client], [BE/clue-api] 등ticket_project_hint로 저장Step 4-B: cwd 프로젝트 정체성 확인
/projects/clue-api → cwd_project = "clue-api"Step 4-C: 교차 검증
ticket_project_hint와 cwd_project가 일치하면 → cwd를 프로젝트 루트로 사용이 티켓은 '{ticket_project_hint}' 관련으로 보이는데,
현재 디렉토리는 '{cwd_project}'입니다.
분석할 프로젝트 경로를 알려주세요.
Why: DPHRS-8 E2E에서 티켓은 [통합홈](with-api) 대상이었으나, cwd가 clue-api여서 엉뚱한 프로젝트를 분석. 서브태스크 전체가 잘못된 코드베이스 기반으로 생성됨.
상태 출력:
## jira:assess — {KEY}
Analyzing codebase impact for {KEY}: {Title}
Project: {project_root}
Research: ~/.claude/specs/{KEY}-research.md (Confidence: {level})
바로 Phase 1로 진행한다.
3개 에이전트를 단일 메시지에서 동시에 실행한다. 각 에이전트는 subagent_type: "Explore"를 사용한다.
리서치 리포트에서 추출한 도메인 키워드를 각 에이전트 프롬프트에 주입하여 검색 정확도를 높인다.
Prompt template:
"프로젝트 '{project_root}'에서 다음 요구사항과 관련된 DB 모델, 스키마, 마이그레이션,
DTO, Enum을 모두 찾아라.
요구사항:
{requirements_summary}
검색 키워드: {domain_keywords}
구체적으로 (프로젝트 언어에 맞게 적응):
**Python**: models/**/*.py, migrations/**/*.py, dtos/**/*.py, enums/**/*.py
**TypeScript/JS**: **/models/**/*.ts, **/entities/**/*.ts, **/migrations/**/*.ts, **/dto/**/*.ts, **/enums/**/*.ts
**Go**: **/models/**/*.go, **/entities/**/*.go, **/migrations/**/*.go
**공통 Grep**: 'class.*Model', 'class.*Entity', 'class.*Enum', 'CREATE TABLE', 'schema', 'migration'
1. ORM 모델/엔티티 파일
2. DB 마이그레이션 파일
3. DTO/Schema 파일
4. Enum/상수 정의
5. DB 설정/connection
각 파일에 대해:
- 파일 경로 (repo-relative)
- 관련 클래스/테이블명
- 요구사항과의 관련도 (HIGH/MED/LOW)
- 현재 필드/컬럼 목록 (관련 모델만)"
Prompt template:
"프로젝트 '{project_root}'에서 다음 요구사항과 관련된 서비스, 컨트롤러, API 엔드포인트,
미들웨어를 모두 찾아라.
요구사항:
{requirements_summary}
검색 키워드: {domain_keywords}
구체적으로 (프로젝트 언어에 맞게 적응):
**Python**: services/**/*.py, controllers/**/*.py, views/**/*.py, tasks/**/*.py
**TypeScript/JS**: **/services/**/*.ts, **/controllers/**/*.ts, **/routes/**/*.ts, **/middleware/**/*.ts
**Go**: **/handlers/**/*.go, **/services/**/*.go, **/middleware/**/*.go, **/routes/**/*.go
**공통 Grep**: 'route', 'endpoint', 'handler', 'middleware', 'guard', 'interceptor', 'decorator'
1. 서비스 레이어 (비즈니스 로직)
2. 컨트롤러/핸들러 (요청 처리)
3. API 라우트/URL 설정
4. 미들웨어/데코레이터/가드
5. 비동기 작업 (Celery/Bull/Worker)
각 파일에 대해:
- 파일 경로 (repo-relative)
- 클래스/함수명
- API 엔드포인트 (있으면)
- 요구사항과의 관련도 (HIGH/MED/LOW)
- 핵심 로직 요약 (3줄 이내)"
Prompt template:
"프로젝트 '{project_root}'에서 다음 요구사항과 관련된 테스트, 설정, 상수, 시드 데이터를
모두 찾아라.
요구사항:
{requirements_summary}
검색 키워드: {domain_keywords}
구체적으로 (프로젝트 언어에 맞게 적응):
**Python**: tests/**/*.py, conftest.py, **/*.cfg, **/constants/**/*.py
**TypeScript/JS**: **/__tests__/**/*.ts, **/*.test.ts, **/*.spec.ts, jest.config.*, .env*
**Go**: **/*_test.go, **/testdata/**, **/config/**
**공통**: .github/**/*.yml, Dockerfile*, docker-compose*, Makefile, package.json, pyproject.toml
1. 테스트 파일 + 테스트 설정
2. conftest/fixture/mock 파일
3. 설정 파일 (앱 설정, 환경 변수)
4. 상수/Enum 정의
5. 시드/초기/픽스처 데이터
6. CI/CD + 인프라 설정
각 파일에 대해:
- 파일 경로 (repo-relative)
- 테스트 클래스/함수명 (테스트 파일인 경우)
- 요구사항과의 관련도 (HIGH/MED/LOW)
- 현재 테스트 커버리지 상태 (있으면)"
에이전트 호출이 인프라 제약 (쿼터 소진, rate limit, 세션 한도)으로 실패한 경우에만 적용한다. 프로젝트/코드 문제로 인한 실패는 일반 Agent Failure Tier를 따른다.
감지 조건 (다음 중 하나):
Fallback 절차 — 에이전트 대신 직접 도구 호출로 동일한 조사를 수행한다:
schema-model-finder → 직접 Glob/Grep:
Glob("**/models/**/*.py"), Glob("**/exceptions/**/*.py"), Glob("**/migrations/**/*.py")
Grep("class.*Model|class.*Entity|class.*Enum", glob="**/*.py")
주요 파일은 Read로 직접 확인.
service-api-finder → 직접 Glob/Grep:
Glob("**/services/**/*.py"), Glob("**/controllers/**/*.py"), Glob("**/tasks/**/*.py")
Grep("@celery.task|@app.route|def [a-z_]+\\(", glob="**/*.py")
핵심 로직은 Read로 확인.
test-config-finder → 직접 Glob + Bash:
Glob("tests/**/*.py"), Glob("resources/logging_config/*.json")
Bash("find {project} -name conftest.py")
Grep("sentry|raven|rollbar", glob="**/*.py") # APM 존재 여부
결과 저장: 에이전트 fallback이어도 /tmp/{KEY}-phase1-agent{N}.md 임시 파일에 저장한다 (Phase 2 핸드오프 호환성 유지).
Confidence 강제 하향: Agent fallback이 1번이라도 발생하면 Confidence를 최대 MED로 제한한다. 직접 조사는 에이전트 탐색보다 커버리지가 낮기 때문.
사용자 고지: Phase 1 완료 출력에 명시:
Phase 1 complete (3/3 agents via direct tool fallback — quota exhausted)
Confidence capped at MED due to fallback
Phase 2에서도 동일 쿼터 제약이 예상되는 경우, Phase 2 에이전트 3개도 fallback 모드로 진행:
/tmp/{KEY}-phase1-agent*.md Read + 레이어별 직접 요약Why: DPHRS-29 E2E에서 3개 Phase 1 에이전트 모두 쿼터 소진으로 실패. 수동 Glob/Grep/Read로 동일한 결과를 얻었으나, 절차가 문서화되지 않아 매번 애드혹 대응이 필요했다. 인프라 장애는 재발 가능성이 높으므로 명시적 fallback 경로가 필요하다.
3개 에이전트 결과를 수집한다. 실패한 에이전트가 있으면 기록하고 계속 진행한다.
결과 저장 (Phase 2 핸드오프 최적화): Phase 1 결과는 context window 절감을 위해 임시 파일에 저장한다:
# 각 에이전트 결과를 임시 파일에 저장
Write("/tmp/{KEY}-phase1-agent1.md", agent_1_full_results)
Write("/tmp/{KEY}-phase1-agent2.md", agent_2_full_results)
Write("/tmp/{KEY}-phase1-agent3.md", agent_3_full_results)
Phase 2 에이전트에는 요약 + 파일 경로를 주입한다 (전체 결과를 인라인 주입하지 않음):
/tmp/{KEY}-phase1-agent{N}.md를 Read하여 필요 시 참조Why: DPHRS-8 E2E에서 Phase 1 결과를 요약본으로만 전달하여 Phase 2에서 정보 손실 발생 (I3). 임시 파일 저장으로 전체 결과를 보존하면서 context window 부담 최소화.
중간 상태 출력:
Phase 1 complete: {N}/3 agents returned
schema-model: {found_count} files | service-api: {found_count} files | test-config: {found_count} files
Results saved: /tmp/{KEY}-phase1-agent{1,2,3}.md
Proceeding to deep analysis...
Phase 1 결과를 주입하여 3개 에이전트를 단일 메시지에서 동시에 실행한다. subagent_type: "Explore"를 사용한다.
Prompt template:
"다음 코드베이스 탐색 결과를 바탕으로, 요구사항 관점에서 현재 상태(ASIS)를 레이어별로
문서화하라.
요구사항:
{requirements_summary}
코드베이스 탐색 결과:
- DB/모델: {agent_1_results}
- 서비스/API: {agent_2_results}
- 테스트/설정: {agent_3_results}
프로젝트 루트: {project_root}
레이어별로 정리:
1. **DB Layer**: 관련 테이블, 컬럼, 관계, 인덱스
2. **Model Layer**: ORM 모델, 필드, 유효성 검사
3. **Service Layer**: 비즈니스 로직 흐름, 의존성
4. **API Layer**: 엔드포인트, 요청/응답 스키마, 인증
5. **Test Layer**: 기존 테스트 커버리지, 테스트 패턴
6. **Config Layer**: 관련 설정, 환경 변수, 상수
각 레이어에서:
- 현재 동작 방식 요약
- 요구사항과 직접 관련된 코드 위치 (파일:라인)
- 재사용 가능한 기존 코드/패턴
필요하면 실제 파일을 Read해서 정확한 내용을 확인하라."
Prompt template:
"리서치 리포트의 요구사항과 코드베이스 현재 상태를 비교하여 Gap 분석을 수행하라.
요구사항 (리서치 리포트에서):
{requirements_full}
수용 기준:
{acceptance_criteria}
코드베이스 탐색 결과:
- DB/모델: {agent_1_results}
- 서비스/API: {agent_2_results}
- 테스트/설정: {agent_3_results}
프로젝트 루트: {project_root}
각 요구사항에 대해:
| 요구사항 | 상태 | Gap 설명 | 복잡도 |
- **상태**: DONE (이미 구현됨) / PARTIAL (일부 구현) / MISSING (미구현)
- **Gap 설명**: PARTIAL/MISSING인 경우 구체적으로 무엇이 없는지
- **복잡도**: LOW (단순 추가) / MED (기존 코드 수정) / HIGH (구조 변경 필요)
또한:
- 기존 코드와 충돌 가능성
- 요구사항 간 의존 관계
- 숨겨진 요구사항 (리서치에 명시되지 않았지만 구현에 필요한 것)
- **유사 기능 감지**: 새 API/기능을 MISSING으로 판정할 때, 기존에 유사한 엔드포인트나 메서드가 부분적으로 존재하는지 확인. 있으면 '기존 X 확장 vs 신규 생성' 설계 선택지를 Section 7에 Open Question으로 추가.
필요하면 실제 파일을 Read해서 정확한 Gap을 확인하라."
Prompt template:
"코드베이스 탐색 결과를 바탕으로, 요구사항 구현 시 영향받는 모든 파일의 변경 타입,
리스크, 공수를 평가하라.
요구사항:
{requirements_summary}
코드베이스 탐색 결과:
- DB/모델: {agent_1_results}
- 서비스/API: {agent_2_results}
- 테스트/설정: {agent_3_results}
프로젝트 루트: {project_root}
파일별 영향도 테이블:
| 파일 경로 | 변경 타입 | 리스크 | 공수(h) | 의존성 | 이유 |
- **변경 타입**: CREATE / MODIFY / DELETE / NONE(참조만)
- **리스크**: HIGH (기존 기능 깨질 수 있음) / MED (테스트 필요) / LOW (안전)
- **공수(h)**: 시간 단위 추정
- **의존성**: 이 파일 변경 전에 먼저 변경해야 할 파일
리스크 요약:
- HIGH 리스크 항목과 그 이유
- 마이그레이션 필요 여부
- 하위 호환성 이슈
- 배포 순서 제약
공수 추정 (중급 개발자 기준 — 해당 프로젝트 언어/프레임워크 경험 2~3년차):
- Scope A (최소): 핵심 요구사항만 구현
- Scope B (확장): 전체 요구사항 + 테스트 + 문서
필요하면 실제 파일을 Read해서 정확한 리스크를 확인하라."
6개 에이전트 결과를 모두 수집한다.
중간 상태 출력:
Phase 2 complete: {N}/3 agents returned (total: {M}/6)
Synthesizing scope report...
모든 에이전트 결과를 references/report-template.md의 8-섹션 구조로 합성하여
~/.claude/specs/{KEY}-scope.md에 저장한다.
직접 합성한다 — 에이전트 불필요.
Confidence는 다음 두 요소의 최솟값:
| 요소 | HIGH | MED | LOW | |------|------|-----|-----| | Agent Coverage | 5-6/6 성공 | 3-4/6 성공 | 1-2/6 성공 | | Gap Completeness | 모든 요구사항에 gap 분석 존재 | 1-2개 누락 | 3개 이상 누락 |
jira:dispatch의 직접 입력이 된다. Effort 형식은 반드시 {숫자}h (예: 5h, 3.5h).Agent 6 (impact-risk-assessor)의 파일별 공수 추정을 합성할 때:
HIGH_VARIANCE 플래그
Why: DPHRS-8 E2E에서 Agent 간 공수 추정이 3배 차이 (11.5h vs 30h). Reconciliation 없이 합성하면 dispatch 태스크의 공수 추정 신뢰도가 낮아짐 (I4).
Section 6은 하류 스킬(jira:dispatch)이 파싱하므로 구조가 고정되어야 한다:
## 6. Task Definition Candidates
| # | Task | Priority | Assignee | Dependencies | Effort | DoD |
|---|------|----------|----------|-------------|--------|-----|
| 1 | {task title} | HIGH | - | - | {hours}h | {completion criteria} |
| 2 | {task title} | MED | - | #1 | {hours}h | {completion criteria} |
태스크 생성 원칙:
jira:dispatch에서 기본값 적용#N은 같은 Section 6 테이블 내 태스크 번호. 기존 Jira 서브태스크에 의존하는 경우 DPHRS-42 같은 실제 Jira 키를 직접 기재한다. dispatch가 #N만 치환하고 Jira 키는 그대로 유지.분리 (별도 태스크)해야 하는 경우:
병합 (하나의 태스크)해야 하는 경우:
적정 태스크 수:
## jira:assess Complete
**Confidence: {HIGH|MED|LOW}** — {N}/6 agents completed
**Report**: ~/.claude/specs/{KEY}-scope.md
### Summary
- ASIS: {N} layers documented
- Gap: {done}/{partial}/{missing} requirements
- Impact: {files_count} files ({high}/{med}/{low} risk)
- Effort: Scope A {hours}h / Scope B {hours}h
- Tasks: {task_count} candidates defined
{Risk highlights if any HIGH risks}
Next: /deep-interview (to resolve Open Questions) → /jira:dispatch {KEY}
jira:dispatch가 Section 6을 파싱)subagent_type: "Explore"를 사용. 코드 수정 금지./tmp/{KEY}-phase1-agent{N}.md에 저장하고, Phase 2 에이전트에는 요약 + 파일 경로를 주입. 인라인 전체 결과 주입 금지 (context window 절감). (DPHRS-8 E2E I3에서 정보 손실 발생)[통합홈] 티켓을 clue-api에서 분석하여 서브태스크 전체 무효화)| Scenario | Action | Confidence | |----------|--------|------------| | 1 agent fails (project/code error) | SKIPPED 표시, 나머지로 합성 | HIGH (5/6) | | 2 agents fail (same phase) | 해당 phase 부분 분석 | MED (4/6) | | 2 agents fail (cross-phase) | 양쪽 phase 일부 누락 | MED (4/6) | | 3+ agents fail (project/code) | 부분 리포트 + LOW CONFIDENCE 경고 | LOW (<=3/6) | | All Phase 1 fail (quota/rate limit) | Agent Fallback 절차 발동 (위 Phase 1 섹션 참조). 직접 도구로 진행. | MED (capped) | | All Phase 1 fail (project error) | Phase 2 진행 불가 → STOP with "Phase 1 전체 실패. 프로젝트 경로({project_root}) 확인 후 재실행하세요." | NONE — abort | | Research report parse fail | "리포트 형식이 올바르지 않습니다" → STOP | NONE — abort |
testing
CLAUDE.md 기반 환경 안전 체크. 작업 시작 전에 프로젝트의 안전 규칙, 컨벤션, 환경 설정을 자동 검증하여 CLEAR/WARNING/BLOCKED 상태를 보고한다. /check가 "변경 후 검증"이라면, /pre-flight는 "작업 전 환경 검증"이다. Use PROACTIVELY before starting work, especially after switching branches, pulling changes, or resuming a session. Also use when explicitly asked: "/pre-flight", "프리플라이트", "환경 체크", "작업 전 점검", "안전 체크", "environment check", "pre-flight check", "시작해도 돼?", "환경 괜찮아?", "safety check", "DB 확인", "설정 확인", "config check".
tools
PR 리뷰 워크플로우와 체크리스트를 제공하는 스킬. "PR 리뷰해줘", "코드 리뷰 해줘", "이 PR 봐줘", "review this PR" 등 PR 리뷰 요청 시 사용. GitHub/GitLab PR URL 또는 로컬 브랜치 diff를 기반으로 체계적이고 일관된 리뷰를 수행. 코드 품질, 안정성/보안, 성능, 테스트, 문서화 관점에서 건설적인 피드백 제공.
documentation
PR review comments를 체계적으로 처리하는 skill. Use when: (1) PR에 동료의 리뷰가 달렸을 때, (2) 여러 리뷰를 한 번에 처리하고 싶을 때, (3) 수정 후 commit 링크가 포함된 reply를 자동으로 추가하고 싶을 때
tools
PR diff를 받아 코드 리뷰 자동 요약을 생성하는 스킬. 핵심 변경점을 3줄로 요약하고, 변경 파일별로 what changed / why it matters / risk level을 정리. Use when: "PR 요약", "diff 요약", "PR 변경점 정리", "코드 변경 요약", "summarize PR", "PR summary", "diff summary", "what changed in this PR", "변경점 요약해줘", "PR 핵심 정리", "리뷰 요약"