Linear Current Cycle 이슈를 전체 조회하고 편집 상태 체크리스트(미할당, 레이블 누락, 부모-자식 상태 불일치)를 점검하여 보고서를 출력한다.
Review Cycle Issues
Linear의 Current Cycle에 연결된 이슈를 전체 읽고, 편집 상태 체크리스트를 점검하여 보고서를 생성한다.
Process
Step 1: 팀 확인
mcp__linear__list_teams를 호출하여 워크스페이스의 팀 목록을 가져온다.
- 팀이 1개면 자동 선택
- 팀이 여러 개면 AskUserQuestion으로 사용자에게 선택 요청
Step 2: Current Cycle 조회
mcp__linear__list_cycles를 호출하여 해당 팀의 현재 사이클을 가져온다.
1teamId: Step 1에서 확인한 팀 ID
2type: "current"- Current Cycle이 없으면 "현재 활성 사이클이 없습니다." 메시지 출력 후 종료
Step 3: 이슈 상태 목록 조회
mcp__linear__list_issue_statuses를 호출하여 팀의 전체 상태(state) 목록과 각 상태의 순서(position)를 가져온다. 이 정보는 Step 6의 부모-자식 상태 비교에 사용한다.
상태의 진행도 순서 기준:
triage<backlog<unstarted<started<completed<canceled- 같은 type 내에서는 position 값으로 비교
Step 4: Cycle 이슈 조회 (부모 이슈)
mcp__linear__list_issues를 호출하여 Current Cycle의 이슈를 가져온다.
1cycle: Step 2에서 확인한 사이클 번호 또는 ID
2limit: 250
3includeArchived: falseStep 5: Sub-issue 조회
Step 4에서 가져온 각 이슈에 대해 mcp__linear__list_issues를 호출하여 sub-issue를 조회한다.
1parentId: 각 부모 이슈의 identifier (예: "CDL-123")
2limit: 250
3includeArchived: false주의: sub-issue가 있는 이슈에 대해서만 조회한다. mcp__linear__get_issue로 개별 이슈의 children 존재 여부를 먼저 확인하거나, 모든 부모 이슈에 대해 일괄 조회 후 빈 결과를 무시한다.
Rate Limit 방지: 한 번에 최대 5개씩 병렬 호출하고, 나머지는 순차 처리한다.
Step 6: 체크리스트 점검
모든 이슈(부모 + sub-issue)를 대상으로 다음 3가지를 점검한다.
체크 1: Unassigned 이슈
담당자(assignee)가 없는 이슈를 찾는다.
- 대상: 모든 이슈 (부모 + sub-issue)
- 판단 기준: assignee 필드가 null 또는 비어 있음
체크 2: Label 누락 이슈
레이블(label)이 하나도 없는 이슈를 찾는다.
- 대상: 모든 이슈 (부모 + sub-issue)
- 판단 기준: labels 필드가 비어 있음
체크 3: 부모-자식 상태 불일치
부모 이슈의 상태가 자식 이슈들의 최소 진행 상태보다 뒤쳐져 있는 경우를 찾는다.
판단 로직:
- 자식 이슈가 있는 부모 이슈만 대상으로 한다
- 자식 이슈들의 상태(state) 중 가장 낮은(덜 진행된) 상태를 찾는다 (Step 3의 상태 순서 기준)
- 자식 이슈들의 최소 진행 상태가
completed타입(Done 등)인데 부모 이슈가completed타입이 아닌 경우 → 불일치 - 자식 이슈들이 모두
started타입 이상인데 부모 이슈가 아직unstarted/backlog/triage인 경우 → 불일치
체크 4: 최상위 이슈 레이블 규칙 위반
부모 이슈가 없는 최상위 이슈를 대상으로, 제목 형식에 따른 레이블 규칙을 점검한다.
4-a. User Story 레이블 누락
- 대상: 부모 이슈가 없고, 제목이 대괄호(
[)로 시작하지 않는 이슈 - 판단 기준: 해당 이슈에
User Story레이블이 없으면 위반
4-b. Task 레이블 누락
- 대상: 부모 이슈가 없고, 제목이 대괄호(
[)로 시작하는 이슈 - 판단 기준: 해당 이슈에
Task레이블이 없으면 위반
Step 7: 보고서 출력
점검 결과를 아래 형식으로 출력한다.
1# Linear Cycle Issue 점검 보고서
2
3- **팀**: {팀 이름}
4- **사이클**: {사이클 이름} ({시작일} ~ {종료일})
5- **총 이슈 수**: {부모 이슈 N개} + {Sub-issue M개} = {총 K개}
6- **점검일**: {오늘 날짜}
7
8---
9
10## 요약
11
12| 점검 항목 | 결과 | 해당 이슈 수 |
13|-----------|------|-------------|
14| Unassigned 이슈 | {pass/fail} | {N개} |
15| Label 누락 이슈 | {pass/fail} | {N개} |
16| 부모-자식 상태 불일치 | {pass/fail} | {N개} |
17| User Story 레이블 누락 | {pass/fail} | {N개} |
18| Task 레이블 누락 | {pass/fail} | {N개} |
19
20---
21
22## 1. Unassigned 이슈
23
24{해당 없으면: "모든 이슈에 담당자가 할당되어 있습니다."}
25
26{해당 있으면:}
27| # | Identifier | 제목 | 상태 | 부모 이슈 |
28|---|------------|------|------|-----------|
29| 1 | CDL-123 | 이슈 제목 | In Progress | CDL-100 (또는 -) |
30
31---
32
33## 2. Label 누락 이슈
34
35{해당 없으면: "모든 이슈에 레이블이 설정되어 있습니다."}
36
37{해당 있으면:}
38| # | Identifier | 제목 | 상태 | 담당자 |
39|---|------------|------|------|--------|
40| 1 | CDL-123 | 이슈 제목 | Todo | 담당자명 |
41
42---
43
44## 3. 부모-자식 상태 불일치
45
46{해당 없으면: "부모-자식 이슈 간 상태가 일관적입니다."}
47
48{해당 있으면:}
49| # | 부모 이슈 | 부모 상태 | 자식 최소 상태 | 불일치 사유 |
50|---|-----------|-----------|---------------|------------|
51| 1 | CDL-100 이슈 제목 | Todo | Done | 모든 자식이 완료되었으나 부모 미완료 |
52
53---
54
55## 4. 최상위 이슈 레이블 규칙 위반
56
57### 4-a. User Story 레이블 누락
58
59대괄호로 시작하지 않는 최상위 이슈 중 'User Story' 레이블이 없는 이슈
60
61{해당 없으면: "해당 이슈가 없습니다."}
62
63{해당 있으면:}
64| # | Identifier | 제목 | 현재 레이블 | 담당자 |
65|---|------------|------|------------|--------|
66| 1 | CDL-123 | 이슈 제목 | Bug, Enhancement | 담당자명 |
67
68### 4-b. Task 레이블 누락
69
70대괄호로 시작하는 최상위 이슈 중 'Task' 레이블이 없는 이슈
71
72{해당 없으면: "해당 이슈가 없습니다."}
73
74{해당 있으면:}
75| # | Identifier | 제목 | 현재 레이블 | 담당자 |
76|---|------------|------|------------|--------|
77| 1 | CDL-456 | [배포] 스테이징 환경 설정 | Bug | 담당자명 |Rate Limit 방지
- 모든 Linear API 호출은 병렬 최대 5개까지만 허용
- Step 5의 sub-issue 조회 시 5개씩 배치 처리
- API 오류 발생 시 재시도하지 않고 해당 이슈를 "조회 실패"로 표시
Example Usage
1/review-cycle-issues