@silbaram/artifact-driven-agent 0.1.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 (68) hide show
  1. package/README.md +456 -0
  2. package/ai-dev-team/.gitkeep +0 -0
  3. package/ai-dev-team/README.md +44 -0
  4. package/ai-dev-team/artifacts/.gitkeep +0 -0
  5. package/ai-dev-team/artifacts/features/_template/api.md +19 -0
  6. package/ai-dev-team/artifacts/features/_template/qa.md +16 -0
  7. package/ai-dev-team/artifacts/features/_template/review.md +14 -0
  8. package/ai-dev-team/artifacts/features/_template/spec.md +28 -0
  9. package/ai-dev-team/artifacts/features/_template/ui.md +14 -0
  10. package/ai-dev-team/artifacts/rfc/RFC-0000-template.md +49 -0
  11. package/ai-dev-team/roles/.gitkeep +0 -0
  12. package/ai-dev-team/rules/.gitkeep +0 -0
  13. package/bin/cli.js +75 -0
  14. package/core/artifacts/architecture-options.md +85 -0
  15. package/core/artifacts/backlog.md +177 -0
  16. package/core/artifacts/current-sprint.md +125 -0
  17. package/core/artifacts/decision.md +72 -0
  18. package/core/artifacts/plan.md +187 -0
  19. package/core/artifacts/project.md +191 -0
  20. package/core/artifacts/qa-report.md +104 -0
  21. package/core/artifacts/review-report.md +103 -0
  22. package/core/roles/architect.md +236 -0
  23. package/core/roles/developer.md +203 -0
  24. package/core/roles/manager.md +300 -0
  25. package/core/roles/planner.md +231 -0
  26. package/core/roles/qa.md +262 -0
  27. package/core/roles/reviewer.md +280 -0
  28. package/core/rules/document-priority.md +196 -0
  29. package/core/rules/escalation.md +171 -0
  30. package/core/rules/iteration.md +236 -0
  31. package/core/rules/rfc.md +31 -0
  32. package/core/rules/rollback.md +218 -0
  33. package/docs/feature-structure.md +36 -0
  34. package/examples/todo-app/README.md +23 -0
  35. package/examples/todo-app/artifacts/backlog.md +23 -0
  36. package/examples/todo-app/artifacts/plan.md +23 -0
  37. package/examples/todo-app/artifacts/project.md +23 -0
  38. package/package.json +49 -0
  39. package/src/commands/interactive.js +101 -0
  40. package/src/commands/logs.js +81 -0
  41. package/src/commands/reset.js +66 -0
  42. package/src/commands/run.js +202 -0
  43. package/src/commands/sessions.js +70 -0
  44. package/src/commands/setup.js +128 -0
  45. package/src/commands/status.js +76 -0
  46. package/src/commands/validate.js +219 -0
  47. package/src/index.js +12 -0
  48. package/src/utils/files.js +134 -0
  49. package/templates/cli/artifacts/commands.md +262 -0
  50. package/templates/cli/artifacts/output-format.md +298 -0
  51. package/templates/cli/roles/cli-developer.md +239 -0
  52. package/templates/cli/rules/command-change.md +225 -0
  53. package/templates/game/artifacts/assets.md +148 -0
  54. package/templates/game/artifacts/game-systems.md +217 -0
  55. package/templates/game/artifacts/hud.md +199 -0
  56. package/templates/game/roles/game-logic.md +193 -0
  57. package/templates/game/roles/rendering.md +137 -0
  58. package/templates/game/rules/system-change.md +184 -0
  59. package/templates/library/artifacts/changelog.md +84 -0
  60. package/templates/library/artifacts/examples.md +157 -0
  61. package/templates/library/artifacts/public-api.md +197 -0
  62. package/templates/library/roles/library-developer.md +180 -0
  63. package/templates/library/rules/versioning.md +186 -0
  64. package/templates/web-dev/artifacts/api.md +212 -0
  65. package/templates/web-dev/artifacts/ui.md +104 -0
  66. package/templates/web-dev/roles/backend.md +134 -0
  67. package/templates/web-dev/roles/frontend.md +161 -0
  68. package/templates/web-dev/rules/api-change.md +198 -0
