muno-claude-plugin 1.11.0 → 1.12.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.
package/README.md CHANGED
@@ -184,21 +184,24 @@ Task Level (단위 테스트)
184
184
  **호출 조건:** "Epic 생성해줘", "Story 만들어줘", "백로그 작성" 등의 요청 시 자동 호출
185
185
 
186
186
  **입력:** PRD 문서
187
- **출력:** `backlogs/<feature>/` 디렉토리
187
+ **출력:** `documents/issues/{feature}/` 디렉토리
188
188
 
189
189
  **사용 예시:**
190
190
  ```
191
- @documents/prd/cart-prd.md 를 기반으로 Epic과 Story를 생성해주세요.
191
+ @documents/request/cart-prd.md 를 기반으로 Epic과 Story를 생성해주세요.
192
192
  ```
193
193
 
194
194
  **생성 구조:**
195
195
  ```
196
- backlogs/cart-feature/
197
- ├── index.md # 전체 백로그 개요
198
- ├── EPIC-001-cart.md # Epic 정의
199
- ├── STORY-001-add-item.md # User Story (AC 포함)
200
- ├── STORY-002-remove-item.md
201
- └── ...
196
+ documents/issues/cart/
197
+ ├── README.md # Epic 개요 (Epic이 있는 경우)
198
+ ├── stories/
199
+ ├── STORY-001-add-item.md # User Story (AC 포함)
200
+ ├── STORY-002-remove-item.md
201
+ └── ...
202
+ └── tasks/ # task-generator가 생성
203
+ └── STORY-{id}/
204
+ └── TASK-{seq}.md
202
205
  ```
203
206
 
204
207
  **User Story 포함 내용:**
@@ -267,21 +270,20 @@ backlogs/cart-feature/
267
270
  **호출 조건:** "태스크 생성해줘", "구현 작업 분해", "Task 만들어줘" 등의 요청 시 자동 호출
268
271
 
269
272
  **입력:** Story + LLD
270
- **출력:** `.tasks/<story-id>/` 디렉토리
273
+ **출력:** `documents/issues/{feature}/tasks/STORY-{id}/` 디렉토리
271
274
 
272
275
  **사용 예시:**
273
276
  ```
274
- @backlogs/cart-feature/STORY-001-add-item.md
275
- @documents/lld/cart-lld.md
277
+ @documents/issues/cart/stories/STORY-001-add-item.md
278
+ @documents/system-design/features/cart/lld.md
276
279
 
277
280
  구현 태스크를 생성해주세요.
278
281
  ```
279
282
 
280
283
  **생성 구조:**
281
284
  ```
282
- .tasks/STORY-001/
283
- ├── index.md # 태스크 목록 및 의존성
284
- ├── TASK-001-entity.md # 엔티티 구현
285
+ documents/issues/cart/tasks/STORY-001/
286
+ ├── TASK-001-entity.md
285
287
  ├── TASK-002-repository.md
286
288
  ├── TASK-003-service.md
287
289
  ├── TASK-004-controller.md
@@ -889,16 +891,31 @@ Task의 완료 조건(DoD)을 테스트로 변환합니다.
889
891
  상태 자동 업데이트
890
892
  ```
891
893
 
892
- ### 문서 저장 위치
893
-
894
- | 산출물 | 위치 |
895
- |--------|------|
896
- | PRD | `documents/prd/<feature>-prd.md` |
897
- | HLD | `documents/hld/<feature>-hld.md` |
898
- | LLD | `documents/lld/<feature>-lld.md` |
899
- | Epic/Story | `backlogs/<feature>/` |
900
- | Task | `.tasks/<story-id>/` |
901
- | TC | `test-cases/<story-id>/` |
894
+ ### 문서 저장 위치 (Feature 기반 구조)
895
+
896
+ ```
897
+ documents/
898
+ ├── request/
899
+ │ └── <feature>-prd.md # PRD
900
+ ├── issues/
901
+ │ ├── <feature>/ # Feature별 그룹화
902
+ │ │ ├── README.md # Epic 개요 (선택)
903
+ │ │ ├── stories/
904
+ │ │ │ └── STORY-<id>-<name>.md # Story
905
+ │ │ └── tasks/
906
+ │ │ └── STORY-<id>/ # Story별 Task 그룹화
907
+ │ │ └── TASK-<id>.md # Task
908
+ │ └── standalone/ # Epic/Feature 없는 독립 작업
909
+ │ ├── stories/
910
+ │ └── tasks/
911
+ ├── system-design/
912
+ │ └── features/<feature>/
913
+ │ ├── hld.md # HLD
914
+ │ └── lld.md # LLD
915
+ └── test/
916
+ ├── acceptance/AT-<id>.md # Acceptance Test
917
+ └── unit/UT-<id>.md # Unit Test
918
+ ```
902
919
 
