user-scope-skills/jira-ops/SKILL.md
Use when "/jira:ops", "지라 오퍼레이션", "지라 전체 파이프라인", "jira ops", "jira pipeline", "티켓 처리", "티켓 전체 프로세스", "이 티켓 분석부터 서브태스크까지", "리서치부터 디스패치까지".
npx skillsauth add onejaejae/skills jira-opsInstall 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.
Jira 티켓 키를 받아 4단계 파이프라인을 순차 실행한다.
Stage 1: /jira:recon {KEY} → specs/{KEY}-research.md
Stage 2: /jira:assess {KEY} → specs/{KEY}-scope.md
Stage 3: /deep-interview → Open Questions 해소
Stage 4: /jira:dispatch {KEY} → Jira 서브태스크 생성
입력에서 Jira 키를 파싱한다.
DPHRS-8DPHRS-8기존 산출물을 확인하여 시작 Stage를 자동 결정한다.
if specs/{KEY}-scope.md exists AND specs/{KEY}-research.md exists:
check staleness (아래 참조)
→ "Stage 2 산출물이 존재합니다. Stage 3 (deep-interview)부터 시작할까요?"
elif specs/{KEY}-research.md exists:
check staleness (아래 참조)
→ "Stage 1 산출물이 존재합니다. Stage 2 (assess)부터 시작할까요?"
elif specs/{KEY}-scope.md exists BUT specs/{KEY}-research.md missing:
→ "scope.md는 있지만 research.md가 없습니다. Stage 1부터 새로 시작합니다."
→ Stage 1부터 시작 (scope.md는 research 없이 무효)
else:
→ Stage 1부터 시작
의존성 규칙: scope.md는 research.md에 의존한다. research.md 없이 scope.md만 있으면 무효. 사용자가 "Stage 2부터"를 요청해도 research.md가 없으면 거부하고 Stage 1로 안내.
산출물 Staleness 검사: 기존 산출물의 수정일이 7일 이상 경과했으면 경고를 출력한다:
⚠️ specs/{KEY}-research.md는 {N}일 전에 생성되었습니다.
티켓 요구사항이나 서브태스크가 변경되었을 수 있습니다.
1. **재생성** — Stage 1부터 새로 시작
2. **그대로 사용** — 기존 산출물 기반으로 진행
수정일 확인: stat -f "%Sm" -t "%Y-%m-%d" ~/.claude/specs/{KEY}-research.md (macOS) 또는 파일 메타데이터에서 확인.
AskUserQuestion으로 확인:
단순히 cwd에 소스 코드가 있는지만 확인하면 안 된다. 티켓의 대상 프로젝트와 cwd가 다를 수 있다.
[통합홈] → with-api, [연구검색] → clue-api 등Why: DPHRS-8 E2E에서 티켓은 with-api 대상이었으나 cwd가 clue-api여서 잘못된 프로젝트 분석. 서브태스크 전체가 무효화됨.
## jira:ops — {KEY}
Pipeline: recon → assess → interview → dispatch
Starting from: Stage {N}
Project: {project_root}
Skill("jira-recon", args="{KEY}")
jira:recon이 자율 실행되어 specs/{KEY}-research.md를 생성한다.
Stage 1 complete. Research report saved.
Confidence: {level}
Proceeding to Stage 2 (assess)...
바로 Stage 2로 진행한다. 사용자 확인 불필요 (자율 파이프라인).
연쇄 품질 저하 방어 — Confidence Gate:
Research Confidence is MED ({N} sources failed). Scope analysis may be partially incomplete.
Research Confidence is LOW ({N}+ sources failed).
1. **Continue** — 불완전한 리서치로 진행 (scope 품질 저하 가능)
2. **Retry** — /jira:recon 재실행
3. **Stop** — 파이프라인 중단
LOW Confidence로 진행하면 이후 모든 Stage에 [LOW CONFIDENCE WARNING] 태그 부착.Skill("jira-assess", args="{KEY}")
jira:assess가 6-agent 병렬 분석을 수행하여 specs/{KEY}-scope.md를 생성한다.
scope 리포트의 Section 7 (Open Questions)를 확인한다.
Stage 2 complete. Scope report saved.
Confidence: {level}
Open Questions: {count}
Open Questions가 0개이면:
Open Questions가 1개 이상이면:
Stage 3 스킵 시: scope.md Section 7에 스킵 사유 기록. 예: "Stage 3 Skipped: 5개 Open Questions 모두 PO/PD 판단 필요 (코드 분석으로 해소 불가)"
Why: DPHRS-8 2차 E2E에서 Open Questions가 모두 PO/PD 판단 필요였으나, 스킵 사유가 기록되지 않아 나중에 왜 스킵했는지 추적 불가.
scope 리포트의 Open Questions를 해소한다.
Context 주입 방법: Skill 호출 전에 오케스트레이터가 scope.md의 Section 6, 7을 Read로 읽어 대화 context에 포함시킨 후, deep-interview 스킬을 호출한다. deep-interview가 자연스럽게 이 context를 참조할 수 있다.
# 1. scope.md Section 6, 7을 Read로 대화에 주입
Read("~/.claude/specs/{KEY}-scope.md")
# 2. deep-interview 호출 (context가 이미 대화에 있으므로 args 불필요)
Skill(skill="deep-interview")
deep-interview에서 참조할 context:
deep-interview가 완료되면 (ambiguity ≤ 0.2):
Stage 3 complete. Open Questions resolved.
Reviewing Section 6 for reconstruction...
deep-interview의 결정이 태스크 정의 자체를 바꾸는 경우, Stage 4(dispatch)로 넘어가기 전에 specs/{KEY}-scope.md의 Section 6을 업데이트해야 한다. assess 단계의 Section 6은 scope.md가 쓰여진 시점의 가정을 반영하며, 인터뷰 결정은 그 가정을 뒤엎을 수 있다.
재구성이 필요한 결정 유형 (인터뷰 답변에서 다음 중 하나라도 바뀌면):
재구성이 불필요한 경우:
재구성 절차:
Edit 도구로 scope.md Section 6 테이블 재작성. 전체 파일 재생성 금지 — Section 6 블록만 교체Section 6 reconstructed after /deep-interview (rounds N, M decisions):
- Output format: {original} → {new}
- Structure: {original} → {new}
Section 6 재구성 후:
Section 6 reconstructed: {N} tasks updated ({reasons})
Proceeding to Stage 4 (dispatch)...
Why: DPHRS-29 E2E에서 assess 직후 Section 6은 "마크다운 문서 산출물" 기준이었으나, 인터뷰 중 사용자가 "jira 하위 작업에 추가하는 것이 좋아"로 산출물 형식을 뒤엎었다. Section 6을 수동 Edit하지 않았으면 dispatch가 마크다운 deliverable 구조로 서브태스크를 생성했을 것. 이 절차가 문서화되지 않아 매번 애드혹 판단이 필요했다.
티켓이 여러 프로젝트에 걸쳐 있는 경우 (예: FE=clue-client/with-client, BE=with-api):
Stage 3 스킵 후 dispatch를 실행할 때, scope.md의 Open Questions가 태스크 정의에 직접 영향을 주는 경우:
Skill("jira-dispatch", args="{KEY}")
jira:dispatch가 Section 6의 Task Candidates를 파싱하여:
dispatch 완료 후, 부모 티켓에 scope 분석 결과를 Jira Wiki Markup 코멘트로 추가한다.
Auth 획득: dispatch 스킬과 동일한 방식으로 ops가 직접 인증을 수행한다:
cat ~/.config/.jira/.config.yml에서 server, login 추출echo -n "{login}:${JIRA_API_TOKEN}" | base64로 auth_token 생성/rest/api/2/myself로 인증 테스트curl -s -X POST "https://{server}/rest/api/2/issue/{KEY}/comment" \
-H "Authorization: Basic {auth_token}" \
-H "Content-Type: application/json" \
-d '{"body": "{wiki_markup_comment}"}'
주의: server URL의 trailing slash 제거 필수. server.rstrip('/') 처리.
코멘트 Wiki Markup 템플릿:
h2. Scope Analysis Summary — {KEY}
h3. ASIS 핵심 발견
{scope.md Section 1에서 레이어별 1줄 요약, 최대 5줄}
h3. 생성된 서브태스크
|| # || Key || Title || Priority || Effort ||
| 1 | {DPHRS-84} | {title} | High | 5h |
| 2 | {DPHRS-85} | {title} | Medium | 3h |
h3. 미결 사항
{scope.md Section 7의 Open Questions. 0개면 "없음"}
----
_Generated by /jira:ops pipeline_
코멘트 길이 제한: Jira 코멘트는 32,767자 제한. scope.md 전체를 복사하지 않고, 위 템플릿의 요약본만 게시한다.
Why: DPHRS-8 2차 E2E에서 파이프라인 산출물이 로컬 파일에만 있고 Jira에 게시되지 않아 팀원이 결과를 확인할 수 없었음.
## jira:ops Complete — {KEY}
### Pipeline Summary
| Stage | Skill | Result |
|-------|-------|--------|
| 1 | jira:recon | specs/{KEY}-research.md (Confidence: {level}) |
| 2 | jira:assess | specs/{KEY}-scope.md (Confidence: {level}) |
| 3 | deep-interview | {Completed/Skipped: 사유} |
| 4 | jira:dispatch | {N} subtasks created |
| 5 | Jira comment | Posted to {KEY} |
### Artifacts
- Research: ~/.claude/specs/{KEY}-research.md
- Scope: ~/.claude/specs/{KEY}-scope.md
- Subtasks: {list of created keys}
- Jira comment: Posted
specs/{KEY}-*.md에 산출물을 저장하고, 다음 스킬이 이를 읽는다.| Scenario | Action |
|----------|--------|
| Stage 1 실패 (recon) | "리서치 실패. 파이프라인을 중단합니다." → STOP |
| Stage 1 LOW Confidence | Confidence Gate 발동 (위 참조): 사용자 선택 Continue/Retry/Stop |
| Stage 2 실패 (assess) | "분석 실패. specs/{KEY}-research.md는 보존됩니다." → STOP |
| Stage 2 에이전트 부분 실패 | assess 완료 출력의 Confidence: {level} 행을 파싱하여 확인. MED 이하면 경고 |
| Stage 3 중단 (interview) | "인터뷰 중단. Stage 4로 진행할까요?" → AskUserQuestion |
| Stage 4 Cancel (dispatch) | "서브태스크 생성 취소. 산출물은 보존됩니다." → STOP |
| Stage 4 생성 부분 실패 | dispatch 자체 개별 실패 허용. 결과 테이블에 반영 |
| jira CLI 미설치 | Stage 1에서 조기 발견 → STOP |
| Jira REST API 인증 만료 | Stage 4에서 401 → "인증 만료. jira init 실행 후 재개하세요." → STOP |
| Jira 코멘트 게시 실패 | 경고 출력 후 파이프라인 성공으로 처리 (코멘트는 부가 기능). Pipeline Summary에 "Failed: {reason}" 표시 |
issue create 불안정: issue type config에 ID 필수, assignee email 매칭 불가 → dispatch에서 REST API 직접 사용--parent 플래그: jira issue list --parent 동작 안함 → JQL parent = KEY 사용/rest/api/2/myself 호출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 핵심 정리", "리뷰 요약"