muno-claude-plugin 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/README.md +834 -0
  2. package/bin/cli.js +262 -0
  3. package/package.json +37 -0
  4. package/templates/WORKFLOW.md +260 -0
  5. package/templates/agents/acceptance-test-generator.md +508 -0
  6. package/templates/agents/epic-story-reviewer.md +255 -0
  7. package/templates/agents/hld-reviewer.md +306 -0
  8. package/templates/agents/lld-reviewer.md +310 -0
  9. package/templates/agents/prd-reviewer.md +174 -0
  10. package/templates/agents/task-tracker.md +445 -0
  11. package/templates/agents/tc-reviewer.md +339 -0
  12. package/templates/agents/unit-test-generator.md +431 -0
  13. package/templates/commands/claude-code-expert.md +9 -0
  14. package/templates/commands/dev.md +9 -0
  15. package/templates/commands/po.md +9 -0
  16. package/templates/commands/principal-engineer.md +9 -0
  17. package/templates/commands/qa.md +9 -0
  18. package/templates/commands/sm.md +9 -0
  19. package/templates/commands/staff-engineer.md +9 -0
  20. package/templates/personas/claude-code-expert.md +153 -0
  21. package/templates/personas/dev.md +130 -0
  22. package/templates/personas/po.md +92 -0
  23. package/templates/personas/principal-engineer.md +163 -0
  24. package/templates/personas/qa.md +174 -0
  25. package/templates/personas/sm.md +101 -0
  26. package/templates/personas/staff-engineer.md +153 -0
  27. package/templates/references/claude-code-resources.md +79 -0
  28. package/templates/skills/epic-story-generator/SKILL.md +453 -0
  29. package/templates/skills/epic-story-generator/reference/epic-template.md +192 -0
  30. package/templates/skills/epic-story-generator/reference/story-template.md +297 -0
  31. package/templates/skills/hld-generator/SKILL.md +400 -0
  32. package/templates/skills/hld-generator/reference/hld-examples.md +305 -0
  33. package/templates/skills/hld-generator/reference/hld-template.md +244 -0
  34. package/templates/skills/hld-generator/reference/tech-stack-guidelines.md +194 -0
  35. package/templates/skills/lld-generator/SKILL.md +360 -0
  36. package/templates/skills/lld-generator/reference/lld-examples.md +338 -0
  37. package/templates/skills/lld-generator/reference/lld-template.md +286 -0
  38. package/templates/skills/prd-generator/SKILL.md +352 -0
  39. package/templates/skills/prd-generator/reference/prd-template.md +98 -0
  40. package/templates/skills/task-generator/SKILL.md +661 -0
  41. package/templates/skills/task-generator/reference/impl-task-template.md +621 -0
  42. package/templates/skills/task-generator/reference/task-examples.md +678 -0
  43. package/templates/skills/task-reviewer/SKILL.md +463 -0
  44. package/templates/skills/task-reviewer/reference/review-criteria.md +501 -0
  45. package/templates/skills/task-reviewer/reference/review-template.md +403 -0
  46. package/templates/skills/tc-generator/SKILL.md +595 -0
  47. package/templates/skills/tc-generator/reference/tc-examples.md +654 -0
  48. package/templates/skills/tc-generator/reference/tc-template.md +451 -0