903
920
  ---
904
921
 
@@ -915,29 +932,30 @@ Task의 완료 조건(DoD)을 테스트로 변환합니다.
915
932
  - 세션 관리
916
933
 
917
934
  # 2. Epic/Story 생성 (epic-story-generator 스킬이 자동 호출됨)
918
- @documents/prd/auth-prd.md 기반으로 Epic과 Story를 생성해주세요.
935
+ @documents/request/auth-prd.md 기반으로 Epic과 Story를 생성해주세요.
919
936
 
920
937
  # 3. TC 생성 (tc-generator 스킬이 자동 호출됨)
921
938
  # → 이후 tc-reviewer, acceptance-test-generator 서브에이전트가 자동 실행됨
922
- @backlogs/auth/STORY-001-email-login.md 에 대한 테스트 케이스를 작성해주세요.
939
+ @documents/issues/auth/stories/STORY-001-email-login.md 에 대한 테스트 케이스를 작성해주세요.
923
940
 
924
941
  # 4. HLD 생성 (hld-generator 스킬이 자동 호출됨)
925
- @backlogs/auth/STORY-001-email-login.md 의 HLD를 작성해주세요.
942
+ @documents/issues/auth/stories/STORY-001-email-login.md 의 HLD를 작성해주세요.
926
943
 
927
944
  # 5. LLD 생성 (lld-generator 스킬이 자동 호출됨)
928
- @backlogs/auth/STORY-001-email-login.md
929
- @documents/hld/auth-hld.md
945
+ @documents/issues/auth/stories/STORY-001-email-login.md
946
+ @documents/system-design/features/auth/hld.md
930
947
  위 문서를 기반으로 LLD를 작성해주세요.
931
948
 
932
949
  # 6. Task 생성 (task-generator 스킬이 자동 호출됨)
933
950
  # → 이후 unit-test-generator 서브에이전트가 자동으로 테스트 먼저 생성
934
- @backlogs/auth/STORY-001-email-login.md
935
- @documents/lld/auth-lld.md
951
+ @documents/issues/auth/stories/STORY-001-email-login.md
952
+ @documents/system-design/features/auth/lld.md
936
953
  구현 태스크를 생성해주세요.
937
954
 
938
955
  # 7. 구현 시작 (Developer 페르소나 활성화 - Command 사용)
939
956
  /dev
940
- TASK-001 구현을 시작하겠습니다. 테스트가 통과하도록 구현해주세요.
957
+ @documents/issues/auth/tasks/STORY-001/TASK-001-entity.md 구현을 시작하겠습니다.
958
+ 테스트가 통과하도록 구현해주세요.
941
959
  ```
942
960
 
943
961
  ### Example 2: 버그 수정 (간단한 워크플로우)
package/bin/cli.js CHANGED
@@ -3,7 +3,7 @@
3
3
  const fs = require('fs');
4
4
  const path = require('path');
5
5
 
6
- const VERSION = '1.11.0';
6
+ const VERSION = '1.12.0';
7
7
  const PACKAGE_NAME = 'muno-claude-plugin';
8
8
 
9
9
  // ANSI colors
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "muno-claude-plugin",
3
- "version": "1.11.0",
3
+ "version": "1.12.0",
4
4
  "description": "Unleash Claude Code's full power - Complete development workflow with expert personas, TDD-based agents, and automated documentation",
5
5
  "main": "bin/cli.js",
6
6
  "bin": {
@@ -27,7 +27,7 @@
27
27
  "license": "MIT",
28
28
  "repository": {
29
29
  "type": "git",
30
- "url": "git+https://github.com/headcha/muno-claude-plugin.git"
30
+ "url": "git+https://github.com/musinsa/muno-claude-plugin.git"
31
31
  },
32
32
  "engines": {
33
33
  "node": ">=18.0.0"
@@ -58,7 +58,7 @@ color: cyan
58
58
  ## PRD 작성 기준
59
59
 
60
60
  ```
