create-ax-project 1.0.0 β†’ 1.0.2

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 (63) hide show
  1. package/bin/create.js +97 -40
  2. package/package.json +5 -2
  3. package/template/.claude/CLAUDE.md +0 -7
  4. package/template/.claude/commands/CLAUDE.md +0 -0
  5. package/template/.claude/hooks/CLAUDE.md +0 -0
  6. package/template/.claude/skills/ai-collaboration/CLAUDE.md +0 -0
  7. package/template/.claude/skills/auto-checkpoint/CLAUDE.md +0 -0
  8. package/template/.claude/skills/context-compression/CLAUDE.md +0 -0
  9. package/template/.claude/skills/context-compression/prompts/CLAUDE.md +0 -0
  10. package/template/.claude/skills/output-validator/CLAUDE.md +0 -0
  11. package/template/.claude/skills/smart-handoff/CLAUDE.md +0 -0
  12. package/template/.claude/skills/stage-transition/CLAUDE.md +0 -0
  13. package/template/.claude/skills/stage-transition/prompts/CLAUDE.md +0 -0
  14. package/template/config/CLAUDE.md +0 -0
  15. package/template/scripts/CLAUDE.md +0 -0
  16. package/template/stages/01-brainstorm/HANDOFF.md +0 -110
  17. package/template/stages/01-brainstorm/inputs/CLAUDE.md +0 -0
  18. package/template/stages/01-brainstorm/inputs/project_brief.md +0 -40
  19. package/template/stages/01-brainstorm/outputs/CLAUDE.md +0 -0
  20. package/template/stages/01-brainstorm/outputs/ideas.md +0 -159
  21. package/template/stages/01-brainstorm/outputs/requirements_analysis.md +0 -222
  22. package/template/stages/01-brainstorm/prompts/CLAUDE.md +0 -0
  23. package/template/stages/01-brainstorm/templates/CLAUDE.md +0 -0
  24. package/template/stages/02-research/HANDOFF.md +0 -158
  25. package/template/stages/02-research/outputs/CLAUDE.md +0 -0
  26. package/template/stages/02-research/outputs/feasibility_report.md +0 -176
  27. package/template/stages/02-research/outputs/tech_research.md +0 -403
  28. package/template/stages/02-research/prompts/CLAUDE.md +0 -0
  29. package/template/stages/03-planning/HANDOFF.md +0 -168
  30. package/template/stages/03-planning/outputs/CLAUDE.md +0 -0
  31. package/template/stages/03-planning/outputs/architecture.md +0 -400
  32. package/template/stages/03-planning/outputs/implementation.yaml +0 -209
  33. package/template/stages/03-planning/outputs/project_plan.md +0 -204
  34. package/template/stages/03-planning/outputs/tech_stack.md +0 -176
  35. package/template/stages/03-planning/prompts/CLAUDE.md +0 -0
  36. package/template/stages/04-ui-ux/HANDOFF.md +0 -165
  37. package/template/stages/04-ui-ux/outputs/CLAUDE.md +0 -0
  38. package/template/stages/04-ui-ux/outputs/design_system.md +0 -449
  39. package/template/stages/04-ui-ux/outputs/user_flows.md +0 -321
  40. package/template/stages/04-ui-ux/outputs/wireframes.md +0 -241
  41. package/template/stages/04-ui-ux/prompts/CLAUDE.md +0 -0
  42. package/template/stages/05-task-management/HANDOFF.md +0 -187
  43. package/template/stages/05-task-management/outputs/CLAUDE.md +0 -0
  44. package/template/stages/05-task-management/outputs/milestones.md +0 -253
  45. package/template/stages/05-task-management/outputs/sprint_plan.md +0 -203
  46. package/template/stages/05-task-management/outputs/tasks.md +0 -402
  47. package/template/stages/05-task-management/prompts/CLAUDE.md +0 -0
  48. package/template/stages/05-task-management/templates/CLAUDE.md +0 -0
  49. package/template/stages/06-implementation/HANDOFF.md +0 -184
  50. package/template/stages/06-implementation/prompts/CLAUDE.md +0 -0
  51. package/template/stages/07-refactoring/HANDOFF.md +0 -82
  52. package/template/stages/07-refactoring/outputs/refactoring_report.md +0 -102
  53. package/template/stages/07-refactoring/prompts/CLAUDE.md +0 -0
  54. package/template/stages/08-qa/HANDOFF.md +0 -114
  55. package/template/stages/08-qa/outputs/qa_report.md +0 -138
  56. package/template/stages/08-qa/prompts/CLAUDE.md +0 -0
  57. package/template/stages/09-testing/HANDOFF.md +0 -118
  58. package/template/stages/09-testing/outputs/test_report.md +0 -146
  59. package/template/stages/09-testing/prompts/CLAUDE.md +0 -0
  60. package/template/stages/10-deployment/HANDOFF.md +0 -141
  61. package/template/stages/10-deployment/prompts/CLAUDE.md +0 -0
  62. package/template/stages/10-deployment/templates/CLAUDE.md +0 -0
  63. package/template/state/templates/CLAUDE.md +0 -0
