start-vibing 1.1.2 → 1.1.4
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/package.json +1 -1
- package/template/.claude/CLAUDE.md +129 -168
- package/template/.claude/agents/analyzer.md +0 -14
- package/template/.claude/agents/commit-manager.md +0 -19
- package/template/.claude/agents/documenter.md +0 -10
- package/template/.claude/agents/domain-updater.md +194 -200
- package/template/.claude/agents/final-validator.md +0 -18
- package/template/.claude/agents/orchestrator.md +36 -34
- package/template/.claude/agents/quality-checker.md +0 -24
- package/template/.claude/agents/research.md +299 -262
- package/template/.claude/agents/security-auditor.md +1 -14
- package/template/.claude/agents/tester.md +0 -8
- package/template/.claude/agents/ui-ux-reviewer.md +80 -18
- package/template/.claude/commands/feature.md +48 -102
- package/template/.claude/config/README.md +30 -30
- package/template/.claude/config/project-config.json +53 -53
- package/template/.claude/config/quality-gates.json +46 -46
- package/template/.claude/config/security-rules.json +45 -45
- package/template/.claude/config/testing-config.json +168 -168
- package/template/.claude/hooks/SETUP.md +52 -181
- package/template/.claude/hooks/user-prompt-submit.py +184 -46
- package/template/.claude/settings.json +0 -39
- package/template/.claude/skills/codebase-knowledge/SKILL.md +145 -145
- package/template/.claude/skills/codebase-knowledge/domains/claude-system.md +260 -321
- package/template/.claude/skills/docs-tracker/SKILL.md +239 -239
- package/template/.claude/skills/final-check/SKILL.md +284 -284
- package/template/.claude/skills/quality-gate/SKILL.md +278 -278
- package/template/.claude/skills/research-cache/SKILL.md +207 -207
- package/template/.claude/skills/security-scan/SKILL.md +206 -206
- package/template/.claude/skills/test-coverage/SKILL.md +441 -441
- package/template/.claude/skills/ui-ux-audit/SKILL.md +254 -254
- package/template/.claude/config/domain-mapping.json +0 -26
- package/template/.claude/hooks/post-tool-use.py +0 -155
- package/template/.claude/hooks/pre-tool-use.py +0 -159
- package/template/.claude/hooks/stop-validation.py +0 -155
- package/template/.claude/hooks/validate-commit.py +0 -200
- package/template/.claude/hooks/workflow-manager.py +0 -350
- package/template/.claude/workflow-state.schema.json +0 -200
|
@@ -1,278 +1,278 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: quality-gate
|
|
3
|
-
description: Automates quality checks (typecheck, lint, tests, build) and blocks commits that don't pass. Use before any commit to validate code quality.
|
|
4
|
-
allowed-tools: Bash, Read, Grep
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Quality Gate - Quality Verification System
|
|
8
|
-
|
|
9
|
-
## Purpose
|
|
10
|
-
|
|
11
|
-
This skill automates quality checks:
|
|
12
|
-
|
|
13
|
-
- **Typecheck** - TypeScript errors
|
|
14
|
-
- **Lint** - Code patterns (ESLint)
|
|
15
|
-
- **Build** - Build verification
|
|
16
|
-
- **Tests** - Unit and E2E tests
|
|
17
|
-
- **Blocks** commits that don't pass
|
|
18
|
-
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
## Commands
|
|
22
|
-
|
|
23
|
-
### 1. TypeScript Check
|
|
24
|
-
|
|
25
|
-
```bash
|
|
26
|
-
bun run typecheck
|
|
27
|
-
# or
|
|
28
|
-
bunx tsc --noEmit
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
### 2. ESLint Check
|
|
32
|
-
|
|
33
|
-
```bash
|
|
34
|
-
bun run lint
|
|
35
|
-
# or
|
|
36
|
-
bunx eslint . --ext .ts,.tsx
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
### 3. Build Check
|
|
40
|
-
|
|
41
|
-
```bash
|
|
42
|
-
bun run build
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
### 4. Unit Tests
|
|
46
|
-
|
|
47
|
-
```bash
|
|
48
|
-
bun run test
|
|
49
|
-
# or
|
|
50
|
-
bunx vitest run
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
### 5. E2E Tests
|
|
54
|
-
|
|
55
|
-
```bash
|
|
56
|
-
bun run test:e2e
|
|
57
|
-
# or
|
|
58
|
-
bunx playwright test
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
### 6. All Checks (RECOMMENDED)
|
|
62
|
-
|
|
63
|
-
```bash
|
|
64
|
-
bun run typecheck && bun run lint && bun run test && bun run test:e2e && bun run build
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
---
|
|
68
|
-
|
|
69
|
-
## Execution Flow
|
|
70
|
-
|
|
71
|
-
```
|
|
72
|
-
1. TYPECHECK → If fail: STOP and list errors
|
|
73
|
-
↓
|
|
74
|
-
2. LINT → If fail: STOP and list errors
|
|
75
|
-
↓
|
|
76
|
-
3. UNIT TESTS → If fail: STOP and list failures
|
|
77
|
-
↓
|
|
78
|
-
4. E2E TESTS → If fail: STOP and list failures
|
|
79
|
-
↓
|
|
80
|
-
5. BUILD → If fail: STOP and list errors
|
|
81
|
-
↓
|
|
82
|
-
RESULT: ✅ APPROVED or ❌ REJECTED
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
---
|
|
86
|
-
|
|
87
|
-
## Common TypeScript Errors
|
|
88
|
-
|
|
89
|
-
### Type 'X' is not assignable to type 'Y'
|
|
90
|
-
|
|
91
|
-
```typescript
|
|
92
|
-
// ERROR
|
|
93
|
-
const value: string = 123;
|
|
94
|
-
|
|
95
|
-
// FIX
|
|
96
|
-
const value: number = 123;
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
### Object is possibly 'undefined'
|
|
100
|
-
|
|
101
|
-
```typescript
|
|
102
|
-
// ERROR
|
|
103
|
-
const name = user.name.toUpperCase();
|
|
104
|
-
|
|
105
|
-
// FIX
|
|
106
|
-
const name = user?.name?.toUpperCase() ?? '';
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
### Property 'X' does not exist on type 'Y'
|
|
110
|
-
|
|
111
|
-
```typescript
|
|
112
|
-
// ERROR
|
|
113
|
-
const age = user.age; // age doesn't exist
|
|
114
|
-
|
|
115
|
-
// FIX
|
|
116
|
-
interface User {
|
|
117
|
-
name: string;
|
|
118
|
-
age?: number;
|
|
119
|
-
}
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
---
|
|
123
|
-
|
|
124
|
-
## Common ESLint Errors
|
|
125
|
-
|
|
126
|
-
### @typescript-eslint/no-explicit-any
|
|
127
|
-
|
|
128
|
-
```typescript
|
|
129
|
-
// ERROR
|
|
130
|
-
function parse(data: any) {}
|
|
131
|
-
|
|
132
|
-
// FIX
|
|
133
|
-
function parse(data: unknown) {}
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
### @typescript-eslint/no-unused-vars
|
|
137
|
-
|
|
138
|
-
```typescript
|
|
139
|
-
// ERROR
|
|
140
|
-
const unused = 'value';
|
|
141
|
-
|
|
142
|
-
// FIX - remove or prefix with _
|
|
143
|
-
const _unused = 'value';
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
### react-hooks/exhaustive-deps
|
|
147
|
-
|
|
148
|
-
```typescript
|
|
149
|
-
// ERROR
|
|
150
|
-
useEffect(() => {
|
|
151
|
-
fetchData(userId);
|
|
152
|
-
}, []); // missing userId
|
|
153
|
-
|
|
154
|
-
// FIX
|
|
155
|
-
useEffect(() => {
|
|
156
|
-
fetchData(userId);
|
|
157
|
-
}, [userId]);
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
---
|
|
161
|
-
|
|
162
|
-
## Output Format
|
|
163
|
-
|
|
164
|
-
### Approved
|
|
165
|
-
|
|
166
|
-
```markdown
|
|
167
|
-
## QUALITY GATE - APPROVED
|
|
168
|
-
|
|
169
|
-
### Checks Executed
|
|
170
|
-
|
|
171
|
-
| Check | Status | Time |
|
|
172
|
-
| ---------- | ------------- | ----- |
|
|
173
|
-
| TypeScript | ✅ Pass | 3.2s |
|
|
174
|
-
| ESLint | ✅ Pass | 5.1s |
|
|
175
|
-
| Unit Tests | ✅ 42/42 Pass | 8.3s |
|
|
176
|
-
| E2E Tests | ✅ 15/15 Pass | 45.2s |
|
|
177
|
-
| Build | ✅ Pass | 32.1s |
|
|
178
|
-
|
|
179
|
-
**STATUS: APPROVED** - Ready to commit
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
### Rejected
|
|
183
|
-
|
|
184
|
-
```markdown
|
|
185
|
-
## QUALITY GATE - REJECTED
|
|
186
|
-
|
|
187
|
-
### Checks Executed
|
|
188
|
-
|
|
189
|
-
| Check | Status |
|
|
190
|
-
| ---------- | ----------- |
|
|
191
|
-
| TypeScript | ❌ 3 errors |
|
|
192
|
-
|
|
193
|
-
### TypeScript Errors
|
|
194
|
-
|
|
195
|
-
#### Error 1: server/routers/example.ts:45
|
|
196
|
-
```
|
|
197
|
-
|
|
198
|
-
Type 'string | undefined' is not assignable to type 'string'.
|
|
199
|
-
|
|
200
|
-
````
|
|
201
|
-
|
|
202
|
-
**Suggested fix:**
|
|
203
|
-
```typescript
|
|
204
|
-
const name: string = input.name ?? "";
|
|
205
|
-
````
|
|
206
|
-
|
|
207
|
-
**STATUS: REJECTED** - Fix 3 errors before commit
|
|
208
|
-
|
|
209
|
-
````
|
|
210
|
-
|
|
211
|
-
---
|
|
212
|
-
|
|
213
|
-
## Quick Checks
|
|
214
|
-
|
|
215
|
-
### Fast Check (typecheck + lint only)
|
|
216
|
-
```bash
|
|
217
|
-
bun run typecheck && bun run lint
|
|
218
|
-
````
|
|
219
|
-
|
|
220
|
-
### Full Check (everything)
|
|
221
|
-
|
|
222
|
-
```bash
|
|
223
|
-
bun run typecheck && bun run lint && bun run test && bun run test:e2e && bun run build
|
|
224
|
-
```
|
|
225
|
-
|
|
226
|
-
### Modified Files Only
|
|
227
|
-
|
|
228
|
-
```bash
|
|
229
|
-
git diff --name-only | grep -E "\.(ts|tsx)$" | xargs bunx eslint
|
|
230
|
-
```
|
|
231
|
-
|
|
232
|
-
---
|
|
233
|
-
|
|
234
|
-
## Pre-Commit Checklist
|
|
235
|
-
|
|
236
|
-
- [ ] `bun run typecheck` passes?
|
|
237
|
-
- [ ] `bun run lint` passes?
|
|
238
|
-
- [ ] `bun run test` passes?
|
|
239
|
-
- [ ] `bun run test:e2e` passes?
|
|
240
|
-
- [ ] `bun run build` passes?
|
|
241
|
-
- [ ] No `any` in code?
|
|
242
|
-
- [ ] No unused variables?
|
|
243
|
-
- [ ] No debug console.log?
|
|
244
|
-
|
|
245
|
-
---
|
|
246
|
-
|
|
247
|
-
## Scripts (package.json)
|
|
248
|
-
|
|
249
|
-
```json
|
|
250
|
-
{
|
|
251
|
-
"scripts": {
|
|
252
|
-
"typecheck": "tsc --noEmit",
|
|
253
|
-
"lint": "eslint . --ext .ts,.tsx",
|
|
254
|
-
"lint:fix": "eslint . --ext .ts,.tsx --fix",
|
|
255
|
-
"test": "vitest run",
|
|
256
|
-
"test:watch": "vitest",
|
|
257
|
-
"test:e2e": "playwright test",
|
|
258
|
-
"test:e2e:ui": "playwright test --ui",
|
|
259
|
-
"test:all": "bun run typecheck && bun run lint && bun run test && bun run test:e2e",
|
|
260
|
-
"build": "next build"
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
```
|
|
264
|
-
|
|
265
|
-
---
|
|
266
|
-
|
|
267
|
-
## Critical Rules
|
|
268
|
-
|
|
269
|
-
1. **NEVER commit with errors** - All checks must pass
|
|
270
|
-
2. **RUN IN ORDER** - typecheck → lint → test → e2e → build
|
|
271
|
-
3. **FIX IMMEDIATELY** - Errors cannot accumulate
|
|
272
|
-
4. **DON'T USE --force** - Solve problems, don't ignore
|
|
273
|
-
|
|
274
|
-
---
|
|
275
|
-
|
|
276
|
-
## Version
|
|
277
|
-
|
|
278
|
-
- **v2.0.0** - Generic template
|
|
1
|
+
---
|
|
2
|
+
name: quality-gate
|
|
3
|
+
description: Automates quality checks (typecheck, lint, tests, build) and blocks commits that don't pass. Use before any commit to validate code quality.
|
|
4
|
+
allowed-tools: Bash, Read, Grep
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Quality Gate - Quality Verification System
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
|
|
11
|
+
This skill automates quality checks:
|
|
12
|
+
|
|
13
|
+
- **Typecheck** - TypeScript errors
|
|
14
|
+
- **Lint** - Code patterns (ESLint)
|
|
15
|
+
- **Build** - Build verification
|
|
16
|
+
- **Tests** - Unit and E2E tests
|
|
17
|
+
- **Blocks** commits that don't pass
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Commands
|
|
22
|
+
|
|
23
|
+
### 1. TypeScript Check
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
bun run typecheck
|
|
27
|
+
# or
|
|
28
|
+
bunx tsc --noEmit
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### 2. ESLint Check
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
bun run lint
|
|
35
|
+
# or
|
|
36
|
+
bunx eslint . --ext .ts,.tsx
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### 3. Build Check
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
bun run build
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### 4. Unit Tests
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
bun run test
|
|
49
|
+
# or
|
|
50
|
+
bunx vitest run
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### 5. E2E Tests
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
bun run test:e2e
|
|
57
|
+
# or
|
|
58
|
+
bunx playwright test
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### 6. All Checks (RECOMMENDED)
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
bun run typecheck && bun run lint && bun run test && bun run test:e2e && bun run build
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Execution Flow
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
1. TYPECHECK → If fail: STOP and list errors
|
|
73
|
+
↓
|
|
74
|
+
2. LINT → If fail: STOP and list errors
|
|
75
|
+
↓
|
|
76
|
+
3. UNIT TESTS → If fail: STOP and list failures
|
|
77
|
+
↓
|
|
78
|
+
4. E2E TESTS → If fail: STOP and list failures
|
|
79
|
+
↓
|
|
80
|
+
5. BUILD → If fail: STOP and list errors
|
|
81
|
+
↓
|
|
82
|
+
RESULT: ✅ APPROVED or ❌ REJECTED
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## Common TypeScript Errors
|
|
88
|
+
|
|
89
|
+
### Type 'X' is not assignable to type 'Y'
|
|
90
|
+
|
|
91
|
+
```typescript
|
|
92
|
+
// ERROR
|
|
93
|
+
const value: string = 123;
|
|
94
|
+
|
|
95
|
+
// FIX
|
|
96
|
+
const value: number = 123;
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Object is possibly 'undefined'
|
|
100
|
+
|
|
101
|
+
```typescript
|
|
102
|
+
// ERROR
|
|
103
|
+
const name = user.name.toUpperCase();
|
|
104
|
+
|
|
105
|
+
// FIX
|
|
106
|
+
const name = user?.name?.toUpperCase() ?? '';
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Property 'X' does not exist on type 'Y'
|
|
110
|
+
|
|
111
|
+
```typescript
|
|
112
|
+
// ERROR
|
|
113
|
+
const age = user.age; // age doesn't exist
|
|
114
|
+
|
|
115
|
+
// FIX
|
|
116
|
+
interface User {
|
|
117
|
+
name: string;
|
|
118
|
+
age?: number;
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## Common ESLint Errors
|
|
125
|
+
|
|
126
|
+
### @typescript-eslint/no-explicit-any
|
|
127
|
+
|
|
128
|
+
```typescript
|
|
129
|
+
// ERROR
|
|
130
|
+
function parse(data: any) {}
|
|
131
|
+
|
|
132
|
+
// FIX
|
|
133
|
+
function parse(data: unknown) {}
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### @typescript-eslint/no-unused-vars
|
|
137
|
+
|
|
138
|
+
```typescript
|
|
139
|
+
// ERROR
|
|
140
|
+
const unused = 'value';
|
|
141
|
+
|
|
142
|
+
// FIX - remove or prefix with _
|
|
143
|
+
const _unused = 'value';
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### react-hooks/exhaustive-deps
|
|
147
|
+
|
|
148
|
+
```typescript
|
|
149
|
+
// ERROR
|
|
150
|
+
useEffect(() => {
|
|
151
|
+
fetchData(userId);
|
|
152
|
+
}, []); // missing userId
|
|
153
|
+
|
|
154
|
+
// FIX
|
|
155
|
+
useEffect(() => {
|
|
156
|
+
fetchData(userId);
|
|
157
|
+
}, [userId]);
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## Output Format
|
|
163
|
+
|
|
164
|
+
### Approved
|
|
165
|
+
|
|
166
|
+
```markdown
|
|
167
|
+
## QUALITY GATE - APPROVED
|
|
168
|
+
|
|
169
|
+
### Checks Executed
|
|
170
|
+
|
|
171
|
+
| Check | Status | Time |
|
|
172
|
+
| ---------- | ------------- | ----- |
|
|
173
|
+
| TypeScript | ✅ Pass | 3.2s |
|
|
174
|
+
| ESLint | ✅ Pass | 5.1s |
|
|
175
|
+
| Unit Tests | ✅ 42/42 Pass | 8.3s |
|
|
176
|
+
| E2E Tests | ✅ 15/15 Pass | 45.2s |
|
|
177
|
+
| Build | ✅ Pass | 32.1s |
|
|
178
|
+
|
|
179
|
+
**STATUS: APPROVED** - Ready to commit
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### Rejected
|
|
183
|
+
|
|
184
|
+
```markdown
|
|
185
|
+
## QUALITY GATE - REJECTED
|
|
186
|
+
|
|
187
|
+
### Checks Executed
|
|
188
|
+
|
|
189
|
+
| Check | Status |
|
|
190
|
+
| ---------- | ----------- |
|
|
191
|
+
| TypeScript | ❌ 3 errors |
|
|
192
|
+
|
|
193
|
+
### TypeScript Errors
|
|
194
|
+
|
|
195
|
+
#### Error 1: server/routers/example.ts:45
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
Type 'string | undefined' is not assignable to type 'string'.
|
|
199
|
+
|
|
200
|
+
````
|
|
201
|
+
|
|
202
|
+
**Suggested fix:**
|
|
203
|
+
```typescript
|
|
204
|
+
const name: string = input.name ?? "";
|
|
205
|
+
````
|
|
206
|
+
|
|
207
|
+
**STATUS: REJECTED** - Fix 3 errors before commit
|
|
208
|
+
|
|
209
|
+
````
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
## Quick Checks
|
|
214
|
+
|
|
215
|
+
### Fast Check (typecheck + lint only)
|
|
216
|
+
```bash
|
|
217
|
+
bun run typecheck && bun run lint
|
|
218
|
+
````
|
|
219
|
+
|
|
220
|
+
### Full Check (everything)
|
|
221
|
+
|
|
222
|
+
```bash
|
|
223
|
+
bun run typecheck && bun run lint && bun run test && bun run test:e2e && bun run build
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### Modified Files Only
|
|
227
|
+
|
|
228
|
+
```bash
|
|
229
|
+
git diff --name-only | grep -E "\.(ts|tsx)$" | xargs bunx eslint
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
## Pre-Commit Checklist
|
|
235
|
+
|
|
236
|
+
- [ ] `bun run typecheck` passes?
|
|
237
|
+
- [ ] `bun run lint` passes?
|
|
238
|
+
- [ ] `bun run test` passes?
|
|
239
|
+
- [ ] `bun run test:e2e` passes?
|
|
240
|
+
- [ ] `bun run build` passes?
|
|
241
|
+
- [ ] No `any` in code?
|
|
242
|
+
- [ ] No unused variables?
|
|
243
|
+
- [ ] No debug console.log?
|
|
244
|
+
|
|
245
|
+
---
|
|
246
|
+
|
|
247
|
+
## Scripts (package.json)
|
|
248
|
+
|
|
249
|
+
```json
|
|
250
|
+
{
|
|
251
|
+
"scripts": {
|
|
252
|
+
"typecheck": "tsc --noEmit",
|
|
253
|
+
"lint": "eslint . --ext .ts,.tsx",
|
|
254
|
+
"lint:fix": "eslint . --ext .ts,.tsx --fix",
|
|
255
|
+
"test": "vitest run",
|
|
256
|
+
"test:watch": "vitest",
|
|
257
|
+
"test:e2e": "playwright test",
|
|
258
|
+
"test:e2e:ui": "playwright test --ui",
|
|
259
|
+
"test:all": "bun run typecheck && bun run lint && bun run test && bun run test:e2e",
|
|
260
|
+
"build": "next build"
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
---
|
|
266
|
+
|
|
267
|
+
## Critical Rules
|
|
268
|
+
|
|
269
|
+
1. **NEVER commit with errors** - All checks must pass
|
|
270
|
+
2. **RUN IN ORDER** - typecheck → lint → test → e2e → build
|
|
271
|
+
3. **FIX IMMEDIATELY** - Errors cannot accumulate
|
|
272
|
+
4. **DON'T USE --force** - Solve problems, don't ignore
|
|
273
|
+
|
|
274
|
+
---
|
|
275
|
+
|
|
276
|
+
## Version
|
|
277
|
+
|
|
278
|
+
- **v2.0.0** - Generic template
|