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.
- package/bin/create.js +97 -40
- package/package.json +5 -2
- package/template/.claude/CLAUDE.md +0 -7
- package/template/.claude/commands/CLAUDE.md +0 -0
- package/template/.claude/hooks/CLAUDE.md +0 -0
- package/template/.claude/skills/ai-collaboration/CLAUDE.md +0 -0
- package/template/.claude/skills/auto-checkpoint/CLAUDE.md +0 -0
- package/template/.claude/skills/context-compression/CLAUDE.md +0 -0
- package/template/.claude/skills/context-compression/prompts/CLAUDE.md +0 -0
- package/template/.claude/skills/output-validator/CLAUDE.md +0 -0
- package/template/.claude/skills/smart-handoff/CLAUDE.md +0 -0
- package/template/.claude/skills/stage-transition/CLAUDE.md +0 -0
- package/template/.claude/skills/stage-transition/prompts/CLAUDE.md +0 -0
- package/template/config/CLAUDE.md +0 -0
- package/template/scripts/CLAUDE.md +0 -0
- package/template/stages/01-brainstorm/HANDOFF.md +0 -110
- package/template/stages/01-brainstorm/inputs/CLAUDE.md +0 -0
- package/template/stages/01-brainstorm/inputs/project_brief.md +0 -40
- package/template/stages/01-brainstorm/outputs/CLAUDE.md +0 -0
- package/template/stages/01-brainstorm/outputs/ideas.md +0 -159
- package/template/stages/01-brainstorm/outputs/requirements_analysis.md +0 -222
- package/template/stages/01-brainstorm/prompts/CLAUDE.md +0 -0
- package/template/stages/01-brainstorm/templates/CLAUDE.md +0 -0
- package/template/stages/02-research/HANDOFF.md +0 -158
- package/template/stages/02-research/outputs/CLAUDE.md +0 -0
- package/template/stages/02-research/outputs/feasibility_report.md +0 -176
- package/template/stages/02-research/outputs/tech_research.md +0 -403
- package/template/stages/02-research/prompts/CLAUDE.md +0 -0
- package/template/stages/03-planning/HANDOFF.md +0 -168
- package/template/stages/03-planning/outputs/CLAUDE.md +0 -0
- package/template/stages/03-planning/outputs/architecture.md +0 -400
- package/template/stages/03-planning/outputs/implementation.yaml +0 -209
- package/template/stages/03-planning/outputs/project_plan.md +0 -204
- package/template/stages/03-planning/outputs/tech_stack.md +0 -176
- package/template/stages/03-planning/prompts/CLAUDE.md +0 -0
- package/template/stages/04-ui-ux/HANDOFF.md +0 -165
- package/template/stages/04-ui-ux/outputs/CLAUDE.md +0 -0
- package/template/stages/04-ui-ux/outputs/design_system.md +0 -449
- package/template/stages/04-ui-ux/outputs/user_flows.md +0 -321
- package/template/stages/04-ui-ux/outputs/wireframes.md +0 -241
- package/template/stages/04-ui-ux/prompts/CLAUDE.md +0 -0
- package/template/stages/05-task-management/HANDOFF.md +0 -187
- package/template/stages/05-task-management/outputs/CLAUDE.md +0 -0
- package/template/stages/05-task-management/outputs/milestones.md +0 -253
- package/template/stages/05-task-management/outputs/sprint_plan.md +0 -203
- package/template/stages/05-task-management/outputs/tasks.md +0 -402
- package/template/stages/05-task-management/prompts/CLAUDE.md +0 -0
- package/template/stages/05-task-management/templates/CLAUDE.md +0 -0
- package/template/stages/06-implementation/HANDOFF.md +0 -184
- package/template/stages/06-implementation/prompts/CLAUDE.md +0 -0
- package/template/stages/07-refactoring/HANDOFF.md +0 -82
- package/template/stages/07-refactoring/outputs/refactoring_report.md +0 -102
- package/template/stages/07-refactoring/prompts/CLAUDE.md +0 -0
- package/template/stages/08-qa/HANDOFF.md +0 -114
- package/template/stages/08-qa/outputs/qa_report.md +0 -138
- package/template/stages/08-qa/prompts/CLAUDE.md +0 -0
- package/template/stages/09-testing/HANDOFF.md +0 -118
- package/template/stages/09-testing/outputs/test_report.md +0 -146
- package/template/stages/09-testing/prompts/CLAUDE.md +0 -0
- package/template/stages/10-deployment/HANDOFF.md +0 -141
- package/template/stages/10-deployment/prompts/CLAUDE.md +0 -0
- package/template/stages/10-deployment/templates/CLAUDE.md +0 -0
- 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
|