package/bin/cli.js ADDED
@@ -0,0 +1,75 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { program } from 'commander';
4
+ import { setup } from '../src/commands/setup.js';
5
+ import { status } from '../src/commands/status.js';
6
+ import { reset } from '../src/commands/reset.js';
7
+ import { validate } from '../src/commands/validate.js';
8
+ import { sessions } from '../src/commands/sessions.js';
9
+ import { logs } from '../src/commands/logs.js';
10
+ import { run } from '../src/commands/run.js';
11
+ import { interactive } from '../src/commands/interactive.js';
12
+ import { createRequire } from 'node:module';
13
+
14
+ const require = createRequire(import.meta.url);
15
+ const { version } = require('../package.json');
16
+ program
17
+ .name('ada')
18
+ .description('Artifact-Driven AI Agent Framework\nAI가 규칙을 어기지 못하게 하는 문서 기반 개발')
19
+ .version(version);
20
+
21
+ // Setup command
22
+ program
23
+ .command('setup [template]')
24
+ .description('프로젝트 템플릿 세팅 (web, library, game, cli)')
25
+ .action(setup);
26
+
27
+ // Status command
28
+ program
29
+ .command('status')
30
+ .description('현재 세팅 상태 확인')
31
+ .action(status);
32
+
33
+ // Reset command
34
+ program
35
+ .command('reset')
36
+ .description('ai-dev-team 초기화')
37
+ .option('-f, --force', '확인 없이 강제 초기화')
38
+ .action(reset);
39
+
40
+ // Validate command
41
+ program
42
+ .command('validate [doc]')
43
+ .description('문서 검증 (plan, project, backlog, sprint 또는 전체)')
44
+ .action(validate);
45
+
46
+ // Sessions command
47
+ program
48
+ .command('sessions')
49
+ .description('AI 실행 세션 목록')
50
+ .action(sessions);
51
+
52
+ // Logs command
53
+ program
54
+ .command('logs [sessionId]')
55
+ .description('세션 로그 확인')
56
+ .action(logs);
57
+
58
+ // Run command
59
+ program
60
+ .command('run <role> <tool>')
61
+ .description('AI 에이전트 실행 (예: run backend claude)')
62
+ .action(run);
63
+
64
+ // Parse arguments
65
+ const args = process.argv.slice(2);
66
+
67
+ if (args.length === 0) {
68
+ // 인자 없으면 대화형 모드
69
+ interactive();
70
+ } else if (args.length === 2 && !args[0].startsWith('-') && !['setup', 'status', 'reset', 'validate', 'sessions', 'logs', 'run'].includes(args[0])) {
71
+ // 두 개의 인자가 명령어가 아니면 role tool로 간주
72
+ run(args[0], args[1]);
73
+ } else {
74
+ program.parse();
75
+ }
@@ -0,0 +1,85 @@
1
+ # Architecture Options
2
+
3
+ > 아키텍처 협상 과정 기록
4
+ > Architect와 사용자 간 논의 내용
5
+
6
+ ---
7
+
8
+ ## 0. 문서 메타
9
+
10
+ | 항목 | 값 |
11
+ |------|-----|
12
+ | 상태 | 협의 중 / 확정 |
13
+ | 최종 수정 | YYYY-MM-DD |
14
+
15
+ ---
16
+
17
+ ## 1. 결정 상태
18
+
19
+ | 항목 | 상태 | 선택 |
20
+ |------|:----:|------|
21
+ | 규모 | ✅ | M (Medium) |
22
+ | 언어 | ✅ | [선택] |
23
+ | 프레임워크 | ⏳ | - |
24
+ | 데이터 저장 | ❌ | - |
25
+
26
+ 상태: ✅ 확정 / ⏳ 협의 중 / ❌ 미정
27
+
28
+ ---
29
+
30
+ ## 2. 규모 분석
31
+
32
+ ### 분석 결과
33
+
34
+ | 항목 | 값 |
35
+ |------|-----|
36
+ | 핵심 기능 수 | N개 |
37
+ | 예상 복잡도 | 낮음 / 중간 / 높음 |
38
+ | 권장 규모 | S / M / L |
39
+
40
+ ### 규모 근거
41
+
42
+ [규모 판단 근거 설명]
43
+
44
+ ---
45
+
46
+ ## 3. 옵션 제안
47
+
48
+ ### [항목명] 옵션
49
+
50
+ | 옵션 | 장점 | 단점 |
51
+ |------|------|------|
52
+ | A: [선택지] | [장점] | [단점] |
53
+ | B: [선택지] | [장점] | [단점] |
54
+ | C: [선택지] | [장점] | [단점] |
55
+
56
+ ### Architect 권장
57
+
58
+ 옵션 [X] 권장
59
+
60
+ 이유: [권장 이유]
61
+
62
+ ---
63
+
64
+ ## 4. 사용자 선택 기록
65
+
66
+ | 날짜 | 항목 | 선택 | 이유 |
67
+ |------|------|------|------|
68
+ | YYYY-MM-DD | 규모 | M | 기능 수 기준 |
69
+ | YYYY-MM-DD | 언어 | [선택] | [이유] |
70
+
71
+ ---
72
+
73
+ ## 5. 미결정 항목
74
+
75
+ | 항목 | 옵션 | 결정 예정 |
76
+ |------|------|----------|
77
+ | [항목] | A / B / C | [시점] |
78
+
79
+ ---
80
+
81
+ ## 6. 확정 시 다음 단계
82
+
83
+ 모든 항목 확정 후:
84
+ 1. project.md 생성 (Frozen)
85
+ 2. 스프린트 계획 시작
@@ -0,0 +1,177 @@
1
+ # Backlog (Task 목록)
2
+
3
+ > 모든 Task의 단일 진실 (Single Source of Truth)
4
+ > Planner가 생성, Manager가 상태 관리
5
+
6
+ ---
7
+
8
+ ## ✅ Task 완성도 체크리스트
9
+
10
+ > ⚠️ Task가 READY 상태가 되려면 모든 항목 충족 필요
11
+
12
+ ### 필수 항목 (Required)
13
+ - [ ] Task ID 부여됨 (TASK-NNN)
14
+ - [ ] 출처(기능 ID)가 plan.md에 존재함
15
+ - [ ] 수용 조건 최소 1개 이상
16
+ - [ ] 크기(S/M/L) 결정됨
17
+ - [ ] 우선순위(P0/P1/P2) 결정됨
18
+
19
+ ### 품질 체크 (Quality)
20
+ - [ ] 수용 조건이 테스트 가능함
21
+ - [ ] 의존성이 명시됨 (없으면 "-")
22
+ - [ ] Task 설명이 구체적임 (모호한 표현 없음)
23
+ - [ ] L 크기 Task가 분해 검토됨
24
+
25
+ ---
26
+
27
+ ## 0. 문서 메타
28
+
29
+ | 항목 | 값 |
30
+ |------|-----|
31
+ | 총 Task 수 | N개 |
32
+ | READY | N개 |
33
+ | IN_SPRINT | N개 |
34
+ | DONE | N개 |
35
+ | 최종 갱신 | YYYY-MM-DD |
36
+
37
+ ---
38
+
39
+ ## 1. Task 상태 정의
40
+
41
+ | 상태 | 설명 | 다음 상태 |
42
+ |------|------|----------|
43
+ | BACKLOG | 정의됨, 상세화 필요 | READY |
44
+ | READY | 스프린트 투입 가능 | IN_SPRINT |
45
+ | IN_SPRINT | 현재 스프린트에 포함 | IN_DEV |
46
+ | IN_DEV | 개발 중 | IN_REVIEW |
47
+ | IN_REVIEW | 리뷰 중 | IN_QA, IN_DEV |
48
+ | IN_QA | QA 검증 중 | DONE, IN_DEV |
49
+ | DONE | 완료 | - |
50
+ | BLOCKED | 차단됨 | (해결 후 원래 상태) |
51
+ | DEFERRED | 보류/이월 | BACKLOG |
52
+
53
+ ---
54
+
55
+ ## 2. Task 목록
56
+
57
+ ### TASK-001: [Task 이름]
58
+
59
+ | 항목 | 값 |
60
+ |------|-----|
61
+ | 상태 | BACKLOG |
62
+ | 우선순위 | P0 / P1 / P2 |
63
+ | 크기 | S / M / L |
64
+ | 출처 | F001 (plan.md 기능 ID) |
65
+ | 담당 | - |
66
+ | 의존성 | - |
67
+
68
+ **수용 조건 (Acceptance Criteria):**
69
+ - [ ] 조건 1
70
+ - [ ] 조건 2
71
+ - [ ] 조건 3
72
+
73
+ ---
74
+
75
+ ### TASK-002: [Task 이름]
76
+
77
+ | 항목 | 값 |
78
+ |------|-----|
79
+ | 상태 | BACKLOG |
80
+ | 우선순위 | P1 |
81
+ | 크기 | M |
82
+ | 출처 | F001 |
83
+ | 담당 | - |
84
+ | 의존성 | TASK-001 |
85
+
86
+ **수용 조건:**
87
+ - [ ] 조건 1
88
+ - [ ] 조건 2
89
+
90
+ ---
91
+
92
+ ### TASK-003: [Task 이름]
93
+
94
+ | 항목 | 값 |
95
+ |------|-----|
96
+ | 상태 | BACKLOG |
97
+ | 우선순위 | P1 |
98
+ | 크기 | S |
99
+ | 출처 | F002 |
100
+ | 담당 | - |
101
+ | 의존성 | - |
102
+
103
+ **수용 조건:**
104
+ - [ ] 조건 1
105
+ - [ ] 조건 2
106
+
107
+ ---
108
+
109
+ ## 3. 완료된 Task (Archive)
110
+
111
+ > DONE 상태 Task는 여기로 이동
112
+
113
+ ### ~~TASK-000: [Task 이름]~~ ✅
114
+
115
+ | 항목 | 값 |
116
+ |------|-----|
117
+ | 상태 | DONE |
118
+ | 완료일 | YYYY-MM-DD |
119
+ | 스프린트 | Sprint 1 |
120
+
121
+ ---
122
+
123
+ ## 4. Task 작성 규칙
124
+
125
+ ### 4.1 Task 분해 원칙
126
+
127
+ - 기능 1개 = Task 1개 이상
128
+ - Task는 독립적으로 완료 가능해야 함
129
+ - 의존성이 있으면 명시
130
+
131
+ ### 4.2 크기 기준
132
+
133
+ | 크기 | 설명 | 예상 시간 |
134
+ |:----:|------|----------|
135
+ | S | 단순 구현 | 1-2시간 |
136
+ | M | 일반 기능 | 반나절 |
137
+ | L | 복합 기능 | 1일+ |
138
+
139
+ ### 4.3 수용 조건 규칙
140
+
141
+ - 검증 가능해야 함 (테스트 가능)
142
+ - 구체적이어야 함 (모호함 금지)
143
+ - 완료 기준이 명확해야 함
144
+
145
+ ---
146
+
147
+ ## 5. 상태 전환 규칙
148
+
149
+ ### 5.1 전환 권한
150
+
151
+ | 전환 | 권한 |
152
+ |------|------|
153
+ | BACKLOG → READY | Planner |
154
+ | READY → IN_SPRINT | Manager |
155
+ | IN_SPRINT → IN_DEV | Developer |
156
+ | IN_DEV → IN_REVIEW | Developer |
157
+ | IN_REVIEW → IN_QA | Reviewer (PASS 시) |
158
+ | IN_REVIEW → IN_DEV | Reviewer (REJECT 시) |
159
+ | IN_QA → DONE | Manager (PASS 후 승인) |
160
+ | IN_QA → IN_DEV | QA (FAIL 시) |
161
+ | * → BLOCKED | 누구나 (사유 명시) |
162
+ | * → DEFERRED | Manager |
163
+
164
+ ### 5.2 역전환 규칙
165
+
166
+ - REJECT/FAIL 시에만 역전환 가능
167
+ - 역전환 시 사유 필수 기록
168
+
169
+ ---
170
+
171
+ ## 6. 변경 이력
172
+
173
+ | 날짜 | Task ID | 변경 내용 | 작성자 |
174
+ |------|---------|----------|--------|
175
+ | YYYY-MM-DD | TASK-001 | 생성 | Planner |
176
+ | YYYY-MM-DD | TASK-001 | BACKLOG → READY | Planner |
177
+ | YYYY-MM-DD | TASK-001 | READY → IN_SPRINT | Manager |
@@ -0,0 +1,125 @@
1
+ # Current Sprint
2
+
3
+ > 현재 진행 중인 스프린트의 작업 범위
4
+ > Manager가 관리
5
+
6
+ ---
7
+
8
+ ## 0. 스프린트 메타
9
+
10
+ | 항목 | 값 |
11
+ |------|-----|
12
+ | 스프린트 | Sprint N |
13
+ | 시작일 | YYYY-MM-DD |
14
+ | 종료 예정 | YYYY-MM-DD |
15
+ | 상태 | 계획 / 진행 / 완료 |
16
+
17
+ ---
18
+
19
+ ## 1. 스프린트 목표
20
+
21
+ > 이번 스프린트에서 달성하고자 하는 것
22
+
23
+ - [목표 1]
24
+ - [목표 2]
25
+
26
+ ---
27
+
28
+ ## 2. 스프린트 Task 목록
29
+
30
+ | Task | 상태 | 담당 | 우선순위 | 크기 |
31
+ |------|:----:|------|:--------:|:----:|
32
+ | TASK-001 | IN_DEV | Developer | P0 | M |
33
+ | TASK-002 | IN_SPRINT | - | P1 | S |
34
+ | TASK-003 | IN_REVIEW | Developer | P1 | M |
35
+
36
+ ### 상태 요약
37
+
38
+ | 상태 | 개수 |
39
+ |------|:----:|
40
+ | IN_SPRINT | N |
41
+ | IN_DEV | N |
42
+ | IN_REVIEW | N |
43
+ | IN_QA | N |
44
+ | DONE | N |
45
+ | **총합** | **N** |
46
+
47
+ ---
48
+
49
+ ## 3. 역할별 현재 작업
50
+
51
+ ### Developer
52
+
53
+ | Task | 상태 | 비고 |
54
+ |------|------|------|
55
+ | TASK-001 | IN_DEV | 진행 중 |
56
+
57
+ ### Reviewer
58
+
59
+ | Task | 상태 | 비고 |
60
+ |------|------|------|
61
+ | TASK-003 | IN_REVIEW | 리뷰 대기 |
62
+
63
+ ### QA
64
+
65
+ | Task | 상태 | 비고 |
66
+ |------|------|------|
67
+ | - | - | 대기 중 |
68
+
69
+ ---
70
+
71
+ ## 4. 차단 사항 (Blockers)
72
+
73
+ > 현재 진행을 막는 이슈
74
+
75
+ | Task | 차단 사유 | 담당자 | 상태 |
76
+ |------|----------|--------|------|
77
+ | - | - | - | - |
78
+
79
+ ---
80
+
81
+ ## 5. 스프린트 중 변경 사항
82
+
83
+ > 스프린트 시작 후 발생한 변경
84
+
85
+ | 날짜 | 변경 내용 | 사유 | 승인 |
86
+ |------|----------|------|------|
87
+ | - | - | - | - |
88
+
89
+ ---
90
+
91
+ ## 6. 스프린트 회고 (완료 시)
92
+
93
+ > 스프린트 종료 후 Manager가 작성
94
+
95
+ ### 완료된 Task
96
+
97
+ | Task | 설명 |
98
+ |------|------|
99
+ | TASK-XXX | [설명] |
100
+
101
+ ### 미완료 Task
102
+
103
+ | Task | 사유 | 처리 |
104
+ |------|------|------|
105
+ | TASK-XXX | [사유] | 이월 / 취소 |
106
+
107
+ ### 잘된 점
108
+
109
+ - [내용]
110
+
111
+ ### 개선할 점
112
+
113
+ - [내용]
114
+
115
+ ### 다음 스프린트 제안
116
+
117
+ - [제안]
118
+
119
+ ---
120
+
121
+ ## 7. 스프린트 히스토리
122
+
123
+ | 스프린트 | 기간 | 목표 | 완료 Task | 결과 |
124
+ |----------|------|------|:---------:|:----:|
125
+ | Sprint 1 | MM/DD ~ MM/DD | [목표] | N개 | ✅ / ⚠️ |
@@ -0,0 +1,72 @@
1
+ # Decision Log
2
+
3
+ > Manager의 모든 판단을 기록
4
+ > 시간순으로 기록
5
+
6
+ ---
7
+
8
+ ## 현재 상태
9
+
10
+ | 항목 | 값 |
11
+ |------|-----|
12
+ | 현재 단계 | 기획 / 아키텍처 / 개발 / 완료 |
13
+ | 스프린트 | Sprint N |
14
+ | 마지막 결정 | YYYY-MM-DD |
15
+
16
+ ---
17
+
18
+ ## Decision Log
19
+
20
+ ### Decision #1
21
+
22
+ | 항목 | 값 |
23
+ |------|-----|
24
+ | 일시 | YYYY-MM-DD HH:MM |
25
+ | 유형 | 단계 전환 / 예외 승인 / 되돌림 / 스프린트 |
26
+ | 요청자 | [역할] |
27
+
28
+ **내용:**
29
+ [결정 내용]
30
+
31
+ **근거:**
32
+ [판단 근거]
33
+
34
+ **결과:** ✅ 승인 / ❌ 거부 / ⏸️ 보류
35
+
36
+ ---
37
+
38
+ ### Decision #2
39
+
40
+ | 항목 | 값 |
41
+ |------|-----|
42
+ | 일시 | YYYY-MM-DD HH:MM |
43
+ | 유형 | [유형] |
44
+ | 요청자 | [역할] |
45
+
46
+ **내용:**
47
+ [결정 내용]
48
+
49
+ **근거:**
50
+ [판단 근거]
51
+
52
+ **결과:** ✅ 승인 / ❌ 거부 / ⏸️ 보류
53
+
54
+ ---
55
+
56
+ ## 예외 승인 이력
57
+
58
+ > 규칙 예외로 승인된 항목들
59
+
60
+ | # | 날짜 | 내용 | 사유 |
61
+ |---|------|------|------|
62
+ | 1 | YYYY-MM-DD | [예외 내용] | [사유] |
63
+
64
+ ---
65
+
66
+ ## 되돌림 이력
67
+
68
+ > REJECT/FAIL로 인한 되돌림 기록
69
+
70
+ | # | 날짜 | 대상 | 사유 | 조치 |
71
+ |---|------|------|------|------|
72
+ | 1 | YYYY-MM-DD | TASK-XXX | [사유] | [조치] |
@@ -0,0 +1,187 @@
1
+ # [프로젝트명] 기획서
2
+
3
+ > 문서 상태: Draft / Confirmed
4
+ > 버전: v0.1
5
+ > 최종 수정: YYYY-MM-DD
6
+
7
+ ---
8
+
9
+ ## ✅ 문서 완성도 체크리스트
10
+
11
+ > ⚠️ 모든 필수 항목이 체크되어야 Confirmed 상태로 전환 가능
12
+
13
+ ### 필수 섹션 (Required)
14
+ - [ ] 서비스 개요 작성 완료
15
+ - [ ] 기능 목록 최소 1개 이상 정의
16
+ - [ ] 사용자 흐름 최소 1개 이상 정의
17
+ - [ ] 비기능 요구사항 정의
18
+ - [ ] 제약 사항 명시
19
+ - [ ] 미확정 항목(TBD) 3개 이하
20
+
21
+ ### 품질 체크 (Quality)
22
+ - [ ] 모든 기능에 우선순위(P0/P1/P2) 지정됨
23
+ - [ ] 모호한 표현 제거됨 (예: "빠르게", "적절히" → 구체적 수치)
24
+ - [ ] 용어 정의에 도메인 용어 포함됨
25
+ - [ ] 사용자와 합의 내용 기록됨
26
+
27
+ ### 연결성 체크 (Linkage)
28
+ - [ ] 각 기능이 최소 1개 이상의 Task로 분해됨
29
+ - [ ] 모든 Task가 backlog.md에 등록됨
30
+
31
+ ---
32
+
33
+ ## 0. 문서 메타
34
+
35
+ | 항목 | 값 |
36
+ |------|-----|
37
+ | 상태 | Draft / Confirmed |
38
+ | 버전 | v0.1 |
39
+ | 작성자 | Planner |
40
+ | 승인자 | - |
41
+
42
+ ---
43
+
44
+ ## 1. 서비스 개요
45
+
46
+ (한 문단으로 프로젝트 요약)
47
+
48
+ - 무엇을 만드는가:
49
+ - 누가 사용하는가:
50
+ - 왜 필요한가:
51
+
52
+ ---
53
+
54
+ ## 2. 기능 목록
55
+
56
+ | ID | 기능명 | 설명 | 우선순위 |
57
+ |----|--------|------|:--------:|
58
+ | F001 | [기능명] | [한 줄 설명] | P0/P1/P2 |
59
+ | F002 | [기능명] | [한 줄 설명] | P0/P1/P2 |
60
+ | F003 | [기능명] | [한 줄 설명] | P0/P1/P2 |
61
+
62
+ ### 우선순위 정의
63
+
64
+ - **P0**: 필수 (없으면 서비스 불가)
65
+ - **P1**: 중요 (초기 버전에 포함)
66
+ - **P2**: 향후 (나중에 추가)
67
+
68
+ ---
69
+
70
+ ## 3. 사용자 흐름 (User Flow)
71
+
72
+ ### 주요 시나리오 1: [시나리오명]
73
+
74
+ ```
75
+ [시작점]
76
+
77
+ [단계 1]
78
+
79
+ [단계 2]
80
+
81
+ [종료점]
82
+ ```
83
+
84
+ ### 주요 시나리오 2: [시나리오명]
85
+
86
+ ```
87
+ [흐름 설명]
88
+ ```
89
+
90
+ ---
91
+
92
+ ## 4. 비기능 요구사항
93
+
94
+ | 항목 | 요구사항 | 비고 |
95
+ |------|----------|------|
96
+ | 성능 | [요구사항] | - |
97
+ | 보안 | [요구사항] | - |
98
+ | 가용성 | [요구사항] | - |
99
+ | 확장성 | [요구사항] | - |
100
+
101
+ ---
102
+
103
+ ## 5. 제약 사항
104
+
105
+ - 일정: [제약]
106
+ - 예산: [제약]
107
+ - 기술: [제약]
108
+ - 기타: [제약]
109
+
110
+ ---
111
+
112
+ ## 6. 가정 사항 (Assumptions)
113
+
114
+ > 기획 시 전제한 가정들. 가정이 틀리면 기획 변경 필요.
115
+
116
+ - [가정 1]
117
+ - [가정 2]
118
+
119
+ ---
120
+
121
+ ## 7. 미확정 항목 (TBD)
122
+
123
+ | ID | 항목 | 설명 | 결정 예정 |
124
+ |----|------|------|----------|
125
+ | TBD-001 | [항목] | [설명] | [시점] |
126
+ | TBD-002 | [항목] | [설명] | [시점] |
127
+
128
+ > ⚠️ 미확정 항목 3개 초과 시 Architect 단계 진행 불가
129
+
130
+ ---
131
+
132
+ ## 8. 용어 정의 (Glossary)
133
+
134
+ | 용어 | 정의 |
135
+ |------|------|
136
+ | [용어] | [정의] |
137
+ | [용어] | [정의] |
138
+
139
+ ---
140
+
141
+ ## 9. 참고 자료
142
+
143
+ - [자료 1]
144
+ - [자료 2]
145
+
146
+ ---
147
+
148
+ ## 10. 사용자 합의 요약
149
+
150
+ > Planner와 사용자가 합의한 내용 요약
151
+
152
+ ### 확정된 사항
153
+ - [합의 1]
154
+ - [합의 2]
155
+
156
+ ### 논의 중인 사항
157
+ - [논의 1]
158
+
159
+ ---
160
+
161
+ ## 11. 기능 → Task 매핑
162
+
163
+ > plan.md 확정 후 Planner가 작성
164
+
165
+ | 기능 ID | 기능명 | Task ID | Task 설명 |
166
+ |---------|--------|---------|----------|
167
+ | F001 | [기능명] | TASK-001 | [Task 설명] |
168
+ | F001 | [기능명] | TASK-002 | [Task 설명] |
169
+ | F002 | [기능명] | TASK-003 | [Task 설명] |
170
+
171
+ ---
172
+
173
+ ## 12. 변경 이력
174
+
175
+ | 버전 | 날짜 | 변경 내용 | 작성자 |
176
+ |------|------|----------|--------|
177
+ | v0.1 | YYYY-MM-DD | 초안 작성 | Planner |
178
+
179
+ ---
180
+
181
+ ## 13. 다음 단계
182
+
183
+ plan.md가 Confirmed 상태가 되면:
184
+
185
+ 1. **Architect**: project.md 작성 (기술 스택 결정)
186
+ 2. **Planner**: backlog.md에 Task 분해
187
+ 3. **Manager**: 첫 스프린트 계획