@@ -0,0 +1,661 @@
1
+ ---
2
+ name: task-generator
3
+ description: |
4
+ User Story를 기반으로 AI 코딩 에이전트가 바로 구현할 수 있는 Implementation Task를 생성합니다.
5
+ "태스크 만들어줘", "구현 스펙 작성", "스토리 보고 태스크 분해", "코딩 스펙 생성",
6
+ "개발 명세 작성", "TASK 생성" 등의 요청에 사용합니다.
7
+ 코딩 에이전트가 추론 없이 정확하게 작업을 수행할 수 있도록 충분한 맥락과 참조 문서를 제공합니다.
8
+ allowed-tools: Read, Glob, Grep, Write, Edit, WebSearch, WebFetch
9
+ ---
10
+
11
+ # Implementation Task Generator
12
+
13
+ **User Story를 AI 코딩 에이전트가 바로 구현 가능한 Task로 변환합니다.**
14
+
15
+ ## 핵심 원칙
16
+
17
+ ```
18
+ ┌─────────────────────────────────────────────────────────────────────────────┐
19
+ │ Task는 "스펙"이다. "구현"이 아니다. │
20
+ │ 조건과 요구사항을 정의하고, 구현은 코딩 에이전트에게 맡긴다. │
21
+ ├─────────────────────────────────────────────────────────────────────────────┤
22
+ │ • Context: 왜 이 작업이 필요한가, User Story와의 연결 │
23
+ │ • Document References: 참조해야 할 문서들 (LLD, HLD 등) 임포트 │
24
+ │ • What: 정확히 무엇을 만드는가 (파일, 클래스, 메서드 시그니처) │
25
+ │ • Conditions: 어떤 조건을 충족해야 하는가 (데이터 정의, 비즈니스 규칙) │
26
+ │ • Reference: 어떤 패턴을 따라야 하는가 (기존 코드 참조) │
27
+ │ • Close: 언제 완료인가 (체크리스트 형태의 Acceptance Criteria) │
28
+ │ • Test: 어떤 값으로 테스트하는가 (입력값과 기대 결과) │
29
+ └─────────────────────────────────────────────────────────────────────────────┘
30
+
31
+ ❌ Task에 포함하지 않는 것:
32
+ • 구현 코드 (실제 코드는 개발의 영역)
33
+ • 테스트 코드 (테스트 시나리오와 값만 제공)
34
+
35
+ ✅ Task에 포함하는 것:
36
+ • 조건, 요구사항, 제약사항
37
+ • 의사 코드 (pseudocode) 수준의 로직 설명
38
+ • 메서드 시그니처 (입력/출력 타입)
39
+ • 데이터 정의 (필드, 타입, 제약조건)
40
+ • 비즈니스 규칙
41
+ ```
42
+
43
+ ---
44
+
45
+ ## 페르소나
46
+
47
+ @.claude/personas/dev.md
48
+
49
+ ---
50
+
51
+ ## 문서 체계 및 워크플로우
52
+
53
+ ```
54
+ PRD → Epic & Story → HLD → LLD → Implementation Task (이 스킬) → Code
55
+ │ │ │
56
+ │ │ └── 코딩 에이전트가 실행
57
+ │ │
58
+ └──────────┴── Task에서 참조 (임포트)
59
+ ```
60
+
61
+ ### User Story → Task 관계
62
+
63
+ ```
64
+ ┌─────────────────────────────────────────────────────────────────────────────┐
65
+ │ 1개의 User Story = 1~N개의 Task │
66
+ ├─────────────────────────────────────────────────────────────────────────────┤
67
+ │ Story: "사용자가 채팅방을 생성할 수 있다" │
68
+ │ │
69
+ │ └── TASK-001: ChatRoom Entity + Enum 생성 │
70
+ │ └── TASK-002: ChatRoomRepository 생성 │
71
+ │ └── TASK-003: ChatRoomService 생성 │
72
+ │ └── TASK-004: ChatRoomController + API 생성 │
73
+ │ └── TASK-005: Unit/Integration Test 작성 │
74
+ └─────────────────────────────────────────────────────────────────────────────┘
75
+ ```
76
+
77
+ ---
78
+
79
+ ## 워크플로우
80
+
81
+ ```mermaid
82
+ flowchart TD
83
+ A[사용자 요청] --> B{User Story 존재?}
84
+ B -->|No| C[Story 작성 권유]
85
+ B -->|Yes| D{LLD 존재?}
86
+ D -->|No| E[LLD 작성 권유]
87
+ D -->|Yes| F[Step 1: Story & LLD 분석]
88
+ F --> G[Step 2: 코드베이스 패턴 분석]
89
+ G --> H[Step 3: Task 분해 & 의존성 정의]
90
+ H --> I{정보 충분?}
91
+ I -->|No| J[보충 질문 2-3개]
92
+ J --> K[사용자 응답]
93
+ K --> I
94
+ I -->|Yes| L[Step 4: index.md 작성]
95
+ L --> M[사용자 검토]
96
+ M -->|수정| L
97
+ M -->|승인| N[Step 5: 개별 Task 작성]
98
+ N --> O[저장: .tasks/story-id/]
99
+ ```
100
+
101
+ ---
102
+
103
+ ## Step 0: 필수 문서 확인
104
+
105
+ ### User Story 확인
106
+
107
+ User Story가 없으면 먼저 작성하도록 안내합니다.
108
+
109
+ ```
110
+ Implementation Task 작성을 위해 User Story가 필요합니다.
111
+ User Story가 준비되어 있으신가요?
112
+
113
+ 없다면 /epic-story-generator 스킬로 먼저 작성해주세요.
114
+ ```
115
+
116
+ ### LLD 확인
117
+
118
+ LLD가 없으면 먼저 작성하도록 안내합니다.
119
+
120
+ ```
121
+ Implementation Task 작성을 위해 LLD(Low-Level Design)도 필요합니다.
122
+ LLD가 준비되어 있으신가요?
123
+
124
+ 없다면 /lld-generator 스킬로 먼저 작성해주세요.
125
+ ```
126
+
127
+ ### 수집할 문서 체크리스트
128
+
129
+ | 문서 | 필수/선택 | 용도 |
130
+ |------|----------|------|
131
+ | User Story | **필수** | Task의 목적과 Acceptance Criteria 기준 |
132
+ | LLD | **필수** | 구현 상세 (ERD, API Spec, 서비스 메서드) |
133
+ | HLD | 선택 | 아키텍처 컨텍스트 (필요시 참조) |
134
+ | Epic | 선택 | 전체 기능 맥락 (배경 설명용) |
135
+ | PRD | 선택 | 비즈니스 요구사항 (배경 설명용) |
136
+
137
+ ---
138
+
139
+ ## Step 1: Story & LLD 분석
140
+
141
+ ### User Story에서 추출할 정보
142
+
143
+ ```markdown
144
+ ## User Story 분석 결과
145
+
146
+ **Story ID**: STORY-XXX
147
+ **제목**: [Story 제목]
148
+
149
+ **User Story**:
150
+ - AS A: [사용자 역할]
151
+ - I WANT: [원하는 기능]
152
+ - SO THAT: [비즈니스 가치]
153
+
154
+ **Acceptance Criteria** (Story의 AC를 Task의 기준으로):
155
+ 1. [AC-1]: [조건]
156
+ 2. [AC-2]: [조건]
157
+ ...
158
+
159
+ **Story Points**: X
160
+ **우선순위**: [Must/Should/Could]
161
+ ```
162
+
163
+ ### LLD에서 추출할 정보
164
+
165
+ - ERD + Entity 정의
166
+ - 서비스 메서드 정의
167
+ - API Spec (엔드포인트, Request/Response)
168
+ - Sequence Diagram
169
+ - Error Codes
170
+ - FR/NFR
171
+
172
+ ### 질문 예시 (한 번에 2-3개)
173
+
174
+ ```
175
+ User Story와 LLD를 확인했습니다. Task 분해를 위해 몇 가지 확인이 필요합니다.
176
+
177
+ 1. 이 Story에서 가장 핵심적인 기능은 무엇인가요?
178
+ 2. 기존 코드베이스에 유사한 패턴이 있나요? (참조할 코드)
179
+ 3. 특별히 복잡한 비즈니스 로직이 있나요?
180
+ ```
181
+
182
+ ---
183
+
184
+ ## Step 2: 코드베이스 패턴 분석
185
+
186
+ 기존 코드에서 유사한 구현을 찾아 참조 패턴으로 제공합니다.
187
+
188
+ ```kotlin
189
+ // 분석 대상
190
+ Glob: "**/domain/**/model/*.kt" // Entity 패턴
191
+ Glob: "**/domain/**/repository/*.kt" // Repository 패턴
192
+ Glob: "**/service/**/*Service.kt" // Service 패턴
193
+ Glob: "**/controller/**/*.kt" // Controller 패턴
194
+ ```
195
+
196
+ **참조 선정 기준**:
197
+ 1. 가장 최근 작성된 코드 (최신 컨벤션)
198
+ 2. 유사한 도메인 (비즈니스 로직 유사)
199
+ 3. 복잡도가 비슷한 코드
200
+
201
+ ---
202
+
203
+ ## Step 3: Task 분해 & 의존성
204
+
205
+ ### Task 크기 가이드라인
206
+
207
+ ```
208
+ ┌─────────────────────────────────────────────────────────────────────────────┐
209
+ │ • 1 Task = 1-3개 파일 │
210
+ │ • 1 Task = 코딩 에이전트가 한 세션에서 완료 가능한 크기 │
211
+ │ • 1 Task = 200-500 라인 (컨텍스트 효율) │
212
+ │ • 1 Task = 독립적으로 테스트 가능한 단위 │
213
+ └─────────────────────────────────────────────────────────────────────────────┘
214
+ ```
215
+
216
+ ### 표준 분해 패턴
217
+
218
+ ```
219
+ Phase 1: Domain (의존성 없음 - 병렬 가능)
220
+ ├── TASK-001: Entity + Enum
221
+ └── TASK-002: Exception
222
+
223
+ Phase 2: Repository & DTO (Phase 1 의존)
224
+ ├── TASK-003: Repository
225
+ └── TASK-004: Command/DTO
226
+
227
+ Phase 3: Service (Phase 2 의존)
228
+ └── TASK-005: Service
229
+
230
+ Phase 4: API (Phase 3 의존)
231
+ ├── TASK-006: Request/Response DTO
232
+ ├── TASK-007: Mapper
233
+ └── TASK-008: Controller
234
+
235
+ Phase 5: Test (각 Phase 완료 후)
236
+ ├── TASK-009: Service Unit Test
237
+ └── TASK-010: API Integration Test
238
+ ```
239
+
240
+ ### 질문 예시 (Task 분해 확정 전)
241
+
242
+ ```
243
+ Task 분해안을 검토해주세요.
244
+
245
+ 1. Entity와 Enum을 하나의 Task로 묶어도 될까요? 분리가 필요한가요?
246
+ 2. Service가 복잡해서 생성/조회/수정/삭제를 별도 Task로 분리할까요?
247
+ 3. 테스트는 각 레이어별로 별도 Task로 할까요, 통합으로 할까요?
248
+ ```
249
+
250
+ ---
251
+
252
+ ## Step 4: index.md 작성
253
+
254
+ 전체 Task 목록과 의존성을 정리합니다. [템플릿 참조](reference/impl-task-template.md)
255
+
256
+ ```markdown
257
+ # [Story ID] Implementation Tasks
258
+
259
+ ## Story 정보
260
+
261
+ | 항목 | 내용 |
262
+ |-----|------|
263
+ | Story ID | STORY-XXX |
264
+ | Story 제목 | [제목] |
265
+ | Epic | EPIC-XXX |
266
+ | LLD 참조 | `documents/lld/xxx-lld.md` |
267
+
268
+ ## Task 목록
269
+
270
+ | Task ID | 이름 | 상태 | 선행 Task | 생성 파일 |
271
+ |---------|-----|------|----------|----------|
272
+ | TASK-001 | Entity 생성 | ⬜ | - | domain/xxx/model/ |
273
+ | TASK-002 | ... | ⬜ | TASK-001 | ... |
274
+
275
+ ## 의존성 그래프
276
+ [mermaid 다이어그램]
277
+
278
+ ## 병렬 실행 가이드
279
+ - Phase 1: TASK-001, TASK-002 (동시 가능)
280
+ - Phase 2: TASK-003, TASK-004 (Phase 1 완료 후)
281
+ ...
282
+ ```
283
+
284
+ ---
285
+
286
+ ## Step 5: 개별 Task 작성
287
+
288
+ ### Task 필수 섹션 (7개)
289
+
290
+ 각 Task는 **7개 핵심 섹션**을 반드시 포함합니다:
291
+
292
+ ```markdown
293
+ # TASK-XXX: [Task 이름]
294
+
295
+ ## 1. Context (맥락)
296
+ 왜 이 Task가 필요한가, User Story와의 연결
297
+
298
+ ## 2. Document References (참조 문서 임포트)
299
+ 코딩 에이전트가 참고해야 할 문서들과 핵심 내용 발췌
300
+
301
+ ## 3. Scope (범위)
302
+ 생성할 파일, 선행 Task, 예상 소요
303
+
304
+ ## 4. Reference Code (참조 코드)
305
+ 기존 코드베이스에서 따라야 할 패턴
306
+
307
+ ## 5. Implementation Spec (구현 명세)
308
+ 조건, 요구사항, 의사 코드 (구현 코드 X)
309
+
310
+ ## 6. Acceptance Criteria (완료 조건)
311
+ 체크리스트 형태의 명확한 완료 기준
312
+
313
+ ## 7. Test Scenarios (테스트 시나리오)
314
+ 구체적인 테스트 케이스와 값
315
+ ```
316
+
317
+ ---
318
+
319
+ ## 섹션별 작성 가이드
320
+
321
+ ### 1. Context (맥락) - 핵심!
322
+
323
+ **코딩 에이전트가 "왜"를 이해해야 "무엇"을 올바르게 구현한다.**
324
+
325
+ ```markdown
326
+ ## 1. Context
327
+
328
+ ### 1.1 User Story 연결
329
+
330
+ **Story**: STORY-XXX - [Story 제목]
331
+
332
+ **AS A** [사용자 역할]
333
+ **I WANT** [원하는 기능]
334
+ **SO THAT** [비즈니스 가치]
335
+
336
+ ### 1.2 이 Task의 역할
337
+
338
+ [이 Task가 전체 Story에서 담당하는 부분]
339
+ [이 Task가 완료되면 Story의 어떤 AC가 충족되는지]
340
+
341
+ ### 1.3 관련 Task
342
+
343
+ - **선행**: TASK-XXX (이것이 있어야 이 Task 가능)
344
+ - **후행**: TASK-XXX (이 Task가 완료되어야 시작 가능)
345
+ ```
346
+
347
+ ### 2. Document References (참조 문서 임포트) - 핵심!
348
+
349
+ **코딩 에이전트가 추론하지 않도록, 필요한 정보를 직접 임포트한다.**
350
+
351
+ ```markdown
352
+ ## 2. Document References
353
+
354
+ ### 2.1 User Story (Required)
355
+
356
+ **파일**: `backlogs/feature-name/STORY-XXX.md`
357
+
358
+ **Acceptance Criteria 발췌**:
359
+ ```gherkin
360
+ Scenario: [정상 케이스]
361
+ Given [전제 조건]
362
+ When [사용자 행동]
363
+ Then [기대 결과]
364
+ ```
365
+
366
+ ### 2.2 LLD (Required)
367
+
368
+ **파일**: `documents/lld/xxx-lld.md`
369
+
370
+ **ERD 발췌**:
371
+ ```
372
+ [Table 정의 발췌]
373
+ ```
374
+
375
+ **API Spec 발췌** (해당시):
376
+ ```
377
+ POST /api/v1/xxx
378
+ Request: {...}
379
+ Response: {...}
380
+ ```
381
+
382
+ **서비스 메서드 정의 발췌**:
383
+ ```
384
+ createXxx(command: CreateXxxCommand): XxxDto
385
+ ```
386
+
387
+ ### 2.3 HLD (Optional)
388
+
389
+ **파일**: `documents/hld/xxx-hld.md`
390
+
391
+ **아키텍처 컨텍스트** (필요한 부분만):
392
+ ```
393
+ [컴포넌트 관계, 데이터 흐름 등]
394
+ ```
395
+
396
+ ### 2.4 코드베이스 컨벤션
397
+
398
+ **참조 파일**: `CLAUDE.md`
399
+
400
+ **적용할 규칙**:
401
+ - [컨벤션 1]
402
+ - [컨벤션 2]
403
+ ```
404
+
405
+ ### 3. Scope (범위)
406
+
407
+ ```markdown
408
+ ## 3. Scope
409
+
410
+ | 항목 | 내용 |
411
+ |-----|------|
412
+ | 생성 파일 | `core/.../model/Entity.kt`, `core/.../model/Enum.kt` |
413
+ | 선행 Task | 없음 (또는 TASK-XXX) |
414
+ | 예상 라인 | 약 150줄 |
415
+ ```
416
+
417
+ ### 4. Reference Code (참조 코드)
418
+
419
+ ```markdown
420
+ ## 4. Reference Code
421
+
422
+ **참조 파일**: `core/src/main/kotlin/com/example/domain/user/model/UserEntity.kt`
423
+
424
+ ```kotlin
425
+ // 기존 코드에서 따라야 할 패턴
426
+ @Entity
427
+ @Table(name = "users")
428
+ class UserEntity(
429
+ @Column(name = "email", nullable = false)
430
+ var email: String,
431
+ // ...
432
+ ) : BaseEntity()
433
+ ```
434
+
435
+ **따라야 할 패턴**:
436
+ - [ ] BaseEntity 상속
437
+ - [ ] @Table(name = "snake_case")
438
+ - [ ] @Column(name = "snake_case") 명시
439
+ ```
440
+
441
+ ### 5. Implementation Spec (구현 명세)
442
+
443
+ > **주의**: 구현 코드를 포함하지 않는다. 조건과 요구사항만 정의한다.
444
+
445
+ ```markdown
446
+ ## 5. Implementation Spec
447
+
448
+ ### 5.1 데이터 정의
449
+
450
+ | 필드 | 타입 | 제약조건 | 설명 |
451
+ |------|------|----------|------|
452
+ | id | Long | PK, Auto | 내부 식별자 |
453
+ | externalId | UUID | Unique, Not Null | 외부 ID (UUIDv7) |
454
+ | userId | Long | FK, Not Null | 생성자 |
455
+ | title | String | Not Null, Max 100 | 제목 |
456
+ | status | Enum | Not Null, Default ACTIVE | 상태 |
457
+
458
+ ### 5.2 비즈니스 규칙
459
+
460
+ | ID | 규칙 | 설명 |
461
+ |----|------|------|
462
+ | BR-01 | 기본 상태 | 생성 시 status = ACTIVE |
463
+ | BR-02 | 제목 검증 | title은 1-100자 |
464
+ | BR-03 | 외부 ID | UUIDv7로 자동 생성 |
465
+
466
+ ### 5.3 메서드 시그니처 (Service의 경우)
467
+
468
+ | 메서드 | 입력 | 출력 | 설명 |
469
+ |--------|-----|------|------|
470
+ | create | CreateCommand | Dto | 생성 |
471
+ | getById | UUID, Long | Dto | 조회 (권한 검증) |
472
+
473
+ ### 5.4 의사 코드 (복잡한 로직의 경우)
474
+
475
+ ```
476
+ // updateTitle 로직
477
+ 1. externalId로 Entity 조회
478
+ 2. 요청자 userId와 Entity의 userId 비교 (권한 검증)
479
+ 3. 권한 없으면 AccessDeniedException
480
+ 4. title 유효성 검증 (1-100자)
481
+ 5. title 업데이트
482
+ 6. DTO로 변환하여 반환
483
+ ```
484
+ ```
485
+
486
+ ### 6. Acceptance Criteria (완료 조건)
487
+
488
+ **Story의 AC에서 이 Task가 충족해야 할 부분을 명시한다.**
489
+
490
+ ```markdown
491
+ ## 6. Acceptance Criteria
492
+
493
+ ### Story AC 연결
494
+ - [ ] Story AC-1의 "[특정 부분]"을 이 Task에서 구현
495
+ - [ ] Story AC-2의 "[특정 부분]"을 이 Task에서 구현
496
+
497
+ ### 기술적 완료 조건
498
+ - [ ] 패키지가 `com.example.domain.xxx.model`인가?
499
+ - [ ] BaseEntity를 상속하는가?
500
+ - [ ] 모든 @Column에 name 속성이 있는가?
501
+
502
+ ### 컴파일/실행 조건
503
+ - [ ] `./gradlew compileKotlin` 성공
504
+ - [ ] `./gradlew test` 기존 테스트 통과
505
+ ```
506
+
507
+ ### 7. Test Scenarios (테스트 시나리오)
508
+
509
+ > **주의**: 테스트 코드를 포함하지 않는다. 시나리오와 입출력 값만 정의한다.
510
+
511
+ ```markdown
512
+ ## 7. Test Scenarios
513
+
514
+ ### 7.1 Happy Path
515
+
516
+ **Story AC 연결**: Story AC-1 "정상적으로 생성"
517
+
518
+ | 시나리오 | 정상적인 Entity 생성 |
519
+ |---------|---------------------|
520
+
521
+ | 입력 | 값 |
522
+ |------|-----|
523
+ | userId | 1L |
524
+ | title | "테스트 제목" |
525
+
526
+ | 기대 결과 | 값 |
527
+ |----------|-----|
528
+ | id | Auto generated (> 0) |
529
+ | externalId | Not null (UUID v7) |
530
+ | status | ACTIVE |
531
+ | createdAt | 현재 시간 |
532
+
533
+ ### 7.2 Edge Cases
534
+
535
+ **Story AC 연결**: Story AC-2 "유효성 검증"
536
+
537
+ | 시나리오 | 입력 | 기대 결과 |
538
+ |---------|------|----------|
539
+ | 빈 제목 | title = "" | IllegalArgumentException |
540
+ | 100자 초과 | title = "가" × 101 | IllegalArgumentException |
541
+ | null userId | userId = null | NullPointerException (컴파일 타임) |
542
+
543
+ ### 7.3 권한 검증 (해당시)
544
+
545
+ | 시나리오 | 조건 | 기대 결과 |
546
+ |---------|------|----------|
547
+ | 타인 접근 | chatRoom.userId ≠ requestUserId | AccessDeniedException |
548
+ | 본인 접근 | chatRoom.userId = requestUserId | 정상 처리 |
549
+
550
+ ### 7.4 검증 쿼리 (DB 확인용)
551
+
552
+ - 생성 확인: `SELECT * FROM [table] WHERE external_id = ?`
553
+ - 인덱스 확인: `SHOW INDEX FROM [table]`
554
+ ```
555
+
556
+ ---
557
+
558
+ ## 금지 사항
559
+
560
+ ### ❌ 절대 하지 말 것
561
+
562
+ 1. **구현 코드 포함**
563
+ ```
564
+ ❌ Task에 실제 구현 코드 작성
565
+ ✅ 조건, 요구사항, 의사 코드만 작성
566
+ → 구현은 개발의 영역이다
567
+ ```
568
+
569
+ 2. **테스트 코드 포함**
570
+ ```
571
+ ❌ Task에 @Test 코드 작성
572
+ ✅ 테스트 시나리오와 입출력 값만 작성
573
+ → 테스트 코드는 테스트 Task에서 작성
574
+ ```
575
+
576
+ 3. **User Story 없이 Task 작성**
577
+ ```
578
+ ❌ "Entity 만들어줘" → 바로 작성
579
+ ✅ "User Story가 있나요?" → Story 분석 후 작성
580
+ ```
581
+
582
+ 4. **LLD 없이 Task 작성**
583
+ ```
584
+ ❌ Story만 보고 구현 명세 작성
585
+ ✅ LLD의 ERD, API Spec 참조하여 작성
586
+ ```
587
+
588
+ 5. **모호한 완료 조건**
589
+ ```
590
+ ❌ "적절히 구현되어야 함", "필요 시 처리"
591
+ ✅ "title 필드가 100자를 초과하면 IllegalArgumentException 발생"
592
+ ```
593
+
594
+ 6. **테스트 값 없는 시나리오**
595
+ ```
596
+ ❌ "정상 케이스 테스트"
597
+ ✅ "userId=1L, title='테스트' 입력 → status=ACTIVE, externalId=not null"
598
+ ```
599
+
600
+ 7. **Document References 섹션 누락**
601
+ ```
602
+ ❌ Task에 참조 문서 경로만 있음
603
+ ✅ 참조 문서의 핵심 내용을 직접 임포트
604
+ ```
605
+
606
+ 8. **Story AC와 연결 없는 Task AC**
607
+ ```
608
+ ❌ Task AC가 Story AC와 무관
609
+ ✅ Task AC가 Story의 어떤 AC를 충족하는지 명시
610
+ ```
611
+
612
+ ---
613
+
614
+ ## 출력 구조
615
+
616
+ ```
617
+ .tasks/
618
+ └── STORY-XXX-[story-name]/
619
+ ├── index.md # 전체 개요 + Task 목록
620
+ ├── TASK-001-entity.md
621
+ ├── TASK-002-exception.md
622
+ ├── TASK-003-repository.md
623
+ └── ...
624
+ ```
625
+
626
+ ---
627
+
628
+ ## 관련 스킬 및 에이전트
629
+
630
+ **Skills**:
631
+ - `/epic-story-generator`: Epic & Story 생성 (Task 작성 전 필수)
632
+ - `/lld-generator`: LLD 생성 (Task 작성 전 필수)
633
+ - `/hld-generator`: HLD 생성
634
+ - `/prd-generator`: PRD 생성
635
+
636
+ **Subagents**:
637
+ - `unit-test-generator`: Task 구현 전 Unit Test 자동 생성 (TDD)
638
+ - Task의 Acceptance Criteria 기반
639
+ - 구현 전에 실패하는 테스트 먼저 생성
640
+
641
+ ---
642
+
643
+ ## 상세 템플릿
644
+
645
+ [impl-task-template.md](reference/impl-task-template.md) 참조
646
+
647
+ ---
648
+
649
+ ## 체크리스트
650
+
651
+ ### 문서 준비 확인
652
+ - [ ] User Story가 있는가?
653
+ - [ ] User Story에 Acceptance Criteria가 있는가?
654
+ - [ ] LLD가 있는가?
655
+ - [ ] LLD에 ERD, 서비스 메서드, API Spec이 있는가?
656
+
657
+ ### Task 작성 완료 확인
658
+ - [ ] 모든 Task에 Document References 섹션이 있는가?
659
+ - [ ] Story AC와 Task AC가 연결되어 있는가?
660
+ - [ ] 테스트 시나리오에 구체적인 값이 있는가?
661
+ - [ ] 코딩 에이전트가 추론 없이 실행할 수 있는가?