61
- ┌─────────────────────────────────────────────────────────────────┐
61
+ ┌───그럼 ──────────────────────────────────────────────────────────────┐
62
62
  │ PRD는 "새로운 요구사항"에 작성 │
63
63
  ├─────────────────────────────────────────────────────────────────┤
64
64
  │ │
@@ -275,70 +275,82 @@ Story 분해안을 검토해주세요.
275
275
 
276
276
  ## Step 4: 저장
277
277
 
278
- ### 출력 구조
278
+ ### 출력 구조 (Feature 기반 그룹화)
279
279
 
280
280
  ```
281
- documents/
282
- └── issues/
283
- ├── epics/
284
- └── EPIC-xxx.md # Epic 개별 문서
281
+ documents/issues/
282
+ ├── {feature}/ # Feature/Epic 이름 (예: auth, cart)
283
+ ├── README.md # Epic 개요 (Epic이 있는 경우)
284
+ ├── stories/
285
+ │ │ ├── STORY-{id}-{name}.md # Story 개별 문서
286
+ │ │ └── ...
287
+ │ └── tasks/
288
+ │ ├── STORY-{id}/ # Story별 Task 그룹화
289
+ │ │ ├── TASK-{id}.md
290
+ │ │ └── ...
291
+ │ └── ...
292
+ └── standalone/ # Epic/Feature 없는 독립 작업
285
293
  ├── stories/
286
- │ └── STORY-xxx.md # Story 개별 문서
287
294
  └── tasks/
288
- └── TASK-xxx.md # Task 개별 문서 (task-generator)
289
295
  ```
290
296
 
291
297
  **파일명 규칙**:
292
- - Epic: `EPIC-{number}-{kebab-case-name}.md` (예: `EPIC-001-user-authentication.md`)
293
- - Story: `STORY-{number}-{kebab-case-name}.md` (예: `STORY-001-email-login.md`)
294
- - Task: `TASK-{number}-{kebab-case-name}.md` (예: `TASK-001-login-entity.md`)
298
+ - Feature 폴더: `{feature-name}` (예: `auth`, `cart`, `payment`)
299
+ - Epic: `{feature}/README.md` (Epic 개요 포함)
300
+ - Story: `{feature}/stories/STORY-{id}-{name}.md`
301
+ - Task: `{feature}/tasks/STORY-{id}/TASK-{id}.md` (task-generator가 생성)
295
302
 
296
- **특징**:
297
- - Epic 없이 Story만 독립적으로 존재 가능
298
- - Story 없이 Task만 독립적으로 존재 가능
299
- - 각각 별도 폴더에서 독립적으로 관리
303
+ **유연한 워크플로우 지원**:
304
+ - Epic 있음: `{feature}/README.md` + `stories/`
305
+ - Epic 없음: `{feature}/stories/` (README.md 없이)
306
+ - Story 없음: `standalone/tasks/` (독립 Task)
300
307
 
301
- ### index.md 구조
308
+ ### README.md 구조 (Epic 개요)
309
+
310
+ Epic이 있는 경우 `{feature}/README.md`에 작성:
302
311
 
