moai-adk 0.3.6__py3-none-any.whl → 0.3.7__py3-none-any.whl

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.

Potentially problematic release.


This version of moai-adk might be problematic. Click here for more details.

Files changed (37) hide show
  1. moai_adk/__init__.py +1 -1
  2. moai_adk/templates/.claude/agents/alfred/cc-manager.md +474 -0
  3. moai_adk/templates/.claude/agents/alfred/debug-helper.md +166 -0
  4. moai_adk/templates/.claude/agents/alfred/doc-syncer.md +175 -0
  5. moai_adk/templates/.claude/agents/alfred/git-manager.md +327 -0
  6. moai_adk/templates/.claude/agents/alfred/implementation-planner.md +311 -0
  7. moai_adk/templates/.claude/agents/alfred/project-manager.md +152 -0
  8. moai_adk/templates/.claude/agents/alfred/quality-gate.md +301 -0
  9. moai_adk/templates/.claude/agents/alfred/spec-builder.md +241 -0
  10. moai_adk/templates/.claude/agents/alfred/tag-agent.md +247 -0
  11. moai_adk/templates/.claude/agents/alfred/tdd-implementer.md +280 -0
  12. moai_adk/templates/.claude/agents/alfred/trust-checker.md +332 -0
  13. moai_adk/templates/.claude/commands/alfred/0-project.md +523 -0
  14. moai_adk/templates/.claude/commands/alfred/1-spec.md +530 -0
  15. moai_adk/templates/.claude/commands/alfred/2-build.md +430 -0
  16. moai_adk/templates/.claude/commands/alfred/3-sync.md +552 -0
  17. moai_adk/templates/.claude/hooks/alfred/README.md +230 -0
  18. moai_adk/templates/.claude/hooks/alfred/alfred_hooks.py +160 -0
  19. moai_adk/templates/.claude/hooks/alfred/core/__init__.py +79 -0
  20. moai_adk/templates/.claude/hooks/alfred/core/checkpoint.py +271 -0
  21. moai_adk/templates/.claude/hooks/alfred/core/context.py +110 -0
  22. moai_adk/templates/.claude/hooks/alfred/core/project.py +284 -0
  23. moai_adk/templates/.claude/hooks/alfred/core/tags.py +244 -0
  24. moai_adk/templates/.claude/hooks/alfred/handlers/__init__.py +21 -0
  25. moai_adk/templates/.claude/hooks/alfred/handlers/notification.py +25 -0
  26. moai_adk/templates/.claude/hooks/alfred/handlers/session.py +80 -0
  27. moai_adk/templates/.claude/hooks/alfred/handlers/tool.py +71 -0
  28. moai_adk/templates/.claude/hooks/alfred/handlers/user.py +41 -0
  29. moai_adk/templates/.claude/output-styles/alfred/agentic-coding.md +635 -0
  30. moai_adk/templates/.claude/output-styles/alfred/moai-adk-learning.md +691 -0
  31. moai_adk/templates/.claude/output-styles/alfred/study-with-alfred.md +469 -0
  32. moai_adk/templates/.claude/settings.json +134 -0
  33. {moai_adk-0.3.6.dist-info → moai_adk-0.3.7.dist-info}/METADATA +112 -177
  34. {moai_adk-0.3.6.dist-info → moai_adk-0.3.7.dist-info}/RECORD +37 -6
  35. {moai_adk-0.3.6.dist-info → moai_adk-0.3.7.dist-info}/WHEEL +0 -0
  36. {moai_adk-0.3.6.dist-info → moai_adk-0.3.7.dist-info}/entry_points.txt +0 -0
  37. {moai_adk-0.3.6.dist-info → moai_adk-0.3.7.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,691 @@
1
+ ---
2
+ name: MoAI ADK Learning
3
+ description: MoAI-ADK의 개념과 워크플로우를 쉽게 배우는 학습 모드
4
+ ---
5
+
6
+ # MoAI ADK Learning
7
+
8
+ **대상**: MoAI-ADK를 처음 사용하는 개발자
9
+
10
+ MoAI-ADK의 핵심 개념과 3단계 워크플로우를 친절하게 설명하여 빠르게 익힐 수 있도록 돕는 학습 모드입니다.
11
+
12
+ ## MoAI-ADK란?
13
+
14
+ **핵심 철학**: "명세 없으면 코드 없다, 테스트 없으면 구현 없다"
15
+
16
+ MoAI-ADK는 3가지 핵심 개념으로 구성됩니다:
17
+ 1. **SPEC-First**: 코드 작성 전 명세를 먼저 작성
18
+ 2. **@TAG 추적성**: 모든 코드를 SPEC과 연결
19
+ 3. **TRUST 품질**: 5가지 원칙으로 코드 품질 보장
20
+
21
+ 이 3가지 개념이 어떻게 작동하는지 하나씩 배워봅시다!
22
+
23
+ ---
24
+
25
+ ## 핵심 개념 1: SPEC-First
26
+
27
+ ### SPEC이란?
28
+
29
+ **간단히 말하면**:
30
+ - 무엇을 만들지 미리 적어놓는 설계도
31
+ - 요리 레시피처럼 단계와 재료를 명확히 정의
32
+
33
+ **왜 필요한가요?**
34
+ - 개발 전 요구사항을 명확히 정리
35
+ - 팀원과 소통할 때 기준이 됨
36
+ - 나중에 변경 사항을 추적 가능
37
+ - "이 코드는 왜 만들었지?"라는 질문에 답할 수 있음
38
+
39
+ ### EARS 구문: 요구사항 작성법
40
+
41
+ EARS는 요구사항을 5가지 패턴으로 작성하는 방법입니다:
42
+
43
+ #### 1. Ubiquitous (기본 기능)
44
+ ```markdown
45
+ 시스템은 [기능]을 제공해야 한다
46
+
47
+ 예시:
48
+ - 시스템은 JWT 기반 인증을 제공해야 한다
49
+ ```
50
+
51
+ #### 2. Event-driven (조건부 동작)
52
+ ```markdown
53
+ WHEN [조건]이면, 시스템은 [동작]해야 한다
54
+
55
+ 예시:
56
+ - WHEN 유효한 자격증명 제공 시, 시스템은 JWT 토큰을 발급해야 한다
57
+ - WHEN 토큰이 만료되면, 시스템은 401 에러를 반환해야 한다
58
+ ```
59
+
60
+ #### 3. State-driven (상태 기반 동작)
61
+ ```markdown
62
+ WHILE [상태]일 때, 시스템은 [동작]해야 한다
63
+
64
+ 예시:
65
+ - WHILE 사용자가 인증된 상태일 때, 시스템은 보호된 리소스 접근을 허용해야 한다
66
+ ```
67
+
68
+ #### 4. Optional (선택적 기능)
69
+ ```markdown
70
+ WHERE [조건]이면, 시스템은 [동작]할 수 있다
71
+
72
+ 예시:
73
+ - WHERE 리프레시 토큰이 제공되면, 시스템은 새 액세스 토큰을 발급할 수 있다
74
+ ```
75
+
76
+ #### 5. Constraints (제약사항)
77
+ ```markdown
78
+ IF [조건]이면, 시스템은 [제약]해야 한다
79
+
80
+ 예시:
81
+ - 토큰 만료시간은 15분을 초과해서는 안 된다
82
+ - 비밀번호는 최소 8자 이상이어야 한다
83
+ ```
84
+
85
+ ### 실제 예시: 로그인 기능 SPEC
86
+
87
+ ```markdown
88
+ # @SPEC:AUTH-001: JWT 인증 시스템
89
+
90
+ ## Ubiquitous Requirements (기본 기능)
91
+ - 시스템은 JWT 기반 인증을 제공해야 한다
92
+
93
+ ## Event-driven Requirements (조건부 동작)
94
+ - WHEN 유효한 자격증명 제공 시, 시스템은 JWT 토큰을 발급해야 한다
95
+ - WHEN 토큰이 만료되면, 시스템은 401 에러를 반환해야 한다
96
+ - WHEN 잘못된 토큰이 제공되면, 시스템은 접근을 거부해야 한다
97
+
98
+ ## State-driven Requirements (상태 기반)
99
+ - WHILE 사용자가 인증된 상태일 때, 시스템은 보호된 리소스 접근을 허용해야 한다
100
+
101
+ ## Optional Features (선택적 기능)
102
+ - WHERE 리프레시 토큰이 제공되면, 시스템은 새 액세스 토큰을 발급할 수 있다
103
+
104
+ ## Constraints (제약사항)
105
+ - 액세스 토큰 만료시간은 15분을 초과해서는 안 된다
106
+ - 리프레시 토큰 만료시간은 7일을 초과해서는 안 된다
107
+ ```
108
+
109
+ ---
110
+
111
+ ## 핵심 개념 2: @TAG 추적성
112
+
113
+ ### TAG란?
114
+
115
+ **간단히 말하면**:
116
+ - 코드 조각마다 붙이는 이름표
117
+ - SPEC → TEST → CODE → DOC을 연결하는 끈
118
+ - 나중에 코드를 찾을 때 SPEC 번호로 검색 가능
119
+
120
+ **왜 TAG가 필요한가요?**
121
+ - 나중에 코드를 찾을 때 SPEC 번호로 검색 가능
122
+ - SPEC이 변경되면 어떤 코드를 수정할지 명확
123
+ - 코드 리뷰 시 "이 코드는 어떤 요구사항인가?" 즉시 파악
124
+ - 버그 발생 시 관련된 모든 파일을 빠르게 찾을 수 있음
125
+
126
+ ### TAG 체계
127
+
128
+ MoAI-ADK는 4가지 TAG를 사용합니다:
129
+
130
+ ```
131
+ @SPEC:ID → @TEST:ID → @CODE:ID → @DOC:ID
132
+ ```
133
+
134
+ | TAG | 의미 | 위치 | 예시 |
135
+ |-----|------|------|------|
136
+ | `@SPEC:ID` | 요구사항 명세 | `.moai/specs/` | @SPEC:AUTH-001 |
137
+ | `@TEST:ID` | 테스트 코드 | `tests/` | @TEST:AUTH-001 |
138
+ | `@CODE:ID` | 구현 코드 | `src/` | @CODE:AUTH-001 |
139
+ | `@DOC:ID` | 문서 | `docs/` | @DOC:AUTH-001 |
140
+
141
+ ### TAG ID 규칙
142
+
143
+ **형식**: `<도메인>-<3자리 숫자>`
144
+
145
+ **예시**:
146
+ - `AUTH-001`: 인증 관련 첫 번째 기능
147
+ - `USER-002`: 사용자 관련 두 번째 기능
148
+ - `PAYMENT-015`: 결제 관련 15번째 기능
149
+
150
+ **중요**: TAG ID는 한 번 할당되면 절대 변경하지 않습니다!
151
+
152
+ ### 실제 예시: TAG 사용법
153
+
154
+ #### SPEC 파일 (`.moai/specs/SPEC-AUTH-001/spec.md`)
155
+ ```yaml
156
+ ---
157
+ id: AUTH-001
158
+ version: 0.0.1
159
+ status: draft
160
+ created: 2025-10-16
161
+ updated: 2025-10-16
162
+ author: @YourName
163
+ priority: high
164
+ ---
165
+
166
+ # @SPEC:AUTH-001: JWT 인증 시스템
167
+
168
+ [요구사항 내용...]
169
+ ```
170
+
171
+ #### 테스트 파일 (`tests/auth/service.test.ts`)
172
+ ```typescript
173
+ // @TEST:AUTH-001 | SPEC: SPEC-AUTH-001.md
174
+
175
+ test('@TEST:AUTH-001: JWT 발급 on valid credentials', async () => {
176
+ const service = new AuthService();
177
+ const result = await service.authenticate('user', 'pass');
178
+ expect(result.token).toBeDefined();
179
+ });
180
+ ```
181
+
182
+ #### 구현 파일 (`src/auth/service.ts`)
183
+ ```typescript
184
+ // @CODE:AUTH-001 | SPEC: SPEC-AUTH-001.md | TEST: tests/auth/service.test.ts
185
+
186
+ export class AuthService {
187
+ async authenticate(username: string, password: string): Promise<AuthResult> {
188
+ // 구현
189
+ }
190
+ }
191
+ ```
192
+
193
+ #### 문서 파일 (`docs/api/auth.md`)
194
+ ```markdown
195
+ # @DOC:AUTH-001: 인증 API 문서
196
+
197
+ ## POST /auth/login
198
+ [API 설명...]
199
+ ```
200
+
201
+ ### TAG 검색하기
202
+
203
+ **특정 TAG 찾기**:
204
+ ```bash
205
+ # AUTH-001 관련 모든 파일 찾기
206
+ rg "AUTH-001" -n
207
+ ```
208
+
209
+ **TAG 체인 검증**:
210
+ ```bash
211
+ # 모든 TAG 확인
212
+ rg '@(SPEC|TEST|CODE|DOC):' -n .moai/specs/ tests/ src/ docs/
213
+ ```
214
+
215
+ ---
216
+
217
+ ## 핵심 개념 3: TRUST 5원칙
218
+
219
+ 좋은 코드를 만드는 5가지 원칙을 비유로 설명합니다:
220
+
221
+ ### 1. 🧪 Test (테스트)
222
+
223
+ **비유**: 요리하기 전에 맛을 상상하는 것
224
+
225
+ **의미**:
226
+ - 코드 작성 전에 테스트를 먼저 작성
227
+ - 테스트가 통과하면 코드가 제대로 작동하는 것
228
+
229
+ **기준**:
230
+ - 테스트 커버리지 ≥85%
231
+ - SPEC → Test → Code 순서 엄수
232
+
233
+ **예시**:
234
+ ```typescript
235
+ // 먼저 테스트 작성 (RED)
236
+ test('should add two numbers', () => {
237
+ expect(add(2, 3)).toBe(5); // 아직 add 함수가 없어서 실패
238
+ });
239
+
240
+ // 그 다음 코드 작성 (GREEN)
241
+ function add(a: number, b: number): number {
242
+ return a + b; // 테스트 통과!
243
+ }
244
+ ```
245
+
246
+ ### 2. 📖 Readable (읽기 쉬움)
247
+
248
+ **비유**: 깔끔한 글씨로 쓰기
249
+
250
+ **의미**:
251
+ - 다른 사람이 읽어도 이해할 수 있는 코드
252
+ - 나중에 다시 봐도 이해하기 쉬운 코드
253
+
254
+ **기준**:
255
+ - 함수 ≤50줄
256
+ - 파일 ≤300줄
257
+ - 복잡도 ≤10
258
+ - 매개변수 ≤5개
259
+ - 의미 있는 이름 사용
260
+
261
+ **예시**:
262
+ ```typescript
263
+ // ❌ 나쁜 예: 이해하기 어려움
264
+ function f(x, y) {
265
+ return x + y;
266
+ }
267
+
268
+ // ✅ 좋은 예: 명확한 이름
269
+ function calculateTotal(price: number, tax: number): number {
270
+ return price + tax;
271
+ }
272
+ ```
273
+
274
+ ### 3. 🎯 Unified (통일성)
275
+
276
+ **비유**: 같은 방식 사용하기
277
+
278
+ **의미**:
279
+ - 같은 패턴을 일관되게 적용
280
+ - 한 가지 방법만 익히면 모든 곳에 적용 가능
281
+
282
+ **기준**:
283
+ - SPEC 기반 아키텍처
284
+ - 타입 안전성 또는 런타임 검증
285
+ - 일관된 코딩 스타일
286
+
287
+ **예시**:
288
+ ```typescript
289
+ // ✅ 통일성: 모든 API가 같은 패턴
290
+ async function getUser(id: string): Promise<User> { ... }
291
+ async function getPost(id: string): Promise<Post> { ... }
292
+ async function getComment(id: string): Promise<Comment> { ... }
293
+ ```
294
+
295
+ ### 4. 🔒 Secured (보안)
296
+
297
+ **비유**: 집에 나갈 때 문 잠그기
298
+
299
+ **의미**:
300
+ - 해커나 나쁜 사람이 코드를 악용하지 못하게 보호
301
+ - 사용자 데이터를 안전하게 보호
302
+
303
+ **기준**:
304
+ - 입력 검증
305
+ - SQL Injection 방어
306
+ - XSS/CSRF 방어
307
+ - 비밀번호 해싱
308
+ - 민감 데이터 보호
309
+
310
+ **예시**:
311
+ ```typescript
312
+ // ❌ 나쁜 예: SQL Injection 위험
313
+ const query = `SELECT * FROM users WHERE id = '${userId}'`;
314
+
315
+ // ✅ 좋은 예: Prepared Statement 사용
316
+ const query = 'SELECT * FROM users WHERE id = ?';
317
+ const user = await db.execute(query, [userId]);
318
+
319
+ // ❌ 나쁜 예: 비밀번호 평문 저장
320
+ user.password = password;
321
+
322
+ // ✅ 좋은 예: 비밀번호 해싱
323
+ user.password = await bcrypt.hash(password, 10);
324
+ ```
325
+
326
+ ### 5. 🔗 Trackable (추적 가능)
327
+
328
+ **비유**: 옷장 정리할 때 상자마다 이름표 붙이기
329
+
330
+ **의미**:
331
+ - 나중에 필요한 코드를 빠르게 찾을 수 있음
332
+ - 코드 변경 이력을 추적 가능
333
+
334
+ **기준**:
335
+ - @TAG 시스템 사용
336
+ - SPEC과 코드 연결
337
+ - Git 커밋 메시지에 TAG 포함
338
+
339
+ **예시**:
340
+ ```typescript
341
+ // @CODE:AUTH-001 | SPEC: SPEC-AUTH-001.md | TEST: tests/auth/service.test.ts
342
+ export class AuthService {
343
+ // 구현
344
+ }
345
+
346
+ // Git 커밋 메시지
347
+ // 🟢 feat(AUTH-001): implement JWT authentication
348
+ ```
349
+
350
+ ---
351
+
352
+ ## 핵심 개념 4: Alfred와 9개 에이전트
353
+
354
+ ### Alfred란?
355
+
356
+ **간단히 말하면**:
357
+ - MoAI-ADK의 중앙 오케스트레이터 (지휘자)
358
+ - 9개 전문 에이전트를 조율하여 최적의 도움 제공
359
+ - 사용자 요청을 분석하고 적절한 에이전트에게 작업 위임
360
+
361
+ **비유**: 오케스트라 지휘자처럼 여러 전문가를 조율
362
+
363
+ ### 주요 에이전트 (간단 소개)
364
+
365
+ | 에이전트 | 역할 | 언제 사용 |
366
+ |---------|------|----------|
367
+ | 🏗️ spec-builder | SPEC 작성 전문가 | `/alfred:1-spec` 명령어 |
368
+ | 💎 code-builder | TDD 구현 전문가 | `/alfred:2-build` 명령어 |
369
+ | 📖 doc-syncer | 문서 동기화 전문가 | `/alfred:3-sync` 명령어 |
370
+ | 🔬 debug-helper | 디버깅 전문가 | 에러 발생 시 자동 호출 |
371
+ | ✅ trust-checker | 품질 검증 전문가 | 코드 품질 확인 시 |
372
+ | 🏷️ tag-agent | TAG 관리 전문가 | TAG 검증 시 |
373
+
374
+ **전체 에이전트 목록**: `AGENTS.md` 파일을 참조하세요
375
+
376
+ ### Alfred가 작동하는 방식
377
+
378
+ ```
379
+ 사용자 요청
380
+
381
+ Alfred가 요청 분석
382
+
383
+ 적절한 전문 에이전트에게 위임
384
+
385
+ 에이전트가 작업 수행
386
+
387
+ Alfred가 결과 통합하여 보고
388
+ ```
389
+
390
+ ---
391
+
392
+ ## 3단계 워크플로우 익히기
393
+
394
+ MoAI-ADK의 핵심은 이 3단계 워크플로우입니다:
395
+
396
+ ```
397
+ /alfred:1-spec → /alfred:2-build → /alfred:3-sync
398
+ ```
399
+
400
+ ### 1단계: SPEC 작성 (`/alfred:1-spec`)
401
+
402
+ **무엇을 하나요?**
403
+ - 요구사항을 EARS 구문으로 작성
404
+ - `.moai/specs/SPEC-{ID}/spec.md` 파일 생성
405
+ - @SPEC:ID TAG 자동 할당
406
+ - Git 브랜치 생성 (옵션)
407
+
408
+ **사용 예시**:
409
+ ```bash
410
+ /alfred:1-spec "JWT 인증 시스템"
411
+ ```
412
+
413
+ **Alfred가 자동으로 수행**:
414
+ 1. 중복 확인: "AUTH-001이 이미 존재하나요?"
415
+ 2. SPEC 파일 생성: `.moai/specs/SPEC-AUTH-001/spec.md`
416
+ 3. YAML 메타데이터 추가:
417
+ ```yaml
418
+ ---
419
+ id: AUTH-001
420
+ version: 0.0.1
421
+ status: draft
422
+ created: 2025-10-16
423
+ updated: 2025-10-16
424
+ author: @YourName
425
+ priority: high
426
+ ---
427
+ ```
428
+ 4. EARS 구문 템플릿 제공
429
+ 5. @SPEC:AUTH-001 TAG 할당
430
+
431
+ **결과물 예시**:
432
+ ```yaml
433
+ ---
434
+ id: AUTH-001
435
+ version: 0.0.1
436
+ status: draft
437
+ created: 2025-10-16
438
+ updated: 2025-10-16
439
+ author: @YourName
440
+ priority: high
441
+ ---
442
+
443
+ # @SPEC:AUTH-001: JWT 인증 시스템
444
+
445
+ ## Ubiquitous Requirements
446
+ - 시스템은 JWT 기반 인증을 제공해야 한다
447
+
448
+ ## Event-driven Requirements
449
+ - WHEN 유효한 자격증명 제공 시, 시스템은 JWT 토큰을 발급해야 한다
450
+ - WHEN 토큰이 만료되면, 시스템은 401 에러를 반환해야 한다
451
+
452
+ ## Constraints
453
+ - 토큰 만료시간은 15분을 초과해서는 안 된다
454
+ ```
455
+
456
+ ### 2단계: TDD 구현 (`/alfred:2-build`)
457
+
458
+ **무엇을 하나요?**
459
+ - **RED**: 실패하는 테스트 작성 (`@TEST:ID`)
460
+ - **GREEN**: 최소 구현으로 테스트 통과 (`@CODE:ID`)
461
+ - **REFACTOR**: 코드 품질 개선 (TRUST 5원칙 적용)
462
+
463
+ **사용 예시**:
464
+ ```bash
465
+ /alfred:2-build AUTH-001
466
+ ```
467
+
468
+ **Alfred가 자동으로 수행**:
469
+
470
+ #### 🔴 RED: 실패하는 테스트 작성
471
+ ```typescript
472
+ // tests/auth/service.test.ts
473
+ // @TEST:AUTH-001 | SPEC: SPEC-AUTH-001.md
474
+
475
+ test('@TEST:AUTH-001: JWT 발급 on valid credentials', async () => {
476
+ const service = new AuthService();
477
+ const result = await service.authenticate('user', 'pass');
478
+ expect(result.token).toBeDefined();
479
+ expect(result.expiresIn).toBeLessThanOrEqual(900); // 15분
480
+ });
481
+ ```
482
+
483
+ **테스트 실행**: ❌ FAIL (AuthService가 아직 없음)
484
+
485
+ #### 🟢 GREEN: 최소 구현
486
+ ```typescript
487
+ // src/auth/service.ts
488
+ // @CODE:AUTH-001 | SPEC: SPEC-AUTH-001.md | TEST: tests/auth/service.test.ts
489
+
490
+ export class AuthService {
491
+ async authenticate(username: string, password: string): Promise<AuthResult> {
492
+ return {
493
+ token: jwt.sign({ username }, SECRET, { expiresIn: '15m' }),
494
+ expiresIn: 900
495
+ };
496
+ }
497
+ }
498
+ ```
499
+
500
+ **테스트 실행**: ✅ PASS
501
+
502
+ #### ♻️ REFACTOR: 품질 개선
503
+ ```typescript
504
+ // 입력 검증 추가 (Secured)
505
+ if (!username || !password) {
506
+ throw new ValidationError('Username and password required');
507
+ }
508
+
509
+ // 함수 분리 (Readable)
510
+ private generateToken(username: string): string {
511
+ return jwt.sign({ username }, SECRET, { expiresIn: '15m' });
512
+ }
513
+
514
+ // 복잡도 감소 (Unified)
515
+ ```
516
+
517
+ **테스트 실행**: ✅ PASS
518
+ **TRUST 검증**: ✅ 모두 통과
519
+
520
+ **Git 커밋**:
521
+ ```bash
522
+ 1. 🔴 RED: test(AUTH-001): add failing auth service test
523
+ 2. 🟢 GREEN: feat(AUTH-001): implement minimal auth service
524
+ 3. ♻️ REFACTOR: refactor(AUTH-001): improve code quality per TRUST
525
+ ```
526
+
527
+ ### 3단계: 문서 동기화 (`/alfred:3-sync`)
528
+
529
+ **무엇을 하나요?**
530
+ - TAG 체인 검증 (@SPEC → @TEST → @CODE → @DOC)
531
+ - 고아 TAG 탐지 (SPEC 없는 CODE 등)
532
+ - Living Document 자동 생성
533
+ - PR 상태 업데이트 (Draft → Ready)
534
+
535
+ **사용 예시**:
536
+ ```bash
537
+ /alfred:3-sync
538
+ ```
539
+
540
+ **Alfred가 자동으로 수행**:
541
+
542
+ 1. **TAG 체인 검증**:
543
+ ```bash
544
+ rg '@(SPEC|TEST|CODE|DOC):' -n .moai/specs/ tests/ src/ docs/
545
+ ```
546
+
547
+ 2. **검증 결과**:
548
+ ```
549
+ ✓ @SPEC:AUTH-001 → .moai/specs/SPEC-AUTH-001.md
550
+ ✓ @TEST:AUTH-001 → tests/auth/service.test.ts
551
+ ✓ @CODE:AUTH-001 → src/auth/service.ts
552
+ ✓ @DOC:AUTH-001 → docs/api/auth.md
553
+
554
+ TAG 체인 완전성: 100%
555
+ 고아 TAG: 없음
556
+ SPEC 버전 일치: v0.0.1
557
+ ```
558
+
559
+ 3. **Living Document 생성**:
560
+ ```markdown
561
+ # @DOC:AUTH-001: 인증 API 문서
562
+
563
+ ## POST /auth/login
564
+
565
+ **요구사항**: @SPEC:AUTH-001
566
+ **구현**: @CODE:AUTH-001
567
+ **테스트**: @TEST:AUTH-001
568
+
569
+ [자동 생성된 API 문서...]
570
+ ```
571
+
572
+ 4. **PR 상태 전환 제안**:
573
+ ```
574
+ PR #123: feature/spec-auth-001
575
+ 현재 상태: Draft
576
+ 제안: Ready for Review
577
+
578
+ SPEC 요구사항: ✅ 모두 충족
579
+ TDD 이력: ✅ RED → GREEN → REFACTOR
580
+ TRUST 검증: ✅ 모두 통과
581
+
582
+ PR Ready 전환? (y/n)
583
+ ```
584
+
585
+ ---
586
+
587
+ ## 실전 예시: 간단한 계산기 만들기
588
+
589
+ 3단계 워크플로우를 실제로 사용해봅시다!
590
+
591
+ ### 1️⃣ SPEC 작성
592
+ ```bash
593
+ /alfred:1-spec "두 숫자를 더하는 계산기"
594
+
595
+ # Alfred가 생성: .moai/specs/SPEC-CALC-001/spec.md
596
+ ```
597
+
598
+ **생성된 SPEC**:
599
+ ```yaml
600
+ ---
601
+ id: CALC-001
602
+ version: 0.0.1
603
+ status: draft
604
+ created: 2025-10-16
605
+ updated: 2025-10-16
606
+ author: @YourName
607
+ priority: medium
608
+ ---
609
+
610
+ # @SPEC:CALC-001: 계산기 - 덧셈 기능
611
+
612
+ ## Ubiquitous Requirements
613
+ - 시스템은 두 숫자의 덧셈을 제공해야 한다
614
+
615
+ ## Event-driven Requirements
616
+ - WHEN 두 숫자가 입력되면, 시스템은 합계를 반환해야 한다
617
+
618
+ ## Constraints
619
+ - 입력은 숫자여야 한다
620
+ - 결과는 정확해야 한다
621
+ ```
622
+
623
+ ### 2️⃣ TDD 구현
624
+ ```bash
625
+ /alfred:2-build CALC-001
626
+
627
+ # Alfred가 Red-Green-Refactor 자동 수행
628
+ ```
629
+
630
+ **생성된 코드**:
631
+ ```typescript
632
+ // tests/calc.test.ts
633
+ // @TEST:CALC-001 | SPEC: SPEC-CALC-001.md
634
+ test('@TEST:CALC-001: should add two numbers', () => {
635
+ expect(add(2, 3)).toBe(5);
636
+ expect(add(10, 20)).toBe(30);
637
+ });
638
+
639
+ // src/calc.ts
640
+ // @CODE:CALC-001 | SPEC: SPEC-CALC-001.md | TEST: tests/calc.test.ts
641
+ export function add(a: number, b: number): number {
642
+ if (typeof a !== 'number' || typeof b !== 'number') {
643
+ throw new TypeError('Both arguments must be numbers');
644
+ }
645
+ return a + b;
646
+ }
647
+ ```
648
+
649
+ ### 3️⃣ 문서 동기화
650
+ ```bash
651
+ /alfred:3-sync
652
+
653
+ # TAG 검증 및 문서 생성
654
+ ```
655
+
656
+ **결과**:
657
+ ```
658
+ ✓ @SPEC:CALC-001
659
+ ✓ @TEST:CALC-001
660
+ ✓ @CODE:CALC-001
661
+ ✓ @DOC:CALC-001
662
+
663
+ 완성! 3개 명령어로 SPEC → TEST → CODE → DOC 완성!
664
+ ```
665
+
666
+ ---
667
+
668
+ ## 다음 단계
669
+
670
+ ### MoAI-ADK를 익혔다면
671
+
672
+ 이제 다른 스타일로 전환하여 실무에 적용해봅시다:
673
+
674
+ | 다음 목표 | 권장 스타일 | 전환 명령어 |
675
+ |----------|------------|------------|
676
+ | 실무 프로젝트 개발 | **agentic-coding** | `/output-style agentic-coding` |
677
+ | 새로운 언어/프레임워크 학습 | **study-with-alfred** | `/output-style study-with-alfred` |
678
+
679
+ ### 더 배우기
680
+
681
+ **상세 가이드**:
682
+ - `.moai/memory/development-guide.md` - 개발 상세 가이드
683
+ - `.moai/project/structure.md` - 프로젝트 구조
684
+ - `.moai/memory/spec-metadata.md` - SPEC 메타데이터 표준
685
+
686
+ **에이전트 문서**:
687
+ - `AGENTS.md` - 9개 전문 에이전트 상세 설명
688
+
689
+ ---
690
+
691
+ **MoAI ADK Learning**: MoAI-ADK의 핵심 개념과 워크플로우를 쉽게 배워 빠르게 익힐 수 있도록 돕는 친절한 학습 모드입니다.