@@ -1,102 +0,0 @@
1
- # πŸ”§ Refactoring Report - Snake Game
2
-
3
- > 생성일: 2026-01-21
4
- > ν”„λ‘œμ νŠΈ: snake-game
5
- > μŠ€ν…Œμ΄μ§€: 07-refactoring
6
-
7
- ---
8
-
9
- ## κ°œμ„  사항 μš”μ•½
10
-
11
- | μ˜μ—­ | κ°œμ„  μ „ | κ°œμ„  ν›„ | μƒνƒœ |
12
- |------|--------|--------|------|
13
- | useGameLoop | ESLint 였λ₯˜ | Ref νŒ¨ν„΄μœΌλ‘œ μˆ˜μ • | βœ… |
14
- | ESLint | 1 error | 0 errors | βœ… |
15
- | λΉŒλ“œ | 성곡 | 성곡 | βœ… |
16
- | λ²ˆλ“€ 크기 | 204KB | 204KB | βœ… |
17
-
18
- ---
19
-
20
- ## μˆ˜ν–‰λœ λ¦¬νŒ©ν† λ§
21
-
22
- ### 1. useGameLoop ν›… κ°œμ„ 
23
-
24
- **문제**: useCallback λ‚΄λΆ€μ—μ„œ 자기 μžμ‹ μ„ μ°Έμ‘°ν•˜μ—¬ ESLint `react-hooks/immutability` 였λ₯˜ λ°œμƒ
25
-
26
- **ν•΄κ²°**: Ref νŒ¨ν„΄μ„ μ‚¬μš©ν•˜μ—¬ stale closure 문제 λ°©μ§€
27
-
28
- **λ³€κ²½ λ‚΄μš©**:
29
- - `useCallback` μ œκ±°ν•˜κ³  `useEffect` λ‚΄λΆ€μ—μ„œ 직접 ν•¨μˆ˜ μ •μ˜
30
- - `onTick`, `speed`, `isRunning` 값을 Ref둜 κ΄€λ¦¬ν•˜μ—¬ μ΅œμ‹  κ°’ μ°Έμ‘° 보μž₯
31
- - κ²Œμž„ 루프가 쀑단될 λ•Œ `cancelAnimationFrame` μ •ν™•νžˆ 호좜
32
-
33
- ```typescript
34
- // Before (ESLint Error)
35
- const gameLoop = useCallback((timestamp) => {
36
- // ...
37
- rafIdRef.current = requestAnimationFrame(gameLoop); // 자기 μ°Έμ‘° 였λ₯˜
38
- }, [onTick, speed, isRunning]);
39
-
40
- // After (Fixed)
41
- useEffect(() => {
42
- const gameLoop = (timestamp) => {
43
- // Refλ₯Ό 톡해 μ΅œμ‹  κ°’ μ ‘κ·Ό
44
- onTickRef.current();
45
- rafIdRef.current = requestAnimationFrame(gameLoop);
46
- };
47
- // ...
48
- }, [isRunning]);
49
- ```
50
-
51
- ---
52
-
53
- ## μ½”λ“œ ν’ˆμ§ˆ 뢄석
54
-
55
- ### ESLint κ²°κ³Ό
56
- ```
57
- βœ… 0 errors, 0 warnings
58
- ```
59
-
60
- ### TypeScript 컴파일
61
- ```
62
- βœ… tsc -b 성곡
63
- ```
64
-
65
- ### λ²ˆλ“€ 뢄석
66
-
67
- | 파일 | 크기 | Gzip |
68
- |------|------|------|
69
- | index.html | 0.46 KB | 0.29 KB |
70
- | index.css | 12.85 KB | 2.69 KB |
71
- | index.js | 204.52 KB | 64.51 KB |
72
-
73
- ---
74
-
75
- ## μΆ”κ°€ κ°œμ„  ꢌμž₯사항
76
-
77
- ### μ„±λŠ₯ μ΅œμ ν™” (ν–₯ν›„)
78
- - [ ] `React.memo`둜 λΆˆν•„μš”ν•œ λ¦¬λ Œλ”λ§ λ°©μ§€
79
- - [ ] Canvas λ Œλ”λ§ μ΅œμ ν™” (더티 μ˜μ—­λ§Œ κ°±μ‹ )
80
- - [ ] λ±€ λͺΈν†΅ λ Œλ”λ§ 배치 처리
81
-
82
- ### μ½”λ“œ ν’ˆμ§ˆ (ν–₯ν›„)
83
- - [ ] ν…ŒμŠ€νŠΈ 컀버리지 μΆ”κ°€
84
- - [ ] JSDoc 주석 μΆ”κ°€
85
- - [ ] μ—λŸ¬ λ°”μš΄λ”λ¦¬ κ΅¬ν˜„
86
-
87
- ### μ ‘κ·Όμ„± (ν–₯ν›„)
88
- - [ ] ν‚€λ³΄λ“œ 포컀슀 관리
89
- - [ ] 슀크린 리더 지원
90
- - [ ] κ°μ†Œλœ λͺ¨μ…˜ μ„€μ • 지원
91
-
92
- ---
93
-
94
- ## κ²°λ‘ 
95
-
96
- 07-refactoring μŠ€ν…Œμ΄μ§€μ—μ„œ ESLint 였λ₯˜λ₯Ό μˆ˜μ •ν•˜κ³  μ½”λ“œ ν’ˆμ§ˆμ„ κ°œμ„ ν–ˆμŠ΅λ‹ˆλ‹€.
97
- κ²Œμž„μ€ μ •μƒμ μœΌλ‘œ λΉŒλ“œλ˜κ³  μ‹€ν–‰λ©λ‹ˆλ‹€.
98
-
99
- ---
100
-
101
- **μž‘μ„±μž**: ClaudeCode
102
- **검토일**: 2026-01-21
File without changes
@@ -1,114 +0,0 @@
1
- # HANDOFF: 08-qa β†’ 09-testing
2
-
3
- > 생성일: 2026-01-21
4
- > ν”„λ‘œμ νŠΈ: snake-game
5
- > ν˜„μž¬ μŠ€ν…Œμ΄μ§€: 08-qa (μ™„λ£Œ)
6
- > λ‹€μŒ μŠ€ν…Œμ΄μ§€: 09-testing
7
-
8
- ---
9
-
10
- ## βœ… μ™„λ£Œλœ μž‘μ—…
11
-
12
- - [x] μ½”λ“œ ν’ˆμ§ˆ 검증 (ESLint, TypeScript)
13
- - [x] ν”„λ‘œλ•μ…˜ λΉŒλ“œ 검증
14
- - [x] BUG-001 μˆ˜μ •: useGameLoop μ΄ˆκΈ°ν™” 문제
15
- - [x] κΈ°λŠ₯ ν…ŒμŠ€νŠΈ (Playwright MCP)
16
- - [x] κ²Œμž„ μ‹œμž‘/μž¬μ‹œμž‘
17
- - [x] ν‚€λ³΄λ“œ μž…λ ₯ (λ°©ν–₯ν‚€)
18
- - [x] λ²½ 좩돌 κ²Œμž„ μ˜€λ²„
19
- - [x] QA λ³΄κ³ μ„œ μž‘μ„±
20
-
21
- ---
22
-
23
- ## πŸ› μˆ˜μ •λœ 버그
24
-
25
- ### BUG-001: κ²Œμž„ μ‹œμž‘ μ¦‰μ‹œ κ²Œμž„ μ˜€λ²„
26
- - **파일**: `src/hooks/useGameLoop.ts`
27
- - **원인**: 첫 ν”„λ ˆμž„μ—μ„œ 큰 deltaTime으둜 인해 λ‹€μˆ˜μ˜ MOVE 호좜
28
- - **μˆ˜μ •**: 첫 ν”„λ ˆμž„ μŠ€ν‚΅ + deltaTime ν΄λž¨ν•‘
29
-
30
- ---
31
-
32
- ## πŸ“ 생성/μˆ˜μ •λœ 파일
33
-
34
- | 파일 | λ³€κ²½ μœ ν˜• | μ„€λͺ… |
35
- |------|----------|------|
36
- | `src/hooks/useGameLoop.ts` | μˆ˜μ • | 버그 μˆ˜μ • |
37
- | `outputs/qa_report.md` | 생성 | QA λ³΄κ³ μ„œ |
38
- | `HANDOFF.md` | 생성 | 인계 λ¬Έμ„œ |
39
-
40
- ---
41
-
42
- ## πŸ” μ½”λ“œ ν’ˆμ§ˆ μƒνƒœ
43
-
44
- | ν•­λͺ© | μƒνƒœ |
45
- |------|------|
46
- | ESLint | βœ… 0 errors |
47
- | TypeScript | βœ… 컴파일 성곡 |
48
- | λΉŒλ“œ | βœ… 성곡 |
49
- | λ²ˆλ“€ 크기 | βœ… 204.59KB |
50
-
51
- ---
52
-
53
- ## 🎯 09-testing ꢌμž₯ μž‘μ—…
54
-
55
- ### 1. λ‹¨μœ„ ν…ŒμŠ€νŠΈ (Vitest)
56
-
57
- ```bash
58
- npm install -D vitest @testing-library/react
59
- ```
60
-
61
- #### ν…ŒμŠ€νŠΈ λŒ€μƒ
62
- - `collision.ts`
63
- - `checkWallCollision()` - 경계 쑰건
64
- - `checkSelfCollision()` - 자기 λͺΈ 좩돌
65
- - `checkFoodCollision()` - 먹이 좩돌
66
-
67
- - `gameReducer.ts`
68
- - START_GAME β†’ PLAYING μƒνƒœ 전이
69
- - MOVE β†’ λ±€ 이동 검증
70
- - CHANGE_DIRECTION β†’ λ°˜λŒ€ λ°©ν–₯ 차단
71
-
72
- - `useGameLoop.ts`
73
- - κ²Œμž„ 루프 μ‹œμž‘/μ •μ§€
74
- - 타이밍 정확도
75
-
76
- ### 2. E2E ν…ŒμŠ€νŠΈ (Playwright)
77
-
78
- ```bash
79
- npm install -D @playwright/test
80
- ```
81
-
82
- #### ν…ŒμŠ€νŠΈ μ‹œλ‚˜λ¦¬μ˜€
83
- 1. 전체 κ²Œμž„ ν”Œλ‘œμš°
84
- - νŽ˜μ΄μ§€ λ‘œλ“œ β†’ μ‹œμž‘ λ²„νŠΌ β†’ κ²Œμž„ ν”Œλ ˆμ΄ β†’ κ²Œμž„μ˜€λ²„ β†’ μž¬μ‹œμž‘
85
-
86
- 2. 점수 μ‹œμŠ€ν…œ
87
- - 먹이 λ¨ΉκΈ° β†’ 점수 증가 확인
88
- - λ ˆλ²¨μ—… μ‹œ 속도 λ³€ν™” 확인
89
-
90
- 3. 졜고 점수
91
- - localStorage μ €μž₯ 확인
92
- - μƒˆλ‘œκ³ μΉ¨ ν›„ μœ μ§€ 확인
93
-
94
- ### 3. 컀버리지 λͺ©ν‘œ
95
- - λ‹¨μœ„ ν…ŒμŠ€νŠΈ: 80%+
96
- - E2E ν…ŒμŠ€νŠΈ: 핡심 ν”Œλ‘œμš° 100%
97
-
98
- ---
99
-
100
- ## πŸš€ λ‹€μŒ 단계
101
-
102
- ```bash
103
- # 09-testing μŠ€ν…Œμ΄μ§€ μ‹€ν–‰
104
- /run-stage 09-testing
105
-
106
- # λ˜λŠ”
107
- /test
108
- ```
109
-
110
- ---
111
-
112
- **μƒμ„±μž**: ClaudeCode
113
- **κ²€ν† μž**: -
114
- **승인**: λŒ€κΈ°
@@ -1,138 +0,0 @@
1
- # QA Report - Snake Game
2
-
3
- > 생성일: 2026-01-21
4
- > ν”„λ‘œμ νŠΈ: snake-game
5
- > μŠ€ν…Œμ΄μ§€: 08-qa
6
-
7
- ---
8
-
9
- ## ν…ŒμŠ€νŠΈ μš”μ•½
10
-
11
- | ν•­λͺ© | κ²°κ³Ό | λΉ„κ³  |
12
- |------|------|------|
13
- | ESLint | βœ… 톡과 | 0 errors, 0 warnings |
14
- | TypeScript | βœ… 톡과 | 컴파일 성곡 |
15
- | λΉŒλ“œ | βœ… 톡과 | 204.59 KB |
16
- | κΈ°λŠ₯ ν…ŒμŠ€νŠΈ | βœ… 톡과 | 핡심 κΈ°λŠ₯ 정상 λ™μž‘ |
17
-
18
- ---
19
-
20
- ## 발견 및 μˆ˜μ •λœ 버그
21
-
22
- ### BUG-001: κ²Œμž„ μ‹œμž‘ μ¦‰μ‹œ κ²Œμž„ μ˜€λ²„
23
-
24
- **증상**: κ²Œμž„ μ‹œμž‘ λ²„νŠΌ 클릭 μ‹œ μ¦‰μ‹œ GAME OVER ν™”λ©΄ ν‘œμ‹œ
25
-
26
- **원인**: `useGameLoop` ν›…μ˜ μ΄ˆκΈ°ν™” 둜직 결함
27
- - 첫 ν”„λ ˆμž„μ—μ„œ `lastTimeRef.current = 0`
28
- - `deltaTime = timestamp - 0` β†’ 수천 ms
29
- - `accumulator`에 큰 값이 μΆ”κ°€λ˜μ–΄ μˆ˜μ‹­ 번의 MOVE 호좜
30
- - 뱀이 μˆœμ‹κ°„μ— λ²½κΉŒμ§€ μ΄λ™ν•˜μ—¬ 좩돌
31
-
32
- **μˆ˜μ •**:
33
- ```typescript
34
- // μˆ˜μ • μ „
35
- if (lastTimeRef.current === 0) {
36
- lastTimeRef.current = timestamp;
37
- }
38
- const deltaTime = timestamp - lastTimeRef.current;
39
-
40
- // μˆ˜μ • ν›„
41
- if (lastTimeRef.current === 0) {
42
- lastTimeRef.current = timestamp;
43
- rafIdRef.current = requestAnimationFrame(gameLoop);
44
- return; // 첫 ν”„λ ˆμž„ μŠ€ν‚΅
45
- }
46
- const deltaTime = timestamp - lastTimeRef.current;
47
- // deltaTime ν΄λž¨ν•‘ μΆ”κ°€
48
- const clampedDelta = Math.min(deltaTime, speedRef.current * 2);
49
- ```
50
-
51
- **μƒνƒœ**: βœ… μˆ˜μ • μ™„λ£Œ
52
-
53
- ---
54
-
55
- ## κΈ°λŠ₯ ν…ŒμŠ€νŠΈ κ²°κ³Ό
56
-
57
- ### κ²Œμž„ μ‹œμž‘/μž¬μ‹œμž‘
58
- | ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€ | κ²°κ³Ό |
59
- |--------------|------|
60
- | START GAME λ²„νŠΌ 클릭 | βœ… 톡과 |
61
- | PLAY AGAIN λ²„νŠΌ 클릭 | βœ… 톡과 |
62
- | Enter ν‚€λ‘œ μ‹œμž‘ | βœ… 톡과 |
63
-
64
- ### ν‚€λ³΄λ“œ μž…λ ₯
65
- | ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€ | κ²°κ³Ό |
66
- |--------------|------|
67
- | ArrowUp λ°©ν–₯ μ „ν™˜ | βœ… 톡과 |
68
- | ArrowDown λ°©ν–₯ μ „ν™˜ | βœ… 톡과 |
69
- | Space μΌμ‹œμ •μ§€/재개 | βœ… 톡과 |
70
-
71
- ### 좩돌 감지
72
- | ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€ | κ²°κ³Ό |
73
- |--------------|------|
74
- | 상단 λ²½ 좩돌 | βœ… 톡과 |
75
- | 우츑 λ²½ 좩돌 | βœ… 톡과 |
76
- | κ²Œμž„ μ˜€λ²„ λͺ¨λ‹¬ ν‘œμ‹œ | βœ… 톡과 |
77
-
78
- ---
79
-
80
- ## μ½”λ“œ ν’ˆμ§ˆ
81
-
82
- ### ESLint
83
- ```
84
- βœ… 0 errors, 0 warnings
85
- ```
86
-
87
- ### TypeScript
88
- ```
89
- βœ… tsc -b 성곡 (0 errors)
90
- ```
91
-
92
- ### λ²ˆλ“€ 크기
93
- | 파일 | 크기 | Gzip |
94
- |------|------|------|
95
- | index.html | 0.46 KB | 0.29 KB |
96
- | index.css | 12.85 KB | 2.69 KB |
97
- | index.js | 204.59 KB | 64.53 KB |
98
-
99
- **총 λ²ˆλ“€ 크기**: 204.59 KB (λͺ©ν‘œ 200KB κ·Όμ ‘)
100
-
101
- ---
102
-
103
- ## μˆ˜μ •λœ 파일
104
-
105
- | 파일 | λ³€κ²½ μœ ν˜• | μ„€λͺ… |
106
- |------|----------|------|
107
- | `src/hooks/useGameLoop.ts` | μˆ˜μ • | 첫 ν”„λ ˆμž„ μŠ€ν‚΅ 및 deltaTime ν΄λž¨ν•‘ |
108
- | `src/engine/gameReducer.ts` | μˆ˜μ • | 디버그 둜그 μΆ”κ°€ ν›„ 제거 |
109
-
110
- ---
111
-
112
- ## 남은 ν…ŒμŠ€νŠΈ ν•­λͺ© (09-testing)
113
-
114
- ### λ‹¨μœ„ ν…ŒμŠ€νŠΈ ν•„μš”
115
- - [ ] `collision.ts` - 좩돌 감지 ν•¨μˆ˜
116
- - [ ] `gameReducer.ts` - μƒνƒœ 전이 둜직
117
- - [ ] `useGameLoop.ts` - κ²Œμž„ 루프 타이밍
118
-
119
- ### E2E ν…ŒμŠ€νŠΈ ν•„μš”
120
- - [ ] 전체 κ²Œμž„ ν”Œλ‘œμš° (μ‹œμž‘ β†’ ν”Œλ ˆμ΄ β†’ κ²Œμž„μ˜€λ²„ β†’ μž¬μ‹œμž‘)
121
- - [ ] 점수 μ‹œμŠ€ν…œ (먹이 λ¨ΉκΈ°, λ ˆλ²¨μ—…)
122
- - [ ] 졜고 점수 μ €μž₯/뢈러였기
123
-
124
- ---
125
-
126
- ## κ²°λ‘ 
127
-
128
- 08-qa μŠ€ν…Œμ΄μ§€μ—μ„œ **치λͺ…적 버그 1건**을 λ°œκ²¬ν•˜κ³  μˆ˜μ •ν–ˆμŠ΅λ‹ˆλ‹€.
129
- - κ²Œμž„ 루프 μ΄ˆκΈ°ν™” 문제둜 μΈν•œ μ¦‰μ‹œ κ²Œμž„ μ˜€λ²„ ν˜„μƒ
130
- - μˆ˜μ • ν›„ λͺ¨λ“  핡심 κΈ°λŠ₯이 정상 λ™μž‘ν•¨μ„ 확인
131
-
132
- κ²Œμž„μ€ ν”Œλ ˆμ΄ κ°€λŠ₯ν•œ μƒνƒœμ΄λ©°, 09-testing μŠ€ν…Œμ΄μ§€μ—μ„œ
133
- λ‹¨μœ„ ν…ŒμŠ€νŠΈ 및 E2E ν…ŒμŠ€νŠΈλ₯Ό μΆ”κ°€ν•˜μ—¬ ν’ˆμ§ˆμ„ κ°•ν™”ν•  μ˜ˆμ •μž…λ‹ˆλ‹€.
134
-
135
- ---
136
-
137
- **μž‘μ„±μž**: ClaudeCode
138
- **검토일**: 2026-01-21
File without changes
@@ -1,118 +0,0 @@
1
- # HANDOFF: 09-testing β†’ 10-deployment
2
-
3
- > 생성일: 2026-01-21
4
- > ν”„λ‘œμ νŠΈ: snake-game
5
- > ν˜„μž¬ μŠ€ν…Œμ΄μ§€: 09-testing (μ™„λ£Œ)
6
- > λ‹€μŒ μŠ€ν…Œμ΄μ§€: 10-deployment
7
-
8
- ---
9
-
10
- ## βœ… μ™„λ£Œλœ μž‘μ—…
11
-
12
- - [x] Vitest ν…ŒμŠ€νŠΈ ν™˜κ²½ μ„€μ •
13
- - [x] λ‹¨μœ„ ν…ŒμŠ€νŠΈ μž‘μ„± (43개)
14
- - [x] collision.test.ts (23 tests)
15
- - [x] gameReducer.test.ts (20 tests)
16
- - [x] ν…ŒμŠ€νŠΈ 컀버리지 뢄석
17
- - [x] ν…ŒμŠ€νŠΈ λ³΄κ³ μ„œ μž‘μ„±
18
-
19
- ---
20
-
21
- ## πŸ“Š ν…ŒμŠ€νŠΈ κ²°κ³Ό
22
-
23
- | ν•­λͺ© | κ²°κ³Ό |
24
- |------|------|
25
- | 총 ν…ŒμŠ€νŠΈ | 43개 |
26
- | ν†΅κ³Όμœ¨ | 100% |
27
- | 핡심 둜직 컀버리지 | 77-87% |
28
-
29
- ### 컀버리지 상세
30
- | 파일 | Lines |
31
- |------|-------|
32
- | collision.ts | 77.77% |
33
- | gameReducer.ts | 87.27% |
34
- | config.ts | 100% |
35
-
36
- ---
37
-
38
- ## πŸ“ 생성/μˆ˜μ •λœ 파일
39
-
40
- | 파일 | λ³€κ²½ μœ ν˜• | μ„€λͺ… |
41
- |------|----------|------|
42
- | `vite.config.ts` | μˆ˜μ • | Vitest μ„€μ • μΆ”κ°€ |
43
- | `package.json` | μˆ˜μ • | ν…ŒμŠ€νŠΈ 슀크립트 μΆ”κ°€ |
44
- | `src/test/setup.ts` | 생성 | ν…ŒμŠ€νŠΈ setup |
45
- | `src/engine/collision.test.ts` | 생성 | 좩돌 감지 ν…ŒμŠ€νŠΈ |
46
- | `src/engine/gameReducer.test.ts` | 생성 | κ²Œμž„ λ¦¬λ“€μ„œ ν…ŒμŠ€νŠΈ |
47
- | `outputs/test_report.md` | 생성 | ν…ŒμŠ€νŠΈ λ³΄κ³ μ„œ |
48
-
49
- ---
50
-
51
- ## πŸš€ 10-deployment ꢌμž₯ μž‘μ—…
52
-
53
- ### 1. λΉŒλ“œ μ„€μ •
54
- ```bash
55
- npm run build
56
- ```
57
-
58
- ### 2. 배포 μ˜΅μ…˜
59
-
60
- #### Option A: GitHub Pages
61
- ```bash
62
- # vite.config.ts에 base μΆ”κ°€
63
- base: '/snake-game/',
64
-
65
- # gh-pages νŒ¨ν‚€μ§€ μ‚¬μš©
66
- npm install -D gh-pages
67
- ```
68
-
69
- #### Option B: Vercel
70
- ```bash
71
- # Vercel CLI μ‚¬μš©
72
- npm i -g vercel
73
- vercel
74
- ```
75
-
76
- #### Option C: Netlify
77
- ```bash
78
- # netlify.toml 생성
79
- [build]
80
- command = "npm run build"
81
- publish = "dist"
82
- ```
83
-
84
- ### 3. ν™˜κ²½ λ³€μˆ˜ (ν•„μš”μ‹œ)
85
- - ν˜„μž¬ ν”„λ‘œμ νŠΈλŠ” ν™˜κ²½ λ³€μˆ˜ λΆˆν•„μš”
86
-
87
- ### 4. CI/CD (선택)
88
- - GitHub Actions μ›Œν¬ν”Œλ‘œμš° μ„€μ •
89
- - μžλ™ ν…ŒμŠ€νŠΈ 및 배포
90
-
91
- ---
92
-
93
- ## πŸ“¦ 배포 μ „ 체크리슀트
94
-
95
- - [x] λΉŒλ“œ 성곡 (204KB)
96
- - [x] ESLint 톡과
97
- - [x] TypeScript 컴파일 성곡
98
- - [x] ν…ŒμŠ€νŠΈ 톡과 (43/43)
99
- - [ ] README.md μž‘μ„±
100
- - [ ] 배포 μ„€μ •
101
-
102
- ---
103
-
104
- ## πŸš€ λ‹€μŒ 단계
105
-
106
- ```bash
107
- # 10-deployment μŠ€ν…Œμ΄μ§€ μ‹€ν–‰
108
- /run-stage 10-deployment
109
-
110
- # λ˜λŠ”
111
- /deploy
112
- ```
113
-
114
- ---
115
-
116
- **μƒμ„±μž**: ClaudeCode
117
- **κ²€ν† μž**: -
118
- **승인**: λŒ€κΈ°
@@ -1,146 +0,0 @@
1
- # Test Report - Snake Game
2
-
3
- > 생성일: 2026-01-21
4
- > ν”„λ‘œμ νŠΈ: snake-game
5
- > μŠ€ν…Œμ΄μ§€: 09-testing
6
-
7
- ---
8
-
9
- ## ν…ŒμŠ€νŠΈ μš”μ•½
10
-
11
- | ν•­λͺ© | κ°’ |
12
- |------|-----|
13
- | ν…ŒμŠ€νŠΈ ν”„λ ˆμž„μ›Œν¬ | Vitest 4.0.17 |
14
- | 총 ν…ŒμŠ€νŠΈ 수 | 43개 |
15
- | 톡과 | 43개 (100%) |
16
- | μ‹€νŒ¨ | 0개 |
17
- | μ‹€ν–‰ μ‹œκ°„ | 880ms |
18
-
19
- ---
20
-
21
- ## 컀버리지 μš”μ•½
22
-
23
- | 파일 | Statements | Branches | Functions | Lines |
24
- |------|------------|----------|-----------|-------|
25
- | **collision.ts** | 76.19% | 85.71% | 80% | 77.77% |
26
- | **gameReducer.ts** | 87.5% | 86.11% | 100% | 87.27% |
27
- | **config.ts** | 100% | 100% | 100% | 100% |
28
- | **전체** | 30.87% | 37.81% | 29.03% | 31.44% |
29
-
30
- ### 핡심 둜직 컀버리지
31
- - **좩돌 감지 (collision.ts)**: 77% - 우수
32
- - **κ²Œμž„ μƒνƒœ 관리 (gameReducer.ts)**: 87% - 우수
33
- - **μ„€μ • (config.ts)**: 100% - μ™„λ²½
34
-
35
- ---
36
-
37
- ## ν…ŒμŠ€νŠΈ 파일 λͺ©λ‘
38
-
39
- ### 1. collision.test.ts (23 tests)
40
-
41
- #### isSamePoint
42
- - βœ… λ™μΌν•œ 포인트 νŒλ³„
43
- - βœ… λ‹€λ₯Έ 포인트 νŒλ³„
44
- - βœ… y만 λ‹€λ₯Έ 포인트 νŒλ³„
45
-
46
- #### checkWallCollision
47
- - βœ… λ³΄λ“œ λ‚΄λΆ€ 포인트
48
- - βœ… 음수 x μ’Œν‘œ
49
- - βœ… 음수 y μ’Œν‘œ
50
- - βœ… λ³΄λ“œ 경계 x
51
- - βœ… λ³΄λ“œ 경계 y
52
- - βœ… μ½”λ„ˆ (0,0)
53
- - βœ… μ΅œλŒ€ 유효 μœ„μΉ˜ (19,19)
54
-
55
- #### checkSelfCollision
56
- - βœ… 좩돌 μ—†λŠ” 짧은 λ±€
57
- - βœ… 머리와 λͺΈ 좩돌
58
- - βœ… 길이 1 λ±€
59
-
60
- #### checkFoodCollision
61
- - βœ… 머리가 μŒμ‹ μœ„μΉ˜μ— μžˆμ„ λ•Œ
62
- - βœ… 머리가 μŒμ‹ μœ„μΉ˜μ— 없을 λ•Œ
63
-
64
- #### detectCollision
65
- - βœ… λ²½ 좩돌 λ°˜ν™˜
66
- - βœ… 자기 좩돌 λ°˜ν™˜
67
- - βœ… μŒμ‹ 좩돌 λ°˜ν™˜
68
- - βœ… 좩돌 μ—†μŒ λ°˜ν™˜
69
- - βœ… λ²½ 좩돌 μš°μ„ μˆœμœ„
70
-
71
- #### isOnSnake
72
- - βœ… λ±€ 머리 μœ„ 포인트
73
- - βœ… λ±€ λͺΈ μœ„ 포인트
74
- - βœ… λ±€ μœ„μ— μ—†λŠ” 포인트
75
-
76
- ---
77
-
78
- ### 2. gameReducer.test.ts (20 tests)
79
-
80
- #### createInitialState
81
- - βœ… κΈ°λ³Έ 초기 μƒνƒœ 생성
82
- - βœ… 제곡된 졜고 점수둜 μ΄ˆκΈ°ν™”
83
- - βœ… 뱀이 λ³΄λ“œ μ€‘μ•™μ—μ„œ μ‹œμž‘
84
-
85
- #### START_GAME action
86
- - βœ… IDLE β†’ PLAYING μƒνƒœ 전이
87
- - βœ… GAME_OVER β†’ PLAYING μƒνƒœ 전이
88
- - βœ… PLAYING μƒνƒœμ—μ„œ λ³€κ²½ μ•ˆλ¨
89
- - βœ… 졜고 점수 μœ μ§€
90
-
91
- #### PAUSE_GAME action
92
- - βœ… PLAYING β†’ PAUSED μƒνƒœ 전이
93
- - βœ… PLAYING 아닐 λ•Œ λ³€κ²½ μ•ˆλ¨
94
-
95
- #### RESUME_GAME action
96
- - βœ… PAUSED β†’ PLAYING μƒνƒœ 전이
97
- - βœ… PAUSED 아닐 λ•Œ λ³€κ²½ μ•ˆλ¨
98
-
99
- #### CHANGE_DIRECTION action
100
- - βœ… μœ νš¨ν•œ λ°©ν–₯ λ³€κ²½
101
- - βœ… λ°˜λŒ€ λ°©ν–₯(180도 νšŒμ „) 차단
102
- - βœ… PLAYING 아닐 λ•Œ λ³€κ²½ μ•ˆλ¨
103
-
104
- #### MOVE action
105
- - βœ… λ±€ μ „μ§„ 이동
106
- - βœ… PLAYING 아닐 λ•Œ 이동 μ•ˆλ¨
107
- - βœ… λ²½ 좩돌 μ‹œ κ²Œμž„ μ˜€λ²„
108
- - βœ… μŒμ‹ 먹으면 λ±€ μ„±μž₯
109
-
110
- #### RESET_GAME action
111
- - βœ… κ²Œμž„ μ΄ˆκΈ°ν™” 및 졜고 점수 μœ μ§€
112
-
113
- #### SET_HIGH_SCORE action
114
- - βœ… 졜고 점수 μ—…λ°μ΄νŠΈ
115
-
116
- ---
117
-
118
- ## ν…ŒμŠ€νŠΈ ν™˜κ²½
119
-
120
- ```json
121
- {
122
- "vitest": "4.0.17",
123
- "jsdom": "27.4.0",
124
- "@testing-library/react": "16.3.2",
125
- "@testing-library/jest-dom": "6.9.1",
126
- "@vitest/coverage-v8": "4.0.17"
127
- }
128
- ```
129
-
130
- ---
131
-
132
- ## ꢌμž₯ κ°œμ„  사항
133
-
134
- ### μΆ”κ°€ ν…ŒμŠ€νŠΈ ν•„μš”
135
- 1. **useGameLoop ν›…** - κ²Œμž„ 루프 타이밍 ν…ŒμŠ€νŠΈ
136
- 2. **useKeyboard ν›…** - ν‚€λ³΄λ“œ 이벀트 ν…ŒμŠ€νŠΈ
137
- 3. **renderer.ts** - Canvas λ Œλ”λ§ ν…ŒμŠ€νŠΈ (jsdom μ œν•œ)
138
-
139
- ### E2E ν…ŒμŠ€νŠΈ (ν–₯ν›„)
140
- - Playwrightλ₯Ό μ‚¬μš©ν•œ 전체 κ²Œμž„ ν”Œλ‘œμš° ν…ŒμŠ€νŠΈ
141
- - λΈŒλΌμš°μ € ν˜Έν™˜μ„± ν…ŒμŠ€νŠΈ
142
-
143
- ---
144
-
145
- **μž‘μ„±μž**: ClaudeCode
146
- **검토일**: 2026-01-21
File without changes