303
312
  ```markdown
304
- # [기능명] Backlog
313
+ # Epic: [기능명]
305
314
 
306
315
  ## 개요
307
- - **PRD**: [PRD 경로]
308
- - **총 Epic**: N개
309
- - **총 Story**: M개
316
+ - **PRD**: documents/request/{기능명}-prd.md
317
+ - **총 Story**: N개
310
318
  - **예상 기간**: X 스프린트
311
319
 
312
- ## Epic 목록
320
+ ## 비즈니스 목표
321
+ [Epic의 비즈니스 가치]
322
+
323
+ ## Story 목록
313
324
 
314
- | Epic ID | 제목 | Story | 상태 |
315
- |---------|------|----------|------|
316
- | EPIC-001 | ... | 5 | Not Started |
317
- | EPIC-002 | ... | 3 | Not Started |
325
+ | Story ID | 제목 | 크기 | 상태 |
326
+ |---------|------|------|------|
327
+ | STORY-001 | ... | S | Not Started |
328
+ | STORY-002 | ... | M | Not Started |
318
329
 
319
- ## 우선순위 매트릭스
330
+ ## 우선순위
320
331
 
321
332
  | 우선순위 | Story |
322
333
  |----------|-------|
323
- | Must Have | STORY-001, STORY-002, ... |
324
- | Should Have | STORY-005, ... |
325
- | Could Have | STORY-008, ... |
334
+ | Must Have | STORY-001, STORY-002 |
335
+ | Should Have | STORY-005 |
336
+ | Could Have | STORY-008 |
326
337
 
327
- ## 의존성 그래프
338
+ ## 의존성
328
339
 
329
- [mermaid 다이어그램]
340
+ [mermaid 다이어그램 - 필요시]
330
341
 
331
342
  ## 스프린트 배분 제안
332
343
 
333
344
  ### Sprint 1
334
- - STORY-001: [제목]
335
- - STORY-002: [제목]
336
- Total: X SP
345
+ - STORY-001: [제목] (3 SP)
346
+ - STORY-002: [제목] (5 SP)
337
347
 
338
348
  ### Sprint 2
339
349
  ...
340
350
  ```
341
351
 
352
+ **Epic 없는 경우**: README.md 생략하고 `stories/` 바로 생성
353
+
342
354
  ---
343
355
 
344
356
  ## Epic/Story 작성 완료 후 필수 작업
@@ -354,7 +366,7 @@ Task 도구를 사용하여 다음과 같이 호출합니다:
354
366
  ```
355
367
  Task 도구 호출:
356
368
  - subagent_type: epic-story-reviewer
357
- - prompt: "다음 백로그 폴더의 Epic/Story 문서를 검토해주세요: {백로그 폴더 경로}"
369
+ - prompt: "다음 Feature 폴더의 Epic/Story 문서를 검토해주세요: documents/issues/{feature}/"
358
370
  ```
359
371
 
360
372
  **다음 단계 조건**:
@@ -388,30 +388,64 @@ Task 분해안을 검토해주세요.
388
388
 
389
389
  ### Task 필수 섹션 (7개)
390
390
 
391
- 각 Task는 **7개 핵심 섹션**을 반드시 포함합니다:
391
+ 각 Task는 **Frontmatter + 7개 핵심 섹션**을 반드시 포함합니다:
392
392
 
393
393
  ```markdown
394
- # TASK-XXX: [Task 이름]
394
+ ---
395
+ id: TASK-{seq}
396
+ title: [Task 이름]
397
+ story_id: STORY-{id}
398
+ feature: {feature-name}
399
+ status: todo
400
+ related_docs:
401
+ prd: documents/request/{feature}-prd.md
402
+ epic: documents/issues/{feature}/README.md # Epic이 있는 경우
403
+ story: documents/issues/{feature}/stories/STORY-{id}-{name}.md
404
+ hld: documents/system-design/features/{feature}/hld.md # 있는 경우
405
+ lld: documents/system-design/features/{feature}/lld.md # 있는 경우
406
+ ---
407
+
408
+ # TASK-{seq}: [Task 이름]
409
+
410
+ ## 🔗 참고 자료 (코딩 전 필독)
411
+
412
+ **이 Task를 구현하기 전에 다음 문서들을 반드시 읽어주세요:**
413
+
414
+ ### 필수 문서
415
+ - **Story**: @documents/issues/{feature}/stories/STORY-{id}-{name}.md
416
+ - 이 Task가 충족해야 할 Acceptance Criteria
417
+ - 사용자 관점의 기대 동작
418
+
419
+ ### 설계 문서 (있는 경우)
420
+ - **LLD**: @documents/system-design/features/{feature}/lld.md
421
+ - API 명세, 데이터 모델, 시퀀스 다이어그램
422
+ - **HLD**: @documents/system-design/features/{feature}/hld.md
423
+ - 전체 아키텍처, 컴포넌트 구조
424
+
425
+ ### 비즈니스 맥락 (있는 경우)
426
+ - **PRD**: @documents/request/{feature}-prd.md
427
+ - 비즈니스 요구사항, 문제 정의
428
+ - **Epic**: @documents/issues/{feature}/README.md
429
+ - Epic 전체 목표
430
+
431
+ ---
395
432
 
396
433
  ## 1. Context (맥락)
397
434
  왜 이 Task가 필요한가, User Story와의 연결
398
435
 
399
- ## 2. Document References (참조 문서 임포트)
400
- 코딩 에이전트가 참고해야 할 문서들과 핵심 내용 발췌
401
-
402
- ## 3. Scope (범위)
436
+ ## 2. Scope (범위)
403
437
  생성할 파일, 선행 Task, 예상 소요
404
438
 
405
- ## 4. Reference Code (참조 코드)
439
+ ## 3. Reference Code (참조 코드)
406
440
  기존 코드베이스에서 따라야 할 패턴
407
441
 
408
- ## 5. Implementation Spec (구현 명세)
442
+ ## 4. Implementation Spec (구현 명세)
409
443
  조건, 요구사항, 의사 코드 (구현 코드 X)
410
444
 
411
- ## 6. Acceptance Criteria (완료 조건)
445
+ ## 5. Acceptance Criteria (완료 조건)
412
446
  체크리스트 형태의 명확한 완료 기준
413
447
 
414
- ## 7. Test Scenarios (테스트 시나리오)
448
+ ## 6. Test Scenarios (테스트 시나리오)
415
449
  구체적인 테스트 케이스와 값
416
450
  ```
