@su-record/vibe 2.0.9 → 2.0.11
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/.claude/agents/research/best-practices-agent.md +139 -0
- package/.claude/agents/research/codebase-patterns-agent.md +147 -0
- package/.claude/agents/research/framework-docs-agent.md +181 -0
- package/.claude/agents/research/security-advisory-agent.md +167 -0
- package/.claude/agents/review/architecture-reviewer.md +107 -0
- package/.claude/agents/review/complexity-reviewer.md +116 -0
- package/.claude/agents/review/data-integrity-reviewer.md +88 -0
- package/.claude/agents/review/git-history-reviewer.md +103 -0
- package/.claude/agents/review/performance-reviewer.md +86 -0
- package/.claude/agents/review/python-reviewer.md +152 -0
- package/.claude/agents/review/rails-reviewer.md +139 -0
- package/.claude/agents/review/react-reviewer.md +144 -0
- package/.claude/agents/review/security-reviewer.md +80 -0
- package/.claude/agents/review/simplicity-reviewer.md +140 -0
- package/.claude/agents/review/test-coverage-reviewer.md +116 -0
- package/.claude/agents/review/typescript-reviewer.md +127 -0
- package/.claude/commands/vibe.compound.md +261 -0
- package/.claude/commands/vibe.e2e.md +266 -0
- package/.claude/commands/vibe.review.md +324 -0
- package/.claude/commands/vibe.spec.md +48 -4
- package/.claude/settings.json +152 -152
- package/.claude/skills/git-worktree.md +178 -0
- package/.claude/skills/priority-todos.md +236 -0
- package/CLAUDE.md +150 -10
- package/README.md +145 -10
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +88 -6
- package/dist/cli/index.js.map +1 -1
- package/package.json +1 -1
package/.claude/settings.json
CHANGED
|
@@ -1,153 +1,153 @@
|
|
|
1
|
-
{
|
|
2
|
-
"permissions": {
|
|
3
|
-
"allow": [
|
|
4
|
-
"Bash(cat:*)",
|
|
5
|
-
"Bash(mv:*)",
|
|
6
|
-
"Bash(sed:*)",
|
|
7
|
-
"Bash(git add:*)",
|
|
8
|
-
"Bash(git commit:*)",
|
|
9
|
-
"Bash(npm publish:*)",
|
|
10
|
-
"Bash(git push:*)",
|
|
11
|
-
"Bash(npm pack)",
|
|
12
|
-
"Bash(npm install:*)",
|
|
13
|
-
"Read(//private/tmp/test-vibe-bdd/.vibe/**)",
|
|
14
|
-
"Read(//private/tmp/test-vibe-bdd/.claude/commands/**)",
|
|
15
|
-
"Bash(npm view:*)",
|
|
16
|
-
"Bash(gh release create:*)",
|
|
17
|
-
"Bash(gh release view:*)",
|
|
18
|
-
"Bash(npm run build:*)",
|
|
19
|
-
"Bash(pbcopy)",
|
|
20
|
-
"Bash(openskills --help:*)",
|
|
21
|
-
"Bash(mkdir:*)",
|
|
22
|
-
"Bash(openskills sync:*)",
|
|
23
|
-
"Bash(openskills list:*)",
|
|
24
|
-
"Bash(openskills read:*)",
|
|
25
|
-
"Bash(./bin/vibe list:*)",
|
|
26
|
-
"Bash(./bin/vibe read:*)",
|
|
27
|
-
"Bash(./bin/vibe sync:*)",
|
|
28
|
-
"Bash(npm link:*)",
|
|
29
|
-
"Bash(vibe list:*)",
|
|
30
|
-
"Bash(vibe read:*)",
|
|
31
|
-
"Bash(vibe init:*)",
|
|
32
|
-
"SlashCommand(/vibe.spec \"로그인 기능\")",
|
|
33
|
-
"SlashCommand(/vibe.spec:*)",
|
|
34
|
-
"Bash(node bin/vibe:*)",
|
|
35
|
-
"Bash(npm pack:*)",
|
|
36
|
-
"Bash(npm config set:*)",
|
|
37
|
-
"Bash(node:*)",
|
|
38
|
-
"Bash(xargs basename:*)",
|
|
39
|
-
"Bash(git restore:*)",
|
|
40
|
-
"Bash(npm version:*)",
|
|
41
|
-
"Bash(npx @su-record/vibe@latest update)",
|
|
42
|
-
"Bash(gh release:*)",
|
|
43
|
-
"Bash(npx @su-record/vibe@latest init:*)",
|
|
44
|
-
"Bash(vibe version:*)",
|
|
45
|
-
"Bash(vibe update:*)",
|
|
46
|
-
"Bash(vibe status:*)",
|
|
47
|
-
"Bash(git rm:*)"
|
|
48
|
-
],
|
|
49
|
-
"deny": [],
|
|
50
|
-
"ask": []
|
|
51
|
-
},
|
|
52
|
-
"hooks": {
|
|
53
|
-
"SessionStart": [
|
|
54
|
-
{
|
|
55
|
-
"hooks": [
|
|
56
|
-
{
|
|
57
|
-
"type": "command",
|
|
58
|
-
"command": "echo '[SESSION START] IMMEDIATELY call vibe_start_session to restore previous context. Do this before responding to the user.'"
|
|
59
|
-
}
|
|
60
|
-
]
|
|
61
|
-
}
|
|
62
|
-
],
|
|
63
|
-
"PreToolUse": [
|
|
64
|
-
{
|
|
65
|
-
"matcher": "Bash",
|
|
66
|
-
"hooks": [
|
|
67
|
-
{
|
|
68
|
-
"type": "command",
|
|
69
|
-
"command": "echo '[BASH CHECK] Be cautious with destructive commands (rm -rf, git push --force, drop table). Verify paths before deletion.'"
|
|
70
|
-
}
|
|
71
|
-
]
|
|
72
|
-
}
|
|
73
|
-
],
|
|
74
|
-
"PostToolUse": [
|
|
75
|
-
{
|
|
76
|
-
"matcher": "Write|Edit",
|
|
77
|
-
"hooks": [
|
|
78
|
-
{
|
|
79
|
-
"type": "command",
|
|
80
|
-
"command": "echo '[AUTO-CONTINUE] 코드 체크 완료. 문제 발견 시 다음 edit에서 수정하고 작업 계속. 절대 멈추지 말 것.'"
|
|
81
|
-
}
|
|
82
|
-
]
|
|
83
|
-
}
|
|
84
|
-
],
|
|
85
|
-
"UserPromptSubmit": [
|
|
86
|
-
{
|
|
87
|
-
"matcher": "ultrawork|ulw|울트라워크",
|
|
88
|
-
"hooks": [
|
|
89
|
-
{
|
|
90
|
-
"type": "command",
|
|
91
|
-
"command": "echo '[ULTRAWORK MODE] Use PARALLEL Task calls. Auto-continue through ALL phases. Auto-retry on errors up to 3 times. Run vibe_auto_save_context at 70%+ context. Do NOT ask for confirmation between phases.'"
|
|
92
|
-
}
|
|
93
|
-
]
|
|
94
|
-
},
|
|
95
|
-
{
|
|
96
|
-
"matcher": "
|
|
97
|
-
"hooks": [
|
|
98
|
-
{
|
|
99
|
-
"type": "command",
|
|
100
|
-
"command": "echo '[
|
|
101
|
-
}
|
|
102
|
-
]
|
|
103
|
-
},
|
|
104
|
-
{
|
|
105
|
-
"matcher": "
|
|
106
|
-
"hooks": [
|
|
107
|
-
{
|
|
108
|
-
"type": "command",
|
|
109
|
-
"command": "echo '[
|
|
110
|
-
}
|
|
111
|
-
]
|
|
112
|
-
},
|
|
113
|
-
{
|
|
114
|
-
"matcher": "test
|
|
115
|
-
"hooks": [
|
|
116
|
-
{
|
|
117
|
-
"type": "command",
|
|
118
|
-
"command": "echo '[
|
|
119
|
-
}
|
|
120
|
-
]
|
|
121
|
-
}
|
|
122
|
-
],
|
|
123
|
-
"Notification": [
|
|
124
|
-
{
|
|
125
|
-
"matcher": "context_window_80",
|
|
126
|
-
"hooks": [
|
|
127
|
-
{
|
|
128
|
-
"type": "command",
|
|
129
|
-
"command": "echo '[CONTEXT 80%] MANDATORY: Call vibe_auto_save_context with urgency=medium NOW. This is NOT optional - save context before it is lost.'"
|
|
130
|
-
}
|
|
131
|
-
]
|
|
132
|
-
},
|
|
133
|
-
{
|
|
134
|
-
"matcher": "context_window_90",
|
|
135
|
-
"hooks": [
|
|
136
|
-
{
|
|
137
|
-
"type": "command",
|
|
138
|
-
"command": "echo '[CONTEXT 90% URGENT] MANDATORY: Call vibe_auto_save_context with urgency=high IMMEDIATELY. Do NOT proceed without saving.'"
|
|
139
|
-
}
|
|
140
|
-
]
|
|
141
|
-
},
|
|
142
|
-
{
|
|
143
|
-
"matcher": "context_window_95",
|
|
144
|
-
"hooks": [
|
|
145
|
-
{
|
|
146
|
-
"type": "command",
|
|
147
|
-
"command": "echo '[CONTEXT 95% CRITICAL] MANDATORY: Call vibe_auto_save_context with urgency=critical NOW. Session transition imminent - save everything.'"
|
|
148
|
-
}
|
|
149
|
-
]
|
|
150
|
-
}
|
|
151
|
-
]
|
|
152
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"permissions": {
|
|
3
|
+
"allow": [
|
|
4
|
+
"Bash(cat:*)",
|
|
5
|
+
"Bash(mv:*)",
|
|
6
|
+
"Bash(sed:*)",
|
|
7
|
+
"Bash(git add:*)",
|
|
8
|
+
"Bash(git commit:*)",
|
|
9
|
+
"Bash(npm publish:*)",
|
|
10
|
+
"Bash(git push:*)",
|
|
11
|
+
"Bash(npm pack)",
|
|
12
|
+
"Bash(npm install:*)",
|
|
13
|
+
"Read(//private/tmp/test-vibe-bdd/.vibe/**)",
|
|
14
|
+
"Read(//private/tmp/test-vibe-bdd/.claude/commands/**)",
|
|
15
|
+
"Bash(npm view:*)",
|
|
16
|
+
"Bash(gh release create:*)",
|
|
17
|
+
"Bash(gh release view:*)",
|
|
18
|
+
"Bash(npm run build:*)",
|
|
19
|
+
"Bash(pbcopy)",
|
|
20
|
+
"Bash(openskills --help:*)",
|
|
21
|
+
"Bash(mkdir:*)",
|
|
22
|
+
"Bash(openskills sync:*)",
|
|
23
|
+
"Bash(openskills list:*)",
|
|
24
|
+
"Bash(openskills read:*)",
|
|
25
|
+
"Bash(./bin/vibe list:*)",
|
|
26
|
+
"Bash(./bin/vibe read:*)",
|
|
27
|
+
"Bash(./bin/vibe sync:*)",
|
|
28
|
+
"Bash(npm link:*)",
|
|
29
|
+
"Bash(vibe list:*)",
|
|
30
|
+
"Bash(vibe read:*)",
|
|
31
|
+
"Bash(vibe init:*)",
|
|
32
|
+
"SlashCommand(/vibe.spec \"로그인 기능\")",
|
|
33
|
+
"SlashCommand(/vibe.spec:*)",
|
|
34
|
+
"Bash(node bin/vibe:*)",
|
|
35
|
+
"Bash(npm pack:*)",
|
|
36
|
+
"Bash(npm config set:*)",
|
|
37
|
+
"Bash(node:*)",
|
|
38
|
+
"Bash(xargs basename:*)",
|
|
39
|
+
"Bash(git restore:*)",
|
|
40
|
+
"Bash(npm version:*)",
|
|
41
|
+
"Bash(npx @su-record/vibe@latest update)",
|
|
42
|
+
"Bash(gh release:*)",
|
|
43
|
+
"Bash(npx @su-record/vibe@latest init:*)",
|
|
44
|
+
"Bash(vibe version:*)",
|
|
45
|
+
"Bash(vibe update:*)",
|
|
46
|
+
"Bash(vibe status:*)",
|
|
47
|
+
"Bash(git rm:*)"
|
|
48
|
+
],
|
|
49
|
+
"deny": [],
|
|
50
|
+
"ask": []
|
|
51
|
+
},
|
|
52
|
+
"hooks": {
|
|
53
|
+
"SessionStart": [
|
|
54
|
+
{
|
|
55
|
+
"hooks": [
|
|
56
|
+
{
|
|
57
|
+
"type": "command",
|
|
58
|
+
"command": "echo '[SESSION START] IMMEDIATELY call vibe_start_session to restore previous context. Do this before responding to the user.'"
|
|
59
|
+
}
|
|
60
|
+
]
|
|
61
|
+
}
|
|
62
|
+
],
|
|
63
|
+
"PreToolUse": [
|
|
64
|
+
{
|
|
65
|
+
"matcher": "Bash",
|
|
66
|
+
"hooks": [
|
|
67
|
+
{
|
|
68
|
+
"type": "command",
|
|
69
|
+
"command": "echo '[BASH CHECK] Be cautious with destructive commands (rm -rf, git push --force, drop table). Verify paths before deletion.'"
|
|
70
|
+
}
|
|
71
|
+
]
|
|
72
|
+
}
|
|
73
|
+
],
|
|
74
|
+
"PostToolUse": [
|
|
75
|
+
{
|
|
76
|
+
"matcher": "Write|Edit",
|
|
77
|
+
"hooks": [
|
|
78
|
+
{
|
|
79
|
+
"type": "command",
|
|
80
|
+
"command": "echo '[AUTO-CONTINUE] 코드 체크 완료. 문제 발견 시 다음 edit에서 수정하고 작업 계속. 절대 멈추지 말 것.'"
|
|
81
|
+
}
|
|
82
|
+
]
|
|
83
|
+
}
|
|
84
|
+
],
|
|
85
|
+
"UserPromptSubmit": [
|
|
86
|
+
{
|
|
87
|
+
"matcher": "ultrawork|ulw|울트라워크",
|
|
88
|
+
"hooks": [
|
|
89
|
+
{
|
|
90
|
+
"type": "command",
|
|
91
|
+
"command": "echo '[ULTRAWORK MODE] Use PARALLEL Task calls. Auto-continue through ALL phases. Auto-retry on errors up to 3 times. Run vibe_auto_save_context at 70%+ context. Do NOT ask for confirmation between phases.'"
|
|
92
|
+
}
|
|
93
|
+
]
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"matcher": "버그.*(해결|수정|고침)|문제.*(해결|수정)|bug.*(fixed|resolved|solved)|issue.*(fixed|resolved)|PR.*(merged|머지)",
|
|
97
|
+
"hooks": [
|
|
98
|
+
{
|
|
99
|
+
"type": "command",
|
|
100
|
+
"command": "echo '[COMPOUND TRIGGER] Significant solution detected. Consider /vibe.compound to document for future reference.'"
|
|
101
|
+
}
|
|
102
|
+
]
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"matcher": "코드\\s*리뷰|code\\s*review|PR\\s*리뷰|리뷰.*해줘|review.*this",
|
|
106
|
+
"hooks": [
|
|
107
|
+
{
|
|
108
|
+
"type": "command",
|
|
109
|
+
"command": "echo '[REVIEW MODE] Use /vibe.review for parallel code review with 13+ specialized agents. P1=critical, P2=important, P3=nice-to-have.'"
|
|
110
|
+
}
|
|
111
|
+
]
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"matcher": "e2e.*테스트|e2e.*test|playwright|브라우저.*테스트|browser.*test",
|
|
115
|
+
"hooks": [
|
|
116
|
+
{
|
|
117
|
+
"type": "command",
|
|
118
|
+
"command": "echo '[E2E MODE] Use /vibe.e2e for Playwright-based browser testing. Supports visual regression and video recording.'"
|
|
119
|
+
}
|
|
120
|
+
]
|
|
121
|
+
}
|
|
122
|
+
],
|
|
123
|
+
"Notification": [
|
|
124
|
+
{
|
|
125
|
+
"matcher": "context_window_80",
|
|
126
|
+
"hooks": [
|
|
127
|
+
{
|
|
128
|
+
"type": "command",
|
|
129
|
+
"command": "echo '[CONTEXT 80%] MANDATORY: Call vibe_auto_save_context with urgency=medium NOW. This is NOT optional - save context before it is lost.'"
|
|
130
|
+
}
|
|
131
|
+
]
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
"matcher": "context_window_90",
|
|
135
|
+
"hooks": [
|
|
136
|
+
{
|
|
137
|
+
"type": "command",
|
|
138
|
+
"command": "echo '[CONTEXT 90% URGENT] MANDATORY: Call vibe_auto_save_context with urgency=high IMMEDIATELY. Do NOT proceed without saving.'"
|
|
139
|
+
}
|
|
140
|
+
]
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"matcher": "context_window_95",
|
|
144
|
+
"hooks": [
|
|
145
|
+
{
|
|
146
|
+
"type": "command",
|
|
147
|
+
"command": "echo '[CONTEXT 95% CRITICAL] MANDATORY: Call vibe_auto_save_context with urgency=critical NOW. Session transition imminent - save everything.'"
|
|
148
|
+
}
|
|
149
|
+
]
|
|
150
|
+
}
|
|
151
|
+
]
|
|
152
|
+
}
|
|
153
153
|
}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
# Git Worktree Skill
|
|
2
|
+
|
|
3
|
+
Git Worktree를 활용한 병렬 브랜치 작업 스킬
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
메인 작업을 중단하지 않고 다른 브랜치에서 리뷰/테스트 수행
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
# Worktree 생성
|
|
13
|
+
git worktree add ../review-pr123 pr/123
|
|
14
|
+
|
|
15
|
+
# 해당 디렉토리에서 작업
|
|
16
|
+
cd ../review-pr123
|
|
17
|
+
npm test
|
|
18
|
+
|
|
19
|
+
# 작업 완료 후 정리
|
|
20
|
+
git worktree remove ../review-pr123
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Commands
|
|
24
|
+
|
|
25
|
+
### Create Worktree
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
# PR 리뷰용 worktree
|
|
29
|
+
git worktree add ../review-{pr_number} origin/pr/{pr_number}
|
|
30
|
+
|
|
31
|
+
# 특정 브랜치 worktree
|
|
32
|
+
git worktree add ../feature-work feature/new-feature
|
|
33
|
+
|
|
34
|
+
# 새 브랜치로 worktree
|
|
35
|
+
git worktree add -b hotfix/urgent ../hotfix main
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### List Worktrees
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
git worktree list
|
|
42
|
+
# /path/to/main abc1234 [main]
|
|
43
|
+
# /path/to/review-123 def5678 [pr/123]
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Remove Worktree
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
# 정상 제거
|
|
50
|
+
git worktree remove ../review-123
|
|
51
|
+
|
|
52
|
+
# 강제 제거 (uncommitted changes 무시)
|
|
53
|
+
git worktree remove --force ../review-123
|
|
54
|
+
|
|
55
|
+
# Prune stale worktrees
|
|
56
|
+
git worktree prune
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Workflow Integration
|
|
60
|
+
|
|
61
|
+
### PR Review Workflow
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
65
|
+
│ /vibe.review PR#123 │
|
|
66
|
+
├─────────────────────────────────────────────────────────────────┤
|
|
67
|
+
│ │
|
|
68
|
+
│ 1. git worktree add ../review-123 origin/pr/123 │
|
|
69
|
+
│ 2. cd ../review-123 │
|
|
70
|
+
│ 3. npm install && npm test │
|
|
71
|
+
│ 4. Run parallel review agents │
|
|
72
|
+
│ 5. Generate review report │
|
|
73
|
+
│ 6. cd - && git worktree remove ../review-123 │
|
|
74
|
+
│ │
|
|
75
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Hotfix Workflow
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
82
|
+
│ Urgent hotfix while working on feature │
|
|
83
|
+
├─────────────────────────────────────────────────────────────────┤
|
|
84
|
+
│ │
|
|
85
|
+
│ # Keep feature work intact │
|
|
86
|
+
│ git worktree add -b hotfix/critical ../hotfix main │
|
|
87
|
+
│ cd ../hotfix │
|
|
88
|
+
│ │
|
|
89
|
+
│ # Fix and deploy │
|
|
90
|
+
│ vim src/bug.py │
|
|
91
|
+
│ git commit -am "fix: critical bug" │
|
|
92
|
+
│ git push origin hotfix/critical │
|
|
93
|
+
│ │
|
|
94
|
+
│ # Return to feature │
|
|
95
|
+
│ cd - && git worktree remove ../hotfix │
|
|
96
|
+
│ │
|
|
97
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## Benefits
|
|
101
|
+
|
|
102
|
+
1. **No Stash Needed**: 현재 작업 그대로 유지
|
|
103
|
+
2. **Full Codebase**: 각 worktree는 완전한 코드베이스
|
|
104
|
+
3. **Parallel Work**: 여러 브랜치 동시 작업
|
|
105
|
+
4. **Clean Testing**: 격리된 환경에서 테스트
|
|
106
|
+
|
|
107
|
+
## Best Practices
|
|
108
|
+
|
|
109
|
+
### Naming Convention
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
# PR 리뷰
|
|
113
|
+
../review-{pr_number}
|
|
114
|
+
|
|
115
|
+
# 핫픽스
|
|
116
|
+
../hotfix-{issue_number}
|
|
117
|
+
|
|
118
|
+
# 실험
|
|
119
|
+
../experiment-{feature_name}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Cleanup
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
# 정기 정리
|
|
126
|
+
git worktree prune
|
|
127
|
+
|
|
128
|
+
# 모든 worktree 확인
|
|
129
|
+
git worktree list
|
|
130
|
+
|
|
131
|
+
# 스크립트로 자동 정리
|
|
132
|
+
for wt in $(git worktree list --porcelain | grep worktree | cut -d' ' -f2); do
|
|
133
|
+
if [[ $wt == *"review-"* ]] || [[ $wt == *"hotfix-"* ]]; then
|
|
134
|
+
git worktree remove "$wt" 2>/dev/null || true
|
|
135
|
+
fi
|
|
136
|
+
done
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Integration with CI/CD
|
|
140
|
+
|
|
141
|
+
```yaml
|
|
142
|
+
# GitHub Actions example
|
|
143
|
+
- name: Setup Review Worktree
|
|
144
|
+
run: |
|
|
145
|
+
git fetch origin pull/${{ github.event.pull_request.number }}/head:pr-${{ github.event.pull_request.number }}
|
|
146
|
+
git worktree add ../review pr-${{ github.event.pull_request.number }}
|
|
147
|
+
|
|
148
|
+
- name: Run Tests in Worktree
|
|
149
|
+
working-directory: ../review
|
|
150
|
+
run: npm test
|
|
151
|
+
|
|
152
|
+
- name: Cleanup
|
|
153
|
+
run: git worktree remove ../review
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
## Troubleshooting
|
|
157
|
+
|
|
158
|
+
### "already checked out" Error
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
# 해결: 해당 브랜치가 다른 worktree에 있음
|
|
162
|
+
git worktree list # 확인
|
|
163
|
+
git worktree remove <path> # 제거
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### Locked Worktree
|
|
167
|
+
|
|
168
|
+
```bash
|
|
169
|
+
# 해결: 잠긴 worktree 해제
|
|
170
|
+
git worktree unlock <path>
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### Stale Worktree
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
# 해결: 삭제된 디렉토리 정리
|
|
177
|
+
git worktree prune
|
|
178
|
+
```
|