commitgate 0.9.2 โ 0.9.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/CHANGELOG.md +8 -0
- package/README.en.md +124 -621
- package/README.md +124 -618
- package/bin/sync.ts +1 -1
- package/package.json +5 -2
package/README.md
CHANGED
|
@@ -1,618 +1,124 @@
|
|
|
1
|
-
# CommitGate
|
|
2
|
-
|
|
3
|
-
๐ **ํ๊ตญ์ด** ยท [English](./README.en.md)
|
|
4
|
-
|
|
5
|
-
**AI ์ฝ๋ฉ ๋ณ๊ฒฝ์ Codex ๋ฆฌ๋ทฐ ์น์ธ ์์ด๋ ์ปค๋ฐํ์ง ๋ชปํ๊ฒ ๋ง๋ ์ปค๋ฐ ๊ฒ์ดํธ์
๋๋ค.**
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
>
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
|
111
|
-
|
|
112
|
-
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
`req:review-codex`๋ `workflow/review-persona.md`๋ฅผ ํ๋กฌํํธ **์ฒซ ๋ธ๋ก**์ผ๋ก ๋ฃ์ต๋๋ค. ์ฌ๋์ด ์ง์ ์คํํ๋ , Cursor๊ฐ ์คํํ๋ , Claude๊ฐ ์คํํ๋ ๋์ผํฉ๋๋ค โ ์์ด์ ํธ๊ฐ ์์ ์ ์๋ ์๋ฆฌ์ ๋์ง ์์ต๋๋ค. ํ์ผ์ด ์๊ฑฐ๋ ๋น์ด ์์ผ๋ฉด ๋ฆฌ๋ทฐ๊ฐ fail-closed๋ก ๋ฉ์ถฅ๋๋ค.
|
|
127
|
-
|
|
128
|
-
๋ด์ฉ์ ํ๋ก์ ํธ์ ๋ง๊ฒ ๊ณ ์น๊ฑฐ๋, `req.config.json`์ `reviewPersonaPath`๋ก ๋ค๋ฅธ ํ์ผ์ ์ง์ ํ ์ ์์ต๋๋ค. `null`๋ก ๋๋ฉด ๋นํ์ฑํ๋ฉ๋๋ค โ ๋ค๋ง **delta design ๋ฆฌ๋ทฐ์๋ ๋ด์ฅ delta ๊ณ์ฝ์ด ์ฃผ์
๋๋ค**(์น์ธ baseline ์ดํ ๋ณ๊ฒฝ๋ถ๋ง ์ฌ๊ฒํ ํ๋๋ก ๋ฆฌ๋ทฐ์ด์๊ฒ ๊ฑฐ๋ ๊ณ์ฝ์ด๋ผ, ์ค์ persona์ ๋ฌด๊ดํ๊ฒ ๋ถ์ต๋๋ค).
|
|
129
|
-
|
|
130
|
-
### ์ค๊ณ ์ฌ๋ฆฌ๋ทฐ๋ delta๋ก ์ขํ์ง๋๋ค
|
|
131
|
-
|
|
132
|
-
์ค๊ณ๊ฐ ํ ๋ฒ ์น์ธ๋๋ฉด ๊ทธ ์์ ์ ์ค๊ณ ๋ฌธ์(๊ธฐ๋ณธ `00/01/02`, `designDocs` ์ค์ ์ผ๋ก ๋ณ๊ฒฝ ๊ฐ๋ฅ)๋ฅผ baseline์ผ๋ก ๊ธฐ์ตํฉ๋๋ค. ์ดํ ์ค๊ณ๋ฅผ ๊ณ ์ณ ์ฌ๋ฆฌ๋ทฐํ๋ฉด, ๋ฆฌ๋ทฐ์ด์๊ฒ **๋ณ๊ฒฝ๋ ๋ฌธ์์ ๊ทธ ์ง์ ์ํฅ ๋ฒ์๋ง** ์ฌ์ฌํ๋๋ก ํ๋กฌํํธ๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. ๋ณ๊ฒฝ ๋ฌธ์๋ `[๋ณ๊ฒฝ๋จ โ ์ฌ์ฌ ๋์]`, ๋ฏธ๋ณ๊ฒฝ ๋ฌธ์๋ `[์น์ธ baseline โ ๋ณ๊ฒฝ ์์, ์ฐธ์กฐ]`๋ก ํ์ํ๊ณ , ์น์ธ๋ ์์ญ์ ๋ค์ ๋ฌธ์ ์ผ์ง ๋ง๋ผ๋ ๊ณ์ฝ์ ๊ฒ๋๋ค. ๋ฏธ๋ณ๊ฒฝ ๋ฌธ์๋ ๋ณธ๋ฌธ ๋์ ์๋ต ํ์๋ง ์ ๋ฌํด ํ ํฐ์ ์๋๋๋ค. ์น์ธ ํ ์์ ํธ์ง์ด ์ ์ฒด ์ฌ๋ฆฌ๋ทฐ๋ฅผ ์ ๋ฐํด ์น์ธ์ด ๋๋๋ ค์ง๋ ๋ฌธ์ ๋ฅผ ์ค์
๋๋ค.
|
|
133
|
-
|
|
134
|
-
๋ณ๊ฒฝ์ด ๋๋ฌด ๊ทผ๋ณธ์ ์ด๋ผ delta๋ก ํ๋จํ ์ ์์ผ๋ฉด ๋ฆฌ๋ทฐ์ด๊ฐ `full_review_requested: "yes"`(๊ทธ๋ `commit_approved: "no"`)๋ก ์ ์ฒด ์ฌ๋ฆฌ๋ทฐ๋ฅผ ์์ฒญํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด baseline์ด ๋น์์ ธ ๋ค์ ์ค๊ณ ๋ฆฌ๋ทฐ๊ฐ full ๋ชจ๋๋ก ๋์๊ฐ๊ณ , ๊ทธ ์ค๊ณ๊ฐ ๋ค์ ์น์ธ๋๋ฉด ์ baseline์ด ์กํ delta๊ฐ ์ฌ๊ฐ๋ฉ๋๋ค.
|
|
135
|
-
|
|
136
|
-
main์ ๋ฐ์ํ๋ ๊ฒฝ๋ก๋ **PR ๊ฒฝ์ (์ ํ)**์ **direct push** ๋ ๋ค ์ ํจํฉ๋๋ค. PR์ ์๋ฌด๊ฐ ์๋๋๋ค. ๋ค๋ง protected branch๋ก ์ง์ pushํ๋ฉด required checks๋ฅผ **์ฐํ**ํ๋ฏ๋ก "branch protection bypass๋ฅผ ์ฌ์ฉํ direct push ์น์ธ"์ ๋ฐ๋ก ๋ฐ์์ผ ํฉ๋๋ค โ bypass ๊ถํ์ด ์๋ค๋ ์ฌ์ค์ ์น์ธ์ด ์๋๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ CI๋ push **์ดํ์** ๋๋ **์ฌํ ๊ฒ์ฆ**์ด๋ผ, ๊ทธ ์ฌ์ค์ ๋ณด๊ณ ์์ ์๋ตํ์ง ์์ต๋๋ค. tag, npm publish, GitHub release๋ ๋ฐ์๊ณผ ๋ฌถ์ด์ง ์๋ ๋ณ๋ ํต์ ์ ์ด๊ณ CI green ์ดํ์ ์์ฒญํฉ๋๋ค. ์์ธํ ๊ณ์ฝ์ [AGENTS.template.md](AGENTS.template.md)์ [docs/RELEASING.md](docs/RELEASING.md)๋ฅผ ์ฐธ๊ณ ํ์ธ์.
|
|
137
|
-
|
|
138
|
-
---
|
|
139
|
-
|
|
140
|
-
## ๋ฌด์์ ๋ณด์ฅํ๋์?
|
|
141
|
-
|
|
142
|
-
CommitGate๊ฐ ๋ง๋ ๊ฒ์ ๋จ์ํ ๋ช
๋ น ์ค์๊ฐ ์๋๋ผ **๋ฆฌ๋ทฐ๋ฐ์ง ์์ ๋ณ๊ฒฝ์ด ์ปค๋ฐ๋๋ ์ํฉ**์
๋๋ค.
|
|
143
|
-
|
|
144
|
-
- Codex ๋ฆฌ๋ทฐ๊ฐ ์คํจํ๊ฑฐ๋ ์์ผ๋ฉด ์ปค๋ฐํ ์ ์์ต๋๋ค.
|
|
145
|
-
- ์น์ธ๋ staged tree์ ์ง๊ธ ์ปค๋ฐํ๋ ค๋ staged tree๊ฐ ๋ค๋ฅด๋ฉด ๋ง์ต๋๋ค.
|
|
146
|
-
- `state.json`, `responses/` ๊ฐ์ ์ํฌํ๋ก ๋ด๋ถ ํ์ผ์ source ์ปค๋ฐ์ ์์ผ๋ฉด ๋ง์ต๋๋ค.
|
|
147
|
-
- Codex CLI๊ฐ ์๊ฑฐ๋ ์คํ์ ์คํจํ๋ฉด ์กฐ์ฉํ ํต๊ณผํ์ง ์๊ณ ์คํจํฉ๋๋ค.
|
|
148
|
-
- ๋ฆฌ๋ทฐ ์ข
๋ฃ์ฝ๋๋ outcome ๊ธฐ์ค์
๋๋ค: `0` ์น์ธ, `1` ๋ฌดํจ/fail-closed, `2` blocked(์ง์ ์์+๋ฏธ์น์ธ), `3` needs-fix.
|
|
149
|
-
- ์ง์ ์ ์์ง๋ง ์น์ธ๋ ์๋ ์๋ต์ NEEDS_FIX๊ฐ ์๋๋ผ BLOCKED์ด๋ฉฐ, ์์ด์ ํธ๋ ๊ฐ์ ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ๋ณตํ์ง ์์ต๋๋ค.
|
|
150
|
-
- ์ด๋ฆฐ `(review_kind, phase_id)` review series๋ณ๋ก ์ฌ๋ฆฌ๋ทฐ ์๋๋ฅผ ๊ณ์ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ `{ autoBudget: 5, hardCap: 8 }`์์ 1~5ํ์ฐจ๋ ์๋, 6~8ํ์ฐจ๋ ํ์ฐจ๋ง๋ค ์ฌ๋ ์์ธ ๊ธฐ๋ก์ด ์์ด์ผ ์งํ, `hardCap` ํ๋ฅผ ์์งํ๋ฉด ๊ทธ ๋ค์ ์๋(9ํ์ฐจ๋ถํฐ)๋ ์์ธ๊ฐ ์์ด๋ ์ฐจ๋จํฉ๋๋ค โ ๋ฌดํ ์ฌ๋ฆฌ๋ทฐ ๋ฃจํ๋ฅผ ๋ง์ต๋๋ค. ์น์ธ๋๋ฉด ๊ทธ series๊ฐ ๋ซํ๊ณ , ๋ฏธ์๋ ด series๋ฅผ ์ฌ๋์ด `human-resolution`์ผ๋ก ์ข
๋ฃํ๋ฉด ๊ฐ์ ํค์ ์๋ ์ฌ๊ฐ๊ฐ ๋งํ๋๋ค.
|
|
151
|
-
- ๋ฆฌ๋ทฐ์ด๋ ํ ํธ์ถ์์ ํ์
ํ P1์ ๋ชจ๋ `findings[]`์ ํจ๊ป ๋ฐํํฉ๋๋ค(๋ฐฐ์นญ). ํ ๊ฑด์ฉ ๋ด๊ณ ์ฌ๊ฒ์๋ฐ๋ ์ง๋ ฌ ํ๋ฆ์ด ๋ฆฌ๋ทฐ ๋ผ์ด๋๋ฅผ ๋ถํ๋ฆฌ๋ ๋ฌธ์ ๋ฅผ ์ค์
๋๋ค โ P1 ๊ธฐ์ค์ ๋ฎ์ถ๋ ๊ฒ์ด ์๋๋ผ, ์ด๋ฏธ ์๋ P1์ ๋ค์ ๋ผ์ด๋๋ก ๋ฏธ๋ฃจ์ง ์๋ ๊ฒ์
๋๋ค.
|
|
152
|
-
- ์ค์น ์ ๊ธฐ์กด `cross-spawn`์ด ๊ฒ์ฆ ํํ๋ณด๋ค ๋ฎ์ผ๋ฉด ๊ฒฝ๊ณ ํ๊ณ , `--strict`์์๋ ์ค๋จํฉ๋๋ค.
|
|
153
|
-
- ์น์ธ ์๋ต๊ณผ ์ฆ๊ฑฐ ํ์ผ์ `workflow/REQ-.../responses/`์ ๋จ์ต๋๋ค.
|
|
154
|
-
|
|
155
|
-
ํ ์ค๋ก ๋งํ๋ฉด, **ํ์คํ ์น์ธ๋ ๋ณ๊ฒฝ๋ง ํต๊ณผํ๊ณ ์ ๋งคํ๋ฉด ๋ฉ์ถ๋ ๋ฐฉ์**์
๋๋ค.
|
|
156
|
-
|
|
157
|
-
### ๋ณด์ฅํ์ง ์๋ ๊ฒ
|
|
158
|
-
|
|
159
|
-
๋ฐฉ์ด์ ์ ์๋ชป ๊ณ์ฐํ์ง ์๋๋ก, ์ด ๋๊ตฌ๊ฐ **ํ์ง ์๋ ์ผ**์ ๋ถ๋ช
ํ ํด ๋ก๋๋ค.
|
|
160
|
-
|
|
161
|
-
- **ํ๋ ๊ฐ์ ๊ฐ ์๋๋๋ค.** git hook์ ์ค์นํ์ง ์์ผ๋ฏ๋ก `req:commit` ๋์ `git commit`์ ์ง์ ์น๋ฉด doctorยท์น์ธ ๋ฐ์ธ๋ฉยท์ฆ๊ฑฐ ๊ธฐ๋ก์ด ์ ๋ถ ์ฐํ๋ฉ๋๋ค. ์ด์ ๋ฐ์์ ์ค์ ๋ฐฉ์ด์ ์ ์ฌ์ ํ CI์ ๋ฐฐํฌ ํ์ดํ๋ผ์ธ์
๋๋ค.
|
|
162
|
-
- **staged ๋ด์ฉ์ ๋น๋ฐ์ ์ง์ผ ์ฃผ์ง ์์ต๋๋ค.** `req:review-codex`๋ `git diff --cached` ์ ๋ฌธ์ Codex(OpenAI)๋ก ์ ์กํ๊ณ , codex๋ `--sandbox read-only`๋ก ์ ์ฅ์ ๋ฃจํธ๋ฅผ ์ฝ์ต๋๋ค. ๋ง์คํนยท์คํฌ๋ฌ๋นยท๊ธธ์ด ์ํ์ด ์์ต๋๋ค. ๊ฒฐ์ ยท์๊ฒฉ์ฆ๋ช
์ฒ๋ผ ๋ฏผ๊ฐํ ์ฝ๋๋ฒ ์ด์ค๋ผ๋ฉด ๋ฆฌ๋ทฐ ์ staged diff๋ฅผ ์ก์์ผ๋ก ํ์ธํ๋ ์ ์ฐจ๋ฅผ ๊ณ์ฝ(`AGENTS.md`)์ ๋ช
๋ฌธํํ์ธ์.
|
|
163
|
-
- **์ปค๋ฐ ์ดํ๋ฅผ ๋ณด์ฅํ์ง ์์ต๋๋ค.** ์น์ธ์ ์ปค๋ฐ ์์ ์ staged tree์ ๋ํ ๊ฒ์ด๊ณ , ๋จธ์งยทํ๊ทธยทpublish๋ ๊ฐ๊ฐ ๋ณ๋ ํต์ ์ ์
๋๋ค.
|
|
164
|
-
|
|
165
|
-
---
|
|
166
|
-
|
|
167
|
-
## ์ค์น๊ฐ ํ๋ ์ผ
|
|
168
|
-
|
|
169
|
-
`npx commitgate init`์ ๋์ ํ๋ก์ ํธ์ ์๋ ํ์ผ๊ณผ ์ค์ ์ ์ถ๊ฐํฉ๋๋ค. ๊ธฐ์กด ํ์ผ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฎ์ด์ฐ์ง ์์ต๋๋ค.
|
|
170
|
-
|
|
171
|
-
| ์ถ๊ฐ ํญ๋ชฉ | ์ค๋ช
|
|
|
172
|
-
|---|---|
|
|
173
|
-
| `workflow/*.schema.json` | Codex ์๋ต๊ณผ ์ค์ ๊ฒ์ฆ ์คํค๋ง |
|
|
174
|
-
| `workflow/review-persona.md` | Codex ๋ฆฌ๋ทฐ ํ๋กฌํํธ์ ์ฃผ์
๋๋ ๋ฆฌ๋ทฐ์ด ํ๋ฅด์๋ (์์ ๋๋ง ์์ฑ) |
|
|
175
|
-
| `req.config.json` | ํ๋ก์ ํธ๋ณ ์ค์ |
|
|
176
|
-
| `AGENTS.md` | ๊ณ์ฝ ์ ๋ณธ (์์ ๋๋ง ์์ฑ) |
|
|
177
|
-
| `CLAUDE.md` | Claude Code ์ง์นจ ํฌ์ธํฐ (์์ ๋๋ง ์์ฑ) |
|
|
178
|
-
| `.claude/skills/commitgate/SKILL.md` | Claude Code ์คํฌ (ํฌ์ธํฐ) |
|
|
179
|
-
| `.claude/commands/req.md` | `/req` ์ฌ๋์ ์ปค๋งจ๋ (ํฌ์ธํฐ) |
|
|
180
|
-
| `.cursor/rules/commitgate.mdc` | Cursor ๊ท์น (ํฌ์ธํฐ) |
|
|
181
|
-
| `.claude/skills/commitgate-*/SKILL.md` | **Companion Skills** 4์ข
โ ์๋ ์ฐธ์กฐ (๊ธฐ์กด ํ์ผ ๋ณด์กด) |
|
|
182
|
-
| `package.json` ์คํฌ๋ฆฝํธ | `req:new`ยท`req:next`ยท`req:review-codex`ยท`req:doctor`ยท`req:commit` = `commitgate <verb>` (์๋ ํค๋ง) |
|
|
183
|
-
|
|
184
|
-
### Companion Skills
|
|
185
|
-
|
|
186
|
-
CommitGate๋ **๊ฑฐ๋ฒ๋์ค ๋ ์ด์ด**์
๋๋ค โ `req:next`๊ฐ ๋ค์ ํ๋์ ๊ณ์ฐํ๊ณ , ๋ฆฌ๋ทฐยท์น์ธยท์ฆ๊ฑฐ๊ฐ ์ปค๋ฐ์ ๊ฒ์ดํธํฉ๋๋ค.
|
|
187
|
-
๊ทธ๋ฐ๋ฐ "๋ฌด์์ ๋ง๋ค์ง ์ ๋ฆฌํ๋ ๋ฒ", "ํ
์คํธ๋ฅผ ์ด๋ป๊ฒ ๋จผ์ ์ฐ๋์ง" ๊ฐ์ **๋ฐฉ๋ฒ๋ก **์ ๋น์ด ์์์ต๋๋ค.
|
|
188
|
-
Matt Pocock์ ๊ณต๊ฐ skills(MIT)๋ฅผ CommitGate์ ๊ถํ ๊ฒฝ๊ณ์ ๋ง๊ฒ ์ ์ํด 4์ข
์ ํจ๊ป ์ค์นํฉ๋๋ค.
|
|
189
|
-
|
|
190
|
-
| ์คํฌ | ์ธ์ |
|
|
191
|
-
|---|---|
|
|
192
|
-
| `commitgate-discovery` | `req:new` **์ ** โ ๋ชจํธํ ์๊ตฌ๋ฅผ REQ Brief๋ก ์ ๋ฆฌ. **์ฌ์ฉ์ ํธ์ถํ** |
|
|
193
|
-
| `commitgate-tdd` | `req:next`๊ฐ `AGENT`์ผ ๋ โ Red โ Green โ Refactor โ stage |
|
|
194
|
-
| `commitgate-diagnosing-bugs` | ๋ฒ๊ทธยทํ๊ทยท์ฑ๋ฅ โ ํผ๋๋ฐฑ ๋ฃจํ โ ์ฌํยท์ต์ํ โ ๊ฐ์ค โ ๊ณ์ธก โ ์์ |
|
|
195
|
-
| `commitgate-research` | ์ธ๋ถ ๊ธฐ์ ์ ํ โ 1์ฐจ ์ถ์ฒ ์กฐ์ฌ, ๊ฒฐ๋ก ยท์ถ์ฒยทํ๊ณ |
|
|
196
|
-
|
|
197
|
-
**์๋ ๋ฐ๊ฒฌ ยท ๋ชจ๋ธ ํ๋จ ํธ์ถ.** harness๊ฐ ์คํฌ์ ์๋์ผ๋ก **๋ฐ๊ฒฌ**ํ์ง๋ง, ์ธ์ง **ํ๋จํ๋ ๊ฑด ๋ชจ๋ธ**์
๋๋ค โ
|
|
198
|
-
ํ๋ฅ ์ ์ด๋ฉฐ ํญ์ ๋ฌ๋ค๊ณ ๊ธฐ๋ํ๋ฉด ์ ๋ฉ๋๋ค. Claude Code์์๋ `/commitgate-<์ด๋ฆ>`์ผ๋ก **์ง์ ํธ์ถ**ํ ์๋ ์์ต๋๋ค.
|
|
199
|
-
๋ค๋ฅธ harness์์๋ ๊ทธ harness๊ฐ ์ ๊ณตํ๋ ํธ์ถ ๋ฐฉ์์ ์ฐ๊ฑฐ๋, `AGENTS.md`์ ์ง์
ํ๋ฆ์ ๋ฐ๋ฅด์ธ์.
|
|
200
|
-
|
|
201
|
-
**๊ถ์ฅ ํ๋ฆ**: `commitgate-discovery`๋ก ์๊ตฌ ์ ๋ฆฌ โ `/req`(Claude Code) ๋๋ `AGENTS.md` ์ง์
โ `req:new` โ `req:next` ๋ฐ๋ณต.
|
|
202
|
-
|
|
203
|
-
#### ๊ฒฝ๊ณ โ ๋ฐ๋์ ์์ ๋์ธ์
|
|
204
|
-
|
|
205
|
-
- ๐ด **`AGENTS.md`๊ฐ ๊ณ์ฝ ์ ๋ณธ์
๋๋ค.** ์คํฌ์ **๋ฐฉ๋ฒ๋ก **์ด์ง ๊ณ์ฝ์ด ์๋๋๋ค.
|
|
206
|
-
์คํฌ์ ์ค์นํ์ง ์์๋ **ํต์ฌ ์ํฌํ๋ก๋ ์์ ํ ๋์ผํ๊ฒ** ๋์ํฉ๋๋ค.
|
|
207
|
-
- ๐ด **์คํฌ ๊ฒฐ๊ณผ๋ ์น์ธ ์ฆ๊ฑฐ๊ฐ ์๋๋๋ค.** companion skills์ ์ฐ์ถ๋ฌผ๋, ์ธ๋ถ Matt skills๋ฅผ ๋ฐ๋ก ๋๋ฆฐ ๊ฒฐ๊ณผ๋
|
|
208
|
-
CommitGateยทCodex์ **์น์ธ ๊ทผ๊ฑฐ๊ฐ ๋์ง ์์ต๋๋ค**. ๋ฆฌ๋ทฐ ์คํยท์น์ธ ํ์ ยท์ํ ์ ์ดยท์ปค๋ฐ์ **CommitGate๋ง** ๋ด๋นํ๋ฉฐ,
|
|
209
|
-
๋ค์ ํ๋์ `req:next`๊ฐ ์ ๋ณธ์
๋๋ค.
|
|
210
|
-
- ์คํฌ์ **ํ์กฐ์ ํ
์คํธ**์
๋๋ค โ ์คํฌ์ด ์ปค๋ฐ์ ๋ง๋ ๊ฒ ์๋๋ผ, ๋ง๋ ๊ฑด CommitGate์ ๊ฒ์ดํธ์
๋๋ค.
|
|
211
|
-
|
|
212
|
-
#### ์ค์นยท๋ณด์กดยท์ต์
|
|
213
|
-
|
|
214
|
-
- **`--no-agent-entrypoints`**: `.claude/` ๊ณ์ธต ์ ์ฒด๋ฅผ ๊ฑด๋๋๋๋ค(companion 4์ข
ํฌํจ).
|
|
215
|
-
- **๊ธฐ์กด ํ์ผ ๋ณด์กด(seed-once)**: ์คํฌ์ **๊ณ ์น๋ผ๊ณ ๋ง๋ ์์ฐ**์
๋๋ค. ์์ ํ ์คํฌ์ **`--force`๋ก๋ ๋ฎ์ด์ฐ์ง ์์ต๋๋ค.**
|
|
216
|
-
`AGENTS.md`ยท`CLAUDE.md`ยท`workflow/.gitignore`๋ ๊ฐ์ ์ ์ฑ
์
๋๋ค.
|
|
217
|
-
- **gitignore ๊ฒฝ๊ณ **: `.claude/`๋ฅผ gitignoreํ๋ฉด ํ์์ fresh clone์ ์คํฌ์ด ์ ๋ฌ๋์ง ์์ต๋๋ค.
|
|
218
|
-
์ค์น๋ ์งํํ๋ **๊ฒฝ๊ณ **ํ๊ณ ์ถ์ ๋ฐฉ๋ฒ์ ์๋ดํฉ๋๋ค. **`--strict`๋ฉด ์ค์น ์ ์ ์ค๋จ**ํฉ๋๋ค.
|
|
219
|
-
- **ํ์ฌ skill๊ณผ ๊ณต์กด**: ํ์ฌ `tdd`ยท`grill-me` ๋ฑ์ `.claude/skills/<์ด๋ฆ>/`, companion์ `.claude/skills/commitgate-<์ด๋ฆ>/` โ
|
|
220
|
-
**๊ฒฝ๋ก๊ฐ ๋ฌ๋ผ ์๋ก ๊ฑด๋๋ฆฌ์ง ์์ต๋๋ค.**
|
|
221
|
-
|
|
222
|
-
#### ์ถ์ฒ
|
|
223
|
-
|
|
224
|
-
Matt Pocock์ MIT ๊ณต๊ฐ skills๋ฅผ ๊ธฐ์ค SHA `d574778f94cf620fcc8ce741584093bc650a61d3`์์ ์ ์ํด
|
|
225
|
-
**ํจํค์ง payload๋ก ํฌํจ**ํฉ๋๋ค. **์ธ๋ถ skill installer๋ฅผ ์คํํ๊ฑฐ๋ ๋ฐํ์ ์์กดํ์ง ์์ต๋๋ค** โ
|
|
226
|
-
ํจํค์ง ์์ ๊ณ ์ ๋ ์ฌ๋ณธ์
๋๋ค. ๊ฐ SKILL.md์ MIT ๊ณ ์ง ์ ๋ฌธ์ด ๋ํํ๋ฉฐ, ์์ธํ ์ถ์ฒ๋ ํจํค์ง์
|
|
227
|
-
`skills/ATTRIBUTION.md`์ ์์ต๋๋ค.
|
|
228
|
-
|
|
229
|
-
### ์ค์นํ์ง **์๋** ๊ฒ
|
|
230
|
-
|
|
231
|
-
| ํญ๋ชฉ | ์ด๋์ ์๋ |
|
|
232
|
-
|---|---|
|
|
233
|
-
| `scripts/req/**` ์คํ ์ฝ๋ | `node_modules/commitgate` โ ํ๋ก์ ํธ์ ๋ณต์ฌํ์ง ์์ต๋๋ค |
|
|
234
|
-
| `tsx` ยท `ajv` ยท `cross-spawn` | `commitgate` ํจํค์ง์ runtime dependency โ ๋์ `package.json`์ ์ฃผ์
ํ์ง ์์ต๋๋ค |
|
|
235
|
-
|
|
236
|
-
ํ๋ก์ ํธ์ ๋จ๋ ๊ฒ์ **๊ฑฐ๋ฒ๋์คยท๊ฐ์ฌ ๋ฐ์ดํฐ**(์ค์ ยท๊ณ์ฝยท์คํค๋งยทpersonaยท`workflow/REQ-*` ์ฆ๊ฑฐ)๋ฟ์
๋๋ค. **์คํ ์ฝ๋**๋ ํจํค์ง์๋ง ์์ผ๋ฏ๋ก `npm update commitgate`๋ก ๊ฐฑ์ ๋๊ณ ๋ณต์ฌ๋ณธ์ด ๊ฐ๋ผ์ง ์ผ์ด ์์ต๋๋ค. ๋ค๋ง ํ๋ก์ ํธ์ ๊น๋ฆฐ **vendored ์์ฐ**(์คํค๋งยทpersona)์ ๋ฐํ์๊ณผ ๋ณ๊ฐ๋ผ, minor ์
๊ทธ๋ ์ด๋ ๋ [์
๊ทธ๋ ์ด๋ (0.x)](#์
๊ทธ๋ ์ด๋-0x) ์ ์ ๋ฐ๋ผ `commitgate sync`๋ฅผ ํจ๊ป ์คํํด์ผ ๋ฐํ์๊ณผ ๊ฐ๋ผ์ง์ง ์์ต๋๋ค.
|
|
237
|
-
|
|
238
|
-
`req:*` ์คํฌ๋ฆฝํธ๋ ์ค์น๋ ํจํค์ง bin์ ํธ์ถํฉ๋๋ค โ `npm run req:new -- <slug>` โ `commitgate req:new <slug>` โ `node_modules/.bin/commitgate`.
|
|
239
|
-
|
|
240
|
-
์ง์
์ ํ์ผ๋ค์ **์์ ํฌ์ธํฐ**์
๋๋ค. ๊ณ์ฝ ๋ณธ๋ฌธ์ `AGENTS.md` ํ๋์๋ง ์์ต๋๋ค.
|
|
241
|
-
|
|
242
|
-
`.claude/`ยท`.cursor/`๋ฅผ ๋ค๋ฅธ ๋๊ตฌ๊ฐ ์ฐ๊ณ ์๋ค๋ฉด ๊ฑด๋๋ธ ์ ์์ต๋๋ค.
|
|
243
|
-
|
|
244
|
-
```sh
|
|
245
|
-
npx commitgate --no-agent-entrypoints
|
|
246
|
-
```
|
|
247
|
-
|
|
248
|
-
๊ธฐ์กด `AGENTS.md`๊ฐ ์๋๋ฐ CommitGate ๊ณ์ฝ ๋ง์ปค(`<!-- commitgate:contract -->`)๊ฐ ์์ผ๋ฉด, ๊ณ์ฝ ํ
ํ๋ฆฟ์ `AGENTS.commitgate.md`๋ก ํจ๊ป ๋๊ณ ๋ณํฉ์ ์๋ดํฉ๋๋ค. ๊ธฐ์กด ํ์ผ์ ๊ฑด๋๋ฆฌ์ง ์์ต๋๋ค.
|
|
249
|
-
|
|
250
|
-
๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ง ํ๋ ค๋ฉด:
|
|
251
|
-
|
|
252
|
-
```sh
|
|
253
|
-
npx commitgate --dry-run
|
|
254
|
-
```
|
|
255
|
-
|
|
256
|
-
์ ํฉ์ฑ ๊ฒฝ๊ณ ๋ฅผ ์ค์น ์คํจ๋ก ์ทจ๊ธํ๋ ค๋ฉด:
|
|
257
|
-
|
|
258
|
-
```sh
|
|
259
|
-
npx commitgate --strict
|
|
260
|
-
```
|
|
261
|
-
|
|
262
|
-
**ํ์ผ์ ํ๋๋ ์ฐ๊ธฐ ์ ์** ์ค๋จํฉ๋๋ค. ๋์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
|
|
263
|
-
|
|
264
|
-
- ๊ณ์ฝ ํฌ์ธํฐ(`.claude/`ยท`.cursor/`ยท`AGENTS.md`ยท`CLAUDE.md`)๊ฐ `.gitignore`์ ๊ฑธ๋ ค ํยทCI์ ๊ณต์ ๋์ง ์์ ๋
|
|
265
|
-
- `workflow/.gitignore` ์ ์ฑ
ํ์ผ์ด ๋ฌด์๋ผ fresh cloneยทCI์ scratch ๊ท์น์ด ์ ๋ฌ๋์ง ์์ ๋
|
|
266
|
-
- ์ค์น ์ ์ํนํธ๋ฆฌ์ staged ๋ณ๊ฒฝ์ด ์๊ฑฐ๋ ์ค์น ์ฐ์ถ๋ฌผ๊ณผ ๊ฒน์น๋ ์์ ์ด ์์ด, ์ค์น๋ถ๋ง ๋ด์ ์ปค๋ฐ์ ๋ง๋ค ์ ์์ ๋
|
|
267
|
-
- ๊ธฐ์กด `cross-spawn`์ด ๊ฒ์ฆ ํํ๋ณด๋ค ๋ฎ์ ๋(ํ๋ก์ ํธ๊ฐ ๊ทธ ํจํค์ง๋ฅผ ์ด๋ฏธ ์ฐ๋ ๊ฒฝ์ฐ)
|
|
268
|
-
|
|
269
|
-
> `--strict`๋ **์ ํ `npm install -D commitgate`๊ฐ ๋จ๊ธด `package.json`ยทlockfile ๋ณ๊ฒฝ๋** preexisting-dirty๋ก ๋ด
๋๋ค. ๊ถ์ฅ ์์: `npm i -D commitgate` โ **์ปค๋ฐ** โ `npx commitgate init --strict` โ ์ค์น๋ถ ์ปค๋ฐ.
|
|
270
|
-
|
|
271
|
-
> `workflow/machine.schema.json`๊ณผ `workflow/req.config.schema.json`์ `req.config.json`์ `ticketRoot` ์ค์ ๊ณผ ๋ฌด๊ดํ๊ฒ **ํญ์ `workflow/` ์๋**์ ๋ณต์ฌ๋ฉ๋๋ค.
|
|
272
|
-
|
|
273
|
-
---
|
|
274
|
-
|
|
275
|
-
## ์
๊ทธ๋ ์ด๋ (0.x)
|
|
276
|
-
|
|
277
|
-
๋ฐํ์์ ์ ๋ฒ์ ์ผ๋ก ์ฌ๋ฆด ๋ **๋ ๊ฐ์ง**๋ฅผ ์ฑ๊ฒจ์ผ ํฉ๋๋ค. `npm update`๋ง์ผ๋ก๋ ๋ถ์กฑํฉ๋๋ค.
|
|
278
|
-
|
|
279
|
-
**โ ์บ๋ฟ ๋ฒ์๊ฐ 0.x minor๋ฅผ ๋ง์ต๋๋ค.** `npm install -D commitgate`๋ `^0.y.z` ๋ฒ์๋ฅผ ์๋๋ค. npm semver์์
|
|
280
|
-
`^0.7.0`์ `>=0.7.0 <0.8.0`์ ๋ปํ๋ฏ๋ก `npm update`/`pnpm update`๋ **0.x minor๋ฅผ ๋์ง ์์ต๋๋ค**(0.7.x ์์ ๋จธ๋ญ
๋๋ค).
|
|
281
|
-
minor๋ฅผ ๋์ผ๋ ค๋ฉด ๋ฒ์๋ฅผ ๋ช
์์ ์ผ๋ก ์ฌ๋ ค์ผ ํฉ๋๋ค:
|
|
282
|
-
|
|
283
|
-
```sh
|
|
284
|
-
npm install -D commitgate@latest # ๋๋ ํน์ ๋ฒ์ : commitgate@^0.8.0
|
|
285
|
-
```
|
|
286
|
-
|
|
287
|
-
**โก vendored ์์ฐ์ ๋ฐํ์๊ณผ ๋ณ๊ฐ๋ก ๊ฐฑ์ ๋ฉ๋๋ค.** ๋ฐํ์(`node_modules/commitgate`)์ ์ ๋ช
๋ น์ด ๊ฐฑ์ ํ์ง๋ง,
|
|
288
|
-
ํ๋ก์ ํธ `workflow/`์ ๊น๋ฆฐ ๊ณ์ฝ ์์ฐ(`machine.schema.json`ยท`req.config.schema.json`)์ **๊ทธ๋๋ก ๋จ์ต๋๋ค**.
|
|
289
|
-
๋ฐํ์๋ง ์ฌ๋ฆฌ๊ณ ์์ฐ์ ๋๋ฉด, ์ ๋ฐํ์์ด **์ ๊ณ์ฝ์ ์ฝ์ด** ์ ๊ธฐ๋ฅ(์: design delta ๋ฆฌ๋ทฐ์ full-review
|
|
290
|
-
์์ค์ปฌ๋ ์ด์
)์ด ์กฐ์ฉํ ๋นํ์ฑํ๋ ์ ์์ต๋๋ค. `commitgate sync`๊ฐ ์ด ์์ฐ์ ์ค์น๋ ํจํค์ง ์ฌ๋ณธ์ผ๋ก ๋๋๋ฆฝ๋๋ค:
|
|
291
|
-
|
|
292
|
-
```sh
|
|
293
|
-
npx commitgate sync # ๊ณํ๋ง ์ถ๋ ฅ(dry-run โ ๋ฌด์์ด ๋ฐ๋์ง ํ์ธ)
|
|
294
|
-
npx commitgate sync --apply # ์คํค๋ง ์ถ ์ฌ๋๊ธฐํ
|
|
295
|
-
npx commitgate sync --apply --persona # ํ๋ฅด์๋๋ ํจ๊ป(๋ถ์ฌ๋ฉด ๋ณต์, ์ง์ ์์ ๋ณธ์ ๋ณด์กด)
|
|
296
|
-
```
|
|
297
|
-
|
|
298
|
-
- `sync`๋ **์คํค๋ง ์ถ๋ง** ๋๋๋ฆฝ๋๋ค(๊ณ์ฝ์ด๋ผ ํญ์ ์ต์ ์ผ๋ก). companion skillsยท`workflow/.gitignore`ยท
|
|
299
|
-
`package.json`ยท`req:*`๋ ๊ฑด๋๋ฆฌ์ง ์์ต๋๋ค.
|
|
300
|
-
- **ํ๋ฅด์๋(`review-persona.md`)๋ `--persona`์์๋ง**, ๊ทธ๊ฒ๋ **๋ถ์ฌ ๋ณต์**๋ง ํฉ๋๋ค. ์ง์ ์์ ํ ํ๋ฅด์๋๋
|
|
301
|
-
๋ฎ์ง ์์ต๋๋ค(๋ค๋ฅด๋ฉด ๋ณด์กดํ๊ณ ์๋ฆผ๋ง) โ ์ปค์คํฐ๋ง์ด์ฆํ๋ ค๋ฉด `req.config.json`์ `reviewPersonaPath`๋ฅผ ๋ณ๋ ํ์ผ๋ก ์ง์ ํ์ธ์.
|
|
302
|
-
- `req:doctor`์ **D20**์ด vendored ์คํค๋ง๊ฐ ์ค์น ์ฌ๋ณธ๊ณผ ์ด๊ธ๋๋ฉด **WARN**์ผ๋ก ์๋ ค ์ค๋๋ค(์ปค๋ฐ์ ๋ง์ง ์์ต๋๋ค).
|
|
303
|
-
|
|
304
|
-
**โข ์์ (vendored) ์ค์น๋ณธ์ด๋ฉด** ์ด์ด์ ์๋ `migrate`๋ก Stage B ์ ํ๊น์ง ํ์ธ์.
|
|
305
|
-
|
|
306
|
-
**โฃ Quick Start ๋ธ๋ก๋ ๊ธฐ์กด ํ์ผ์ ์๋์ผ๋ก ์ ๋ฟ์ต๋๋ค(0.9.2+).** ์ ๊ท ์ค์น๋ `CLAUDE.md`/`AGENTS.md` ์์
|
|
307
|
-
์จ๋ณด๋ฉ Quick Start๋ฅผ ๋ฃ์ง๋ง, init์ seed-once๋ผ **์ด๋ฏธ ์๋ ํ์ผ**์ ๋ฐ์๋์ง ์์ต๋๋ค. ์
๊ทธ๋ ์ด๋ ํ ๊ธฐ์กด
|
|
308
|
-
ํ์ผ์ ๋ฃ์ผ๋ ค๋ฉด `commitgate quickstart`๋ก ๋ฐฑํํ์ธ์:
|
|
309
|
-
|
|
310
|
-
```sh
|
|
311
|
-
npx commitgate quickstart # ๊ณํ๋ง ์ถ๋ ฅ(dry-run โ ๋ฌด์์ด ๋ฐ๋์ง ํ์ธ)
|
|
312
|
-
npx commitgate quickstart --apply # ๊ด๋ฆฌ ๋ธ๋ก๋ง ์ฃผ์
(๋ธ๋ก ๋ฐ ๋ด์ฉ ๋ณด์กดยท๋ฉฑ๋ฑ)
|
|
313
|
-
```
|
|
314
|
-
|
|
315
|
-
- `AGENTS.md`๋ CommitGate ๊ณ์ฝ ๋ง์ปค๊ฐ ์์ ๋๋ง ๋์์
๋๋ค. ๋ถ์ฌ ํ์ผ์ ๊ฑด๋๋ฆฌ์ง ์์ต๋๋ค.
|
|
316
|
-
- `req:doctor`์ **D21**์ด ๊ธฐ์กด ํ์ผ์ Quick Start ๋ธ๋ก์ด ์์ผ๋ฉด **WARN**์ผ๋ก ์๋ ค ์ค๋๋ค(์ปค๋ฐ์ ๋ง์ง ์์ต๋๋ค).
|
|
317
|
-
|
|
318
|
-
> ์ ๋ฆฌ: `commitgate@latest` ์ค์น โ `commitgate sync --apply` โ `commitgate quickstart --apply` โ (ํ์ ์) `commitgate migrate`.
|
|
319
|
-
|
|
320
|
-
---
|
|
321
|
-
|
|
322
|
-
## ์์ ์ค์น๋ณธ์์ ์ฎ๊ฒจ์ค๊ธฐ (`migrate`)
|
|
323
|
-
|
|
324
|
-
`scripts/req/`๊ฐ ํ๋ก์ ํธ์ ๋ณต์ฌ๋ผ ์๊ณ `req:*`๊ฐ `tsx scripts/req/*.ts`๋ฅผ ๊ฐ๋ฆฌํจ๋ค๋ฉด **์์ (vendored) ์ค์น๋ณธ**์
๋๋ค. `init`์ ์ด ์ํ๋ฅผ ๊ฐ์งํ๋ฉด ์กฐ์ฉํ ์์ด์ง ์๋๋ก **์ค๋จํ๊ณ ** ์ด ๋ช
๋ น์ ์๋ดํฉ๋๋ค.
|
|
325
|
-
|
|
326
|
-
```sh
|
|
327
|
-
npm install -D commitgate # ์์ง devDependency๊ฐ ์๋๋ผ๋ฉด ๋จผ์
|
|
328
|
-
npx commitgate migrate # ๊ณํ๋ง ์ถ๋ ฅ โ ์๋ฌด๊ฒ๋ ์ฐ์ง ์์ต๋๋ค
|
|
329
|
-
npx commitgate migrate --apply # package.json ์ req:* ๋ง ์ ํ
|
|
330
|
-
```
|
|
331
|
-
|
|
332
|
-
`migrate`๊ฐ ํ๋ ์ผ์ **ํ๋**์
๋๋ค: `req:*` ์ค **ํ์ฌ ๊ฐ์ด ์ ํํ ์์ ์ฃผ์
๊ฐ์ธ ํค๋ง** `commitgate <verb>`๋ก ๋ฐ๊ฟ๋๋ค.
|
|
333
|
-
|
|
334
|
-
- **์๋ฌด๊ฒ๋ ์ญ์ ํ์ง ์์ต๋๋ค.** `scripts/req/`ยท์คํค๋งยทpersonaยท์ค์ ยท์ง์
์ ยท`workflow/REQ-*` ์ฆ๊ฑฐ๋ฅผ ์ ๋ถ ๊ทธ๋๋ก ๋ก๋๋ค. ๋จ์ `scripts/req/`๋ ๋ ์ด์ ์คํ๋์ง ์์ผ๋, ์ ๋ฆฌํ๋ ค๋ฉด `npx commitgate uninstall` ๊ณํ์ ๋จผ์ ํ์ธํ์ธ์.
|
|
335
|
-
- **์ง์ ๊ณ ์น ์คํฌ๋ฆฝํธ๋ ๋ฎ์ด์ฐ์ง ์์ต๋๋ค.** ๊ฐ์ด ํ ๊ธ์๋ผ๋ ๋ค๋ฅด๋ฉด ์ฌ์ฉ์ ๊ฐ์ผ๋ก ๋ณด๊ณ ๋ณด์กดํ ๋ค ์๋ ์กฐ์น๋ฅผ ์๋ดํฉ๋๋ค.
|
|
336
|
-
- **์ปค๋ฐํ์ง ์์ต๋๋ค.** `package.json` ํ ํ์ผ๋ง ์ฐ๊ณ , ๊ฒํ ๋ ์ฌ์ฉ์ ๋ชซ์
๋๋ค.
|
|
337
|
-
|
|
338
|
-
`req:doctor`๋ ์ค์น ๋ชจ๋(์์ /ํ์ฌ/ํผํฉ)๋ฅผ ์ง๋จํด ์๋ ค ์ค๋๋ค.
|
|
339
|
-
|
|
340
|
-
---
|
|
341
|
-
|
|
342
|
-
## ์ง์ ๋ฒ์
|
|
343
|
-
|
|
344
|
-
| ํ๊ฒฝ | ์ํ |
|
|
345
|
-
|---|---|
|
|
346
|
-
| **npm** | ์์ ์ง์ โ ๋งค ๋ฆด๋ฆฌ์ค packed tarball smoke๋ก ๊ฒ์ฆํฉ๋๋ค |
|
|
347
|
-
| **pnpm ยท yarn** (`node_modules` linker) | ์ง์ โ `node_modules/.bin/commitgate`๋ก ํด์๋๋ ํ์ค ๊ฒฝ๋ก๋ฅผ ์๋๋ค |
|
|
348
|
-
| **Yarn PnP** | **์ด๋ฒ ๋ฆด๋ฆฌ์ค ๋ฏธ์ง์**(๊ฒ์ฆํ์ง ์์์ต๋๋ค). `nodeLinker: node-modules`๋ฅผ ์ฐ์ธ์ |
|
|
349
|
-
| **workspace/monorepo** | **์ํฌ์คํ์ด์ค root ์ค์น**๋ฅผ ์ง์ํฉ๋๋ค(root์ `req.config.json`ยท`workflow/`). ํ์ ํจํค์ง์ ๋
๋ฆฝ ์ค์นํ๋ ๋ฐฐ์น๋ ๋ฏธ์ง์ |
|
|
350
|
-
|
|
351
|
-
**์ฌํ์ฑ**: `req.config.json`์ ๋ฆฌ๋ทฐ ๋ชจ๋ธยท์ถ๋ก ๊ฐ๋ ํ๊ณผ ์คํค๋งยทpersona๊ฐ ํ๋ก์ ํธ์ ๋จ์ ๊ณผ๊ฑฐ ๋ฆฌ๋ทฐ ์
๋ ฅ์ด git ์ด๋ ฅ์ผ๋ก ์ฌํ๋ฉ๋๋ค. ๋ฐํ์ ๋ฒ์ ์ **lockfile์ด ๊ณ ์ **ํ๋ฏ๋ก `package-lock.json`(pnpm/yarn์ ๊ฐ lockfile)์ **์ปค๋ฐํ์ธ์**.
|
|
352
|
-
|
|
353
|
-
### Companion Skills ๋ฐ๊ฒฌ ๋ฒ์
|
|
354
|
-
|
|
355
|
-
**์ค์น๋ ๋ชจ๋ ํ๊ฒฝ์์ ๋์ผํฉ๋๋ค.** ์๋๋ harness๊ฐ ๊ทธ ํ์ผ์ **๋ฐ๊ฒฌํ๋์ง**์ ๋ํ ๊ฒ์
๋๋ค.
|
|
356
|
-
|
|
357
|
-
| harness | ๋ฐ๊ฒฌ |
|
|
358
|
-
|---|---|
|
|
359
|
-
| **Claude Code** | `.claude/skills/<์ด๋ฆ>/SKILL.md`๋ฅผ native๋ก ์ฝ์ต๋๋ค |
|
|
360
|
-
| **Cursor (editor)** | `.claude/skills`๋ฅผ ํธํ ๊ฒฝ๋ก๋ก ์ฝ์ต๋๋ค |
|
|
361
|
-
| **Cursor (CLI)** | โ ๏ธ **๋ฒ์ ยท์คํ ๋ชจ๋๋ณ ๋์ ์ฐจ์ด ๊ฐ๋ฅ โ ๋ณด์ฅํ์ง ์์ต๋๋ค** |
|
|
362
|
-
| **Codex** | **์ ํ ๋ฒ์ ๋ฐ** โ companion entrypoint๋ฅผ ์ค์นํ์ง ์์ต๋๋ค. CommitGate์์ Codex๋ **Reviewer**์ด๊ณ ์ด 4์ข
์ **Builder ๋ณด์กฐ**์
๋๋ค |
|
|
363
|
-
|
|
364
|
-
โ ๏ธ **๊ทผ๊ฑฐ๋ ๋ฒค๋ 1์ฐจ ๋ฌธ์์
๋๋ค โ CommitGate ํ์ด ์ค์ธกํ ๊ฒ์ด ์๋๋๋ค.** ํ์ธ ์์ **2026-07-17**, ํ์ธ ํ๊ฒฝ win32 x64 / Node v20.19.5.
|
|
365
|
-
๋ฒค๋๊ฐ ๋์์ ๋ฐ๊พธ๋ฉด ์ด ํ๋ ๋ก์ ์ ์์ต๋๋ค.
|
|
366
|
-
|
|
367
|
-
โ ๏ธ **Cursor CLI๋ฅผ "์ง์"ยท"๋ฏธ์ง์" ์ด๋ ์ชฝ์ผ๋ก๋ ๋จ์ ํ์ง ์์ต๋๋ค.** Cursor๋ editorยทCLI ์์ชฝ์ Agent Skills ์ง์์
|
|
368
|
-
๋ฐํํ์ง๋ง, `.claude/skills` ํธํ ๊ฒฝ๋ก์ CLI ๋ฐ๊ฒฌ์ ๋ฒ์ ยท๋ชจ๋์ ๋ฐ๋ผ ์ฐจ์ด๊ฐ ๋ณด๊ณ ๋ผ ์๊ณ ์ฐ๋ฆฌ๋ ๊ฒ์ฆํ์ง ๋ชปํ์ต๋๋ค.
|
|
369
|
-
๋ฐ๊ฒฌ๋์ง ์์๋ **ํต์ฌ ์ํฌํ๋ก์๋ ์ํฅ์ด ์์ต๋๋ค** โ ์คํฌ์ ํ์ง ๋ณด์กฐ ๋ ์ด์ด์ด๊ณ ๊ณ์ฝ ์ ๋ณธ์ `AGENTS.md`์
๋๋ค.
|
|
370
|
-
|
|
371
|
-
์ฐํ๋ฅผ ์ํด `.cursor/skills`์ **์ด์ค ์ค์นํ์ง ์์ต๋๋ค** โ ๊ทธ ๊ฒฝ๋ก๋ CLI์์ ๋์์ด ๋ถํ์คํ๊ณ , ๊ฐ์ ๋ด์ฉ์ด ๋ ๊ณณ์
|
|
372
|
-
๊น๋ฆฌ๋ฉด drift ์ํ์ด ์๊น๋๋ค. ๋ฒค๋๊ฐ ๊ณ ์น๋ฉด **์ฐ๋ฆฌ ๋ณ๊ฒฝ ์์ด** ๋์ํฉ๋๋ค(๊ฐ์ ๊ฒฝ๋ก๋ฅผ ์ฝ์ผ๋ฏ๋ก).
|
|
373
|
-
|
|
374
|
-
---
|
|
375
|
-
|
|
376
|
-
## ์ ๊ฑฐํ๋ ค๋ฉด
|
|
377
|
-
|
|
378
|
-
CommitGate๋ ๋ ๊ณณ์ ์์ต๋๋ค. **๋ฐํ์**(`node_modules/commitgate`)๊ณผ **ํ๋ก์ ํธ์ ๊น๋ฆฐ ๊ฑฐ๋ฒ๋์ค ํ์ผ**์
๋๋ค.
|
|
379
|
-
|
|
380
|
-
๋ฐํ์์ package manager๊ฐ ์ง์๋๋ค:
|
|
381
|
-
|
|
382
|
-
```sh
|
|
383
|
-
npm uninstall -D commitgate # pnpm remove -D commitgate ยท yarn remove commitgate
|
|
384
|
-
```
|
|
385
|
-
|
|
386
|
-
ํ๋ก์ ํธ ํ์ผ์ ์๋ ๊ณํ์ ๋ณด๊ณ ์ง์ ์ ๋ฆฌํ์ธ์. ๋จผ์ ์์๋ ๊ฒ: **`npx commitgate`๋ ์ ์ญ ์ค์น๊ฐ ์๋๋๋ค.** npx๋ ํจํค์ง๋ฅผ npm ์บ์(`_npx/<hash>/`)์ ๋ฐ์ ํ ๋ฒ ์คํํ ๋ฟ์ด๊ณ , ์ ์ญ `node_modules`์๋ PATH์๋ ์๋ฌด๊ฒ๋ ๋จ๊ธฐ์ง ์์ต๋๋ค.
|
|
387
|
-
|
|
388
|
-
์ ๊ฑฐ ๊ณํ์ ๋จผ์ ํ์ธํ์ธ์. ์ด ๋ช
๋ น์ **์๋ฌด๊ฒ๋ ์ง์ฐ์ง ์๊ณ ** ๊ณํ๋ง ์ถ๋ ฅํฉ๋๋ค:
|
|
389
|
-
|
|
390
|
-
```sh
|
|
391
|
-
npx commitgate uninstall
|
|
392
|
-
```
|
|
393
|
-
|
|
394
|
-
repo๋ฅผ ์ฝ์ด (1) CommitGate๊ฐ ์ค์นํ ํ์ผ ์ค ํจํค์ง ์๋ณธ๊ณผ ๋ฐ์ดํธ๊ฐ ๋์ผํ ๊ฒ, (2) ํธ์ง๋ผ์ ์ง์ ํ์ธ์ด ํ์ํ ๊ฒ, (3) ์๋ ์ ๊ฑฐํ๋ฉด ์ ๋๋ ๊ฒ, (4) ๊ฐ์ฌ ์ฆ๊ฑฐ๋ฅผ ๋ถ๋ฅํด ๋ณด์ฌ์ฃผ๊ณ , ์ปค๋ฐ ์ฌ๋ถ์ ๋ง๋ ๋๋๋ฆฌ๊ธฐ ๋ช
๋ น์ ์ถ๋ ฅํฉ๋๋ค. ์ญ์ ๋ ์ฌ์ฉ์๊ฐ ๊ฒํ ํ ๋ค ์ง์ ์คํํฉ๋๋ค.
|
|
395
|
-
|
|
396
|
-
### ์ ์๋์ผ๋ก ์ง์์ฃผ์ง ์๋์?
|
|
397
|
-
|
|
398
|
-
`init`์ **๋ฌด์์ ์๋ก ๋ง๋ค์๋์ง ๋์คํฌ์ ๊ธฐ๋กํ์ง ์์ต๋๋ค.** ๊ทธ๋์ ์ ๊ฑฐ ์์ ์๋ ์๋๋ฅผ ๊ตฌ๋ถํ ์ ์์ต๋๋ค.
|
|
399
|
-
|
|
400
|
-
- `AGENTS.md`๋ **์์ ๋๋ง** ์์ฑ๋ฉ๋๋ค. ์ด๋ฏธ ์์๋ค๋ฉด ๊ทธ๋๋ก ๋๋ฏ๋ก, init์ด ๋ง๋ ํ์ผ๊ณผ ์ฌ์ฉ์๊ฐ ์ด ํ์ผ์ด ๋์คํฌ์ ๊ฐ์ ๋ณด์
๋๋ค.
|
|
401
|
-
- `req.config.json`์ ์ด๋ฏธ ์์ผ๋ฉด **๋๋ฝ๋ ํค๋ง ๋ณํฉ**ํฉ๋๋ค. ์๋ณธ์ ๋ณด๊ดํ์ง ์์ ๋ณํฉ์ ๋๋๋ฆด ์ ์์ต๋๋ค.
|
|
402
|
-
- `package.json`์ **์๋ ํค๋ง** ์ฃผ์
ํฉ๋๋ค. ์๋ ์๋ `req:doctor`๋ `cross-spawn`์ CommitGate ์์ ๊ฐ ์๋๋๋ค. `ajv`ยท`cross-spawn`ยท`tsx`๋ ๋ค๋ฅธ ํจํค์ง๋ ํํ ์ฐ๋ devDependency์
๋๋ค.
|
|
403
|
-
- `ticketRoot`(๊ธฐ๋ณธ `workflow/`)์๋ REQ ํฐ์ผ์ `state.json`๊ณผ `approvals.jsonl` โ ์ด ๋๊ตฌ์ **๊ฐ์ฌ ์ฆ๊ฑฐ** โ ๊ฐ ์์
๋๋ค.
|
|
404
|
-
|
|
405
|
-
์์ฅ์ด ์๋ ์ํ์์ ์ผ๊ด ์ญ์ ํ๋ฉด ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ํ๊ดดํฉ๋๋ค. CommitGate๋ git hook์ ์ค์นํ์ง ์๊ณ git config๋ ๊ฑด๋๋ฆฌ์ง ์๋ ์์ in-tree ์ค์บํด๋์ด๋ฏ๋ก, ๋๋๋ฆฌ๊ธฐ์ ์ ๋ณธ์ git์
๋๋ค.
|
|
406
|
-
|
|
407
|
-
### ์์ง ์ปค๋ฐํ์ง ์์๋ค๋ฉด
|
|
408
|
-
|
|
409
|
-
```sh
|
|
410
|
-
git status --porcelain -uall # ๋ฌด์์ด ์ถ๊ฐ๋๋์ง ํ์ธ
|
|
411
|
-
git diff -- package.json # ์ฃผ์
๋ req:* ์คํฌ๋ฆฝํธ์ devDependencies ํ์ธ
|
|
412
|
-
```
|
|
413
|
-
|
|
414
|
-
ํ์ธํ ๋ค ์ง์ ๋๋๋ฆฝ๋๋ค. `package.json`์ ๋ฐ๋์ `HEAD` ๊ธฐ์ค์ผ๋ก ๋ณต์ํ์ธ์.
|
|
415
|
-
|
|
416
|
-
```sh
|
|
417
|
-
git checkout HEAD -- package.json
|
|
418
|
-
```
|
|
419
|
-
|
|
420
|
-
> โ ๏ธ `HEAD`๋ฅผ ๋นผ๋ฉด **์ธ๋ฑ์ค**์์ ๋ณต์๋์ด, `git add` ์ดํ์๋ ์ฃผ์
๋ `req:*` ์คํฌ๋ฆฝํธ๊ฐ ๊ทธ๋๋ก ๋จ์ต๋๋ค.
|
|
421
|
-
> โ ๏ธ ์ด ๋ช
๋ น์ `package.json`์ **๋ค๋ฅธ ๋ฏธ์ปค๋ฐ ํธ์ง๋ ํจ๊ป ๋ฒ๋ฆฝ๋๋ค.** ๋จผ์ ์ diff๋ฅผ ํ์ธํ์ธ์.
|
|
422
|
-
|
|
423
|
-
ํ์ผ ์ญ์ ๋ `npx commitgate uninstall`์ด ๋์ดํด ์ค ๊ฒฝ๋ก๋ง ์ง์ฐ์ธ์. `scripts/req/`๋ `workflow/`๋ฅผ ๋๋ ํฐ๋ฆฌ์งธ ์ง์ฐ๋ฉด ๊ทธ ์์ ์ฌ์ฉ์ ํ์ผ์ด๋ ํฐ์ผ ์ฆ๊ฑฐ๊ฐ ํจ๊ป ์ฌ๋ผ์ง๋๋ค.
|
|
424
|
-
|
|
425
|
-
> git์ ๋น ๋๋ ํฐ๋ฆฌ๋ฅผ ์ถ์ ํ์ง ์์ต๋๋ค. ํ์ผ์ ๋ค ์ง์ด ๋ค `git status`๊ฐ clean์ด์ด๋ ๋น `scripts/`ยท`workflow/`ยท`.claude/`ยท`.cursor/`๊ฐ ํ์ผ์์คํ
์ ๋จ์ ์ ์์ต๋๋ค.
|
|
426
|
-
|
|
427
|
-
### ์ด๋ฏธ ์ปค๋ฐํ๋ค๋ฉด
|
|
428
|
-
|
|
429
|
-
์ค์บํด๋ฉ์ ์ถ๊ฐํ ์ปค๋ฐ์ ๋๋๋ฆฝ๋๋ค.
|
|
430
|
-
|
|
431
|
-
```sh
|
|
432
|
-
git log --diff-filter=A --format='%H %s' -- scripts/req/req-new.ts
|
|
433
|
-
git revert <sha>
|
|
434
|
-
```
|
|
435
|
-
|
|
436
|
-
`npx commitgate uninstall`์ด ๋์
์ปค๋ฐ ํ๋ณด๋ฅผ ์ฐพ์ ์ค๋๋ค. ๊ทธ ์ปค๋ฐ์ ๋ค๋ฅธ ๋ณ๊ฒฝ์ด ์์ฌ ์์ผ๋ฉด revert๊ฐ ๋ฌด๊ดํ ์์
๊น์ง ๋๋๋ฆฌ๋ฏ๋ก, ๋จผ์ `git show <sha>`๋ก ํ์ธํ์ธ์. ๋์
์ปค๋ฐ์ด ์ฌ๋ฌ ๊ฐ๋ก ํฉ์ด์ ธ ์์ผ๋ฉด ๋จ์ผ revert๋ก๋ ๋๋๋ฆด ์ ์์ต๋๋ค.
|
|
437
|
-
|
|
438
|
-
### npx ์บ์ ์ ๋ฆฌ (repo์ ๋ฌด๊ด)
|
|
439
|
-
|
|
440
|
-
์ ์ญ ์ค์น ์ฌ๋ถ๋ถํฐ ํ์ธํฉ๋๋ค.
|
|
441
|
-
|
|
442
|
-
```sh
|
|
443
|
-
npm ls -g commitgate # ๋น์ด ์์ผ๋ฉด ์ ์ญ ์ค์น๊ฐ ์๋
|
|
444
|
-
npm uninstall -g commitgate # ์ ์ญ์ผ๋ก ์ค์นํ๋ ๊ฒฝ์ฐ์๋ง
|
|
445
|
-
```
|
|
446
|
-
|
|
447
|
-
npx๊ฐ ๋ฐ์ ๋ ํจํค์ง๋ npm ์บ์์ `_npx/` ์๋์ ๋จ์ต๋๋ค.
|
|
448
|
-
|
|
449
|
-
```powershell
|
|
450
|
-
# Windows (PowerShell)
|
|
451
|
-
Remove-Item -Recurse -Force "$(npm config get cache)\_npx"
|
|
452
|
-
```
|
|
453
|
-
|
|
454
|
-
```sh
|
|
455
|
-
# macOS / Linux
|
|
456
|
-
rm -rf "$(npm config get cache)/_npx"
|
|
457
|
-
```
|
|
458
|
-
|
|
459
|
-
> โ ๏ธ **`npm cache clean --force`๋ CommitGate ์ ๊ฑฐ ๋ช
๋ น์ด ์๋๋๋ค.** ์ด ๋ช
๋ น์ `_cacache`๋ง ๋น์ฐ๊ณ `_npx`๋ ๊ทธ๋๋ก ๋ก๋๋ค. repo์ ์ค์บํด๋ฉ๊ณผ๋ ์๋ฌด ๊ด๋ จ์ด ์์ต๋๋ค.
|
|
460
|
-
|
|
461
|
-
---
|
|
462
|
-
|
|
463
|
-
## ์ค๋น๋ฌผ
|
|
464
|
-
|
|
465
|
-
| ํ์ | ํ์ธ ๋ช
๋ น | ๋น๊ณ |
|
|
466
|
-
|---|---|---|
|
|
467
|
-
| Git | `git --version` | ํ์ |
|
|
468
|
-
| Node.js 18.17+ | `node --version` | ํ์ |
|
|
469
|
-
| npm, pnpm, yarn ์ค ํ๋ | `npm --version` | npm ๊ธฐ์ค์ผ๋ก ์๋ด |
|
|
470
|
-
| Codex CLI | `codex --version` | ๋ฆฌ๋ทฐ ์คํ์ ํ์ |
|
|
471
|
-
|
|
472
|
-
Codex CLI๊ฐ ์๋ค๋ฉด:
|
|
473
|
-
|
|
474
|
-
```sh
|
|
475
|
-
npm install -g @openai/codex
|
|
476
|
-
codex login
|
|
477
|
-
codex login status
|
|
478
|
-
```
|
|
479
|
-
|
|
480
|
-
Windows์์ ์ค์น ์งํ `codex` ๋ช
๋ น์ ๋ชป ์ฐพ์ผ๋ฉด ์ ํฐ๋ฏธ๋์ ์ด์ด PATH๋ฅผ ๋ค์ ์ฝ๊ฒ ํ์ธ์.
|
|
481
|
-
|
|
482
|
-
---
|
|
483
|
-
|
|
484
|
-
## ์๋ ๋ช
๋ น
|
|
485
|
-
|
|
486
|
-
๋๋ถ๋ถ์ ์ฌ์ฉ์๋ `req:next`๊ฐ ์ํค๋ ๋๋ก๋ง ํ๋ฉด ๋ฉ๋๋ค. ์๋๋ ๋ด๋ถ์์ ์ด๋ค ๋ช
๋ น์ด ์คํ๋๋์ง ์ดํดํ๊ฑฐ๋ ์ง์ ๋๋ฒ๊น
ํ ๋๋ง ๋ณด๋ฉด ๋ฉ๋๋ค.
|
|
487
|
-
|
|
488
|
-
```sh
|
|
489
|
-
# 1. ํฐ์ผ๊ณผ ๋ธ๋์น ์์ฑ
|
|
490
|
-
npm run req:new -- my-feature --run
|
|
491
|
-
|
|
492
|
-
# 2. ์ค๊ณ ๋ฌธ์ ์์ฑ ํ stage
|
|
493
|
-
git add workflow/REQ-2026-001/00-requirement.md workflow/REQ-2026-001/01-design.md workflow/REQ-2026-001/02-plan.md
|
|
494
|
-
|
|
495
|
-
# 3. ์ค๊ณ ๋ฆฌ๋ทฐ
|
|
496
|
-
npm run req:review-codex -- 2026-001 --kind design --run
|
|
497
|
-
|
|
498
|
-
# 4. ์ฝ๋ ๊ตฌํ ํ stage
|
|
499
|
-
git add <changed-source-files>
|
|
500
|
-
|
|
501
|
-
# 5. ๊ฒ์ดํธ ์ ๊ฒ
|
|
502
|
-
npm run req:doctor -- 2026-001
|
|
503
|
-
|
|
504
|
-
# 6. ๊ตฌํ ๋ฆฌ๋ทฐ
|
|
505
|
-
npm run req:review-codex -- 2026-001 --kind phase --run
|
|
506
|
-
|
|
507
|
-
# 7. ์น์ธ๋ ์ฝ๋ ์ปค๋ฐ
|
|
508
|
-
npm run req:commit -- 2026-001 --run -m "feat: my feature"
|
|
509
|
-
```
|
|
510
|
-
|
|
511
|
-
์ค์: source ์ปค๋ฐ์๋ ๋ด๊ฐ ๋ง๋ ์ฝ๋์ ๋ฌธ์๋ง stageํ์ธ์. `state.json`๊ณผ `responses/`๋ ๋๊ตฌ๊ฐ ๊ด๋ฆฌํฉ๋๋ค.
|
|
512
|
-
|
|
513
|
-
์ฌ๋ฌ ์ค ์ปค๋ฐ ๋ฉ์์ง๋ `-m` ๋์ ํ์ผ์ ์ฌ์ฉํ์ธ์.
|
|
514
|
-
|
|
515
|
-
```sh
|
|
516
|
-
npm run req:commit -- 2026-001 --run --message-file commit-message.txt
|
|
517
|
-
```
|
|
518
|
-
|
|
519
|
-
---
|
|
520
|
-
|
|
521
|
-
## ๋ช
๋ น์ด ์์ฝ
|
|
522
|
-
|
|
523
|
-
| ๋ช
๋ น | ์ฉ๋ |
|
|
524
|
-
|---|---|
|
|
525
|
-
| `npm install -D commitgate` | **๋ฐํ์ ์ค์น (์ ํ ํ์)** โ ์คํ ์ฝ๋๊ฐ `node_modules/commitgate`์ ๋ค์ด์ต๋๋ค |
|
|
526
|
-
| `npx commitgate init` | ํ๋ก์ ํธ์ ์ค์ ยท๊ณ์ฝยท์คํค๋ง์ `req:*` ์คํฌ๋ฆฝํธ ์ค์น |
|
|
527
|
-
| `npx commitgate init --dry-run` | ํ์ผ์ ์ฐ์ง ์๊ณ ์ค์น ๊ณํ ํ์ธ |
|
|
528
|
-
| `npx commitgate init --strict` | ์ ํฉ์ฑ ๊ฒฝ๊ณ ๋ฅผ ์ค์น ์คํจ๋ก ์ฒ๋ฆฌ (gitignore๋ ๊ณ์ฝ ํฌ์ธํฐ, ์ค์น ์ปค๋ฐ์ ์์ ํ๊ฒ ๋ง๋ค ์ ์๋ ์ํนํธ๋ฆฌ ๋ฑ) โ ํ์ผ์ ํ๋๋ ์ฐ๊ธฐ ์ ์ ์ค๋จ |
|
|
529
|
-
| `npx commitgate init --no-agent-entrypoints` | `.claude/`ยท`.cursor/`ยท`CLAUDE.md` ์ค์น ๊ฑด๋๋ฐ๊ธฐ |
|
|
530
|
-
| `npx commitgate sync [--apply] [--persona]` | ์
๊ทธ๋ ์ด๋ ํ vendored **์คํค๋ง ์ถ**(machineยทreq.config schema)์ ์ค์น ํจํค์ง ์ฌ๋ณธ์ผ๋ก ์ฌ๋๊ธฐํ (๊ธฐ๋ณธ: ๊ณํ๋ง). `--persona`๋ ํ๋ฅด์๋ **๋ถ์ฌ ๋ณต์๋ง**(์ฌ์ฉ์ ์์ ๋ณธ ๋ฏธํผ์). ์์ธํ๋ [์
๊ทธ๋ ์ด๋ (0.x)](#์
๊ทธ๋ ์ด๋-0x) |
|
|
531
|
-
| `npx commitgate quickstart [--apply]` | ๊ธฐ์กด `CLAUDE.md`/`AGENTS.md`์ Quick Start ๋ธ๋ก์ ๋ฉฑ๋ฑ ์ฃผ์
(๊ธฐ๋ณธ: ๊ณํ๋ง). ๊ด๋ฆฌ ๋ธ๋ก๋ง ์ฝ์
ยท๋๋จธ์ง ๋ณด์กด. `AGENTS.md`๋ ๊ณ์ฝ ๋ง์ปค ์์ ๋๋ง. seed-once๋ก ๊ธฐ์กด ํ์ผ์ ์ ๋ฟ๋ [REQ-2026-039]๋ฅผ ๋ฐฑํ |
|
|
532
|
-
| `npx commitgate migrate [--apply]` | ์์ vendored ์ค์น๋ณธ โ ๋ฐํ์ ํจํค์ง ์ ํ (๊ธฐ๋ณธ: ๊ณํ๋ง, ๋นํ๊ดด) |
|
|
533
|
-
| `npx commitgate uninstall` | ์ ๊ฑฐ ๊ณํ ํ์ธ (์ฝ๊ธฐ ์ ์ฉ โ ์๋ฌด๊ฒ๋ ์ง์ฐ์ง ์์) |
|
|
534
|
-
| `npm uninstall -D commitgate` | ๋ฐํ์ ์ ๊ฑฐ |
|
|
535
|
-
| `npm run req:new -- <slug> --run [--successor-of <REQ-id>]` | REQ ํฐ์ผ, ๋ธ๋์น, ์ค๊ณ๋ฌธ์ ์์ฑ. `--successor-of`๋ ๋์ฒด REQ (์๋ ์ฐธ์กฐ) |
|
|
536
|
-
| `npm run req:next -- <id> [--json]` | **๋ค์ ํ๋ ๊ณ์ฐ** (์ฝ๊ธฐ ์ ์ฉ) |
|
|
537
|
-
| `npm run req:review-codex -- <id> --kind design --run` | ์ค๊ณ ๋ฆฌ๋ทฐ |
|
|
538
|
-
| `npm run req:review-codex -- <id> --kind phase --phase <p> --run` | ๊ตฌํ ๋ฆฌ๋ทฐ |
|
|
539
|
-
| `npm run req:doctor -- <id>` | ๊ฒ์ดํธ ์ํ ํ์ธ |
|
|
540
|
-
| `npm run req:commit -- <id> --run -m "message"` | ์น์ธ๋ ๋ณ๊ฒฝ ์ปค๋ฐ |
|
|
541
|
-
|
|
542
|
-
`req:*`๋ PATH์ ์กํ๋ ์คํ ํ์ผ์ด ์๋๋ผ **`package.json` ์คํฌ๋ฆฝํธ**์
๋๋ค. npm์ ์ธ์ ์ ๋ฌ์ `--` ๊ตฌ๋ถ์๊ฐ ํ์ํฉ๋๋ค.
|
|
543
|
-
|
|
544
|
-
```sh
|
|
545
|
-
npm run req:next -- 2026-002 # npm
|
|
546
|
-
pnpm req:next 2026-002 # pnpm
|
|
547
|
-
yarn req:next 2026-002 # yarn
|
|
548
|
-
```
|
|
549
|
-
|
|
550
|
-
**๋์ฒด REQ (`--successor-of`)**: ์ด๋ค review series๊ฐ ๋ฏธ์๋ ด์ด๋ผ๊ณ ํ๋จํด ์ฌ๋์ด ๊ทธ๊ฒ์ `human-resolution`์ผ๋ก **๋์ฒด(replace)** ์ข
๊ฒฐํ ๊ฒฝ์ฐ์๋ง, `req:new --successor-of <REQ-id>`๋ก ๋ถ๋ชจ ์ด๋ ฅ(์๋ ํฉ๊ณยท์ข
๊ฒฐ ๊ธฐ๋ก)์ ๋ณด์กดํ ๋์ฒด REQ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ๋ถ๋ชจ์ ์ ํจํ replace ์ข
๊ฒฐ ๊ธฐ๋ก์ด ์์ผ๋ฉด ํฐ์ผ ์์ฑ์ด fail-closed๋ก ๋งํ๋๋ค โ ์ผ๋ฐ์ ์ธ ์ REQ ์์ฑ ์์ฒด๋ฅผ ๋๊ตฌ๊ฐ ๋ง๋ ๊ฒ์ ์๋๋๋ค.
|
|
551
|
-
|
|
552
|
-
---
|
|
553
|
-
|
|
554
|
-
## ์ค์
|
|
555
|
-
|
|
556
|
-
๋๋ถ๋ถ์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ถฉ๋ถํฉ๋๋ค. ํ์ํ๋ฉด ํ๋ก์ ํธ ๋ฃจํธ์ `req.config.json`์ ์์ ํ์ธ์.
|
|
557
|
-
|
|
558
|
-
| ํญ๋ชฉ | ๊ธฐ๋ณธ๊ฐ | ์ค๋ช
|
|
|
559
|
-
|---|---|---|
|
|
560
|
-
| `branchPrefix` | `"feat/req-"` | ์ ๋ธ๋์น prefix |
|
|
561
|
-
| `ticketRoot` | `"workflow"` | REQ ํฐ์ผ ํด๋ |
|
|
562
|
-
| `packageManager` | ์๋ ๊ฐ์ง | `npm`, `pnpm`, `yarn` |
|
|
563
|
-
| `designDocs` | `00/01/02` ๋ฌธ์ | ์ค๊ณ ๋ฌธ์ ํ์ผ๋ช
|
|
|
564
|
-
| `reviewPersonaPath` | `"workflow/review-persona.md"` | ๋ฆฌ๋ทฐ ํ๋กฌํํธ ์ฒซ ๋ธ๋ก. `null`์ด๋ฉด ๋นํ์ฑ โ ๋จ delta design ๋ฆฌ๋ทฐ์๋ ๋ด์ฅ delta ๊ณ์ฝ์ด ์ฃผ์
๋๋ค |
|
|
565
|
-
| `reviewModel` | `"gpt-5.6-terra"` | codex ๋ฆฌ๋ทฐ ๋ชจ๋ธ(`-c model=`๋ก ๊ณ ์ ). `null`์ด๋ฉด codex ์ ์ญ ์ค์ ์ ์์ |
|
|
566
|
-
| `reviewReasoningEffort` | `"high"` | codex ๋ฆฌ๋ทฐ ์ถ๋ก ๊ฐ๋. `none`ยท`minimal`ยท`low`ยท`medium`ยท`high`ยท`xhigh` ์ค ํ๋. `null`์ด๋ฉด ์ ์ญ ์์ |
|
|
567
|
-
| `reviewBudget` | `{ "autoBudget": 5, "hardCap": 8 }` | ์ด๋ฆฐ `(review_kind, phase_id)` review series์ ์ฌ๋ฆฌ๋ทฐ ์๋ ์์ฐ. ๊ธฐ๋ณธ๊ฐ ๊ธฐ์ค 1~5ํ์ฐจ๋ ์๋, 6~8ํ์ฐจ๋ ํ์ฐจ๋ง๋ค ๊ทธ seriesยทํ์ฐจ์ ๋ฐ์ธ๋ฉ๋ ์ฌ๋ ์์ธ ๊ธฐ๋ก์ด ์์ด์ผ ์งํ, `hardCap` ํ๋ฅผ ์ด๋ฏธ ์์งํ๋ฉด ๊ทธ ๋ค์ ์๋(9ํ์ฐจ๋ถํฐ)๋ ์์ธ๊ฐ ์์ด๋ ์ฐจ๋จ. `hardCap โค 8`ยท`autoBudget โค hardCap` |
|
|
568
|
-
| `phaseCommit` | `{ "autoApprove": "never" }` | phase ์๋ ์ปค๋ฐ ์ ์ฑ
. `never`(๊ธฐ๋ณธ)๋ฉด ๋งค phase ์ปค๋ฐ ์ ์ ์ฌ๋ ํ์ธ(ํํ). `low-only`๋ฉด **LOW ์ํ** ํฐ์ผ์ Codex ์น์ธ phase๋ฅผ ์ฌ๋ ์ ์ง ์์ด ์๋ ์ปค๋ฐํ๊ณ ์ฌ๋ ํ์ธ์ featureโmain ๋ณํฉ ์ง์ ํ ๋ฒ์ผ๋ก ๋ชจ์๋ค. HIGH ํฐ์ผ์ ์ด๋ ๊ฐ์์๋ ๋งค phase ํ์ธ(`userConfirmGate` ๋ฐฑ์คํฑ). `"all"` ๊ฐ์ ๊ฐ์ ์๋ค(HIGH livelock ๋ฐฉ์ง) |
|
|
569
|
-
|
|
570
|
-
๋น `branchPrefix`๋ ํ๋ก์ ํธ ๋ฐ์ผ๋ก ๋๊ฐ๋ ๊ฒฝ๋ก๋ ๊ฑฐ๋ถ๋ฉ๋๋ค.
|
|
571
|
-
|
|
572
|
-
**๋ฆฌ๋ทฐ ๋ชจ๋ธยท์ถ๋ก ๊ฐ๋ ๊ณ ์ **: `req:review-codex`๋ codex ์ธ์์ `-c model=`ยท`-c model_reasoning_effort=`๋ฅผ ์ฃผ์
ํด **๋ชจ๋ธ๊ณผ ์ถ๋ก ๊ฐ๋๋ฅผ ๊ณ ์ **ํฉ๋๋ค. ๊ณ ์ ํ์ง ์์ผ๋ฉด ๋ฆฌ๋ทฐ๊ฐ ์ฌ์ฉ์ ์ ์ญ `~/.codex/config.toml`(์: `model_reasoning_effort="ultra"`)์ ์์ํด ๋ฆฌ๋ทฐ 1ํ๊ฐ ์ ๋ถยทํ ํฐ ๊ณผ๋ค๊ฐ ๋ฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ `gpt-5.6-terra`/`high`์ด๊ณ , ํ๋ก์ ํธ์ codex๊ฐ ๊ทธ ๋ชจ๋ธ์ ์ง์ํ์ง ์์ผ๋ฉด `req.config.json`์์ ๋ฐ๊พธ๊ฑฐ๋ `null`๋ก ๋์ด ์ ์ญ ์ค์ ์ ์์์ํต๋๋ค. override๊ฐ ์ค์ ๋ก ์กด์ค๋๋์ง๋ `npm run verify:overrides`(codex CLI ํ์)๋ก ํ์ธํ ์ ์์ต๋๋ค.
|
|
573
|
-
|
|
574
|
-
**์ฌ๋ฆฌ๋ทฐ๋ stateless**: ์ฌ๋ฆฌ๋ทฐ๋ ๋งค๋ฒ **์ codex ์ค๋ ๋**๋ก ์์ํฉ๋๋ค(์ด์ ๋ํ๋ฅผ resumeํด ๋์ ํ์ง ์์ โ ํ ํฐ ์ฆ๊ฐ์ findings ์ฌํยท์ด๋์ ๋ง์ต๋๋ค). ์ง์ ๊ฐ์ ๋์์ NEEDS_FIX findings๋ง ์ฐธ๊ณ ์ฉ์ผ๋ก ํ๋กฌํํธ์ ๋ด๊ฒจ ํด์ ์ฌ๋ถ(closure)๋ฅผ ํ์ธํฉ๋๋ค.
|
|
575
|
-
|
|
576
|
-
---
|
|
577
|
-
|
|
578
|
-
## FAQ
|
|
579
|
-
|
|
580
|
-
**Codex CLI๊ฐ ์์ผ๋ฉด ์ด๋ป๊ฒ ๋๋์?**
|
|
581
|
-
๋ฆฌ๋ทฐ ๋ช
๋ น์ด ์คํจํฉ๋๋ค. ์กฐ์ฉํ ์น์ธ ์ฒ๋ฆฌํ์ง ์์ต๋๋ค.
|
|
582
|
-
|
|
583
|
-
**์น์ธ ํ ์ฝ๋๋ฅผ ์กฐ๊ธ ๊ณ ์น๋ฉด ์ปค๋ฐ๋๋์?**
|
|
584
|
-
์ ๋ฉ๋๋ค. ์น์ธ๋ staged tree์ ๋ฌ๋ผ์ง๋ฉด stale ์น์ธ์ผ๋ก ๋ณด๊ณ ๋ค์ ๋ฆฌ๋ทฐ๋ฅผ ์๊ตฌํฉ๋๋ค.
|
|
585
|
-
|
|
586
|
-
**`state.json`์ด๋ `responses/`๋ ์ stageํ๋ฉด ์ ๋๋์?**
|
|
587
|
-
์ํฌํ๋ก ์ฆ๊ฑฐ์ ์ํ ํ์ผ์
๋๋ค. source ์ปค๋ฐ์ ์์ด๋ฉด ์น์ธ ๋ฐ์ธ๋ฉ์ด ํ๋ ค์ง๋ฏ๋ก `req:commit`์ด ๋ง์ต๋๋ค.
|
|
588
|
-
|
|
589
|
-
**cross-spawn ๋ฒ์ ๊ฒฝ๊ณ ๊ฐ ๋์ค๋ฉด ์ด๋ป๊ฒ ํ๋์?**
|
|
590
|
-
๋์ ํ๋ก์ ํธ์ ๊ธฐ์กด `cross-spawn`์ด CommitGate๊ฐ ๊ฒ์ฆํ ํํ๋ณด๋ค ๋ฎ์ ์ ์๋ค๋ ๋ป์
๋๋ค. `npm i -D cross-spawn@^7.0.6`์ผ๋ก ์ฌ๋ฆฌ์ธ์. CI๋ ๋ณด์ ๋ฏผ๊ฐ ํ๊ฒฝ์์๋ `npx commitgate --strict`๋ฅผ ์ฌ์ฉํด ๊ฒฝ๊ณ ๋ฅผ ์คํจ๋ก ๋ค๋ฃจ์ธ์.
|
|
591
|
-
|
|
592
|
-
**๋ ๋ฒ ์ค์นํ๋ฉด ๋ฎ์ด์ฐ๋์?**
|
|
593
|
-
์๋์. ๊ธฐ์กด ํ์ผ์ ๊ฑด๋๋๋๋ค. ๊ฐ์ ๋ก ๊ฐฑ์ ํ๋ ค๋ฉด `--force`๋ฅผ ์ฌ์ฉํ์ธ์.
|
|
594
|
-
|
|
595
|
-
---
|
|
596
|
-
|
|
597
|
-
## ํ์ฌ ๋ฒ์
|
|
598
|
-
|
|
599
|
-
ํ์ฌ ๋ฒ์ ์ **๋ฐํ์ ํจํค์ง ๋ชจ๋ธ**์
๋๋ค. ์คํ ์ฝ๋์ ๋ฐํ์ ์์กด์ฑ์ `node_modules/commitgate`์๋ง ์๊ณ , ํ๋ก์ ํธ์๋ ๊ฑฐ๋ฒ๋์คยท๊ฐ์ฌ ๋ฐ์ดํฐ์ `req:* = commitgate <verb>` ์คํฌ๋ฆฝํธ๋ง ๋จ์ต๋๋ค. (์์ vendored scaffold ์ค์น๋ณธ์ [`migrate`](#์์ -์ค์น๋ณธ์์-์ฎ๊ฒจ์ค๊ธฐ-migrate)๋ก ์ ํํฉ๋๋ค.)
|
|
600
|
-
|
|
601
|
-
ํ์ฌ ์ด์ ์ค์ธ ๊ฒ์ฆ์
๋๋ค.
|
|
602
|
-
|
|
603
|
-
- GitHub Actions์์ `ubuntu-latest`, `macos-latest`, `windows-latest` ร Node 18/20/22 ๋งคํธ๋ฆญ์ค๋ฅผ ์คํํฉ๋๋ค.
|
|
604
|
-
- `npm run smoke`๋ pack tarball์ ์์ ํ๋ก์ ํธ์ ์ค์ ๋ก ์ค์นํด, ๋์์ `scripts/req/`๊ฐ **์๊ณ ** `tsx`ยท`ajv`ยท`cross-spawn`์ด **์ฃผ์
๋์ง ์์ผ๋ฉฐ** ๋ค์ฏ `req:*`๊ฐ ํจํค์ง bin์ ๊ฐ๋ฆฌํค๋์ง, ๊ทธ๋ฆฌ๊ณ `npm run req:doctor`๊ฐ ์ค์ ๋ก ํจํค์ง ์์ ๋ชจ๋๊น์ง dispatch๋๋์ง ํ์ธํฉ๋๋ค. `migrate` ๋นํ๊ดด์ฑ๋ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๊ฒ์ฆํฉ๋๋ค.
|
|
605
|
-
- Windows `.cmd` ๋ํผ ์ฃผ์
ํ๊ท ํ
์คํธ๊ฐ ํจํค์ง ๋งค๋์ ์ Codex wrapper ๊ฒฝ๋ก๋ฅผ ๋ณดํธํฉ๋๋ค.
|
|
606
|
-
|
|
607
|
-
์๋๋ ํ์ ๋ฒ์์
๋๋ค.
|
|
608
|
-
|
|
609
|
-
- Yarn PnP ์ง์, ์ํฌ์คํ์ด์ค ํ์ ํจํค์ง ๋
๋ฆฝ ์ค์น
|
|
610
|
-
- ์์ฐโ๋ฐํ์ ๋ฒ์ ๋๋ฆฌํํธ ํ์ง
|
|
611
|
-
- ๋น-git VCS ์ง์
|
|
612
|
-
- ๋ ๋ค์ํ ์ค๊ณ๋ฌธ์ ํ
ํ๋ฆฟ
|
|
613
|
-
|
|
614
|
-
---
|
|
615
|
-
|
|
616
|
-
## License
|
|
617
|
-
|
|
618
|
-
[MIT](./LICENSE) ยฉ 2026 sol5288
|
|
1
|
+
# CommitGate
|
|
2
|
+
|
|
3
|
+
๐ **ํ๊ตญ์ด** ยท [English](./README.en.md)
|
|
4
|
+
|
|
5
|
+
**AI ์ฝ๋ฉ ๋ณ๊ฒฝ์ Codex ๋ฆฌ๋ทฐ ์น์ธ ์์ด๋ ์ปค๋ฐํ์ง ๋ชปํ๊ฒ ๋ง๋ ์ปค๋ฐ ๊ฒ์ดํธ์
๋๋ค.**
|
|
6
|
+
|
|
7
|
+
[](https://github.com/sol5288/commitgate/actions/workflows/ci.yml)
|
|
8
|
+
[](https://www.npmjs.com/package/commitgate)
|
|
9
|
+
[](./LICENSE)
|
|
10
|
+
|
|
11
|
+
<p align="center">
|
|
12
|
+
<img src="https://raw.githubusercontent.com/sol5288/commitgate/main/assets/commitgate-workflow-hero.webp" alt="๊ฐ๋ฐ AI์ ๋
๋ฆฝ ๊ฒ์ AI๊ฐ ๊ฒํ ํ ๋ค ์ฌ๋์ด ํ์ธํ๊ณ ์ต์ข
์ปค๋ฐ ๊ฒ์ดํธ๋ฅผ ํต๊ณผํ๋ ๋ชจ์ต" width="1200">
|
|
13
|
+
</p>
|
|
14
|
+
|
|
15
|
+
## ์ฝ๋๋ ํ AI๊ฐ ๋ง๋ค๊ณ , ๋ค๋ฅธ AI๊ฐ ๋ค์ ๋ด
๋๋ค
|
|
16
|
+
|
|
17
|
+
AI ์ฝ๋ฉ ์์ด์ ํธ๋ ์ค๊ณยท๊ตฌํยทํ
์คํธ๋ฅผ ์์ฃผ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํฉ๋๋ค. ํ์ง๋ง ํ ์์ด์ ํธ๊ฐ ์๊ธฐ ๋ณ๊ฒฝ๊น์ง ๊ฒ์ํ๋ฉด, ๊ฐ์ ๊ฐ์ ๊ณผ ๊ฐ์ ์์
๋งฅ๋ฝ ์์์ ๊ฒฐํจ์ ๋์น๊ธฐ ์ฝ์ต๋๋ค.
|
|
18
|
+
|
|
19
|
+
๊ทธ๋์ ๊ฐ๋ฐ AI๊ฐ ๋ง๋ ๋ณ๊ฒฝ์ ๋ค๋ฅธ AI์ ๋ณต์ฌํด ๋ถ์ฌ ๋ฃ๊ณ ๋ค์ ๊ฒ์ํ๋ ๋ฐฉ์์ด ์๊น๋๋ค. ๋ฌธ์ ๋ ๊ทธ ๊ณผ์ ์ด ๋ฒ๊ฑฐ๋กญ๊ณ , ์ด๋ diff๋ฅผ ๊ฒ์ํ๋์งยท๊ฒ์ ๋ค ์ฝ๋๊ฐ ๋ฐ๋์๋์งยท์ธ์ ์ฌ๋์ด ๊ฒฐ์ ํด์ผ ํ๋์ง๋ฅผ ๊ณ์ ์ฌ๋์ด ์ฑ๊ฒจ์ผ ํ๋ค๋ ์ ์
๋๋ค.
|
|
20
|
+
|
|
21
|
+
CommitGate๋ ์ด ๊ต๋ ์์
์ REQ ์ํฌํ๋ก๋ก ๋ฌถ์ต๋๋ค. **๊ฐ๋ฐ AI๋ ๋ง๋ค๊ณ , Codex๋ ๋
๋ฆฝ Reviewer๋ก ๊ฒ์ํ๊ณ , ์ฌ๋์ ๊ฒฐ์ ์ด ํ์ํ ํต์ ์ ์์๋ง ํ์ธํฉ๋๋ค.**
|
|
22
|
+
|
|
23
|
+
## ์ฌ๋์ ๊ฒฐ์ ์๋ง ์ฐธ์ฌํฉ๋๋ค
|
|
24
|
+
|
|
25
|
+
| ๋งค๋ฒ ์ง์ ์ฑ๊ธฐ๋ ์ผ | CommitGate๊ฐ ์ฐ๊ฒฐํ๋ ํ๋ฆ |
|
|
26
|
+
|---|---|
|
|
27
|
+
| ๊ฐ๋ฐ AI์ ๋ณ๊ฒฝ์ ๋ค๋ฅธ ๋ชจ๋ธ์ ๋ณต์ฌํด ๊ฒ์ ์์ฒญ | ํ์ฌ **staged tree**๋ฅผ Codex Reviewer์๊ฒ ๊ฒ์ ์์ฒญ |
|
|
28
|
+
| ๊ฒ์ ๋ค ์ฝ๋๊ฐ ๋ฐ๋์๋์ง ์๋ ๋์กฐ | ์น์ธ๋ tree์ ํ์ฌ staged tree๋ฅผ ๋ฐ์ธ๋ฉํด ๋ณ๊ฒฝ ์ ์ฌ๊ฒ์ ์๊ตฌ |
|
|
29
|
+
| ์ปค๋ฐยทpushยท๋ฆด๋ฆฌ์ค ์ ์ ๋ฌด์์ ํ์ธํ ์ง ํ๋จ | `req:next`๊ฐ ๋ค์ ํ๋๊ณผ ์ฌ๋ ํ์ธ ์ง์ ์ ๊ณ์ฐ |
|
|
30
|
+
| ๋ชจ๋ ๋จ๊ณ์ ์ฌ๋์ด ๊ฐ์
| `AWAIT_HUMAN` ํต์ ์ ์์๋ง ๋ช
์์ ์ธ ์น์ธ ์์ฒญ |
|
|
31
|
+
|
|
32
|
+
## ์ด๋ ๊ฒ ํ๋ฌ๊ฐ๋๋ค
|
|
33
|
+
|
|
34
|
+
1. **๊ฐ๋ฐ AI๊ฐ ์์
์ ์์ํฉ๋๋ค.** `req:new`๊ฐ REQ ํฐ์ผยท๋ธ๋์นยท์ค๊ณ ๋ฌธ์๋ฅผ ๋ง๋ญ๋๋ค.
|
|
35
|
+
2. **Codex๊ฐ ๋ณ๋ ๊ด์ ์ผ๋ก ๊ฒ์ํฉ๋๋ค.** ์ค๊ณ์ ๊ตฌํ์ staged tree๋ฅผ ๋ณด๊ณ , ์น์ธํ๊ฑฐ๋ ์์ ์ฌํญ์ ๋จ๊น๋๋ค.
|
|
36
|
+
3. **์ฌ๋์ด ์ค์ํ ๊ฒฐ์ ์ ํ์ธํฉ๋๋ค.** ์ปค๋ฐ, ํตํฉ, ๋ฆด๋ฆฌ์ค์ฒ๋ผ ๋๋๋ฆฌ๊ธฐ ์ด๋ ต๊ฑฐ๋ ์ํฅ์ด ํฐ ํต์ ์ ์์๋ง ์น์ธ์ ์์ฒญํฉ๋๋ค.
|
|
37
|
+
4. **์ต์ข
๊ฒ์ดํธ๊ฐ ์ปค๋ฐ์ ๋ฌถ์ต๋๋ค.** ์ฌ๋ ํ์ธ๊ณผ Codex ์น์ธ์ ํต๊ณผํ, ๋ฐ๋ก ๊ทธ staged tree๋ง `req:commit`์ด ์ปค๋ฐํฉ๋๋ค.
|
|
38
|
+
|
|
39
|
+
## ๋ฌด์์ ๋ณด์ฅํ๋์
|
|
40
|
+
|
|
41
|
+
- ๐ **Codex ๋ฆฌ๋ทฐ ์น์ธ ์์ด๋ ์ปค๋ฐ๋์ง ์์ต๋๋ค.** ๋ฆฌ๋ทฐ๊ฐ ์คํจํ๊ฑฐ๋ ์์ ์์ผ๋ฉด `req:commit`์ด ํต๊ณผ์ํค์ง ์์ต๋๋ค.
|
|
42
|
+
- ๐ **์น์ธ ํ staged ๋ณ๊ฒฝ์ด ๋ฐ๋๋ฉด ๋ค์ ๋ฆฌ๋ทฐ๋ฅผ ์๊ตฌํฉ๋๋ค.** ์น์ธ๋ tree์ ์ง๊ธ ์ปค๋ฐํ๋ ค๋ tree๊ฐ ๋ค๋ฅด๋ฉด stale๋ก ๋ณด๊ณ ๋ง์ต๋๋ค.
|
|
43
|
+
- ๐งฏ **์ ๋งคํ๋ฉด ๋ง์ต๋๋ค(fail-closed).** ์ง์ ์ ์์ง๋ง ์น์ธ๋ ์๋ ์๋ต, Codex CLI ๋ถ์ฌยท์คํ ์คํจ๋ ์กฐ์ฉํ ํต๊ณผํ์ง ์์ต๋๋ค.
|
|
44
|
+
|
|
45
|
+
๋ฌด์์ ๋ณด์ฅํ๊ณ ๋ฌด์์ ๋ณด์ฅํ์ง ์๋์ง ์ ๋ฌธ์ **[๋ณด์ฅ๊ณผ ํ๊ณ](https://github.com/sol5288/commitgate/blob/main/docs/guarantees.md)**.
|
|
46
|
+
|
|
47
|
+
## โ ๏ธ ์์ ์ ์ ์์ ๋ ๊ฒ
|
|
48
|
+
|
|
49
|
+
- **๋ฆฌ๋ทฐ๋ staged diff ์ ๋ฌธ์ ์ธ๋ถ(CodexยทOpenAI)๋ก ์ ์กํฉ๋๋ค.** `req:review-codex`๋ `git diff --cached` ์ ์ฒด๋ฅผ ๋ณด๋ด๊ณ , codex๋ `--sandbox read-only`๋ก ์ ์ฅ์ ๋ฃจํธ๋ฅผ ์ฝ์ด diff์ ์๋ ํ์ผ๋ ์ฝํ ์ ์์ต๋๋ค. ๋ง์คํนยทํํฐยท๊ธธ์ด ์ํ์ด **์์ผ๋**, ๋ฆฌ๋ทฐ ์ staged ๋ด์ฉ์ ์๊ฒฉ์ฆ๋ช
ยทํ ํฐยท๊ฐ์ธ์ ๋ณด๊ฐ ์๋์ง ํ์ธํ์ธ์.
|
|
50
|
+
- **git hook์ ์ค์นํ์ง ์์ต๋๋ค โ ์ฐํํ ์ ์์ต๋๋ค.** `req:commit` ๋์ `git commit`์ ์ง์ ์น๋ฉด ๊ฒ์ดํธยท์น์ธ ๋ฐ์ธ๋ฉยท์ฆ๊ฑฐ ๊ธฐ๋ก์ด ์ ๋ถ ์ฐํ๋ฉ๋๋ค. ๊ฐ์ ๋ ฅ์ **ํ์กฐํ๋ ์์ด์ ํธ๋ฅผ ๊ณ์ฝ ๊ถค๋์ ์ ์ง**ํ๋ ๋ฐ ์์ง, ์ฌ๋์ ์ฐํ๋ฅผ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋ง๋ ๋ฐ ์์ง ์์ต๋๋ค.
|
|
51
|
+
|
|
52
|
+
## 3๋ถ ์์
|
|
53
|
+
|
|
54
|
+
git ์ ์ฅ์์ด๊ณ `package.json`์ด ์๋ ํด๋์์ ๋ ๋จ๊ณ๋ฉด ๋ฉ๋๋ค.
|
|
55
|
+
|
|
56
|
+
```sh
|
|
57
|
+
npm install -D commitgate # 1) ๋ฐํ์ ์ค์น โ ์คํ ์ฝ๋๊ฐ node_modules/commitgate ์ ๋ค์ด์ต๋๋ค
|
|
58
|
+
npx commitgate init # 2) ์ค์ ยท๊ณ์ฝยท์คํค๋ง + req:* ์คํฌ๋ฆฝํธ๋ฅผ ํ๋ก์ ํธ์ ๊น๋๋ค
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
์ค์น๋ ํ์ผ๋ง ๋๊ณ **์ปค๋ฐํ์ง ์์ต๋๋ค.** `req:new`๋ clean ์ํนํธ๋ฆฌ๋ฅผ ์๊ตฌํ๋ฏ๋ก ์ค์น๋ถ์ ๋จผ์ ์ปค๋ฐํ์ธ์ โ ์ค์น ์ถ๋ ฅ์ `๋ค์:` ์๋ด๊ฐ stageํ ์ ํํ ๊ฒฝ๋ก๋ฅผ ์๋ ค ์ค๋๋ค(`-A`/`.` ์ ์ฒด stage๋ ์ฐ์ง ๋ง์ธ์). ์ค๋น๋ฌผ(Codex CLI ๋ฑ)ยท๊ฒฝ๋ก ๋ช
์ stageยท์ ์ฒด ์ฒซ ํ๋ฆ์ **[Quick Start](https://github.com/sol5288/commitgate/blob/main/docs/quick-start.md)**.
|
|
62
|
+
|
|
63
|
+
๊ทธ๋ค์ ์์ด์ ํธ์๊ฒ ์๊ตฌ์ฌํญ๋ง ์ฃผ๋ฉด ๋ฉ๋๋ค.
|
|
64
|
+
|
|
65
|
+
```text
|
|
66
|
+
/req ํ๋กํ ์์ API๋ฅผ ์ถ๊ฐํด์ค
|
|
67
|
+
|
|
68
|
+
- ๋ฌด์์: PATCH /profile ๋ก ๋๋ค์ยท์๊ฐ๊ธ ์์
|
|
69
|
+
- ์: ์ง๊ธ์ ๊ฐ์
ํ ํ๋กํ์ ๋ฐ๊ฟ ๋ฐฉ๋ฒ์ด ์๋ค
|
|
70
|
+
- ์ ์ฝ: ๊ธฐ์กด ์ธ์ฆ ๋ฏธ๋ค์จ์ด ์ฌ์ฌ์ฉ, ์คํค๋ง ๋ณ๊ฒฝ ์์
|
|
71
|
+
- ์๋ฃ ๊ธฐ์ค: ๋จ์ ํ
์คํธ ํต๊ณผ, ๊ถํ ์๋ ์ฌ์ฉ์๋ 403
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
์ฒซ ์๋ต์ ๋ณดํต ์ด๋ ๊ฒ ํฐ์ผยท๋ธ๋์นยทphase ๊ณํ๊ณผ ํต์ ์ ์ ์ธ์๋๋ค.
|
|
75
|
+
|
|
76
|
+
```text
|
|
77
|
+
REQ-2026-002 ๋ฐํ
|
|
78
|
+
๋ธ๋์น: feat/req-2026-002-profile-edit-api
|
|
79
|
+
phase:
|
|
80
|
+
- phase-1: PATCH /profile ๊ตฌํ
|
|
81
|
+
- phase-2: ํ
์คํธ์ ํ๊ท ํ์ธ
|
|
82
|
+
ํต์ ์ : req:commit --run ์ง์ / [B1] main direct push ์ง์ (๋๋ [I1] PR ์์ฑ โ [I2] merge)
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
์์ด์ ํธ๋ `req:next`๊ฐ ์ํค๋ ๋๋ก **์ค๊ณ โ Codex ๋ฆฌ๋ทฐ โ ๊ตฌํ โ ์ฌ๋ฆฌ๋ทฐ โ ์ปค๋ฐ**์ ์งํํฉ๋๋ค. ์ฌ์ฉ์๋ ํต์ ์ (`AWAIT_HUMAN`)์์ ์น์ธ ๋ฌธ์ฅ์ ์ค ๋๋ง ๊ฐ์
ํ๋ฉด ๋ฉ๋๋ค. (Claude Code๊ฐ ์๋๋ฉด `/req` ์์ด ์๊ตฌ์ฌํญ๋ง ์ค๋ `AGENTS.md`ยท`.cursor/rules`๊ฐ ๊ท์น์ ๋ก๋ํฉ๋๋ค.)
|
|
86
|
+
|
|
87
|
+
## ์๋ ๋ฐฉ์
|
|
88
|
+
|
|
89
|
+
`req:new`๊ฐ ํฐ์ผยท๋ธ๋์นยท์ค๊ณ๋ฌธ์๋ฅผ ๋ง๋ค๊ณ , ๋งค ๋จ๊ณ์ ๋ค์ ํ๋์ ํญ์ `req:next`๊ฐ `state.json`๊ณผ git ์ํ์์ **๊ณ์ฐ**ํฉ๋๋ค(์ฝ๊ธฐ ์ ์ฉ โ ์์ด์ ํธ๊ฐ ์ถ์ธกํ์ง ์์ต๋๋ค).
|
|
90
|
+
|
|
91
|
+
```text
|
|
92
|
+
req:new โ ์ค๊ณ ๋ฆฌ๋ทฐ โ ๊ตฌํ โ phase ๋ฆฌ๋ทฐ โ ์น์ธ โ req:commit โ (ํตํฉยท๋ฆด๋ฆฌ์ค๋ ๋ณ๋ ํต์ ์ )
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
๋ฃจํ ์์ธยท`kind` ํยท๋ฆฌ๋ทฐ์ด ํ๋ฅด์๋ยทdelta ์ฌ๋ฆฌ๋ทฐ๋ **[์ํฌํ๋ก](https://github.com/sol5288/commitgate/blob/main/docs/workflow.md)**, ์์ด์ ํธ ์ง์
์ ยท์๊ตฌ ์ ๋ฌยทcompanion skills๋ **[์์ด์ ํธ ๊ฐ์ด๋](https://github.com/sol5288/commitgate/blob/main/docs/agent-prompt.md)**๋ฅผ ๋ณด์ธ์.
|
|
96
|
+
|
|
97
|
+
## ์์ฃผ ์ฐ๋ ๋ช
๋ น
|
|
98
|
+
|
|
99
|
+
| ๋ช
๋ น | ์ฉ๋ |
|
|
100
|
+
|---|---|
|
|
101
|
+
| `npm run req:new -- <slug> --run` | REQ ํฐ์ผยท๋ธ๋์นยท์ค๊ณ๋ฌธ์ ์์ฑ |
|
|
102
|
+
| `npm run req:next -- <id>` | **๋ค์ ํ๋ ๊ณ์ฐ** (์ฝ๊ธฐ ์ ์ฉ) |
|
|
103
|
+
| `npm run req:doctor -- <id>` | ๊ฒ์ดํธ ์ํ ์ ๊ฒ |
|
|
104
|
+
| `npm run req:commit -- <id> --run -m "..."` | ์น์ธ๋ ๋ณ๊ฒฝ ์ปค๋ฐ |
|
|
105
|
+
|
|
106
|
+
`req:*`๋ PATH ์คํ ํ์ผ์ด ์๋๋ผ `package.json` ์คํฌ๋ฆฝํธ์
๋๋ค(npm์ ์ธ์ ์ ๋ฌ์ `--` ํ์). ์ ์ฒด ๋ช
๋ น๊ณผ `pnpm`/`yarn` ํ๊ธฐ๋ **[์ํฌํ๋ก](https://github.com/sol5288/commitgate/blob/main/docs/workflow.md)**์ ์์ต๋๋ค.
|
|
107
|
+
|
|
108
|
+
## ๋ ์์๋ณด๊ธฐ
|
|
109
|
+
|
|
110
|
+
| ๋ฌธ์ | ๋ด์ฉ |
|
|
111
|
+
|---|---|
|
|
112
|
+
| [Quick Start](https://github.com/sol5288/commitgate/blob/main/docs/quick-start.md) | ์ค์นยท์ค๋น๋ฌผยท์ฒซ ์คํ |
|
|
113
|
+
| [์ํฌํ๋ก](https://github.com/sol5288/commitgate/blob/main/docs/workflow.md) | `req:next` ๋ฃจํยทkindยทํ๋ฅด์๋ยท๋ช
๋ น์ด |
|
|
114
|
+
| [์์ด์ ํธ ๊ฐ์ด๋](https://github.com/sol5288/commitgate/blob/main/docs/agent-prompt.md) | ์ง์
์ ยท์๊ตฌ ์ ๋ฌยทcompanion skills |
|
|
115
|
+
| [๋ณด์ฅ๊ณผ ํ๊ณ](https://github.com/sol5288/commitgate/blob/main/docs/guarantees.md) | ์์ ๊ณ์ฝยท์ง์ ๋ฒ์ |
|
|
116
|
+
| [์ค์ ](https://github.com/sol5288/commitgate/blob/main/docs/configuration.md) | `req.config.json` |
|
|
117
|
+
| [์
๊ทธ๋ ์ด๋ (0.x)](https://github.com/sol5288/commitgate/blob/main/docs/upgrade.md) | ๋ฐํ์ ๊ฐฑ์ ยท`sync`ยท`quickstart`ยท`migrate` |
|
|
118
|
+
| [์ ๊ฑฐํ๊ธฐ](https://github.com/sol5288/commitgate/blob/main/docs/uninstall.md) | ์์ ํ ์ ๊ฑฐ ์ ์ฐจ |
|
|
119
|
+
| [๋ฌธ์ ํด๊ฒฐ](https://github.com/sol5288/commitgate/blob/main/docs/troubleshooting.md) | FAQ |
|
|
120
|
+
| [๊ฐ๋ฐยทํ์ฌ ๋ฒ์](https://github.com/sol5288/commitgate/blob/main/docs/development.md) | CIยท๊ฒ์ฆยท๋ก๋๋งต |
|
|
121
|
+
|
|
122
|
+
## License
|
|
123
|
+
|
|
124
|
+
[MIT](./LICENSE) ยฉ 2026 sol5288
|