417
451
 
@@ -445,68 +479,12 @@ Task 분해안을 검토해주세요.
445
479
  - **후행**: TASK-XXX (이 Task가 완료되어야 시작 가능)
446
480
  ```
447
481
 
448
- ### 2. Document References (참조 문서 임포트) - 핵심!
482
+ **참고**: "🔗 참고 자료" 섹션은 이미 템플릿 상단에 추가되었으므로 별도 가이드 불필요
449
483
 
450
- **코딩 에이전트가 추론하지 않도록, 필요한 정보를 직접 임포트한다.**
484
+ ### 2. Scope (범위)
451
485
 
452
486
  ```markdown
453
- ## 2. Document References
454
-
455
- ### 2.1 User Story (Required)
456
-
457
- **파일**: `backlogs/feature-name/STORY-XXX.md`
458
-
459
- **Acceptance Criteria 발췌**:
460
- ```gherkin
461
- Scenario: [정상 케이스]
462
- Given [전제 조건]
463
- When [사용자 행동]
464
- Then [기대 결과]
465
- ```
466
-
467
- ### 2.2 LLD (Required)
468
-
469
- **파일**: `documents/lld/xxx-lld.md`
470
-
471
- **ERD 발췌**:
472
- ```
473
- [Table 정의 발췌]
474
- ```
475
-
476
- **API Spec 발췌** (해당시):
477
- ```
478
- POST /api/v1/xxx
479
- Request: {...}
480
- Response: {...}
481
- ```
482
-
483
- **서비스 메서드 정의 발췌**:
484
- ```
485
- createXxx(command: CreateXxxCommand): XxxDto
486
- ```
487
-
488
- ### 2.3 HLD (Optional)
489
-
490
- **파일**: `documents/hld/xxx-hld.md`
491
-
492
- **아키텍처 컨텍스트** (필요한 부분만):
493
- ```
494
- [컴포넌트 관계, 데이터 흐름 등]
495
- ```
496
-
497
- ### 2.4 코드베이스 컨벤션
498
-
499
- **참조 파일**: `CLAUDE.md`
500
-
501
- **적용할 규칙**:
502
- - [컨벤션 1]
503
- - [컨벤션 2]
504
- ```
505
-
506
- ### 3. Scope (범위)
507
-
508
- ```markdown
509
- ## 3. Scope
487
+ ## 2. Scope
510
488
 
511
489
  | 항목 | 내용 |
512
490
  |-----|------|
@@ -515,10 +493,10 @@ createXxx(command: CreateXxxCommand): XxxDto
515
493
  | 예상 라인 | 약 150줄 |
516
494
  ```
517
495
 
518
- ### 4. Reference Code (참조 코드)
496
+ ### 3. Reference Code (참조 코드)
519
497
 
520
498
  ```markdown
521
- ## 4. Reference Code
499
+ ## 3. Reference Code
522
500
 
523
501
  **참조 파일**: `core/src/main/kotlin/com/example/domain/user/model/UserEntity.kt`
524
502
 
