commitgate 0.1.0 โ†’ 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.en.md +217 -0
  2. package/README.md +126 -133
  3. package/package.json +3 -2
package/README.en.md ADDED
@@ -0,0 +1,217 @@
1
+ # CommitGate
2
+
3
+ ๐ŸŒ [ํ•œ๊ตญ์–ด](./README.md) ยท **English**
4
+
5
+ **A commit gate that blocks AI-generated code from being committed until Codex has reviewed and approved it.**
6
+
7
+ AI coding agents can move quickly, but unreviewed changes should not go straight into your history. CommitGate wraps each change in a REQ ticket and only allows the staged tree approved by Codex to be committed. If the code changes after approval, or if evidence is missing, it fails closed.
8
+
9
+ [![license](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE)
10
+
11
+ ---
12
+
13
+ ## Quick Start
14
+
15
+ Run this from your project root. The project must be a **git repository with a `package.json`**.
16
+
17
+ ```sh
18
+ npx commitgate
19
+ npm install
20
+ codex --version
21
+ codex login status
22
+ ```
23
+
24
+ Then paste this prompt into your AI coding agent.
25
+
26
+ ```text
27
+ Do not handle this as a normal implementation. Use the CommitGate workflow installed in this project.
28
+
29
+ Create a new REQ ticket and run this flow end to end:
30
+ req:new โ†’ write design docs โ†’ Codex design review โ†’ implement and test โ†’ req:doctor โ†’ Codex phase review โ†’ req:commit
31
+
32
+ Proceed automatically:
33
+ - If Codex returns NEEDS_FIX, fix the findings and rerun review until approved.
34
+ - The review target is only what has been staged with git add.
35
+ - Do not manually git add state.json or responses/.
36
+
37
+ Stop for human confirmation only:
38
+ - Right before req:commit --run
39
+ - Before merging to main or pushing
40
+ - Before destructive actions such as reset, clean, or force push
41
+ - When the requested scope must change
42
+ - When Codex review is still not approved after 3 rounds
43
+
44
+ Requirement:
45
+ - What:
46
+ - Why:
47
+ - Constraints:
48
+ - Done when:
49
+ ```
50
+
51
+ The agent's first reply should look roughly like this.
52
+
53
+ ```text
54
+ REQ-2026-002 created
55
+ Branch: feat/req-2026-002-profile-edit-api
56
+ Phases:
57
+ - phase-1: implement PATCH /profile
58
+ - phase-2: tests and regression checks
59
+ Control points: before req:commit --run, before push
60
+ ```
61
+
62
+ After that, the agent runs design, implementation, tests, and Codex review. You only confirm at control points such as commit or push.
63
+
64
+ ---
65
+
66
+ ## What Does It Enforce?
67
+
68
+ CommitGate is designed to block **unreviewed changes from being committed**, not just to wrap commands.
69
+
70
+ - No Codex approval means no commit.
71
+ - If the approved staged tree differs from the current staged tree, the commit is blocked.
72
+ - Workflow files such as `state.json` and `responses/` cannot be mixed into the source commit.
73
+ - If Codex CLI is missing or fails, the workflow fails instead of silently passing.
74
+ - Approval responses and evidence are kept under `workflow/REQ-.../responses/`.
75
+
76
+ In short: **approved changes pass, ambiguous changes stop.**
77
+
78
+ ---
79
+
80
+ ## What Installation Adds
81
+
82
+ `npx commitgate` adds the following to the target project. Existing files are not overwritten by default.
83
+
84
+ | Added item | Purpose |
85
+ |---|---|
86
+ | `scripts/req/` | `req:new`, `req:review-codex`, `req:doctor`, `req:commit` scripts |
87
+ | `workflow/*.schema.json` | Schemas for Codex responses and config |
88
+ | `req.config.json` | Project-level configuration |
89
+ | `AGENTS.md` | Template rules for the agent and reviewer |
90
+ | `package.json` scripts | `req:*` commands and required devDependencies |
91
+
92
+ Preview without writing files:
93
+
94
+ ```sh
95
+ npx commitgate --dry-run
96
+ ```
97
+
98
+ ---
99
+
100
+ ## Prerequisites
101
+
102
+ | Requirement | Check | Notes |
103
+ |---|---|---|
104
+ | Git | `git --version` | Required |
105
+ | Node.js 18.17+ | `node --version` | Required |
106
+ | npm, pnpm, or yarn | `npm --version` | Examples use npm |
107
+ | Codex CLI | `codex --version` | Required for review runs |
108
+
109
+ If Codex CLI is not installed:
110
+
111
+ ```sh
112
+ npm install -g @openai/codex
113
+ codex login
114
+ codex login status
115
+ ```
116
+
117
+ On Windows, if `codex` is not found right after installation, open a new terminal so PATH is reloaded.
118
+
119
+ ---
120
+
121
+ ## Manual Commands
122
+
123
+ Most users should use the prompt flow above. This section is for understanding what the workflow runs internally or for debugging.
124
+
125
+ ```sh
126
+ # 1. Create a ticket and branch
127
+ npm run req:new -- my-feature --run
128
+
129
+ # 2. Write design docs, then stage them
130
+ git add workflow/REQ-2026-001/00-requirement.md workflow/REQ-2026-001/01-design.md workflow/REQ-2026-001/02-plan.md
131
+
132
+ # 3. Design review
133
+ npm run req:review-codex -- 2026-001 --kind design --run
134
+
135
+ # 4. Implement code, then stage source files
136
+ git add <changed-source-files>
137
+
138
+ # 5. Gate check
139
+ npm run req:doctor -- 2026-001
140
+
141
+ # 6. Implementation review
142
+ npm run req:review-codex -- 2026-001 --kind phase --run
143
+
144
+ # 7. Commit approved code
145
+ npm run req:commit -- 2026-001 --run -m "feat: my feature"
146
+ ```
147
+
148
+ Important: only stage code and documents you authored for the source commit. `state.json` and `responses/` are managed by the tool.
149
+
150
+ For multi-line commit messages, use a file instead of `-m`.
151
+
152
+ ```sh
153
+ npm run req:commit -- 2026-001 --run --message-file commit-message.txt
154
+ ```
155
+
156
+ ---
157
+
158
+ ## Command Cheat Sheet
159
+
160
+ | Command | Purpose |
161
+ |---|---|
162
+ | `npx commitgate` | Install CommitGate into a project |
163
+ | `req:new <slug> --run` | Create a REQ ticket, branch, and design docs |
164
+ | `req:review-codex <id> --kind design --run` | Review the design |
165
+ | `req:review-codex <id> --kind phase --run` | Review the implementation |
166
+ | `req:doctor <id>` | Check gate status |
167
+ | `req:commit <id> --run -m "message"` | Commit approved changes |
168
+
169
+ ---
170
+
171
+ ## Configuration
172
+
173
+ Defaults are enough for most projects. If needed, edit `req.config.json` in the project root.
174
+
175
+ | Key | Default | Meaning |
176
+ |---|---|---|
177
+ | `branchPrefix` | `"feat/req-"` | Prefix for new branches |
178
+ | `ticketRoot` | `"workflow"` | REQ ticket directory |
179
+ | `packageManager` | auto-detected | `npm`, `pnpm`, or `yarn` |
180
+ | `designDocs` | `00/01/02` docs | Design document filenames |
181
+
182
+ Empty `branchPrefix` values and paths that escape the project root are rejected.
183
+
184
+ ---
185
+
186
+ ## FAQ
187
+
188
+ **What happens if Codex CLI is missing?**
189
+ The review command fails. It is not treated as approval.
190
+
191
+ **Can I edit code after approval and still commit?**
192
+ No. If the staged tree changes after approval, CommitGate treats the approval as stale and requires review again.
193
+
194
+ **Why should I not stage `state.json` or `responses/`?**
195
+ They are workflow state and evidence files. Mixing them into the source commit weakens the approval binding, so `req:commit` blocks it.
196
+
197
+ **Does running install twice overwrite files?**
198
+ No. Existing files are skipped. Use `--force` if you intentionally want to refresh them.
199
+
200
+ ---
201
+
202
+ ## Current Scope
203
+
204
+ The current release is **Stage A: vendored scaffold model**. `npx commitgate` copies workflow files into the target project.
205
+
206
+ Future scope:
207
+
208
+ - Running directly from `node_modules` as a library-style model
209
+ - Non-git VCS support
210
+ - More design document templates
211
+ - Broader Linux/macOS CI smoke coverage
212
+
213
+ ---
214
+
215
+ ## License
216
+
217
+ [MIT](./LICENSE) ยฉ 2026 sol5288
package/README.md CHANGED
@@ -1,224 +1,217 @@
1
- # CommitGate ๐Ÿšฆ
1
+ # CommitGate
2
2
 
3
- **AI๊ฐ€ ์ง  ์ฝ”๋“œ๋ฅผ, ๋‹ค๋ฅธ AI๊ฐ€ ๋ฆฌ๋ทฐํ•˜๊ณ  ์Šน์ธํ•ด์•ผ๋งŒ ์ปค๋ฐ‹๋˜๊ฒŒ ํ•˜๋Š” "์ปค๋ฐ‹ ๊ด€๋ฌธ(gate)".**
3
+ ๐ŸŒ **ํ•œ๊ตญ์–ด** ยท [English](./README.en.md)
4
4
 
5
- > ํ•œ ์ค„ ์š”์•ฝ: **๋งŒ๋“œ๋Š” AI(Builder)** ์™€ **๊ฒ€์‚ฌํ•˜๋Š” AI(Reviewer)** ๋ฅผ ์ง์ง€์–ด, **๋ฆฌ๋ทฐยท์Šน์ธยท์ฆ๊ฑฐ ์—†์ด๋Š” ์ปค๋ฐ‹์ด ํ†ต๊ณผํ•˜์ง€ ๋ชปํ•˜๊ฒŒ** ๋ง‰์•„์ค๋‹ˆ๋‹ค.
5
+ **AI ์ฝ”๋”ฉ ๋ณ€๊ฒฝ์„ Codex ๋ฆฌ๋ทฐ ์Šน์ธ ์—†์ด๋Š” ์ปค๋ฐ‹ํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ๋ง‰๋Š” ์ปค๋ฐ‹ ๊ฒŒ์ดํŠธ์ž…๋‹ˆ๋‹ค.**
6
+
7
+ AI ์—์ด์ „ํŠธ๊ฐ€ ์ฝ”๋“œ๋ฅผ ๋น ๋ฅด๊ฒŒ ๋งŒ๋“ค๋”๋ผ๋„, ๋ฆฌ๋ทฐ ์—†์ด ๋ฐ”๋กœ ์ปค๋ฐ‹๋˜๋ฉด ์œ„ํ—˜ํ•ฉ๋‹ˆ๋‹ค. CommitGate๋Š” ๋ณ€๊ฒฝ์„ ํ‹ฐ์ผ“ ๋‹จ์œ„๋กœ ๋ฌถ๊ณ , Codex๊ฐ€ ์Šน์ธํ•œ staged tree๋งŒ ์ปค๋ฐ‹๋˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์Šน์ธ ํ›„ ์ฝ”๋“œ๊ฐ€ ๋ฐ”๋€Œ๊ฑฐ๋‚˜ ์ฆ๊ฑฐ๊ฐ€ ๋ถ€์กฑํ•˜๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ง‰์Šต๋‹ˆ๋‹ค.
6
8
 
7
9
  [![license](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE)
8
10
 
9
11
  ---
10
12
 
11
- ## ๐Ÿค” ์ด๊ฒŒ ๋ญ”๊ฐ€์š”? (๋น„์œ ๋กœ)
12
-
13
- ๊ณตํ•ญ ๋ณด์•ˆ ๊ฒ€์ƒ‰๋Œ€๋ฅผ ๋– ์˜ฌ๋ ค ๋ณด์„ธ์š”. ์•„๋ฌด๋ฆฌ ๊ธ‰ํ•ด๋„ **๊ฒ€์ƒ‰๋Œ€๋ฅผ ํ†ต๊ณผํ•˜์ง€ ์•Š์œผ๋ฉด** ํƒ‘์Šน๊ตฌ๋กœ ๊ฐˆ ์ˆ˜ ์—†์ฃ .
13
+ ## Quick Start
14
14
 
15
- CommitGate๋„ ๋˜‘๊ฐ™์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ์•„๋ฌด๋ฆฌ ๋งŽ์ด ๋งŒ๋“ค์–ด๋„ **"๊ฒ€์‚ฌ โ†’ ์Šน์ธ"์ด๋ผ๋Š” ๊ด€๋ฌธ์„ ํ†ต๊ณผํ•˜์ง€ ์•Š์œผ๋ฉด `git commit`์ด ๋ง‰ํž™๋‹ˆ๋‹ค.**
15
+ ์•„๋ž˜๋Š” ๊ฐ€์žฅ ์งง์€ ์‚ฌ์šฉ ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ๋Š” **git ์ €์žฅ์†Œ์ด๊ณ  `package.json`์ด ์žˆ๋Š” ํด๋”**์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
16
16
 
17
- - ๐Ÿ› ๏ธ **Builder(๋งŒ๋“œ๋Š” ์ชฝ)** โ€” ๋‹น์‹ , ๋˜๋Š” ๋‹น์‹ ์˜ AI ์ฝ”๋”ฉ ๋„๊ตฌ(์˜ˆ: Claude Code). ์š”๊ตฌ์‚ฌํ•ญ์„ ์„ค๊ณ„ํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ์งญ๋‹ˆ๋‹ค.
18
- - ๐Ÿ”Ž **Reviewer(๊ฒ€์‚ฌํ•˜๋Š” ์ชฝ)** โ€” **Codex CLI**. Builder๊ฐ€ ๋งŒ๋“  ๊ฑธ **๋…๋ฆฝ์ ์œผ๋กœ ๋‹ค์‹œ ๊ฒ€ํ† **ํ•ด์„œ ํ†ต๊ณผ/๋ณด์™„์„ ํŒ์ •ํ•ฉ๋‹ˆ๋‹ค.
19
- - ๐Ÿšฆ **CommitGate** โ€” ๊ทธ ์‚ฌ์ด์— ์„œ์„œ, **Reviewer๊ฐ€ ์Šน์ธํ•œ ์ฝ”๋“œ๋งŒ** ์ปค๋ฐ‹๋˜๊ฒŒ ํ•˜๋Š” ๊ทœ์น™(๊ด€๋ฌธ).
17
+ ```sh
18
+ npx commitgate
19
+ npm install
20
+ codex --version
21
+ codex login status
22
+ ```
20
23
 
21
- ์ฆ‰, "ํ˜ผ์ž ๋งŒ๋“ค๊ณ  ํ˜ผ์ž ์ปค๋ฐ‹"์ด ์•„๋‹ˆ๋ผ **"๋งŒ๋“  AI โ†” ๊ฒ€์‚ฌํ•œ AI"์˜ ๊ต์ฐจ ๊ฒ€์ฆ**์„ ๊ฐ•์ œํ•ฉ๋‹ˆ๋‹ค.
24
+ ๊ทธ๋‹ค์Œ AI ์ฝ”๋”ฉ ์—์ด์ „ํŠธ์—๊ฒŒ ์•„๋ž˜ ํ”„๋กฌํ”„ํŠธ๋ฅผ ๋ถ™์—ฌ๋„ฃ์Šต๋‹ˆ๋‹ค.
22
25
 
23
- ## ๐ŸŽฏ ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ํ‘ธ๋‚˜์š”?
26
+ ```text
27
+ ์ด ์š”์ฒญ์€ ์ผ๋ฐ˜ ๊ตฌํ˜„์œผ๋กœ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ง๊ณ , ์ด ํ”„๋กœ์ ํŠธ์— ์„ค์น˜๋œ CommitGate๋ฅผ ์‚ฌ์šฉํ•ด๋ผ.
24
28
 
25
- AI๋Š” ์ฝ”๋“œ๋ฅผ **๋น ๋ฅด๊ฒŒ** ๋งŒ๋“ค์ง€๋งŒ, ๊ฒ€์ฆ ์—†์ด ๊ทธ๋Œ€๋กœ ์ปค๋ฐ‹๋˜๋ฉด ์œ„ํ—˜ํ•ฉ๋‹ˆ๋‹ค. CommitGate๋Š”:
29
+ ์ƒˆ REQ ํ‹ฐ์ผ“์„ ๋งŒ๋“ค๊ณ  ๋‹ค์Œ ํ๋ฆ„์„ ๋๊นŒ์ง€ ์ง„ํ–‰ํ•ด๋ผ:
30
+ req:new โ†’ ์„ค๊ณ„๋ฌธ์„œ ์ž‘์„ฑ โ†’ Codex design ๋ฆฌ๋ทฐ โ†’ ๊ตฌํ˜„ยทํ…Œ์ŠคํŠธ โ†’ req:doctor โ†’ Codex phase ๋ฆฌ๋ทฐ โ†’ req:commit
26
31
 
27
- - โœ… ๋ชจ๋“  ๋ณ€๊ฒฝ์ด **๋ฆฌ๋ทฐ๋ฅผ ๋ฐ˜๋“œ์‹œ ๊ฑฐ์น˜๊ฒŒ** ํ•ฉ๋‹ˆ๋‹ค.
28
- - โœ… ์Šน์ธ์€ **"๋ฆฌ๋ทฐํ•œ ๋ฐ”๋กœ ๊ทธ ์ฝ”๋“œ"์— ๋ฌถ์ž…๋‹ˆ๋‹ค.** (์Šน์ธ ํ›„ ๋ชฐ๋ž˜ ์ฝ”๋“œ๋ฅผ ๋ฐ”๊ฟ”์น˜๊ธฐ ๋ชป ํ•จ โ€” ์ง€๋ฌธ์ฒ˜๋Ÿผ ๋Œ€์กฐ)
29
- - โœ… ๋ฌด์–ธ๊ฐ€ ์• ๋งคํ•˜๊ฑฐ๋‚˜ ๋น ์ง€๋ฉด **์ผ๋‹จ ๋ง‰์Šต๋‹ˆ๋‹ค(fail-closed).** "ํ™•์‹คํ•  ๋•Œ๋งŒ ํ†ต๊ณผ"๊ฐ€ ๊ธฐ๋ณธ๊ฐ’์ด๋ผ ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค.
30
- - โœ… ๋ˆ„๊ฐ€ ์–ธ์ œ ๋ฌด์—‡์„ ์Šน์ธํ–ˆ๋Š”์ง€ **์ฆ๊ฑฐ๊ฐ€ ํŒŒ์ผ๋กœ ๋‚จ์Šต๋‹ˆ๋‹ค.**
32
+ ์ž๋™์œผ๋กœ ์ง„ํ–‰ํ•  ๊ฒƒ:
33
+ - NEEDS_FIX๊ฐ€ ๋‚˜์˜ค๋ฉด ์ˆ˜์ •ํ•˜๊ณ  ์žฌ๋ฆฌ๋ทฐํ•ด ์Šน์ธ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.
34
+ - ๋ฆฌ๋ทฐ ๋Œ€์ƒ์€ git add ํ•œ ํŒŒ์ผ๋งŒ์ด๋‹ค.
35
+ - `state.json`๊ณผ `responses/`๋Š” ์ง์ ‘ `git add`ํ•˜์ง€ ์•Š๋Š”๋‹ค.
31
36
 
32
- ## ๐Ÿ”„ ๋™์ž‘ ํ๋ฆ„ ํ•œ๋ˆˆ์—
37
+ ๋ฉˆ์ถฐ์„œ ํ™•์ธ๋ฐ›์„ ๋•Œ:
38
+ - req:commit --run ์ง์ „
39
+ - main ๋ณ‘ํ•ฉ ๋˜๋Š” push ์ง์ „
40
+ - reset, clean, force push ๊ฐ™์€ destructive ์ž‘์—… ์ „
41
+ - ์š”๊ตฌ์‚ฌํ•ญ ๋ฒ”์œ„๋ฅผ ๋ฐ”๊ฟ”์•ผ ํ•  ๋•Œ
42
+ - Codex ๋ฆฌ๋ทฐ๊ฐ€ 3๋ผ์šด๋“œ๋ฅผ ๋„˜์–ด๋„ ์Šน์ธ๋˜์ง€ ์•Š์„ ๋•Œ
33
43
 
44
+ ์š”๊ตฌ์‚ฌํ•ญ:
45
+ - ๋ฌด์—‡์„:
46
+ - ์™œ:
47
+ - ์ œ์•ฝ:
48
+ - ์™„๋ฃŒ ๊ธฐ์ค€:
34
49
  ```
35
- โ‘  ํ‹ฐ์ผ“ ๋งŒ๋“ค๊ธฐ โ†’ โ‘ก ์„ค๊ณ„ ์ž‘์„ฑ โ†’ โ‘ข ์„ค๊ณ„ ๋ฆฌ๋ทฐ(Codex) โ†’ โ‘ฃ ์ฝ”๋“œ ๊ตฌํ˜„
36
- req:new req:review-codex
37
50
 
38
- โ†’ โ‘ค ๊ด€๋ฌธ ์ ๊ฒ€ โ†’ โ‘ฅ ๊ตฌํ˜„ ๋ฆฌ๋ทฐ(Codex) โ†’ โ‘ฆ ์Šน์ธ๋˜๋ฉด ์ปค๋ฐ‹
39
- req:doctor req:review-codex req:commit
51
+ ์ฒซ ์‘๋‹ต์€ ๋ณดํ†ต ์ด๋ ‡๊ฒŒ ๋‚˜์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค.
52
+
53
+ ```text
54
+ REQ-2026-002 ๋ฐœํ–‰
55
+ ๋ธŒ๋žœ์น˜: feat/req-2026-002-profile-edit-api
56
+ phase:
57
+ - phase-1: PATCH /profile ๊ตฌํ˜„
58
+ - phase-2: ํ…Œ์ŠคํŠธ์™€ ํšŒ๊ท€ ํ™•์ธ
59
+ ํ†ต์ œ์ : req:commit --run ์ง์ „, push ์ง์ „
40
60
  ```
41
61
 
42
- ๊ฐ ๋‹จ๊ณ„์—์„œ **ํ†ต๊ณผํ•˜์ง€ ๋ชปํ•˜๋ฉด ๋‹ค์Œ์œผ๋กœ ๋ชป ๋„˜์–ด๊ฐ‘๋‹ˆ๋‹ค.**
62
+ ์ดํ›„์—๋Š” ์—์ด์ „ํŠธ๊ฐ€ ์„ค๊ณ„, ๊ตฌํ˜„, ํ…Œ์ŠคํŠธ, Codex ๋ฆฌ๋ทฐ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ์ปค๋ฐ‹์ด๋‚˜ push ๊ฐ™์€ ํ†ต์ œ์ ์—์„œ๋งŒ ํ™•์ธํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
43
63
 
44
64
  ---
45
65
 
46
- ## ๐Ÿ“ฆ ์ค€๋น„๋ฌผ (Prerequisites)
66
+ ## ๋ฌด์—‡์„ ๋ณด์žฅํ•˜๋‚˜์š”?
47
67
 
48
- ์‹œ์ž‘ ์ „์— ์•„๋ž˜ 4๊ฐ€์ง€๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํ„ฐ๋ฏธ๋„์—์„œ ํ•˜๋‚˜์”ฉ ํ™•์ธํ•ด ๋ณด์„ธ์š”.
68
+ CommitGate๊ฐ€ ๋ง‰๋Š” ๊ฒƒ์€ ๋‹จ์ˆœํ•œ ๋ช…๋ น ์‹ค์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ **๋ฆฌ๋ทฐ๋ฐ›์ง€ ์•Š์€ ๋ณ€๊ฒฝ์ด ์ปค๋ฐ‹๋˜๋Š” ์ƒํ™ฉ**์ž…๋‹ˆ๋‹ค.
49
69
 
50
- | ํ•„์š”ํ•œ ๊ฒƒ | ํ™•์ธ ๋ช…๋ น | ์—†์œผ๋ฉด |
51
- |---|---|---|
52
- | **Git** (ํ•„์ˆ˜) | `git --version` | [git-scm.com](https://git-scm.com) ์—์„œ ์„ค์น˜ |
53
- | **Node.js 18.17+** (ํ•„์ˆ˜) | `node --version` | [nodejs.org](https://nodejs.org) ์—์„œ ์„ค์น˜ |
54
- | **Codex CLI** (๋ฆฌ๋ทฐ์šฉ) | `codex --version` | OpenAI Codex CLI ์„ค์น˜ (์—†์œผ๋ฉด ๋ฆฌ๋ทฐ๋งŒ ์•ˆ ๋˜๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋จ) |
55
- | **ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €** | `npm --version` | Node ์„ค์น˜ ์‹œ `npm`์€ ๊ธฐ๋ณธ ํฌํ•จ (๋˜๋Š” `pnpm`/`yarn`) |
70
+ - Codex ๋ฆฌ๋ทฐ๊ฐ€ ์‹คํŒจํ•˜๊ฑฐ๋‚˜ ์—†์œผ๋ฉด ์ปค๋ฐ‹ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
71
+ - ์Šน์ธ๋œ staged tree์™€ ์ง€๊ธˆ ์ปค๋ฐ‹ํ•˜๋ ค๋Š” staged tree๊ฐ€ ๋‹ค๋ฅด๋ฉด ๋ง‰์Šต๋‹ˆ๋‹ค.
72
+ - `state.json`, `responses/` ๊ฐ™์€ ์›Œํฌํ”Œ๋กœ ๋‚ด๋ถ€ ํŒŒ์ผ์„ source ์ปค๋ฐ‹์— ์„ž์œผ๋ฉด ๋ง‰์Šต๋‹ˆ๋‹ค.
73
+ - Codex CLI๊ฐ€ ์—†๊ฑฐ๋‚˜ ์‹คํ–‰์— ์‹คํŒจํ•˜๋ฉด ์กฐ์šฉํžˆ ํ†ต๊ณผํ•˜์ง€ ์•Š๊ณ  ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.
74
+ - ์Šน์ธ ์‘๋‹ต๊ณผ ์ฆ๊ฑฐ ํŒŒ์ผ์€ `workflow/REQ-.../responses/`์— ๋‚จ์Šต๋‹ˆ๋‹ค.
56
75
 
57
- > ๐Ÿ’ก **Reviewer = Codex CLI** ์ž…๋‹ˆ๋‹ค. ๋ฆฌ๋ทฐ๋ฅผ ์‹ค์ œ๋กœ ๋Œ๋ฆฌ๋ ค๋ฉด Codex CLI๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•ด์š”. ์—†์œผ๋ฉด ๋ฆฌ๋ทฐ ๋ช…๋ น์ด "์•ˆ์ „ํ•˜๊ฒŒ ์‹คํŒจ(fail-closed)"ํ•ฉ๋‹ˆ๋‹ค โ€” ์กฐ์šฉํžˆ ํ†ต๊ณผ๋˜๋Š” ์ผ์€ ์—†์Šต๋‹ˆ๋‹ค.
76
+ ํ•œ ์ค„๋กœ ๋งํ•˜๋ฉด, **ํ™•์‹คํžˆ ์Šน์ธ๋œ ๋ณ€๊ฒฝ๋งŒ ํ†ต๊ณผํ•˜๊ณ  ์• ๋งคํ•˜๋ฉด ๋ฉˆ์ถ”๋Š” ๋ฐฉ์‹**์ž…๋‹ˆ๋‹ค.
58
77
 
59
78
  ---
60
79
 
61
- ## ๐Ÿš€ ์„ค์น˜ (๋”ฑ ํ•œ ์ค„)
80
+ ## ์„ค์น˜๊ฐ€ ํ•˜๋Š” ์ผ
62
81
 
63
- **๋‹น์‹ ์˜ ํ”„๋กœ์ ํŠธ ํด๋”**(= git ์ €์žฅ์†Œ, `package.json` ์žˆ๋Š” ๊ณณ)์—์„œ:
82
+ `npx commitgate`๋Š” ๋Œ€์ƒ ํ”„๋กœ์ ํŠธ์— ์•„๋ž˜ ํŒŒ์ผ๊ณผ ์„ค์ •์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด ํŒŒ์ผ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฎ์–ด์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
64
83
 
65
- ```sh
66
- npx commitgate
67
- ```
68
-
69
- ์ด ๋ช…๋ น์ด ์ž๋™์œผ๋กœ ํ•ด์ฃผ๋Š” ์ผ (๊ธฐ์กด ํŒŒ์ผ์€ **๋ฎ์–ด์“ฐ์ง€ ์•Š์•„์š”**):
70
-
71
- 1. ์›Œํฌํ”Œ๋กœ ์Šคํฌ๋ฆฝํŠธ(`scripts/req/`)์™€ ์Šคํ‚ค๋งˆ๋ฅผ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.
72
- 2. `req.config.json`(์„ค์ • ํŒŒ์ผ)์„ ๋งŒ๋“ค์–ด ๋‘ก๋‹ˆ๋‹ค.
73
- 3. `package.json`์— `req:*` ๋ช…๋ น๋“ค๊ณผ ํ•„์š”ํ•œ devDependencies(`tsx`, `ajv`)๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
74
- 4. `AGENTS.md`(Reviewer๊ฐ€ ์ฝ๋Š” ๊ทœ์น™ ํŒŒ์ผ)๊ฐ€ ์—†์œผ๋ฉด ํ…œํ”Œ๋ฆฟ์„ ๋งŒ๋“ค์–ด ์ค๋‹ˆ๋‹ค.
84
+ | ์ถ”๊ฐ€ ํ•ญ๋ชฉ | ์„ค๋ช… |
85
+ |---|---|
86
+ | `scripts/req/` | `req:new`, `req:review-codex`, `req:doctor`, `req:commit` ์Šคํฌ๋ฆฝํŠธ |
87
+ | `workflow/*.schema.json` | Codex ์‘๋‹ต๊ณผ ์„ค์ • ๊ฒ€์ฆ ์Šคํ‚ค๋งˆ |
88
+ | `req.config.json` | ํ”„๋กœ์ ํŠธ๋ณ„ ์„ค์ • |
89
+ | `AGENTS.md` | ์—์ด์ „ํŠธ์™€ Reviewer๊ฐ€ ์ฝ๋Š” ๊ทœ์น™ ํ…œํ”Œ๋ฆฟ |
90
+ | `package.json` ์Šคํฌ๋ฆฝํŠธ | `req:*` ๋ช…๋ น๊ณผ ํ•„์š”ํ•œ devDependencies |
75
91
 
76
- ์„ค์น˜ ํ›„, ๋ฐฉ๊ธˆ ์ถ”๊ฐ€๋œ ์˜์กด์„ฑ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค:
92
+ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋งŒ ํ•˜๋ ค๋ฉด:
77
93
 
78
94
  ```sh
79
- npm install
95
+ npx commitgate --dry-run
80
96
  ```
81
97
 
82
- > `--dry-run` ์„ ๋ถ™์ด๋ฉด **์‹ค์ œ๋กœ ๋ฐ”๊พธ์ง€ ์•Š๊ณ ** ๋ฌด์—‡์„ ํ• ์ง€ ๋ฏธ๋ฆฌ ๋ณผ ์ˆ˜ ์žˆ์–ด์š”: `npx commitgate --dry-run`
83
-
84
98
  ---
85
99
 
86
- ## ๐Ÿ‘ฃ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋”ฐ๋ผํ•˜๊ธฐ
100
+ ## ์ค€๋น„๋ฌผ
87
101
 
88
- ์ž‘์€ ๊ธฐ๋Šฅ ํ•˜๋‚˜๋ฅผ ์˜ˆ๋กœ, ์ „์ฒด ํ๋ฆ„์„ ๊ทธ๋Œ€๋กœ ๋ฐŸ์•„ ๋ด…์‹œ๋‹ค. (๋ช…๋ น์€ `npm` ๊ธฐ์ค€์ด๋ฉฐ, `npm run` ๋’ค ์ธ์ž๋Š” `--` ๋‹ค์Œ์— ์”๋‹ˆ๋‹ค. `pnpm`์„ ์“ฐ๋ฉด `pnpm req:new my-feature --run` ์ฒ˜๋Ÿผ `--` ์—†์ด ๋ฉ๋‹ˆ๋‹ค.)
102
+ | ํ•„์š” | ํ™•์ธ ๋ช…๋ น | ๋น„๊ณ  |
103
+ |---|---|---|
104
+ | Git | `git --version` | ํ•„์ˆ˜ |
105
+ | Node.js 18.17+ | `node --version` | ํ•„์ˆ˜ |
106
+ | npm, pnpm, yarn ์ค‘ ํ•˜๋‚˜ | `npm --version` | npm ๊ธฐ์ค€์œผ๋กœ ์•ˆ๋‚ด |
107
+ | Codex CLI | `codex --version` | ๋ฆฌ๋ทฐ ์‹คํ–‰์— ํ•„์š” |
89
108
 
90
- ### 1๋‹จ๊ณ„ โ€” ์ž‘์—… ํ‹ฐ์ผ“ ๋งŒ๋“ค๊ธฐ
109
+ Codex CLI๊ฐ€ ์—†๋‹ค๋ฉด:
91
110
 
92
111
  ```sh
93
- npm run req:new -- my-feature --run
112
+ npm install -g @openai/codex
113
+ codex login
114
+ codex login status
94
115
  ```
95
116
 
96
- - ์ƒˆ ๋ธŒ๋žœ์น˜(`feat/req-...`)๊ฐ€ ์ƒ๊ธฐ๊ณ , `workflow/REQ-2026-001/` ํด๋”์— ์„ค๊ณ„ ๋ฌธ์„œ 3์ข…์ด ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค.
97
- - ์ถœ๋ ฅ์— **ํ‹ฐ์ผ“ ๋ฒˆํ˜ธ**(์˜ˆ: `REQ-2026-001`)๊ฐ€ ๋‚˜์˜ต๋‹ˆ๋‹ค. ์ดํ›„ ๋ช…๋ น์—์„  ๋ฒˆํ˜ธ๋งŒ ์”๋‹ˆ๋‹ค โ†’ `2026-001`
98
-
99
- ### 2๋‹จ๊ณ„ โ€” ์„ค๊ณ„ ๋ฌธ์„œ ์ž‘์„ฑ
117
+ Windows์—์„œ ์„ค์น˜ ์งํ›„ `codex` ๋ช…๋ น์„ ๋ชป ์ฐพ์œผ๋ฉด ์ƒˆ ํ„ฐ๋ฏธ๋„์„ ์—ด์–ด PATH๋ฅผ ๋‹ค์‹œ ์ฝ๊ฒŒ ํ•˜์„ธ์š”.
100
118
 
101
- `workflow/REQ-2026-001/` ์•ˆ์˜ ์„ธ ํŒŒ์ผ์„ ์ฑ„์›๋‹ˆ๋‹ค:
102
-
103
- - `00-requirement.md` โ€” **๋ฌด์—‡์„** ์™œ ๋งŒ๋“œ๋Š”๊ฐ€
104
- - `01-design.md` โ€” **์–ด๋–ป๊ฒŒ** ๋งŒ๋“ค ๊ฒƒ์ธ๊ฐ€
105
- - `02-plan.md` โ€” ์–ด๋–ค **์ˆœ์„œ/๋‹จ๊ณ„**๋กœ ์ง„ํ–‰ํ•  ๊ฒƒ์ธ๊ฐ€
119
+ ---
106
120
 
107
- ### 3๋‹จ๊ณ„ โ€” ์„ค๊ณ„ ๋ฆฌ๋ทฐ ๋ฐ›๊ธฐ (Codex)
121
+ ## ์ˆ˜๋™ ๋ช…๋ น
108
122
 
109
- ์ž‘์„ฑํ•œ ์„ค๊ณ„๋ฅผ ๊ฒ€์‚ฌ๋Œ€์— ์˜ฌ๋ฆฝ๋‹ˆ๋‹ค(= `git add`):
123
+ ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ์ž๋Š” ์œ„ ํ”„๋กฌํ”„ํŠธ ๋ฐฉ์‹์œผ๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” ๋‚ด๋ถ€์—์„œ ์–ด๋–ค ๋ช…๋ น์ด ์‹คํ–‰๋˜๋Š”์ง€ ์ดํ•ดํ•˜๊ฑฐ๋‚˜ ์ง์ ‘ ๋””๋ฒ„๊น…ํ•  ๋•Œ๋งŒ ๋ณด๋ฉด ๋ฉ๋‹ˆ๋‹ค.
110
124
 
111
125
  ```sh
112
- git add workflow/REQ-2026-001/00-requirement.md workflow/REQ-2026-001/01-design.md workflow/REQ-2026-001/02-plan.md
113
- npm run req:review-codex -- 2026-001 --kind design --run
114
- ```
115
-
116
- - Codex๊ฐ€ ์„ค๊ณ„๋ฅผ ์ฝ๊ณ  **์Šน์ธ** ๋˜๋Š” **๋ณด์™„ ์š”์ฒญ(NEEDS_FIX)** ์„ ๋Œ๋ ค์ค๋‹ˆ๋‹ค.
117
- - ๋ณด์™„ ์š”์ฒญ์ด๋ฉด ์ง€์ ์‚ฌํ•ญ์„ ๋ฐ˜์˜ํ•˜๊ณ  **๋‹ค์‹œ `git add` โ†’ ์œ„ ๋ช…๋ น์„ ์žฌ์‹คํ–‰**ํ•˜์„ธ์š”. ์Šน์ธ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.
118
-
119
- ### 4๋‹จ๊ณ„ โ€” ์ฝ”๋“œ ๊ตฌํ˜„ + ํ…Œ์ŠคํŠธ
126
+ # 1. ํ‹ฐ์ผ“๊ณผ ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ
127
+ npm run req:new -- my-feature --run
120
128
 
121
- ์„ค๊ณ„๊ฐ€ ์Šน์ธ๋˜๋ฉด ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ์งœ๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
129
+ # 2. ์„ค๊ณ„ ๋ฌธ์„œ ์ž‘์„ฑ ํ›„ stage
130
+ git add workflow/REQ-2026-001/00-requirement.md workflow/REQ-2026-001/01-design.md workflow/REQ-2026-001/02-plan.md
122
131
 
123
- ### 5๋‹จ๊ณ„ โ€” ๊ด€๋ฌธ ์ ๊ฒ€
132
+ # 3. ์„ค๊ณ„ ๋ฆฌ๋ทฐ
133
+ npm run req:review-codex -- 2026-001 --kind design --run
124
134
 
125
- ๋‚ด ๋ณ€๊ฒฝ์„ ๊ฒ€์‚ฌ๋Œ€์— ์˜ฌ๋ฆฌ๊ณ , ๊ฒŒ์ดํŠธ ์ƒํƒœ๋ฅผ ๋ฏธ๋ฆฌ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค:
135
+ # 4. ์ฝ”๋“œ ๊ตฌํ˜„ ํ›„ stage
136
+ git add <changed-source-files>
126
137
 
127
- ```sh
128
- git add <๋‚ด๊ฐ€-๋ฐ”๊พผ-์ฝ”๋“œ-ํŒŒ์ผ๋“ค>
138
+ # 5. ๊ฒŒ์ดํŠธ ์ ๊ฒ€
129
139
  npm run req:doctor -- 2026-001
130
- ```
131
140
 
132
- - ์—ฌ๋Ÿฌ ํ•ญ๋ชฉ(์„ค๊ณ„ ์Šน์ธ ์œ ํšจํ•œ์ง€, ๊ฒ€์‚ฌ๋Œ€์— ์˜ฌ๋ฆฐ ์ฝ”๋“œ์™€ ์Šน์ธ๋œ ์ฝ”๋“œ๊ฐ€ ๊ฐ™์€์ง€, ์›Œํ‚นํŠธ๋ฆฌ๊ฐ€ ๊นจ๋—ํ•œ์ง€ ๋“ฑ)์„ ์ ๊ฒ€ํ•ด **PASS/FAIL** ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
133
-
134
- > โš ๏ธ **์ค‘์š”:** `git add` ๋Š” **๋‹น์‹ ์ด ๋งŒ๋“  ์ฝ”๋“œ/๋ฌธ์„œ๋งŒ** ์˜ฌ๋ฆฌ์„ธ์š”. `state.json` ์ด๋‚˜ `responses/` ๊ฐ™์€ ์›Œํฌํ”Œ๋กœ ๋‚ด๋ถ€ ํŒŒ์ผ์€ **์˜ฌ๋ฆฌ์ง€ ๋งˆ์„ธ์š”.** (๋„๊ตฌ๊ฐ€ ์•Œ์•„์„œ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ˆ˜๋กœ ์˜ฌ๋ฆฌ๋ฉด ์ปค๋ฐ‹ ๋‹จ๊ณ„์—์„œ ๋ง‰ํž™๋‹ˆ๋‹ค.)
135
-
136
- ### 6๋‹จ๊ณ„ โ€” ๊ตฌํ˜„ ๋ฆฌ๋ทฐ ๋ฐ›๊ธฐ (Codex)
137
-
138
- ```sh
141
+ # 6. ๊ตฌํ˜„ ๋ฆฌ๋ทฐ
139
142
  npm run req:review-codex -- 2026-001 --kind phase --run
143
+
144
+ # 7. ์Šน์ธ๋œ ์ฝ”๋“œ ์ปค๋ฐ‹
145
+ npm run req:commit -- 2026-001 --run -m "feat: my feature"
140
146
  ```
141
147
 
142
- - Codex๊ฐ€ **๊ตฌํ˜„ ์ฝ”๋“œ**๋ฅผ ๋ฆฌ๋ทฐํ•ฉ๋‹ˆ๋‹ค. ์—ญ์‹œ ์Šน์ธ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜์˜ โ†’ ์žฌ์‹คํ–‰ ๋ฐ˜๋ณต.
143
- - ์Šน์ธ๋˜๋ฉด `commit_allowed=true` ๊ฐ€ ๋˜์–ด ์ปค๋ฐ‹์ด ์—ด๋ฆฝ๋‹ˆ๋‹ค.
148
+ ์ค‘์š”: source ์ปค๋ฐ‹์—๋Š” ๋‚ด๊ฐ€ ๋งŒ๋“  ์ฝ”๋“œ์™€ ๋ฌธ์„œ๋งŒ stageํ•˜์„ธ์š”. `state.json`๊ณผ `responses/`๋Š” ๋„๊ตฌ๊ฐ€ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
144
149
 
145
- ### 7๋‹จ๊ณ„ โ€” ์ปค๋ฐ‹
150
+ ์—ฌ๋Ÿฌ ์ค„ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋Š” `-m` ๋Œ€์‹  ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์„ธ์š”.
146
151
 
147
152
  ```sh
148
- npm run req:commit -- 2026-001 --run -m "feat: my-feature ๊ตฌํ˜„"
153
+ npm run req:commit -- 2026-001 --run --message-file commit-message.txt
149
154
  ```
150
155
 
151
- - ๊ด€๋ฌธ(doctor ๊ฒŒ์ดํŠธ)์„ ๋งˆ์ง€๋ง‰์œผ๋กœ ํ†ต๊ณผํ•œ ๋’ค **์ฝ”๋“œ ์ปค๋ฐ‹ + ์ฆ๊ฑฐ ์ปค๋ฐ‹** ์„ ๋‚จ๊น๋‹ˆ๋‹ค.
152
- - ์Šน์ธ๋˜์ง€ ์•Š์•˜๊ฑฐ๋‚˜, ์Šน์ธ ํ›„ ์ฝ”๋“œ๊ฐ€ ๋ฐ”๋€Œ์—ˆ์œผ๋ฉด **์—ฌ๊ธฐ์„œ ๋ง‰ํž™๋‹ˆ๋‹ค.** (๊ทธ๊ฒŒ CommitGate์˜ ํ•ต์‹ฌ)
153
-
154
- ๐ŸŽ‰ ๋! ์ด์ œ ๋ฆฌ๋ทฐยท์Šน์ธยท์ฆ๊ฑฐ๊ฐ€ ๋ชจ๋‘ ๋‚จ์€ ์ƒํƒœ๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ์ปค๋ฐ‹๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
155
-
156
156
  ---
157
157
 
158
- ## ๐Ÿ“‹ ๋ช…๋ น์–ด ์น˜ํŠธ์‹œํŠธ
158
+ ## ๋ช…๋ น์–ด ์š”์•ฝ
159
159
 
160
- | ๋ช…๋ น | ํ•˜๋Š” ์ผ |
160
+ | ๋ช…๋ น | ์šฉ๋„ |
161
161
  |---|---|
162
- | `npx commitgate` | ํ”„๋กœ์ ํŠธ์— CommitGate ์„ค์น˜(์Šค์บํด๋”ฉ) |
163
- | `req:new <์ด๋ฆ„> --run` | ์ƒˆ ์ž‘์—… ํ‹ฐ์ผ“ + ๋ธŒ๋žœ์น˜ + ์„ค๊ณ„๋ฌธ์„œ ์ƒ์„ฑ |
164
- | `req:review-codex <๋ฒˆํ˜ธ> --kind design --run` | **์„ค๊ณ„** ๋ฆฌ๋ทฐ(Codex) |
165
- | `req:review-codex <๋ฒˆํ˜ธ> --kind phase --run` | **๊ตฌํ˜„** ๋ฆฌ๋ทฐ(Codex) |
166
- | `req:doctor <๋ฒˆํ˜ธ>` | ๊ด€๋ฌธ ์ ๊ฒ€(ํ†ต๊ณผ/์‹คํŒจ ํ‘œ์‹œ) |
167
- | `req:commit <๋ฒˆํ˜ธ> --run -m "๋ฉ”์‹œ์ง€"` | ์Šน์ธ๋œ ์ฝ”๋“œ ์ปค๋ฐ‹(+์ฆ๊ฑฐ) |
168
-
169
- > `-m "๋ฉ”์‹œ์ง€"` ๋Œ€์‹  ์—ฌ๋Ÿฌ ์ค„ ๋ฉ”์‹œ์ง€๋Š” `--message-file ๋ฉ”์‹œ์ง€.txt` ๋กœ ํŒŒ์ผ์—์„œ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
162
+ | `npx commitgate` | ํ”„๋กœ์ ํŠธ์— CommitGate ์„ค์น˜ |
163
+ | `req:new <slug> --run` | REQ ํ‹ฐ์ผ“, ๋ธŒ๋žœ์น˜, ์„ค๊ณ„๋ฌธ์„œ ์ƒ์„ฑ |
164
+ | `req:review-codex <id> --kind design --run` | ์„ค๊ณ„ ๋ฆฌ๋ทฐ |
165
+ | `req:review-codex <id> --kind phase --run` | ๊ตฌํ˜„ ๋ฆฌ๋ทฐ |
166
+ | `req:doctor <id>` | ๊ฒŒ์ดํŠธ ์ƒํƒœ ํ™•์ธ |
167
+ | `req:commit <id> --run -m "message"` | ์Šน์ธ๋œ ๋ณ€๊ฒฝ ์ปค๋ฐ‹ |
170
168
 
171
169
  ---
172
170
 
173
- ## โš™๏ธ ์„ค์ • (`req.config.json`, ์„ ํƒ)
171
+ ## ์„ค์ •
174
172
 
175
- ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์˜ `req.config.json` ์œผ๋กœ ๋™์ž‘์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. **ํŒŒ์ผ์ด ์—†์œผ๋ฉด ๊ธฐ๋ณธ๊ฐ’**์œผ๋กœ ์ž˜ ๋™์ž‘ํ•˜๋‹ˆ, ์ฒ˜์Œ์—” ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.
173
+ ๋Œ€๋ถ€๋ถ„์€ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ํ•„์š”ํ•˜๋ฉด ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์˜ `req.config.json`์„ ์ˆ˜์ •ํ•˜์„ธ์š”.
176
174
 
177
- | ํ•ญ๋ชฉ | ๊ธฐ๋ณธ๊ฐ’ | ๋œป |
175
+ | ํ•ญ๋ชฉ | ๊ธฐ๋ณธ๊ฐ’ | ์„ค๋ช… |
178
176
  |---|---|---|
179
- | `branchPrefix` | `"feat/req-"` | ์ƒˆ๋กœ ๋งŒ๋“œ๋Š” ๋ธŒ๋žœ์น˜ ์ด๋ฆ„ ์•ž๋ถ€๋ถ„ |
180
- | `ticketRoot` | `"workflow"` | ํ‹ฐ์ผ“ ํด๋” ์œ„์น˜ |
181
- | `packageManager` | ์ž๋™ ๊ฐ์ง€ | `npm` / `pnpm` / `yarn` |
182
- | `designDocs` | `00-/01-/02-*.md` | ์„ค๊ณ„๋ฌธ์„œ 3์ข… ํŒŒ์ผ๋ช… |
177
+ | `branchPrefix` | `"feat/req-"` | ์ƒˆ ๋ธŒ๋žœ์น˜ prefix |
178
+ | `ticketRoot` | `"workflow"` | REQ ํ‹ฐ์ผ“ ํด๋” |
179
+ | `packageManager` | ์ž๋™ ๊ฐ์ง€ | `npm`, `pnpm`, `yarn` |
180
+ | `designDocs` | `00/01/02` ๋ฌธ์„œ | ์„ค๊ณ„ ๋ฌธ์„œ ํŒŒ์ผ๋ช… |
183
181
 
184
- ์ž˜๋ชป๋œ ๊ฐ’(์˜ˆ: ๋นˆ `branchPrefix`, ํด๋” ๋ฐ–์œผ๋กœ ๋ฒ—์–ด๋‚˜๋Š” ๊ฒฝ๋กœ)์€ **์•ˆ์ „ํ•˜๊ฒŒ ๊ฑฐ๋ถ€**๋ฉ๋‹ˆ๋‹ค.
182
+ ๋นˆ `branchPrefix`๋‚˜ ํ”„๋กœ์ ํŠธ ๋ฐ–์œผ๋กœ ๋‚˜๊ฐ€๋Š” ๊ฒฝ๋กœ๋Š” ๊ฑฐ๋ถ€๋ฉ๋‹ˆ๋‹ค.
185
183
 
186
184
  ---
187
185
 
188
- ## โ“ ์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ / ๋ฌธ์ œ ํ•ด๊ฒฐ
186
+ ## FAQ
189
187
 
190
- **Q. `codex` ๋ช…๋ น์ด ์—†๋‹ค๊ณ  ๋‚˜์™€์š”.**
191
- A. Reviewer(Codex CLI)๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ๋ฆฌ๋ทฐ๊ฐ€ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. ์„ค์น˜ ์ „์—๋Š” ๋ฆฌ๋ทฐ ๋ช…๋ น์ด "์กฐ์šฉํžˆ ํ†ต๊ณผ"ํ•˜์ง€ ์•Š๊ณ  **๋ช…ํ™•ํžˆ ์‹คํŒจ**ํ•ฉ๋‹ˆ๋‹ค โ€” ์ด๊ฒŒ ์ •์ƒ ๋™์ž‘(fail-closed)์ž…๋‹ˆ๋‹ค.
188
+ **Codex CLI๊ฐ€ ์—†์œผ๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”?**
189
+ ๋ฆฌ๋ทฐ ๋ช…๋ น์ด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ์กฐ์šฉํžˆ ์Šน์ธ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
192
190
 
193
- **Q. ์ปค๋ฐ‹ ๋‹จ๊ณ„์—์„œ "staged tree != approved" ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜์š”.**
194
- A. **์Šน์ธ๋ฐ›์€ ์ฝ”๋“œ์™€, ์ง€๊ธˆ ๊ฒ€์‚ฌ๋Œ€(git add)์— ์˜ฌ๋ฆฐ ์ฝ”๋“œ๊ฐ€ ๋‹ค๋ฅด๋‹ค**๋Š” ๋œป์ž…๋‹ˆ๋‹ค. ์Šน์ธ ํ›„์— ์ฝ”๋“œ๋ฅผ ๋ฐ”๊ฟจ๋‹ค๋ฉด 6๋‹จ๊ณ„(๊ตฌํ˜„ ๋ฆฌ๋ทฐ)๋ฅผ ๋‹ค์‹œ ๋ฐ›์•„ ์žฌ์Šน์ธํ•˜์„ธ์š”. (์Šน์ธ ๋ฐ”๊ฟ”์น˜๊ธฐ๋ฅผ ๋ง‰๋Š” ์•ˆ์ „์žฅ์น˜์ž…๋‹ˆ๋‹ค.)
191
+ **์Šน์ธ ํ›„ ์ฝ”๋“œ๋ฅผ ์กฐ๊ธˆ ๊ณ ์น˜๋ฉด ์ปค๋ฐ‹๋˜๋‚˜์š”?**
192
+ ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์Šน์ธ๋œ staged tree์™€ ๋‹ฌ๋ผ์ง€๋ฉด stale ์Šน์ธ์œผ๋กœ ๋ณด๊ณ  ๋‹ค์‹œ ๋ฆฌ๋ทฐ๋ฅผ ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค.
195
193
 
196
- **Q. "๋น„-์ฝ”๋“œ staged ๊ธˆ์ง€(state/responses)" ์˜ค๋ฅ˜๊ฐ€ ๋‚˜์š”.**
197
- A. `git add` ๋กœ `state.json` ์ด๋‚˜ `responses/` ๋ฅผ ์˜ฌ๋ ธ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ ํŒŒ์ผ๋“ค์€ **์˜ฌ๋ฆฌ์ง€ ๋ง๊ณ **(๋„๊ตฌ๊ฐ€ ๊ด€๋ฆฌ), ๋‚ด๊ฐ€ ๋งŒ๋“  ์ฝ”๋“œ/๋ฌธ์„œ๋งŒ ์˜ฌ๋ฆฌ์„ธ์š”.
194
+ **`state.json`์ด๋‚˜ `responses/`๋Š” ์™œ stageํ•˜๋ฉด ์•ˆ ๋˜๋‚˜์š”?**
195
+ ์›Œํฌํ”Œ๋กœ ์ฆ๊ฑฐ์™€ ์ƒํƒœ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. source ์ปค๋ฐ‹์— ์„ž์ด๋ฉด ์Šน์ธ ๋ฐ”์ธ๋”ฉ์ด ํ๋ ค์ง€๋ฏ€๋กœ `req:commit`์ด ๋ง‰์Šต๋‹ˆ๋‹ค.
198
196
 
199
- **Q. `npx commitgate` ๋ฅผ ๋‘ ๋ฒˆ ์‹คํ–‰ํ•˜๋ฉด ๋ฎ์–ด์จ์ง€๋‚˜์š”?**
200
- A. ์•„๋‹ˆ์š”. **์ด๋ฏธ ์žˆ๋Š” ํŒŒ์ผ์€ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค**(๋ฉฑ๋“ฑ). ๊ฐ•์ œ๋กœ ๋ฎ์–ด์“ฐ๋ ค๋ฉด `--force` ๋ฅผ ๋ถ™์ด์„ธ์š”.
201
-
202
- **Q. Windows์ธ๋ฐ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ์ค„๋ฐ”๊ฟˆ์ด ์ด์ƒํ•ด์š”.**
203
- A. ์—ฌ๋Ÿฌ ์ค„ ๋ฉ”์‹œ์ง€๋Š” `-m` ๋Œ€์‹  `--message-file ํŒŒ์ผ.txt` ๋ฅผ ์“ฐ๋ฉด ๊น”๋”ํ•ฉ๋‹ˆ๋‹ค.
197
+ **๋‘ ๋ฒˆ ์„ค์น˜ํ•˜๋ฉด ๋ฎ์–ด์“ฐ๋‚˜์š”?**
198
+ ์•„๋‹ˆ์š”. ๊ธฐ์กด ํŒŒ์ผ์€ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค. ๊ฐ•์ œ๋กœ ๊ฐฑ์‹ ํ•˜๋ ค๋ฉด `--force`๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.
204
199
 
205
200
  ---
206
201
 
207
- ## ๐Ÿ”’ ์–ด๋–ป๊ฒŒ "์•ˆ์ „"์„ ๋ณด์žฅํ•˜๋‚˜์š”? (fail-closed)
202
+ ## ํ˜„์žฌ ๋ฒ”์œ„
208
203
 
209
- CommitGate์˜ ์›์น™์€ **"ํ™•์‹คํžˆ ์Šน์ธ๋์„ ๋•Œ๋งŒ ํ†ต๊ณผ, ์กฐ๊ธˆ์ด๋ผ๋„ ์• ๋งคํ•˜๋ฉด ๋ง‰๋Š”๋‹ค"** ์ž…๋‹ˆ๋‹ค.
204
+ ํ˜„์žฌ ๋ฒ„์ „์€ **Stage A: vendored scaffold ๋ชจ๋ธ**์ž…๋‹ˆ๋‹ค. ์ฆ‰ `npx commitgate`๊ฐ€ ๋Œ€์ƒ ํ”„๋กœ์ ํŠธ์— ์›Œํฌํ”Œ๋กœ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.
210
205
 
211
- - ์„ค๊ณ„๋ฌธ์„œ๊ฐ€ ์—†๊ฑฐ๋‚˜ ํ˜•์‹์ด ์•ˆ ๋งž์œผ๋ฉด โ†’ ๋ฏธ์Šน์ธ ์ทจ๊ธ‰
212
- - Codex๊ฐ€ ์„ค์น˜ ์•ˆ ๋จ / ๋ฆฌ๋ทฐ ์‹คํŒจ โ†’ ํ†ต๊ณผ ์•„๋‹˜, ๋ช…ํ™•ํžˆ ์‹คํŒจ
213
- - ์Šน์ธ๋œ ์ฝ”๋“œ ์ง€๋ฌธ๊ณผ ์ง€๊ธˆ ์ฝ”๋“œ๊ฐ€ ๋‹ค๋ฅด๋ฉด โ†’ ์ปค๋ฐ‹ ๊ฑฐ๋ถ€
214
- - ์›Œํ‚นํŠธ๋ฆฌ๊ฐ€ ์ง€์ €๋ถ„ํ•˜๋ฉด(๋ฆฌ๋ทฐ ์•ˆ ํ•œ ๋ณ€๊ฒฝ ์„ž์ž„) โ†’ ๋ฆฌ๋ทฐ/์ปค๋ฐ‹ ๊ฑฐ๋ถ€
206
+ ์•„๋ž˜๋Š” ํ›„์† ๋ฒ”์œ„์ž…๋‹ˆ๋‹ค.
215
207
 
216
- ์ฆ‰, **"๋ง‰ํžˆ๋Š” ๊ฒŒ ๊ธฐ๋ณธ, ํ†ต๊ณผ๊ฐ€ ์˜ˆ์™ธ"** ๋ผ ์‹ค์ˆ˜๋กœ ๋ฏธ๊ฒ€์ฆ ์ฝ”๋“œ๊ฐ€ ์ƒˆ์–ด ๋‚˜๊ฐˆ ํ‹ˆ์„ ์ค„์ž…๋‹ˆ๋‹ค.
208
+ - `node_modules`์—์„œ ์ง์ ‘ ์‹คํ–‰ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ชจ๋ธ
209
+ - ๋น„-git VCS ์ง€์›
210
+ - ๋” ๋‹ค์–‘ํ•œ ์„ค๊ณ„๋ฌธ์„œ ํ…œํ”Œ๋ฆฟ
211
+ - Linux/macOS CI smoke ํ™•๋Œ€
217
212
 
218
213
  ---
219
214
 
220
- ## ๐Ÿ“„ ๋ผ์ด์„ ์Šค
215
+ ## License
221
216
 
222
217
  [MIT](./LICENSE) ยฉ 2026 sol5288
223
-
224
- > ์ด ์›Œํฌํ”Œ๋กœ๋Š” `palm-kiosk-app`์˜ REQ-2026-017 portability kit์—์„œ ๋…๋ฆฝ ํŒจํ‚ค์ง€๋กœ ์ถ”์ถœ๋˜์—ˆ๊ณ , **์ž๊ธฐ ์ž์‹ ์„ ์ด ์›Œํฌํ”Œ๋กœ๋กœ ๋ฆฌ๋ทฐยท์Šน์ธ(dogfood)** ํ•˜์—ฌ ๊ฒ€์ฆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "commitgate",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "CommitGate โ€” Builderโ†”Reviewer(Claudeโ†”Codex) fail-closed ์ปค๋ฐ‹ ๊ฒŒ์ดํŠธ: ๋ฆฌ๋ทฐยท์Šน์ธยท์ฆ๊ฑฐ ์—†์ธ ์ปค๋ฐ‹์„ ํ†ต๊ณผ์‹œํ‚ค์ง€ ์•Š๋Š” AI REQ ์›Œํฌํ”Œ๋กœ kit (req:new/review-codex/doctor/commit)",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -43,7 +43,8 @@
43
43
  "bin",
44
44
  "AGENTS.template.md",
45
45
  "req.config.json.sample",
46
- "README.md"
46
+ "README.md",
47
+ "README.en.md"
47
48
  ],
48
49
  "engines": {
49
50
  "node": ">=18.17"