@@ -539,14 +517,14 @@ class UserEntity(
539
517
  - [ ] @Column(name = "snake_case") 명시
540
518
  ```
541
519
 
542
- ### 5. Implementation Spec (구현 명세)
520
+ ### 4. Implementation Spec (구현 명세)
543
521
 
544
522
  > **주의**: 구현 코드를 포함하지 않는다. 조건과 요구사항만 정의한다.
545
523
 
546
524
  ```markdown
547
- ## 5. Implementation Spec
525
+ ## 4. Implementation Spec
548
526
 
549
- ### 5.1 데이터 정의
527
+ ### 4.1 데이터 정의
550
528
 
551
529
  | 필드 | 타입 | 제약조건 | 설명 |
552
530
  |------|------|----------|------|
@@ -556,7 +534,7 @@ class UserEntity(
556
534
  | title | String | Not Null, Max 100 | 제목 |
557
535
  | status | Enum | Not Null, Default ACTIVE | 상태 |
558
536
 
559
- ### 5.2 비즈니스 규칙
537
+ ### 4.2 비즈니스 규칙
560
538
 
561
539
  | ID | 규칙 | 설명 |
562
540
  |----|------|------|
@@ -564,14 +542,14 @@ class UserEntity(
564
542
  | BR-02 | 제목 검증 | title은 1-100자 |
565
543
  | BR-03 | 외부 ID | UUIDv7로 자동 생성 |
566
544
 
567
- ### 5.3 메서드 시그니처 (Service의 경우)
545
+ ### 4.3 메서드 시그니처 (Service의 경우)
568
546
 
569
547
  | 메서드 | 입력 | 출력 | 설명 |
570
548
  |--------|-----|------|------|
571
549
  | create | CreateCommand | Dto | 생성 |
572
550
  | getById | UUID, Long | Dto | 조회 (권한 검증) |
573
551
 
574
- ### 5.4 의사 코드 (복잡한 로직의 경우)
552
+ ### 4.4 의사 코드 (복잡한 로직의 경우)
575
553
 
576
554
  ```
577
555
  // updateTitle 로직
@@ -584,12 +562,12 @@ class UserEntity(
584
562
  ```
585
563
  ```
586
564
 
587
- ### 6. Acceptance Criteria (완료 조건)
565
+ ### 5. Acceptance Criteria (완료 조건)
588
566
 
589
567
  **Story의 AC에서 이 Task가 충족해야 할 부분을 명시한다.**
590
568
 
591
569
  ```markdown
592
- ## 6. Acceptance Criteria
570
+ ## 5. Acceptance Criteria
593
571
 
594
572
  ### Story AC 연결
595
573
  - [ ] Story AC-1의 "[특정 부분]"을 이 Task에서 구현
@@ -605,14 +583,14 @@ class UserEntity(
605
583
  - [ ] `./gradlew test` 기존 테스트 통과
606
584
  ```
607
585
 
608
- ### 7. Test Scenarios (테스트 시나리오)
586
+ ### 6. Test Scenarios (테스트 시나리오)
609
587
 
610
588
  > **주의**: 테스트 코드를 포함하지 않는다. 시나리오와 입출력 값만 정의한다.
611
589
 
612
590
  ```markdown
613
- ## 7. Test Scenarios
591
+ ## 6. Test Scenarios
614
592
 
615
- ### 7.1 Happy Path
593
+ ### 6.1 Happy Path
616
594
 
617
595
  **Story AC 연결**: Story AC-1 "정상적으로 생성"
618
596
 
@@ -631,7 +609,7 @@ class UserEntity(
631
609
  | status | ACTIVE |
632
610
  | createdAt | 현재 시간 |
633
611
 
634
- ### 7.2 Edge Cases
612
+ ### 6.2 Edge Cases
635
613
 
636
614
  **Story AC 연결**: Story AC-2 "유효성 검증"
637
615
 
@@ -641,14 +619,14 @@ class UserEntity(
641
619
  | 100자 초과 | title = "가" × 101 | IllegalArgumentException |
642
620
  | null userId | userId = null | NullPointerException (컴파일 타임) |
643
621
 
644
- ### 7.3 권한 검증 (해당시)
622
+ ### 6.3 권한 검증 (해당시)
645
623
 
646
624
  | 시나리오 | 조건 | 기대 결과 |
647
625
  |---------|------|----------|
648
626
  | 타인 접근 | chatRoom.userId ≠ requestUserId | AccessDeniedException |
649
627
  | 본인 접근 | chatRoom.userId = requestUserId | 정상 처리 |
650
628
 
651
- ### 7.4 검증 쿼리 (DB 확인용)
629
+ ### 6.4 검증 쿼리 (DB 확인용)
652
630
 
653
631
  - 생성 확인: `SELECT * FROM [table] WHERE external_id = ?`
654
632
  - 인덱스 확인: `SHOW INDEX FROM [table]`
@@ -712,43 +690,46 @@ class UserEntity(
712
690
 
713
691
  ---
714
692
 
715
- ## 출력 구조
693
+ ## 출력 구조 (Feature 기반 그룹화)
716
694
 
717
695
  ```
718
- documents/
719
- └── issues/
696
+ documents/issues/
697
+ ├── {feature}/ # Feature 이름 (Story와 동일 폴더)
698
+ │ └── tasks/
699
+ │ └── STORY-{id}/ # Story별 Task 그룹화
700
+ │ ├── TASK-001-{name}.md
701
+ │ ├── TASK-002-{name}.md
702
+ │ └── ...
703
+ └── standalone/ # 독립 Task
720
704
  └── tasks/
721
- └── TASK-{story-id}-{seq}-{kebab-case-name}.md
705
+ ├── TASK-001-{name}.md
706
+ └── ...
722
707
  ```
723
708
 
724
709
  **파일명 규칙**:
725
710
 
726
- | Task 유형 | 파일명 패턴 | 예시 |
727
- |----------|------------|------|
728
- | Story 기반 | `TASK-{STORY-ID}-{seq}-{name}.md` | `TASK-S001-01-chatroom-entity.md` |
729
- | Epic 기반 | `TASK-{EPIC-ID}-{seq}-{name}.md` | `TASK-E001-01-db-migration.md` |
730
- | 독립 Task | `TASK-IND-{seq}-{name}.md` | `TASK-IND-01-fix-login-bug.md` |
711
+ | Task 유형 | 위치 | 파일명 | 예시 |
712
+ |----------|------|--------|------|
713
+ | Story 기반 | `{feature}/tasks/STORY-{id}/` | `TASK-{seq}-{name}.md` | `auth/tasks/STORY-001/TASK-001-entity.md` |
714
+ | 독립 Task | `standalone/tasks/` | `TASK-{id}-{name}.md` | `standalone/tasks/TASK-001-hotfix.md` |
731
715
 
732
- **예시 (Story 기반)**:
716
+ **예시 (auth Feature)**:
733
717
  ```
734
- documents/issues/tasks/
735
- ├── TASK-S001-01-chatroom-entity.md # Story-001의 1번째 Task
736
- ├── TASK-S001-02-chatroom-repository.md # Story-001의 2번째 Task
737
- ├── TASK-S001-03-chatroom-service.md # Story-001의 3번째 Task
738
- ├── TASK-S002-01-message-entity.md # Story-002의 1번째 Task
739
- └── TASK-IND-01-refactor-auth.md # 독립 Task
718
+ documents/issues/auth/
719
+ └── tasks/
720
+ ├── STORY-001/ # Story-001의 Task
721
+ ├── TASK-001-entity.md
722
+ ├── TASK-002-repository.md
723
+ └── TASK-003-service.md
724
+ └── STORY-002/ # Story-002의 Task들
725
+ ├── TASK-001-controller.md
726
+ └── TASK-002-validator.md
740
727
  ```
741
728
 
742
- **ID 규칙**:
743
- - `S001` = Story-001 (Story 기반)
744
- - `E001` = Epic-001 (Epic 기반)
745
- - `IND` = Independent (독립 Task)
746
- - `seq` = 01, 02, 03... (순번)
747
-
748
729
  **특징**:
749
- - 파일명만 보고 상위 Story/Epic 연결 파악 가능
750
- - 같은 Story의 Task들이 파일 탐색기에서 그룹핑됨
751
- - 상위 Epic/Story 링크는 문서 내부 frontmatter에서도 관리
730
+ - Story별로 Task가 폴더로 그룹화되어 관리 용이
731
+ - Feature 단위로 모든 문서가 함께 위치
732
+ - 파일 탐색과 맥락 파악이 쉬움
752
733
 
753
734
  ---
754
735