@tienne/gestalt 0.122.0 โ 0.124.0
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/dist/package.json +1 -1
- package/dist/plugin/.codex-plugin/plugin.json +1 -1
- package/dist/plugin/skills/_shared/pr-base.md +169 -0
- package/dist/plugin/skills/_shared/proactive-routing.md +1 -1
- package/dist/plugin/skills/jira-create/SKILL.md +39 -4
- package/dist/plugin/skills/pr/SKILL.md +32 -12
- package/dist/plugin/skills/review/SKILL.md +94 -29
- package/dist/plugin/skills/review/references/approve-when-no-blocking.md +7 -0
- package/dist/plugin/skills/review/references/post-confirm.md +30 -0
- package/dist/plugin/skills/review/references/result-lines.md +32 -0
- package/dist/plugin/skills/review/references/user-profile.md +19 -0
- package/dist/plugin/skills/review-loop/SKILL.md +83 -20
- package/dist/plugin/skills/review-reply/SKILL.md +4 -0
- package/dist/plugin/skills/ship/SKILL.md +276 -29
- package/dist/src/architecture/ir-schema.d.ts +26 -26
- package/dist/src/cli/commands/profile.d.ts +13 -0
- package/dist/src/cli/commands/profile.d.ts.map +1 -0
- package/dist/src/cli/commands/profile.js +26 -0
- package/dist/src/cli/commands/profile.js.map +1 -0
- package/dist/src/cli/commands/ship.d.ts +35 -0
- package/dist/src/cli/commands/ship.d.ts.map +1 -0
- package/dist/src/cli/commands/ship.js +146 -0
- package/dist/src/cli/commands/ship.js.map +1 -0
- package/dist/src/cli/index.d.ts.map +1 -1
- package/dist/src/cli/index.js +52 -0
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/core/config.d.ts +12 -12
- package/dist/src/core/types.d.ts +64 -0
- package/dist/src/core/types.d.ts.map +1 -1
- package/dist/src/core/user-profile.d.ts +29 -0
- package/dist/src/core/user-profile.d.ts.map +1 -0
- package/dist/src/core/user-profile.js +97 -0
- package/dist/src/core/user-profile.js.map +1 -0
- package/dist/src/digest/blocks.d.ts +34 -34
- package/dist/src/digest/comments.d.ts +6 -6
- package/dist/src/digest/lens-schema.d.ts +2 -2
- package/dist/src/digest/lint-lens-context.d.ts +4 -4
- package/dist/src/digest/schema.d.ts +55 -55
- package/dist/src/lens/attach.d.ts +10 -10
- package/dist/src/mcp/schemas.d.ts +238 -225
- package/dist/src/mcp/schemas.d.ts.map +1 -1
- package/dist/src/mcp/schemas.js +86 -16
- package/dist/src/mcp/schemas.js.map +1 -1
- package/dist/src/mcp/tools/review-passthrough.d.ts.map +1 -1
- package/dist/src/mcp/tools/review-passthrough.js +61 -2
- package/dist/src/mcp/tools/review-passthrough.js.map +1 -1
- package/dist/src/mcp/tools/status.d.ts +1 -1
- package/dist/src/research/schema.d.ts +66 -66
- package/dist/src/research/target.d.ts +6 -6
- package/dist/src/review/consensus-input.d.ts +11 -0
- package/dist/src/review/consensus-input.d.ts.map +1 -0
- package/dist/src/review/consensus-input.js +102 -0
- package/dist/src/review/consensus-input.js.map +1 -0
- package/dist/src/review/passthrough-engine.d.ts +9 -2
- package/dist/src/review/passthrough-engine.d.ts.map +1 -1
- package/dist/src/review/passthrough-engine.js +58 -10
- package/dist/src/review/passthrough-engine.js.map +1 -1
- package/dist/src/review/verification.d.ts +48 -7
- package/dist/src/review/verification.d.ts.map +1 -1
- package/dist/src/review/verification.js +109 -23
- package/dist/src/review/verification.js.map +1 -1
- package/dist/src/review/verifier-record.d.ts +55 -0
- package/dist/src/review/verifier-record.d.ts.map +1 -0
- package/dist/src/review/verifier-record.js +228 -0
- package/dist/src/review/verifier-record.js.map +1 -0
- package/dist/src/ship/checkpoint.d.ts +145 -0
- package/dist/src/ship/checkpoint.d.ts.map +1 -0
- package/dist/src/ship/checkpoint.js +282 -0
- package/dist/src/ship/checkpoint.js.map +1 -0
- package/dist/src/ship/ci.d.ts +110 -0
- package/dist/src/ship/ci.d.ts.map +1 -0
- package/dist/src/ship/ci.js +270 -0
- package/dist/src/ship/ci.js.map +1 -0
- package/package.json +1 -1
- package/plugin/.codex-plugin/plugin.json +1 -1
- package/plugin/.mcp.json +1 -1
- package/plugin/mcp.json +1 -1
- package/plugin/skills/_shared/pr-base.md +169 -0
- package/plugin/skills/_shared/proactive-routing.md +1 -1
- package/plugin/skills/jira-create/SKILL.md +39 -4
- package/plugin/skills/pr/SKILL.md +32 -12
- package/plugin/skills/review/SKILL.md +94 -29
- package/plugin/skills/review/references/approve-when-no-blocking.md +7 -0
- package/plugin/skills/review/references/post-confirm.md +30 -0
- package/plugin/skills/review/references/result-lines.md +32 -0
- package/plugin/skills/review/references/user-profile.md +19 -0
- package/plugin/skills/review-loop/SKILL.md +83 -20
- package/plugin/skills/review-reply/SKILL.md +4 -0
- package/plugin/skills/ship/SKILL.md +276 -29
|
@@ -14,7 +14,7 @@ inputs:
|
|
|
14
14
|
base:
|
|
15
15
|
type: string
|
|
16
16
|
required: false
|
|
17
|
-
description: "PR์ base ๋ธ๋์น. ์๋ตํ๋ฉด ๋ ํฌ ๊ธฐ๋ณธ ๋ธ๋์น"
|
|
17
|
+
description: "PR์ base ๋ธ๋์น. ์๋ตํ๋ฉด _shared/pr-base.md๋ก ๊ณ ๋ฅธ๋ค (์คํ์ด ์๋๋ฉด ๋ ํฌ ๊ธฐ๋ณธ ๋ธ๋์น)"
|
|
18
18
|
repoRoot:
|
|
19
19
|
type: string
|
|
20
20
|
required: false
|
|
@@ -32,8 +32,10 @@ outputs:
|
|
|
32
32
|
- localRounds
|
|
33
33
|
- prUrl
|
|
34
34
|
- copilotRounds
|
|
35
|
+
- copilotStatus
|
|
35
36
|
- unresolvedAtReady
|
|
36
37
|
- prState
|
|
38
|
+
- ciStatus
|
|
37
39
|
routing:
|
|
38
40
|
note: "๋ก์ปฌ PR โ ๋ฆฌ๋ทฐ ์๋ ด ๋ฃจํ โ ์น์ธ โ draft PR โ Copilot ์๋ ด ๋ฃจํ โ ready. ๋ฆฌ๋ทฐ ํ ๋ฒ๋ง์ด๋ฉด `review`"
|
|
39
41
|
---
|
|
@@ -85,7 +87,7 @@ routing:
|
|
|
85
87
|
## ์ฌ์ฉ ๋ฐฉ๋ฒ
|
|
86
88
|
|
|
87
89
|
```
|
|
88
|
-
/ship # ํ์ฌ ๋ธ๋์น โ
|
|
90
|
+
/ship # ํ์ฌ ๋ธ๋์น โ ์คํ์ด ์๋๋ฉด ๊ธฐ๋ณธ ๋ธ๋์น, ์คํ์ด๋ฉด pr-base๋ก ๊ณ ๋ฅธ ์์ ๋ธ๋์น
|
|
89
91
|
/ship main # base ์ง์
|
|
90
92
|
/ship --max-local 3 # ๋ก์ปฌ ๋ผ์ด๋ ์ํ
|
|
91
93
|
/ship --max-copilot 8 # Copilot ๋ผ์ด๋ ์ํ
|
|
@@ -97,7 +99,7 @@ routing:
|
|
|
97
99
|
|
|
98
100
|
- git ์ ์ฅ์
|
|
99
101
|
- `gh` ์ธ์ฆ (Phase 3๋ถํฐ ํ์ โ Phase 0์์ ๋ฏธ๋ฆฌ ํ์ธํ๋ค)
|
|
100
|
-
- GitHub Enterprise Server๊ฐ ์๋ ๊ฒ (
|
|
102
|
+
- GitHub Enterprise Server๊ฐ ์๋ ๊ฒ (Copilot ๋ฆฌ๋ทฐ์ด ์์ฒญ์ด GHES์์๋ ์ ๋๋ค)
|
|
101
103
|
|
|
102
104
|
## ์์ด์ ํธ๋ ์ ๋ถ ์๋ธ์์ด์ ํธ๋ก ๋๋ฆฐ๋ค
|
|
103
105
|
|
|
@@ -129,10 +131,10 @@ routing:
|
|
|
129
131
|
|
|
130
132
|
| ์๋ฆฌ | ์์ | ๋ฌป๋ ๊ฒ |
|
|
131
133
|
| --- | --- | --- |
|
|
132
|
-
| โฅ | Phase 0์์ ํ ๋ฒ, ๊ทธ๋ฆฌ๊ณ ๊ทธ ์ ์๊ฐ ๋ฐ๋ ๋ผ์ด๋ | ๋ ํฌ์์ ์ฐพ์ ๊ฒ์ฆ ๋ช
๋ น์ด ๋ง๋์ง |
|
|
134
|
+
| โฅ | Phase 0์์ ํ ๋ฒ, ์ด์ด์ ํ ๋ ํ ๋ฒ, ๊ทธ๋ฆฌ๊ณ ๊ทธ ์ ์๊ฐ ๋ฐ๋ ๋ผ์ด๋ | ๋ ํฌ์์ ์ฐพ์ ๊ฒ์ฆ ๋ช
๋ น์ด ๋ง๋์ง |
|
|
133
135
|
| โ | Phase 3 ์ง์ | ๋ก์ปฌ ๋ฆฌ๋ทฐ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ด๊ณ ์ด ์ํ๋ก GitHub์ ์ฌ๋ฆด์ง |
|
|
134
136
|
| โ | Phase 4 ๋ผ์ด๋๋ง๋ค | Copilot ์ฝ๋ฉํธ๋ฅผ ์ ํ๋ณ๋ก ๋ถ๋ฅํด ๋ณด์ด๊ณ ๋ฌด์์ ๋ฐ์ํ ์ง |
|
|
135
|
-
| โ | Phase 5 | draft๋ฅผ ready๋ก
|
|
137
|
+
| โ | Phase 5 | draft๋ฅผ ready๋ก ๋ฐ๊ฟ์ง. CI๊ฐ ์คํจํ์ผ๋ฉด ๋์ ๊ณ ์น ์ง |
|
|
136
138
|
|
|
137
139
|
๋๋จธ์ง๋ **๋ถ๋ฅด๋ ์คํฌ์ด ์๊ธฐ ๊ณ์ฝ์ผ๋ก ์๊ตฌํ๋ ๊ฒ**์ด๋ผ ์ด ์คํฌ์ด ํก์ํ์ง ๋ชปํ๋ค.
|
|
138
140
|
|
|
@@ -218,6 +220,7 @@ Phase 3์ Phase 1์์ ์ง์ ๋ชฉ์ ์ ๊ทธ๋๋ก ์ฐ๊ณ ๊ทธ ๋ค ๋ผ์ด๋์
|
|
|
218
220
|
| "escalate๊ฐ ๋ฌ์ด๋ ๊ฒฐํจ ์ด์๋ถํฐ ๊ณ ์น๊ณ ๋ค์ ํ์ ๋ฐ์ผ๋ฉด ๋๋ค" | ์ ํฉ ์ฌ๊ธ์ด Block์ธ ์ฑ๋ก ๊ฒฐํจ๋ง ๊ณ ์น๋ฉด ๋ค์ ๋ผ์ด๋๋ Block์ด๋ค. 2.7์ 2.3์ผ๋ก ์ ๋ด๋ ค๊ฐ๊ณ ์ฌ๋์๊ฒ ๋ฌป๋๋ค. |
|
|
219
221
|
| "Copilot ์ฝ๋ฉํธ๊ฐ ์ฌ์ํ๋ โ ์์ด ready๋ก ๊ฐ๋ค" | 4.4์ ์๋ ด ์กฐ๊ฑด์ ์ ์ฝ๋ฉํธ 0๊ฑด์ด๋ค. ์ฌ์ํด ๋ณด์ฌ๋ โ์ ์ฌ๋ ค ์คํ์ด๋ฉด ๋ต๊ธ๋ก ๋จ๊ธด๋ค. |
|
|
220
222
|
| "์น์ธ์ ์์์ ์ด๋ฏธ ๋ฐ์๋ค" | โ์ โ์ โ๋ ์ธ๋ถ๋ก ๋๊ฐ๋ ์๊ฐ๋ง๋ค ๋ฐ๋ก ๋ฐ๋๋ค. ready ์ ํ์ โ์์ "๋ฐ๊พผ๋ค"๋ฅผ ๊ณ ๋ฅธ ๊ฒฝ์ฐ์๋ง ํ๋ค. |
|
|
223
|
+
| "๋ก์ปฌ ๊ฒ์ฆ์ ํต๊ณผํ์ผ๋ CI๋ ์ ๊ธฐ๋ค๋ ค๋ ๋๋ค" | CI์์๋ง ๋๋ ๊ฒ์ฌ๊ฐ ์๋ค. ๋น๋ฐ ๊ฐ์ผ๋ก ๋๋ ๊ธ์ง์ด ๊ฒ์ฌ๋ ๋ค๋ฅธ OS์์ ๋๋ ๊ฒ์ฌ๊ฐ ๊ทธ๋ ๋ค. [CI ํ์ธ](#ci-ํ์ธ)์ ๊ฑด๋๋ฐ๋ฉด โ์ ์๋ฃ ๋ณด๊ณ ์ `CI:` ์ค์ ์ฑ์ธ ์ ์๋ค. |
|
|
221
224
|
|
|
222
225
|
## ์งํ ํจ๋
|
|
223
226
|
|
|
@@ -236,10 +239,80 @@ activeForm: "์ถํ ๋ฃจํ ์งํ ์ค"
|
|
|
236
239
|
```
|
|
237
240
|
description: "Phase 2/5 โ ๋ก์ปฌ ๋ฆฌ๋ทฐ ๋ผ์ด๋ {N}/{์ํ} | ์ด์ {M}๊ฑด | ํ์ {Pass|Block}"
|
|
238
241
|
description: "Phase 4/5 โ Copilot ๋ผ์ด๋ {N}/{์ํ} | ์ ์ฝ๋ฉํธ {M}๊ฑด"
|
|
242
|
+
description: "Phase 4/5 โ CI ํ์ธ | {๋๊ธฐ ์ค|ํต๊ณผ|์คํจ n๊ฐ|์งํ ์ค|CI ์์|์ ๋ถ ๊ฑด๋๋}"
|
|
239
243
|
```
|
|
240
244
|
|
|
241
245
|
`TaskCreate`๊ฐ ์๋ ๋ฐํ์์ด๋ฉด ๋ผ์ด๋ ์์๋ง๋ค ํ ์ค๋ก ๋์ ์๋ฆฐ๋ค.
|
|
242
246
|
|
|
247
|
+
## ์ฒดํฌํฌ์ธํธ
|
|
248
|
+
|
|
249
|
+
๋ผ์ด๋๊ฐ ๊ธธ๋ฉด ๋ํ๊ฐ ์์ถ๋๊ฑฐ๋ ์ธ์
์ด ๋๊ธด๋ค. ๊ทธ๋ ๋ค์ ๋ถ๋ฅด๋ฉด ์ฒ์๋ถํฐ ๋์์ ์์์ ๋ฐ์ ๋ฆฌ๋ทฐ์ ์น์ธ์ ๋ ๋ฐ์๋ค. ๋จ๊ณ์ ๋ผ์ด๋๊ฐ ๋๋ ๋๋ง๋ค ์ด๋๊น์ง ์๋์ง ๋จ๊ธฐ๊ณ ๋ค์ ๋ถ๋ฅด๋ฉด ๊ทธ๊ฑธ ์ฝ์ด ์ด์ด์ ๋๋ค.
|
|
250
|
+
|
|
251
|
+
**์๋ฆฌ๋ [์์ ํ์ผ ์๋ฆฌ](#์์-ํ์ผ-์๋ฆฌ)์ `checkpoint.json`์ด๋ค.** ์ ์๋ฆฌ๋ฅผ ๋ง๋ค์ง ์๋๋ค. git ๋๋ ํ ๋ฆฌ ์๋๋ผ ์ด๋ ๋ ํฌ์์๋ ์ถ์ ๋์ง ์๊ณ ๋ธ๋์น๋ณ๋ก ๊ฐ๋ฆฐ๋ค. Phase 5๊ฐ ์ด ์๋ฆฌ๋ฅผ ํต์งธ๋ก ์ง์ฐ๋ฏ๋ก ๋๊น์ง ๊ฐ ์คํ์ ์ฒดํฌํฌ์ธํธ๋ฅผ ๋จ๊ธฐ์ง ์๋๋ค.
|
|
252
|
+
|
|
253
|
+
| ์ธ์ | `--phase` | ํจ๊ป ๋๊ธฐ๋ ๊ฐ |
|
|
254
|
+
| --- | --- | --- |
|
|
255
|
+
| Phase 0 ๋ | `0` | `--base`, `--verify-cmd` |
|
|
256
|
+
| Phase 1 ๋ | `1` | `--local-pr` |
|
|
257
|
+
| 2.2์์ ์๋ ดํ์ ๋, 2.4 ๋ | `2` | `--round`, `--issues`(๊ทธ ๋ผ์ด๋ ๋ฆฌ๋ทฐ์ ์ด์ ์) |
|
|
258
|
+
| 2.5๋ 2.6์์ ๋ฉ์ถ ๋ | `2` | `--stopped blocked` |
|
|
259
|
+
| 2.7์์ ๋ฉ์ถ ๋ | `2` | `--stopped escalated` |
|
|
260
|
+
| โ์์ "์ฌ๊ธฐ์ ๋ฉ์ถ๋ค"๋ฅผ ๊ณจ๋์ ๋ | `a` | |
|
|
261
|
+
| Phase 3 ๋ | `3` | `--pr`, `--pr-url` |
|
|
262
|
+
| 4.4์์ ์๋ ดํ์ ๋, 4.5 ๋ | `4` | `--round`, `--issues`(๊ทธ ๋ผ์ด๋ ์ ์ฝ๋ฉํธ ์) |
|
|
263
|
+
| [CI ํ์ธ](#ci-ํ์ธ) ๋ | `ci` | |
|
|
264
|
+
| 4.6์์ ๋ฉ์ถ ๋ (CI ํ์ธ์ ๋๋ฆฐ ๋ค) | `ci` | `--stopped blocked` |
|
|
265
|
+
| โ์์ "๊ณ ์น๋ค"๋ฅผ ๊ณจ๋ผ pushํ ์งํ | `ci` | `--next "CI ํ์ธ ๋ค์"` |
|
|
266
|
+
|
|
267
|
+
```bash
|
|
268
|
+
shipTmp=<Phase 0์์ ์ถ๋ ฅ๋ ์ ๋ ๊ฒฝ๋ก>
|
|
269
|
+
|
|
270
|
+
gestalt ship checkpoint save --dir "$shipTmp" --phase 2 --round 2 --issues 3 \
|
|
271
|
+
--next "2.1 ๋ก์ปฌ ๋ฆฌ๋ทฐ ๋ผ์ด๋ 3"
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
- **`--next`์๋ ๋ค์์ ํ ์ผ์ ์ ๋ฒํธ์ ํจ๊ป ํ ์ค๋ก ์ ๋๋ค.** ๋ค์ ๋ถ๋ ์ ๋ ์ด ์ค์ ๋ณด๊ณ ์ด๋์ ์ด์ด๊ฐ์ง ์ ํ๋ค
|
|
275
|
+
- ์์์ ๋๊ธด ๊ฐ์ ๋ค์ ์ ์ฅ์ ๋ค์ ์ ๋๊ฒจ๋ ๋จ๋๋ค. ๋ธ๋์น์ HEAD, ์ ์ฅ ์๊ฐ์ ๋ช
๋ น์ด ์ง์ ์ฑ์ด๋ค
|
|
276
|
+
- `--dir`์ ์ ๋ ๊ฒฝ๋ก๋ง ๋ฐ๋๋ค. ๋ณ์๊ฐ ๋น ์ฑ๋ก ํ๋ ค ์๋ ๊ฒฝ๋ก๊ฐ ๋๋ฉด ๊ฑฐ์ ํ๋ค
|
|
277
|
+
- ์ ์ฅ์ด ์คํจํด๋ ์ถํ๋ฅผ ๋ฉ์ถ์ง ์๋๋ค. ์๋ฃ ๋ณด๊ณ ์ `์ฒดํฌํฌ์ธํธ ์ ์ฅ ์คํจ ({stderr ์ฒซ ์ค})`๋ฅผ ์ ๋๋ค
|
|
278
|
+
|
|
279
|
+
### ์ด์ด์ ํ๊ธฐ
|
|
280
|
+
|
|
281
|
+
**Phase 0์ ์ฌ์ ์ ๊ฒ ๋ช
๋ น ๋ค์, base๋ฅผ ๊ณ ๋ฅด๊ธฐ ์ ์ ์ฒดํฌํฌ์ธํธ๋ถํฐ ๋ณธ๋ค.** detached HEAD๋ฉด ๋ธ๋์น๋ณ ์๋ฆฌ๊ฐ ์ ๊ฐ๋ฆฌ๋ฏ๋ก ์ฌ๊ธฐ ์ค๊ธฐ ์ ์ ๋ฉ์ถ๋ค. [์์ ํ์ผ ์๋ฆฌ](#์์-ํ์ผ-์๋ฆฌ)์ `rm -f`๋ณด๋ค๋ ๋จผ์ ๋ค. ์ง์ฐ๊ณ ๋์ ๋ณด๋ฉด ์ด์ด๊ฐ ๊ทผ๊ฑฐ๊ฐ ์๋ค.
|
|
282
|
+
|
|
283
|
+
```bash
|
|
284
|
+
shipBranch=$(git rev-parse --abbrev-ref HEAD)
|
|
285
|
+
shipTmp="$(cd "$(git rev-parse --git-common-dir)" && pwd)/gestalt-ship/$shipBranch"
|
|
286
|
+
mkdir -p "$shipTmp"
|
|
287
|
+
gestalt ship checkpoint check --dir "$shipTmp" --json > "$shipTmp/resume.json"; echo "EXIT=$?"
|
|
288
|
+
echo "$shipTmp"
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
๋ช
๋ น์ ์ฒดํฌํฌ์ธํธ์ ์ปค๋ฐ๊ณผ ์ง๊ธ HEAD, ์ปค๋ฐ ์ ํ ๋ณ๊ฒฝ, ๋ก์ปฌ PR, GitHub PR์ ๋ง์ถฐ ๋ณด๊ณ `status`๋ฅผ ๋ธ๋ค.
|
|
292
|
+
|
|
293
|
+
| `status` | ํ๋ ์ผ |
|
|
294
|
+
| --- | --- |
|
|
295
|
+
| `none` | ์๋ก ์์ํ๋ค. Phase 0์ ๊ทธ๋๋ก ํ๋ค |
|
|
296
|
+
| `match` | ์ฒดํฌํฌ์ธํธ์ `phase`์ `round`, `next`๋ฅผ ํ ์ค๋ก ์๋ฆฌ๊ณ `next` ์๋ฆฌ๋ก ๊ฐ๋ค. `round`๊ฐ `null`์ด๋ฉด ๋ผ์ด๋๋ ๋นผ๊ณ ์ ๋๋ค |
|
|
297
|
+
| `mismatch` | `mismatches[].detail`์ ๊ทธ๋๋ก ๋ณด์ด๊ณ "์ด์ด์ ํ๋ค / ์ฒ์๋ถํฐ ํ๋ค / ๋ฉ์ถ๋ค"๋ก ๋ฌป๋๋ค. `kind`๊ฐ `unreadable`์ด๋ฉด ์ด์ด๊ฐ ๊ฐ์ด ์์ผ๋ฏ๋ก "์ฒ์๋ถํฐ ํ๋ค / ๋ฉ์ถ๋ค"๋ง ๋ฌป๋๋ค |
|
|
298
|
+
|
|
299
|
+
- **์ด์ด์ ํ ๋๋ base์ ๊ฒ์ฆ ๋ช
๋ น์ ์ฒดํฌํฌ์ธํธ ๊ฐ์ผ๋ก ์ด๋ค.** base ์ธ์๋ฅผ ๋ฐ์์ผ๋ฉด ์๋ base ๊ท์น์ ๋จผ์ ๋ฐ๋ฅธ๋ค. pr-base๋ ๋ค์ ๋์ง ์๋๋ค. ๊ฒ์ฆ ๋ช
๋ น์ ์ฒดํฌํฌ์ธํธ์ `verifyCmd`๋ฅผ ํ ์ค๋ก ๋ณด์ด๊ณ โฅ์ ๊ฐ์ ํ์ธ์ ํ ๋ฒ ๋ฐ๋๋ค. ํ์ผ์์ ์ฝ์ ๋ช
๋ น์ ํ์ธ ์์ด ์
ธ๋ก ๋๋ฆฌ์ง ์๋๋ค. ํ์ธ๋ฐ์ ๋ค [๊ฒ์ฆ ๋ช
๋ น ๋์กฐ](#๊ฒ์ฆ-๋ช
๋ น-๋์กฐ--23๊ณผ-45๊ฐ-์ด-์ ์-์ด๋ค) ์ ์ ๊ทธ๋๋ก ๋๋ค. ๊ทธ๋์ `rm -f`๋ ๊ฑด๋๋ด๋ค โ ๋์กฐ๊ฐ ์ง๋ ์คํ์ `verify-src-hash`์ ๋น๊ตํด์ผ ํ๋ค
|
|
300
|
+
- **`stopped`๊ฐ ์์ผ๋ฉด ์ง๋ ์คํ์ด ๊ฑฐ๊ธฐ์ ๋ฉ์ท๋ค๋ ๋ป์ด๋ค.** ๊ทธ๋๋ก ์ด์ด๊ฐ๋ฉด ๊ฐ์ ์๋ฆฌ์์ ๋ ๋ฉ์ถ๋ค. ๋ฉ์ถ ์ด์ ๋ฅผ ๋ณด์ด๊ณ ์ด์ด๊ฐ์ง ๋ฌป๋๋ค. ์ด์ด๊ฐ์ ๋ค์ ์ ์ฅ์ ํ๋ฉด ์ด ํ์๋ ์ ์ ๋ก ์ง์์ง๋ค
|
|
301
|
+
- ์ฒดํฌํฌ์ธํธ ๋ค์ ์ปค๋ฐ์ด ์์๋๋ฐ ์ด์ด์ ํ๊ธฐ๋ก ํ์ผ๋ฉด 2.4์ฒ๋ผ ๋ก์ปฌ PR head๋ถํฐ ์ฎ๊ธด๋ค. 4๋จ๊ณ ์ดํ๋ฉด push๋ถํฐ ํ๋ค
|
|
302
|
+
- 2.5์์ ์ผ ์ฐ์ ํ์๋ ์ด์ด์ ํ ๋ 0๋ถํฐ ๋ค์ ์ผ๋ค. ์ฒดํฌํฌ์ธํธ์๋ ์ด์ ์๋ง ์๊ณ ์ด์ ๋ด์ฉ์ ์๋ค
|
|
303
|
+
- "์ฒ์๋ถํฐ ํ๋ค"๋ฅผ ๊ณ ๋ฅด๋ฉด `checkpoint.json`๊น์ง ์ง์ฐ๊ณ ์๋ก ์์ํ๋ค. ์ ๋๋ ๋ก์ปฌ PR์ Phase 1์ด ๋ค์ ์ฐพ์ ์ด๋ค
|
|
304
|
+
- `EXIT=1`์ด๋ฉด ๋ช
๋ น ์์ฒด๊ฐ ์คํจํ ๊ฒ์ด๋ค(git ์ค๋ฅ๋ `--dir` ์ค๋ฅ). ์ฒดํฌํฌ์ธํธ๊ฐ ๊นจ์ก์ผ๋ฉด `EXIT=1`์ด ์๋๋ผ `mismatch`์ `unreadable`๋ก ์จ๋ค. stderr๋ฅผ ๋ณด์ด๊ณ ์ฒ์๋ถํฐ ํ ์ง ๋ฌป๋๋ค
|
|
305
|
+
|
|
306
|
+
**base ์ธ์๋ฅผ ๋ฐ์๊ณ ์ฒดํฌํฌ์ธํธ๊ฐ ์์ผ๋ฉด `status`๋ฅผ ๋ฐ๋ฅด๊ธฐ ์ ์ base๋ถํฐ ๋ง์ถ๋ค.** ์ฒดํฌํฌ์ธํธ์๋ base ๋์กฐ๊ฐ ์์ด์ `match`๋ก ๋์๋ ์ฌ์ฉ์๊ฐ ์ด๋ฒ์ ์ค base๋ ๋ฌด์๋๊ณ ์ฒดํฌํฌ์ธํธ์ base๊ฐ ์ฐ์ธ๋ค. ๊ทธ๋๋ก ๊ฐ๋ฉด PR์ด ์ base๋ก ์ฌ๋ผ๊ฐ๋ค.
|
|
307
|
+
|
|
308
|
+
1. [Phase 0](#phase-0--์ฌ์ -์ ๊ฒ)์ base ์ธ์ ๊ท์น๋๋ก pr-base 0์ ์ด๋ฆ ๊ฒ์ฌ๋ถํฐ ๊ฑด๋ค. ๊ฑธ๋ฆฌ๋ฉด ๊ฑฐ๊ธฐ์ ๋ฉ์ถ๊ณ ๋ฌป๋๋ค
|
|
309
|
+
2. ํต๊ณผํ ์ธ์๋ฅผ `checkpoint.base`์ ๋น๊ตํ๋ค. ๊ฐ์ผ๋ฉด ์ ํ๋๋ก ๊ฐ๋ค
|
|
310
|
+
3. ๋ค๋ฅด๋ฉด `status`๊ฐ `match`์ฌ๋ `mismatch`์ฒ๋ผ ๋ค๋ฃฌ๋ค. "์ฒดํฌํฌ์ธํธ base({checkpoint.base})๋ก ์ด์ด๊ฐ๋ค / ์ base({์ธ์})๋ก ์ฒ์๋ถํฐ ํ๋ค / ๋ฉ์ถ๋ค"๋ก ๋ฌป๋๋ค
|
|
311
|
+
4. ์ base๋ก ์ฒ์๋ถํฐ ํ๋ฉด `checkpoint.json`์ ์ง์ฐ๊ธฐ ์ ์ ์ฒดํฌํฌ์ธํธ์ ๋ก์ปฌ PR์ `gestalt pr close <localPrId> --reason "base ๋ณ๊ฒฝ"`์ผ๋ก ์ข
๋ฃํ๋ค. ์ข
๋ฃํ์ง ์์ผ๋ฉด Phase 1์ด ์ base๋ก ๋ง๋ ๋ก์ปฌ PR์ ๋ค์ ์ด๋ค
|
|
312
|
+
5. ์ฒดํฌํฌ์ธํธ์ `prNumber`๊ฐ ์์ผ๋ฉด ์ base ์ ํ์ง๋ฅผ ๋นผ๊ณ "GitHub PR์ด ์ด๋ฏธ {checkpoint.base}๋ก ์ด๋ ค ์๋ค"๋ฅผ ๋ณด์ธ ๋ค ์ด์ด๊ฐ๋ค์ ๋ฉ์ถ๋ค๋ง ๋ฌป๋๋ค
|
|
313
|
+
|
|
314
|
+
`unreadable`์ด๋ฉด ๋น๊ตํ base๊ฐ ์์ผ๋ ์ด ๋น๊ต๋ฅผ ๊ฑด๋๋ด๋ค.
|
|
315
|
+
|
|
243
316
|
---
|
|
244
317
|
|
|
245
318
|
## Phase 0 โ ์ฌ์ ์ ๊ฒ
|
|
@@ -248,14 +321,19 @@ description: "Phase 4/5 โ Copilot ๋ผ์ด๋ {N}/{์ํ} | ์ ์ฝ๋ฉํธ {M}
|
|
|
248
321
|
git rev-parse --show-toplevel # ๋ ํฌ์ธ์ง
|
|
249
322
|
git status --porcelain # ์ปค๋ฐ ์ ๋ ๋ณ๊ฒฝ
|
|
250
323
|
git rev-parse --abbrev-ref HEAD # ํ์ฌ ๋ธ๋์น
|
|
251
|
-
gh repo view --json defaultBranchRef --jq .defaultBranchRef.name # base ๊ธฐ๋ณธ๊ฐ
|
|
252
324
|
gh auth status
|
|
253
325
|
```
|
|
254
326
|
|
|
327
|
+
**detached HEAD๊ฐ ์๋๋ฉด base๋ฅผ ๊ณ ๋ฅด๊ธฐ ์ ์ [์ด์ด์ ํ๊ธฐ](#์ด์ด์-ํ๊ธฐ)๋ถํฐ ๋๋ค.** ์ฒดํฌํฌ์ธํธ๋๋ก ์ด์ด๊ฐ๋ฉด base๋ฅผ ๋ค์ ๊ณ ๋ฅด์ง ์๋๋ค. base ์ธ์๋ฅผ ๋ฐ์์ผ๋ฉด ๊ทธ ์ ์ base ๊ท์น๋๋ก ๋จผ์ ๋ง์ถ๋ค.
|
|
328
|
+
|
|
329
|
+
**`base` ์ธ์๊ฐ ์์ผ๋ฉด [`../_shared/pr-base.md`](../_shared/pr-base.md)๋ก ๊ณ ๋ฅธ๋ค.** ๊ธฐ๋ณธ ๋ธ๋์น๋ฅผ ๊ทธ๋๋ก ์ฐ์ง ์๋๋ค. ์คํ ๋ธ๋์น๋ฅผ ๊ธฐ๋ณธ ๋ธ๋์น๋ก ์ฌ๋ฆฌ๋ฉด ์์ ๋ธ๋์น์ ์ปค๋ฐ์ด PR์ ์์ธ๋ค. ๊ทธ ๋ฌธ์์ "๋ณด๊ณ ์ค" ์ ์ ํด๋นํ๋ ์ค์ ์ด ๋จ๊ณ ๋ณด๊ณ ์ ๊ทธ๋๋ก ์ฃ๋๋ค.
|
|
330
|
+
|
|
331
|
+
**`base` ์ธ์๊ฐ ์์ผ๋ฉด ๊ทธ ๋ฌธ์์ 0์ ์ด๋ฆ ๊ฒ์ฌ๋ถํฐ ๊ฑด๋ค.** ๊ฑธ๋ฆฌ๋ฉด ๋ฉ์ถ๊ณ ๋ฌป๋๋ค. ๊ณ ๋ฅธ base๋ ๋ฐ์ base๋ ๊ทธ๋ค์ 4์ ๋ก ๋น๊ต ๊ธฐ์ค ref์ ์ปค๋ฐ ์๋ฅผ ๊ตฌํ๋ค.
|
|
332
|
+
|
|
255
333
|
- **์ปค๋ฐ ์ ๋ ๋ณ๊ฒฝ์ด ์์ผ๋ฉด ๋ฉ์ถ๊ณ ๋ฌป๋๋ค.** ์ด ์คํฌ์ head sha๋ก ๋ผ์ด๋๋ฅผ ๊ฐ๋ฅด๋ฏ๋ก ์ํน ํธ๋ฆฌ๊ฐ ๋๋ฌ์ฐ๋ฉด ๋ฌด์์ด ๋ฆฌ๋ทฐ๋ ๊ฑด์ง ํ๋ ค์ง๋ค.
|
|
256
334
|
- **ํ์ฌ ๋ธ๋์น๊ฐ base์ ๊ฐ์ผ๋ฉด ๋ฉ์ถ๋ค.** ๊ธฐ๋ณธ ๋ธ๋์น์์ ๋ฐ๋ก ์ถํํ์ง ์๋๋ค.
|
|
257
335
|
- **detached HEAD๋ฉด ๋ฉ์ถ๋ค.** ๋ผ์ด๋ ์ํ๋ฅผ ๋ธ๋์น๋ณ๋ก ๊ฐ๋ฅด๋ฏ๋ก ์ด๋ฆ์ด ์์ผ๋ฉด ๋ค๋ฅธ ์ธ์
์ ์๋ฆฌ๋ฅผ ๋ฎ๋๋ค.
|
|
258
|
-
- **base ๋๋น ์ปค๋ฐ์ด ์์ผ๋ฉด ๋ฉ์ถ๋ค.** ๋ฆฌ๋ทฐํ ๊ฒ ์๋ค.
|
|
336
|
+
- **base ๋๋น ์ปค๋ฐ์ด ์์ผ๋ฉด ๋ฉ์ถ๋ค.** ๋ฆฌ๋ทฐํ ๊ฒ ์๋ค. pr-base 4์ ์ด ์ฐ์ `commits`๊ฐ 0์ธ ๊ฒฝ์ฐ๋ค. `commits=error`๋ base๋ฅผ ๋ชป ์ฐพ์๋ค๋ ๋ป์ด๋ผ ๋ฉ์ถ๊ณ base๋ฅผ ๋ค์ ๋ฌป๋๋ค. ๋ด ์ปค๋ฐ์ด ์ด๋ฏธ ๊ธฐ๋ณธ ๋ธ๋์น์ ๋ค์ด๊ฐ์ผ๋ฉด 1์ ์ด ๊ธฐ๋ณธ ๋ธ๋์น๋ฅผ ์ 0์ผ๋ก ๋๋ ค์ฃผ๊ณ 4์ ๋ 0์ ์ฐ๋๋ค.
|
|
259
337
|
- `gh` ์ธ์ฆ์ด ์ ๋ผ ์์ผ๋ฉด **์ฌ๊ธฐ์ ์๋ฆฐ๋ค.** Phase 3์์ ์ฒ์ ์๋ฉด ๋ก์ปฌ ๋ฆฌ๋ทฐ ๋ผ์ด๋๊ฐ ํต์งธ๋ก ํ๋๋ค.
|
|
260
338
|
|
|
261
339
|
ํ์ ํ base๋ฅผ `base`๋ก ๋ณด๊ดํ๋ค. **Phase 3์ `gh pr create`๊ฐ ์ด ๊ฐ์ ๋ฐ๋๋ค.**
|
|
@@ -275,10 +353,12 @@ shipBranch=$(git rev-parse --abbrev-ref HEAD)
|
|
|
275
353
|
shipTmp="$(cd "$(git rev-parse --git-common-dir)" && pwd)/gestalt-ship/$shipBranch"
|
|
276
354
|
mkdir -p "$shipTmp"
|
|
277
355
|
rm -f "$shipTmp"/verify-src "$shipTmp"/verify-src-hash \
|
|
278
|
-
"$shipTmp"/round-start-head "$shipTmp"/requested-at
|
|
356
|
+
"$shipTmp"/round-start-head "$shipTmp"/requested-at "$shipTmp"/checkpoint.json
|
|
279
357
|
echo "$shipTmp"
|
|
280
358
|
```
|
|
281
359
|
|
|
360
|
+
[์ด์ด์ ํ๊ธฐ](#์ด์ด์-ํ๊ธฐ)์์ ์ฒดํฌํฌ์ธํธ๋๋ก ์ด์ด๊ฐ๊ธฐ๋ก ํ์ผ๋ฉด `rm -f` ์ค์ ๊ฑด๋๋ด๋ค.
|
|
361
|
+
|
|
282
362
|
**์ถ๋ ฅ๋ ์ ๋ ๊ฒฝ๋ก๋ฅผ ์ ์ด๋๋ค.** ์ด ์๋ฆฌ๋ git ๋๋ ํ ๋ฆฌ ์๋๋ผ ์ธ์
์ด ๋๋๋ ๋จ๋๋ค. ์ง๋ ์คํ์ด ์ํ์ด๋ escalate๋ก ๋ฉ์ท์ผ๋ฉด ๊ทธ๋ ํ์ผ์ด ๊ทธ๋๋ก ์์ด์ ์ด๋ฒ ์คํ์ด ๋จ์ ์ํ๋ฅผ ๋์กฐํ๋ค. ์์ํ ๋ ํ ๋ฒ ํด๋ค.
|
|
283
363
|
|
|
284
364
|
**ํ์ผ ์ฐ๊ธฐ ๋๊ตฌ์๋ `$shipTmp`๋ฅผ ์ ์ง ์๋๋ค.** ๊ทธ ๋๊ตฌ๋ ์
ธ ํ์ฅ์ ์ ํ๋ฏ๋ก ๋ฌธ์์ด์ด ๊ทธ๋๋ก ๊ฒฝ๋ก๊ฐ ๋๋ค. ์ ๋ ๊ฒฝ๋ก๋ฅผ ์๊ตฌํ๋ ๋ฐํ์์์๋ ๊ฑฐ์ ๋๋ค. ์๋๋ฉด ์ํนํธ๋ฆฌ ์์ `$shipTmp`๋ผ๋ ์ด๋ฆ์ ๋๋ ํ ๋ฆฌ๊ฐ ์๊ธด๋ค โ ์ด ์ ์ด ํผํ๋ ค๋ ๋ฐ๋ก ๊ทธ ๊ฒฐ๊ณผ๋ค. ์์์ ์ถ๋ ฅ๋ ๊ฐ์ ๊ทธ๋๋ก ์ ๋๋ค.
|
|
@@ -362,7 +442,7 @@ Phase 0์์ 4๋ฒ(์ฌ์ฉ์๊ฐ ์ง์ ์ค ๋ช
๋ น)์ผ๋ก ์ ํ์ผ๋ฉด `verify-sr
|
|
|
362
442
|
|
|
363
443
|
`agent:ship`์ผ๋ก ๋จ๊ธฐ๋ ค๋ฉด **์ด ์คํฌ์ด ๋ถ๋ฅด๋ ํ์ ์คํฌ์ `gestalt pr` ํธ์ถ๊น์ง ๊ทธ ๊ฐ์ด ์ค๋ฆฐ๋ค๋ ํ์ฆ**์ด ์์ด์ผ ํ๋ค. ์
ธ ์ํ๊ฐ ๋๊ตฌ ํธ์ถ ์ฌ์ด์ ์ ๋จ๋ ๋ฐํ์์ด๋ฉด `export` ํ ์ค๋ก๋ ์ ๋๋ค. ํ์ฆ์ด ์์ผ๋ฉด ์ ์ด๋ค โ **ํ์ชฝ์๋ง ๋ถ์ด๋ ๊ฒ ์ ์ผ ๋์๋ค.**
|
|
364
444
|
|
|
365
|
-
**์ด ๋ฌธ์์ `gestalt pr` ์์์๋ ์กํฐ๊ฐ ์ ๋ถ์ด ์๋ค.** ๊ธฐ๋ณธ ํํ๋ฅผ ๊ทธ๋๋ก ๋ณด์ธ ๊ฒ์ด๋ค. `agent:ship`์ ๊ณ ๋ฅด๋ฉด
|
|
445
|
+
**์ด ๋ฌธ์์ `gestalt pr` ์์์๋ ์กํฐ๊ฐ ์ ๋ถ์ด ์๋ค.** ๊ธฐ๋ณธ ํํ๋ฅผ ๊ทธ๋๋ก ๋ณด์ธ ๊ฒ์ด๋ค. `agent:ship`์ ๊ณ ๋ฅด๋ฉด ์ด ์คํฌ์ด ๋ถ๋ฅด๋ `gestalt pr` ์ฐ๊ธฐ ๋ช
๋ น ์ ๋ถ์ `GESTALT_ACTOR=agent:ship`์ ์์ ๋ถ์ธ๋ค โ `pr create`, `pr update`(Phase 1, 2.4, [์ด์ด์ ํ๊ธฐ](#์ด์ด์-ํ๊ธฐ)์์ head๋ฅผ ์ฎ๊ธธ ๋), `pr close`(Phase 5, base๋ฅผ ๋ฐ๊ฟ ์ฒ์๋ถํฐ ํ ๋)๋ค. **์ ๋ถ ๋ถ์ด๊ฑฐ๋ ์ ๋ถ ์ ๋ถ์ธ๋ค.**
|
|
366
446
|
|
|
367
447
|
### ๋ช
๋ น ํํ
|
|
368
448
|
|
|
@@ -383,7 +463,7 @@ git merge-base --is-ancestor <PR์ headSha> HEAD # 0์ด๋ฉด ๋ด ๋ธ๋์น์
|
|
|
383
463
|
gestalt pr update <id> --head "$(git rev-parse HEAD)"
|
|
384
464
|
```
|
|
385
465
|
|
|
386
|
-
์์ผ๋ฉด `local-pr` ์คํฌ์ 1๋จ๊ณ๋ก ๋ง๋ ๋ค. description์ `pr` ์คํฌ์ 0~4.5๋จ๊ณ ๋ฐฉ์์ผ๋ก ์ง๋๋ค โ ๊ทธ ์ ์ฐจ๋ฅผ ์ฌ๊ธฐ ๋ค์ ์ ์ง ์๋๋ค.
|
|
466
|
+
์์ผ๋ฉด `local-pr` ์คํฌ์ 1๋จ๊ณ๋ก ๋ง๋ ๋ค. description์ `pr` ์คํฌ์ 0~4.5๋จ๊ณ ๋ฐฉ์์ผ๋ก ์ง๋๋ค โ ๊ทธ ์ ์ฐจ๋ฅผ ์ฌ๊ธฐ ๋ค์ ์ ์ง ์๋๋ค. **`pr` ์คํฌ์ `target`์ผ๋ก Phase 0์ base๋ฅผ ๋๊ธด๋ค.** ์ ๋๊ธฐ๋ฉด ๊ทธ ์คํฌ์ด pr-base๋ก ๋ค์ ๊ณ ๋ฅธ๋ค. ๊ทธ์ฌ์ด ์๊ฒฉ์ด ๋ฐ๋๋ฉด diff ๊ธฐ์ค๊ณผ `--base`๊ฐ ๊ฐ๋ฆฐ๋ค.
|
|
387
467
|
|
|
388
468
|
**์ง์ ๋ณธ๋ฌธ์ ํ์ผ๋ก ๋จ๊ตฐ๋ค.** `pr` ์คํฌ 5๋จ๊ณ๋ heredoc์ผ๋ก ์ ์ถํ๋ฏ๋ก ํ์ผ์ ์ ๋จ๊ธด๋ค. ์ด ์คํฌ์ ๊ทธ ๋ณธ๋ฌธ์ Phase 3์์ ๋ค์ ์ฐ๋ฏ๋ก ์ฌ๊ธฐ์ ์ ์ฅํด ๋๋ค.
|
|
389
469
|
|
|
@@ -558,20 +638,24 @@ gestalt pr update <id> --head "$(git rev-parse HEAD)"
|
|
|
558
638
|
- ์ฐ๊ด PR: owner/name#N ({ํ์ ๊ทผ๊ฑฐ})
|
|
559
639
|
|
|
560
640
|
GitHub์ draft PR๋ก ์ฌ๋ฆด๊น์?
|
|
561
|
-
- ์ฌ๋ฆฐ๋ค / ์์ ํ๊ณ ๋ค์ ๋ฆฌ๋ทฐ / ์ฌ๊ธฐ์ ๋ฉ์ถ๋ค
|
|
641
|
+
- ์ฌ๋ฆฐ๋ค / Copilot ๋ฆฌ๋ทฐ ์์ด ์ฌ๋ฆฐ๋ค / ์์ ํ๊ณ ๋ค์ ๋ฆฌ๋ทฐ / ์ฌ๊ธฐ์ ๋ฉ์ถ๋ค
|
|
562
642
|
```
|
|
563
643
|
|
|
564
644
|
**์ฐ๊ด PR ์ค์ `$shipTmp/related.json`์์ ๋ง๋ ๋ค.** ์ ๋ฉ์ถค ์๋ฆฌ๊ฐ ์๋๋ผ ์ด ๋ฉ์์ง์ ๋ถ๋ ํ ์ค์ด๋ผ "์ฌ๋ฆฐ๋ค"๊ฐ ๊ณง ์ด ์ค์ ํ์ธ์ด๋ค.
|
|
565
645
|
|
|
566
646
|
- `confirmed`๋ "์ฐ๊ด PR: owner/name#N (ํ์ ๊ทผ๊ฑฐ)"๋ก ์ ๋๋ค. ๊ทผ๊ฑฐ๋ `evidence`๋ฅผ ์งง๊ฒ ์ค์ธ๋ค. ์๋ฅผ ๋ค๋ฉด "๊ฐ์ ์์ฑ์, ๊ฐ์ ํฐ์ผ PROJ-123"์ด๋ค
|
|
567
|
-
- `unconfirmed`๋ "์ฐ๊ด PR ํ๋ณด: owner/name#N (ํ์ธ ํ์, {์ด์ })"๋ก ์ ๋๋ค. **"์ฌ๋ฆฐ๋ค"๋ฅผ ๊ณ ๋ฅด๋ฉด ๊ทธ ํ๋ณด๋ฅผ ์น์ธํ ๊ฒ์ผ๋ก ๋ณธ๋ค.** ํ๋ณด๋ฅผ ๋นผ๋ ค๋ฉด ์ฌ์ฉ์๊ฐ ๊ทธ ์ค์์ ๋นผ๋ผ๊ณ ๋ตํ๋ค
|
|
647
|
+
- `unconfirmed`๋ "์ฐ๊ด PR ํ๋ณด: owner/name#N (ํ์ธ ํ์, {์ด์ })"๋ก ์ ๋๋ค. **"์ฌ๋ฆฐ๋ค"๋ฅผ ๊ณ ๋ฅด๋ฉด ๊ทธ ํ๋ณด๋ฅผ ์น์ธํ ๊ฒ์ผ๋ก ๋ณธ๋ค.** "Copilot ๋ฆฌ๋ทฐ ์์ด ์ฌ๋ฆฐ๋ค"๋ ๊ฐ๋ค. ํ๋ณด๋ฅผ ๋นผ๋ ค๋ฉด ์ฌ์ฉ์๊ฐ ๊ทธ ์ค์์ ๋นผ๋ผ๊ณ ๋ตํ๋ค
|
|
568
648
|
- ํ๋ณด๊ฐ ์ฌ๋ฟ์ด๋ฉด ์ค์ ๋๋ ์ ๋๋ค. ์์ผ๋ฉด ์ด ์ค์ ์์ ์ ์ด๋ค
|
|
569
649
|
- ์น์ธ๋ ํ๋ณด๋ง `--confirm owner/name#n`์ผ๋ก ์ดํ ๋จ๊ณ์ ๋๊ธด๋ค. ๋ชฉ๋ก์ ์๋ PR์ ์ฌ๊ธฐ์ ๋ชป ๋ํ๋ค
|
|
570
650
|
|
|
651
|
+
"Copilot ๋ฆฌ๋ทฐ ์์ด ์ฌ๋ฆฐ๋ค"๋ฅผ ๊ณ ๋ฅด๋ฉด Phase 3์ ๊ทธ๋๋ก ๋๊ณ Phase 4๋ [์ฒซ ๋ฌธ๋จ](#phase-4--copilot-๋ฆฌ๋ทฐ-๋ฃจํ)๋๋ก ์์ฒญ์ ์ ๋ณด๋ธ๋ค.
|
|
652
|
+
|
|
571
653
|
## Phase 3 โ GitHub draft PR
|
|
572
654
|
|
|
573
655
|
description์ `pr` ์คํฌ์ 0~4.5๋จ๊ณ๋ฅผ ๊ทธ๋๋ก ํ๋ค. **๋ก์ปฌ PR ๋ณธ๋ฌธ์ ๊ทธ๋ฅ ๋ณต์ฌํ์ง ์๋๋ค** โ ๋ก์ปฌ ๋ผ์ด๋์์ ์ฝ๋๊ฐ ๋ฐ๋์์ผ๋ฏ๋ก diff๊ฐ ๋ค๋ฅด๋ค.
|
|
574
656
|
|
|
657
|
+
**`pr` ์คํฌ์ `target`์ Phase 0์ `base`๋ฅผ ๋๊ธด๋ค.** ์ ๋๊ธฐ๋ฉด ๊ทธ ์คํฌ์ด base๋ฅผ ๋ค์ ๊ณจ๋ผ diff ๊ธฐ์ค๊ณผ `--base`๊ฐ ๊ฐ๋ฆด ์ ์๋ค.
|
|
658
|
+
|
|
575
659
|
Phase 1๊ณผ ๊ฐ์ด **์ง์ ๋ณธ๋ฌธ์ ๋จผ์ ํ์ผ๋ก ๋จ๊ตฐ๋ค.** `pr` ์คํฌ์ ํ์ผ์ ์ ๋จ๊ธฐ๋ฏ๋ก ์ด ์๋ฆฌ๊ฐ ์์ผ๋ฉด ์๋ `--body-file`์ด ์ฝ์ ๊ฒ ์๋ค.
|
|
576
660
|
|
|
577
661
|
```
|
|
@@ -590,7 +674,7 @@ Write <Phase 0์์ ์ถ๋ ฅ๋ ์ ๋ ๊ฒฝ๋ก>/pr-body.md โ 4.5๋จ๊ณ์์
|
|
|
590
674
|
- ์ฐ๊ด PR์ ์ ๋ชฉ์ด๋ ๋ณธ๋ฌธ์ ์ฎ๊ฒจ ์ ์ง ์๋๋ค. ๋งํฌ๋ง ๋๋ค
|
|
591
675
|
- ์ฐ๊ด PR์ด ์์ผ๋ฉด ์ด ์ ์ ๋ง๋ค์ง ์๋๋ค. ๋น ์ ์ ๋จ๊ธฐ์ง ์๋๋ค
|
|
592
676
|
|
|
593
|
-
์ ์ถ๋ง ์ด ์คํฌ์ด ํ๋ค. `pr` ์คํฌ๊ณผ ๊ฐ๋ฆฌ๋ ๊ฑด `--draft`์
|
|
677
|
+
์ ์ถ๋ง ์ด ์คํฌ์ด ํ๋ค. `pr` ์คํฌ๊ณผ ๊ฐ๋ฆฌ๋ ๊ฑด `--draft`์ ๋ณธ๋ฌธ์ ํ์ผ๋ก ๋๊ธฐ๋ ๊ฒ ๋์ด๋ค.
|
|
594
678
|
|
|
595
679
|
```bash
|
|
596
680
|
shipTmp="$(cd "$(git rev-parse --git-common-dir)" && pwd)/gestalt-ship/$(git rev-parse --abbrev-ref HEAD)"
|
|
@@ -611,6 +695,8 @@ PR ๋ฒํธ๋ฅผ `prNumber`, URL์ `prUrl`๋ก ๋ณด๊ดํ๋ค.
|
|
|
611
695
|
|
|
612
696
|
`round = 1`๋ถํฐ `maxCopilotRounds`(๊ธฐ๋ณธ 5)๊น์ง ๋๋ค.
|
|
613
697
|
|
|
698
|
+
**์ฌ์ฉ์๊ฐ Copilot ๋ฆฌ๋ทฐ๋ฅผ ๋นผ๋ผ๊ณ ์ง์ ๋งํ์ผ๋ฉด 4.1 ์์ฒญ์ ๋ณด๋ด์ง ์๋๋ค.** ๋ฐ๋ ์๋ฆฌ๋ ์ด ์คํฌ์ ๋ถ๋ฅผ ๋์ ๋ฉ์์ง์ ์น์ธ ๋จ๊ณ โ์ ๋ต, ๊ทธ๋ฆฌ๊ณ ์ฌ์ฉ์ ๋ฉ๋ชจ๋ฆฌ๋ค. `copilotRounds`๋ฅผ 0, `copilotStatus`๋ฅผ `skipped`๋ก ์ ๊ณ [CI ํ์ธ](#ci-ํ์ธ)์ ๊ฑฐ์ณ ์น์ธ ๋จ๊ณ โ๋ก ๊ฐ๋ค. โ ๋ฉ์์ง์ ์ฒซ ์ค์ `Copilot ๋ฆฌ๋ทฐ ๊ฑด๋๋ (์ฌ์ฉ์๊ฐ ์๋ต, ๊ทผ๊ฑฐ: ๋ํ)`๋ `Copilot ๋ฆฌ๋ทฐ ๊ฑด๋๋ (์ฌ์ฉ์๊ฐ ์๋ต, ๊ทผ๊ฑฐ: ๋ฉ๋ชจ๋ฆฌ ship-skip-copilot.md)`์ฒ๋ผ ๊ทผ๊ฑฐ๊ฐ ์ด๋์ ์๋์ง ๋ถ์ฌ ๋ฐ๊ฟ ์ด๋ค. ๋ฉ์์ง์ ๋๋จธ์ง ์ค์ [๋ฆฌ๋ทฐ๋ฅผ ๋ชป ๋ฐ๊ณ ๋ค์ด์ฌ ๋](#๋ฆฌ๋ทฐ๋ฅผ-๋ชป-๋ฐ๊ณ -๋ค์ด์ฌ-๋)๋ฅผ ๋ฐ๋ฅธ๋ค. ๋ฌด์์ ๊ทผ๊ฑฐ๋ก ์ธ์ ํ๋์ง๋ ์๋ `copilotStatus` ํ ๋ฐ์ ์๋ค.
|
|
699
|
+
|
|
614
700
|
### 4.1 ์์ฒญ
|
|
615
701
|
|
|
616
702
|
**์์ฒญ ์ง์ ์๊ฐ๊ณผ ๋ผ์ด๋ ์์ head๋ฅผ ๋จผ์ ๋ฐ์๋๋ค.** ์๊ฐ์ด ์์ผ๋ฉด ์ด์ ๋ผ์ด๋์ ๋ฆฌ๋ทฐ๋ฅผ ์ด๋ฒ ๊ฒ์ผ๋ก ์ฐฉ๊ฐํ๋ค. head๊ฐ ์์ผ๋ฉด 4.5์ ๊ฒ์ฆ ์กฐ๊ฑด์ด ๋ฌด์๊ณผ ๋น๊ตํ ์ง ๋ชจ๋ฅธ๋ค.
|
|
@@ -620,28 +706,67 @@ shipTmp="$(cd "$(git rev-parse --git-common-dir)" && pwd)/gestalt-ship/$(git rev
|
|
|
620
706
|
|
|
621
707
|
date -u +%Y-%m-%dT%H:%M:%SZ > "$shipTmp/requested-at"
|
|
622
708
|
git rev-parse HEAD > "$shipTmp/round-start-head"
|
|
623
|
-
gh
|
|
709
|
+
gh api -X POST "repos/{owner}/{repo}/pulls/<prNumber>/requested_reviewers" \
|
|
710
|
+
-f 'reviewers[]=copilot-pull-request-reviewer[bot]' \
|
|
711
|
+
> "$shipTmp/request-cp{round}.json" 2> "$shipTmp/request-cp{round}.err"; echo "EXIT=$?"
|
|
712
|
+
```
|
|
713
|
+
|
|
714
|
+
๋ ๊ฐ ๋ค ํ์ผ๋ก ๋๋ค. ์ด์ ๋ 2.1๊ณผ ๊ฐ๋ค โ ์ก๋ ์๋ฆฌ์ ์ฐ๋ ์๋ฆฌ ์ฌ์ด์ ๋๊ธฐ์ ์น์ธ์ด ๋๋ค. ์๋ต ๋ณธ๋ฌธ๊ณผ ํ์ค ์๋ฌ๋ ๋๋ ๋๋ค. ํ ํ์ผ์ ์์ผ๋ฉด ์คํจํ์ ๋ ์ด๋ ์ค์ด GitHub ์๋ต์ธ์ง ๊ฐ๋ฆฌ๊ธฐ ์ด๋ ต๋ค.
|
|
715
|
+
|
|
716
|
+
**`gh pr edit --add-reviewer`๋ฅผ ์ฐ์ง ์๋๋ค.** `gh pr edit`์ ๋ฆฌ๋ทฐ์ด๋ฅผ ๋ถ์ด๊ธฐ ์ ์ PR์ classic Projects ์นด๋๋ฅผ GraphQL๋ก ์ฝ๋๋ค. GitHub์ด ๊ทธ ํ๋๋ฅผ ๋ง์์ ๋ฆฌ๋ทฐ์ด ์์ฒญ๊น์ง ๊ฐ์ง ๋ชปํ๊ณ ์๋ ์๋ฌ๋ก ๋๋๋ค.
|
|
717
|
+
|
|
718
|
+
```
|
|
719
|
+
GraphQL: Projects (classic) is being deprecated in favor of the new Projects experience, see: https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic/. (repository.pullRequest.projectCards)
|
|
624
720
|
```
|
|
625
721
|
|
|
626
|
-
|
|
722
|
+
**๋ฆฌ๋ทฐ์ด ๊ฐ์ `copilot-pull-request-reviewer[bot]`์ด๋ค.** GitHub ๋ฌธ์์ Copilot code review ์ฌ์ฉ๋ฒ์ด REST๋ก ์์ฒญํ ๋ ์ด ์ด๋ฆ์ ์ฐ๋ผ๊ณ ์ ๊ณ ์๋ค. `Copilot`์ด๋ `@copilot`์ผ๋ก ๋ฐ๊พธ์ง ์๋๋ค. ์ด๋ฆ์ด ํ๋ ค๋ POST๋ ์ฑ๊ณต ์ฝ๋๋ฅผ ๋๋ ค์ค์ ํ๋ ธ๋ค๋ ๊ฑธ ์ ์ ์๋ค.
|
|
627
723
|
|
|
628
|
-
|
|
724
|
+
**๋ ๋ฒ์งธ ๋ผ์ด๋๋ถํฐ๋ ๊ฐ์ POST๋ฅผ ๋ณด๋ธ๋ค.** ์ ๋ผ์ด๋์ ์์ฒญ์ Copilot์ด ๋ฆฌ๋ทฐ๋ฅผ ์ ์ถํ๋ฉด ๋๋๋ฏ๋ก ๋ค์ ๋ณด๋ด๋ฉด ์ ์์ฒญ์ด ๋๋ค. ๋ผ์ด๋๋ง๋ค ํ์๋ผ์ธ์ `review_requested` ์ด๋ฒคํธ๊ฐ ์๋ก ๋ถ๊ณ ๋ฆฌ๋ทฐ๋ ์๋ก ์จ๋ค.
|
|
629
725
|
|
|
630
|
-
**์ข
๋ฃ ์ฝ๋๋ก ์ฑ๊ณต์ ํ๋จํ์ง ์๋๋ค.**
|
|
726
|
+
**์ข
๋ฃ ์ฝ๋๋ก ์ฑ๊ณต์ ํ๋จํ์ง ์๋๋ค.** ์์ฒญ์ด ๋ฐ์ ์ ๋ผ๋ 201์ด ์จ๋ค. ์๋ต ๋ณธ๋ฌธ์ `requested_reviewers`์ `GET .../requested_reviewers`๋ ํ๋จ ๊ทผ๊ฑฐ๊ฐ ๋ชป ๋๋ค. Copilot์ ์ฌ๋ ๋ฆฌ๋ทฐ์ด์ ๋ฌ๋ฆฌ ์ด ๋ชฉ๋ก์ ์ ๋ํ๋์ ์์ฒญ์ด ์ ๋ค์ด๊ฐ๋ `[]`๋ค. ์ค์ ๋ก ๋ถ์๋์ง๋ PR ํ์๋ผ์ธ์ `review_requested` ์ด๋ฒคํธ๋ก ํ์ธํ๋ค.
|
|
631
727
|
|
|
632
728
|
```bash
|
|
633
|
-
|
|
729
|
+
shipTmp=<Phase 0์์ ์ถ๋ ฅ๋ ์ ๋ ๊ฒฝ๋ก>
|
|
730
|
+
requestedAt=$(cat "$shipTmp/requested-at")
|
|
731
|
+
[[ $requestedAt =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$ ]] \
|
|
732
|
+
|| { echo "requested-at ํ์์ด ์๋๋๋ค โ ์กฐํํ์ง ์๊ณ ๋ฉ์ถฅ๋๋ค"; exit 1; }
|
|
733
|
+
|
|
734
|
+
accepted=none
|
|
735
|
+
for i in 1 2 3; do
|
|
736
|
+
[ "$i" -gt 1 ] && sleep 5
|
|
737
|
+
logins=$(gh api "repos/{owner}/{repo}/issues/<prNumber>/timeline?per_page=100" --paginate \
|
|
738
|
+
--jq ".[] | select(.event == \"review_requested\" and (.created_at | fromdateiso8601) >= ((\"$requestedAt\" | fromdateiso8601) - 10)) | .requested_reviewer.login // empty") \
|
|
739
|
+
|| { echo "TIMELINE_ERR try=$i"; continue; }
|
|
740
|
+
printf '%s\n' "$logins" | grep -qx Copilot && { accepted=Copilot; break; }
|
|
741
|
+
done
|
|
742
|
+
echo "ACCEPTED=$accepted"
|
|
634
743
|
```
|
|
635
744
|
|
|
636
|
-
|
|
745
|
+
- **`requested-at`์ด `date -u` ํ์์ด ์๋๋ฉด ์กฐํํ์ง ์๊ณ ๋ฉ์ถ๋ค.** ๋น ๊ฐ๊ณผ ๋น๊ตํ๋ฉด ๋ชจ๋ ์ด๋ฒคํธ๊ฐ ๊ฑธ๋ ค ์ ๋ผ์ด๋์ ์์ฒญ์ ์ด๋ฒ ์ ์๋ก ์ฝ๋๋ค. ์ด ๊ฐ์ `--jq` ์์ ๊ทธ๋๋ก ๋ค์ด๊ฐ๋ฏ๋ก ํ์ ๋ฐ์ ๊ธ์๊ฐ ์์ด๋ฉด ์์ด ๋ฐ๋๋ค
|
|
746
|
+
- **๋น๊ต๋ ์ด๋ก ๋ฐ๊ฟ์ ํ๊ณ 10์ด ์ฌ์ ๋ฅผ ๋๋ค.** ๊ธฐ๋กํ ์๊ฐ์ ์ด ๋จธ์ ์ ์๊ณ์ด๊ณ ์ด๋ฒคํธ ์๊ฐ์ GitHub ์๋ฒ์ ์๊ณ๋ค. ์ด ๋จธ์ ์ด ๋ช ์ด ๋น ๋ฅด๋ฉด ๋ฐฉ๊ธ ๋ถ์ ์ด๋ฒคํธ๊ฐ ์์ฒญ ์๊ฐ๋ณด๋ค ์ด๋ฅด๊ฒ ์ฐํ ๋น ์ง๋ค
|
|
747
|
+
- `--jq`๋ ํ์ด์ง๋ง๋ค ๋ฐ๋ก ๋์ง๋ง ์ด ์์ ์ด๋ฒคํธ ํ๋์ฉ ๊ฑฐ๋ฅด๋ฏ๋ก ํ์ด์ง๊ฐ ๋๋์ด๋ ๋น ์ง๋ ๊ฒ ์๋ค
|
|
748
|
+
|
|
749
|
+
`ACCEPTED=Copilot`์ด๋ฉด ์ ์๋๋ค. **์ด๋ฒคํธ๋ ๋ฐ๋ก ์ ๋ถ์ ์ ์์ด์ 5์ด ๊ฐ๊ฒฉ์ผ๋ก ์ธ ๋ฒ๊น์ง ์กฐํํ๋ค.** ๋ฃจํ์ `sleep`์ด ์์ผ๋ฏ๋ก ์ด ๋ธ๋ก์ ๋ฐฑ๊ทธ๋ผ์ด๋ Bash๋ก ๋๋ฆฌ๊ณ ๋๋๋ฉด ๊ฒฐ๊ณผ๋ฅผ ์ฝ๋๋ค. ์ ๊ฒฝ์์ ์ธ์
์ ๋ถ์ก์ง ์๋๋ค. `ACCEPTED=none`์ผ ๋๋ง ์ ์ ์ ๋จ์ผ๋ก ๋ณธ๋ค. `TIMELINE_ERR`๊ฐ ์ธ ๋ฒ ๋ค ์ฐํ์ผ๋ฉด ์ ์ ์ ๋จ์ด ์๋๋ผ ์กฐํ๊ฐ ์คํจํ๋ค. ๊ทธ ์ฌ์ค์ ์๋ฆฌ๊ณ ๊ฐ์ ์ ํ์ง๋ก ๋ฌป๋๋ค.
|
|
750
|
+
|
|
751
|
+
**๋ฌป๊ธฐ ์ ์ ์ด๋ฒ ๋ผ์ด๋์ ์ ์ ์ ๋จ ์ด์ ๋ฅผ ์ ํด ๋๋ค.** ๊ฒฝ์ฐ๋ ์
์ด๋ค.
|
|
637
752
|
|
|
638
|
-
-
|
|
753
|
+
- POST๊ฐ `EXIT=0`์ด ์๋๋ฉด `request-cp{round}.err`์ ์ฒซ ์ค
|
|
754
|
+
- ํ์๋ผ์ธ ์กฐํ๊ฐ ์ธ ๋ฒ ๋ค ์คํจํ์ผ๋ฉด `ํ์๋ผ์ธ ์กฐํ ์คํจ, ์ ์ ์ฌ๋ถ ํ์ธ ๋ชป ํจ: {๋ง์ง๋ง ์๋์ gh ์๋ฌ ์ฒซ ์ค}`
|
|
755
|
+
- POST๋ ์ฑ๊ณตํ๊ณ ์กฐํ๋ ๋๋๋ฐ ์ด๋ฒคํธ๊ฐ ์์ผ๋ฉด `POST๋ ์ฑ๊ณต, ํ์๋ผ์ธ์ ์์ฒญ ์ด๋ฒคํธ ์์`
|
|
756
|
+
|
|
757
|
+
"ํ ๋ฒ ๋ ์กฐํํ๋ค"๋ก ๋ค์ ๋๋ฉด ๊ทธ ํ์ฐจ ๊ฒฐ๊ณผ๋ก ์ด์ ๋ฅผ ๋ค์ ์ ํ๋ค. โ ๋ฉ์์ง์ ์ฒซ ์ค๊ณผ ์๋ฃ ๋ณด๊ณ ์ `Copilot:` ์ค์๋ ์ด ์ด์ ๋ฅผ ๊ณ ์ณ ์ฐ์ง ๋ง๊ณ ๊ทธ๋๋ก ์ฎ๊ธด๋ค. ํ์ผ์ Phase 5์์ ์ง์์ง๋ฏ๋ก ์ด์ ๋ ๋ํ์ ๋จ๊ฒจ ๋๋ค.
|
|
758
|
+
|
|
759
|
+
**POST๋ `EXIT=0`์ธ๋ฐ ์ ์ ์ ๋จ์ด๋ฉด ๋ฌป๋๋ค.** ์ ํ์ง๋ "ํ ๋ฒ ๋ ์กฐํํ๋ค / ๋ฆฌ๋ทฐ ์์ด ์น์ธ ๋จ๊ณ โ๋ก ๊ฐ๋ค / ์ฌ๊ธฐ์ ๋ฉ์ถ๋ค"๋ค. ํ ๋ฒ ๋ ์กฐํํ๋ฉด ์ ๋ธ๋ก์ ๋ค์ ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ๋๋ค. ์ด๋ฒคํธ๊ฐ ๋ฆ๊ฒ ๋ถ๋ ๊ฒฝ์ฐ๊ฐ ์์ด์ ๋ฐ๋ก ๋ฉ์ถ์ง ์๋๋ค.
|
|
760
|
+
|
|
761
|
+
**POST๊ฐ `EXIT=0`์ด ์๋๋ฉด ์์ฒญ ์์ฒด๊ฐ ์ ๋ค์ด๊ฐ๋ค.** ๋ค์ ์กฐํํด๋ ์์ฉ์๊ณ ๊ธฐ๋ค๋ ค๋ ๋ฆฌ๋ทฐ๋ ์ ์จ๋ค. `request-cp{round}.json`๊ณผ `request-cp{round}.err`์ ๋ด์ฉ์ ๊ทธ๋๋ก ๋ณด์ด๊ณ "๋ฆฌ๋ทฐ ์์ด ์น์ธ ๋จ๊ณ โ๋ก ๊ฐ๋ค / ์ฌ๊ธฐ์ ๋ฉ์ถ๋ค"๋ก ๋ฌป๋๋ค.
|
|
762
|
+
|
|
763
|
+
์ด๋ ์ชฝ์ด๋ ์๋ ์์ธ ๋ชฉ๋ก์ ํจ๊ป ๋ณด์ธ๋ค. ํํ ์์ธ ์
์ด๋ค.
|
|
764
|
+
|
|
765
|
+
- GHES๋ผ Copilot code review๋ฅผ ์ง์ํ์ง ์๋๋ค
|
|
639
766
|
- ๋ ํฌ๋ ์กฐ์ง์ Copilot code review๊ฐ ์ ์ผ์ ธ ์๋ค
|
|
640
767
|
- ๊ณ์ ์ Copilot ๊ตฌ๋
์ด ์๋ค
|
|
641
768
|
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
Copilot์ด ๋ฆฌ๋ทฐ๋ฅผ ์ด๋ฏธ ์์ํด ์์ฒญ ๋ชฉ๋ก์์ ๋น ์ก์ ์๋ ์๋ค. ๊ทธ ๊ฒฝ์ฐ๋ 4.2์ ํ์ ์ ๊ฑธ๋ฆฌ๋ฏ๋ก, ๋ชฉ๋ก์ด ๋น์์ผ๋ฉด **ํ ๋ฒ์ 4.2๋ก ๋ด๋ ค๊ฐ ๋ณด๊ณ ** ๊ฑฐ๊ธฐ์๋ ์๋ฌด๊ฒ๋ ์ ์ค๋ฉด ์์ ๊ฒฝ์ฐ๋ก ๊ฐ๋ค.
|
|
769
|
+
์๋ฆด ๋ ๋ฌด์์ ํ์ธํด์ผ ํ๋์ง ํจ๊ป ์ ๋๋ค โ ๋ ํฌ Settings์ Copilot ํญ๋ชฉ๊ณผ ๊ณ์ ๊ตฌ๋
์ด๋ค. **Copilot ๋ฆฌ๋ทฐ๋ฅผ ๋ชป ๋ฐ์๋๋ฐ ๋ฐ์ ๊ฒ์ฒ๋ผ ๋์ด๊ฐ์ง ์๋๋ค.** ์ฌ์ฉ์๊ฐ ์ฌ๊ธฐ์ ๋ฆฌ๋ทฐ ์์ด ์งํํ๊ธฐ๋ก ํ๋ฉด `copilotStatus`๋ฅผ `not-accepted`๋ก ์ ๊ณ ์น์ธ ๋จ๊ณ โ๋ก ๊ฐ๋ค. `copilotRounds`๋ ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ๊ณ ๋๋ธ ๋ผ์ด๋ ์ ๊ทธ๋๋ก๋ผ ์ฒซ ๋ผ์ด๋๋ฉด 0์ด๋ค. โ ๋ฉ์์ง๋ [๋ฆฌ๋ทฐ๋ฅผ ๋ชป ๋ฐ๊ณ ๋ค์ด์ฌ ๋](#๋ฆฌ๋ทฐ๋ฅผ-๋ชป-๋ฐ๊ณ -๋ค์ด์ฌ-๋)๋ฅผ ๋ฐ๋ฅธ๋ค. ์ ์๋ฅผ ํ์ธ ๋ชป ํ ๋ค์ ๋ด๋ฆฐ ๊ฒฐ์ ์ด๋ผ `skipped`๊ฐ ์๋๋ค.
|
|
645
770
|
|
|
646
771
|
### 4.2 ์๋ฃ ๋๊ธฐ
|
|
647
772
|
|
|
@@ -652,7 +777,7 @@ gh pr view <prNumber> --json reviews \
|
|
|
652
777
|
--jq "[.reviews[] | select(.author.login | test(\"[Cc]opilot\")) | .submittedAt] | max"
|
|
653
778
|
```
|
|
654
779
|
|
|
655
|
-
์ด ๊ฐ์ด `requestedAt`๋ณด๋ค ๋ฆ์ผ๋ฉด ์๋ฃ๋ค. **`null`์ด๊ฑฐ๋ `requestedAt`๋ณด๋ค ์ด๋ฅด๋ฉด ์์ง์ด๋ค** โ ์ ๋ผ์ด๋์ ์์์ด๋ค.
|
|
780
|
+
์ด ๊ฐ์ด `requestedAt`๋ณด๋ค ๋ฆ์ผ๋ฉด ์๋ฃ๋ค. **`null`์ด๊ฑฐ๋ `requestedAt`๋ณด๋ค ์ด๋ฅด๋ฉด ์์ง์ด๋ค** โ ์ ๋ผ์ด๋์ ์์์ด๋ค. 4.1๊ณผ ๋ฌ๋ฆฌ ์๊ณ ์ฌ์ ๋ฅผ ๋์ง ์๋๋ค. ๋ฆฌ๋ทฐ๋ ์์ฒญ ๋ค 1๋ถ ๋๊ฒ ์ง๋์ ์ค๋ฏ๋ก ๋ช ์ด ์ด๊ธ๋๋ ํ์ ์ด ์ ๋ฐ๋๋ค. ์ฌ์ ๋ฅผ ๋นผ๋ฉด ์คํ๋ ค ์์ฒญ ์ง์ ์ ๋๋ ์ ๋ผ์ด๋ ๋ฆฌ๋ทฐ๊ฐ ๊ฑธ๋ฆฐ๋ค.
|
|
656
781
|
|
|
657
782
|
๋๊ธฐ ๋ฐฉ์์ ๋ฐํ์์ด ์ฃผ๋ ๊ฒ์ ๋ง์ถ๋ค.
|
|
658
783
|
|
|
@@ -668,6 +793,8 @@ Copilot ๋ฆฌ๋ทฐ๊ฐ 10๋ถ์งธ ์ ์ต๋๋ค. (์์ฒญ์ ์ ์๋จ)
|
|
|
668
793
|
- ๋ ๊ธฐ๋ค๋ฆฐ๋ค / ๋ฆฌ๋ทฐ ์์ด ์น์ธ ๋จ๊ณ โ๋ก ๊ฐ๋ค / ์ฌ๊ธฐ์ ๋ฉ์ถ๋ค
|
|
669
794
|
```
|
|
670
795
|
|
|
796
|
+
๋ฆฌ๋ทฐ ์์ด โ๋ก ๊ฐ๋ฉด `copilotStatus`๋ฅผ `requested`๋ก ์ ๋๋ค. `copilotRounds`๋ ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ๊ณ ๋๋ธ ๋ผ์ด๋ ์ ๊ทธ๋๋ก ๋๋ค. โ ๋ฉ์์ง๋ [๋ฆฌ๋ทฐ๋ฅผ ๋ชป ๋ฐ๊ณ ๋ค์ด์ฌ ๋](#๋ฆฌ๋ทฐ๋ฅผ-๋ชป-๋ฐ๊ณ -๋ค์ด์ฌ-๋)๋ฅผ ๋ฐ๋ฅธ๋ค.
|
|
797
|
+
|
|
671
798
|
์ด์๊ฐ ํ๋๋ ์์ ๋๋ ๋ฆฌ๋ทฐ๋ ์ ์ถ๋๋ค. body๋ง ์๊ณ ์ธ๋ผ์ธ ์ฝ๋ฉํธ๊ฐ 0์ธ ํํ๋ค. ๊ทธ๊ฑด **์๋ฃ์ด์ ์๋ ด**์ด๋ค.
|
|
672
799
|
|
|
673
800
|
### 4.3 ์ฝ๋ฉํธ ์์ง
|
|
@@ -695,6 +822,8 @@ gh api "repos/{owner}/{repo}/pulls/<prNumber>/comments?since=<๊ธฐ์ค ์๊ฐ>" \
|
|
|
695
822
|
์ด๋ฒ ๋ผ์ด๋ ์ ์ฝ๋ฉํธ 0๊ฑด โ ์๋ ด. ๋ฃจํ ํ์ถ
|
|
696
823
|
```
|
|
697
824
|
|
|
825
|
+
์๋ ดํ ๋ผ์ด๋๋ ๋ฆฌ๋ทฐ๋ ์ ์ถ๋์ผ๋ฏ๋ก `copilotRounds`์ ์ผ๋ค. ์๋ ดํด ๋น ์ง ๋ `copilotRounds`๋ ์ง๊ธ `round`์ ๊ฐ๋ค.
|
|
826
|
+
|
|
698
827
|
### 4.5 ์น์ธ ๋จ๊ณ โ์ ๋์
|
|
699
828
|
|
|
700
829
|
`review-reply` ์คํฌ์ `prNumber` ๋์์ผ๋ก ๋ถ๋ฅธ๋ค. ์ ํ ๋ถ๋ฅ ์น์ธ์ด โ๋ค.
|
|
@@ -738,7 +867,44 @@ git push
|
|
|
738
867
|
|
|
739
868
|
2.5์ ๊ฐ๋ค. ๊ฐ์ ์ฝ๋ฉํธ๊ฐ ์ธ ๋ผ์ด๋ ์ฐ์ ๋จ์ผ๋ฉด ์ํ์ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ฉ์ถ๋ค.
|
|
740
869
|
|
|
741
|
-
`maxCopilotRounds`๋ฅผ ์ฑ์ ๋๋ฐ ์ ์ฝ๋ฉํธ๊ฐ ๊ณ์ ๋์ค๋ฉด ์น์ธ ๋จ๊ณ โ๋ก ์ ๋์ด๊ฐ๋ค. ๋จ์ ์ค๋ ๋๋ฅผ ์ ๋ฆฌํด ๋ณด๊ณ ํ๊ณ ๋ฉ์ถ๋ค. draft๋ draft๋ก ๋๋ค.
|
|
870
|
+
`maxCopilotRounds`๋ฅผ ์ฑ์ ๋๋ฐ ์ ์ฝ๋ฉํธ๊ฐ ๊ณ์ ๋์ค๋ฉด ์น์ธ ๋จ๊ณ โ๋ก ์ ๋์ด๊ฐ๋ค. ๋จ์ ์ค๋ ๋๋ฅผ ์ ๋ฆฌํด ๋ณด๊ณ ํ๊ณ ๋ฉ์ถ๋ค. draft๋ draft๋ก ๋๋ค. ๋ฉ์ถ๊ธฐ ์ ์ [CI ํ์ธ](#ci-ํ์ธ)์ ํ ๋ฒ ๋๋ ค ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ ์ ์ฃ๋๋ค. ์คํจํด๋ ์ฌ๊ธฐ์๋ ๊ณ ์น์ง ์๋๋ค. [์ฒดํฌํฌ์ธํธ](#์ฒดํฌํฌ์ธํธ)๋ CI ํ์ธ ๋ค์ `--stopped blocked`๋ก ์ ์ฅํ๋ค. ์์ ์ ์ฅํ๋ฉด CI ํ์ธ ๋์ ์ ์ฅ์ด ๋ฉ์ถค ํ์๋ฅผ ์ง์ด๋ค.
|
|
871
|
+
|
|
872
|
+
## CI ํ์ธ
|
|
873
|
+
|
|
874
|
+
draft PR์ ์ฌ๋ฆฐ ๋ค CI ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ค๋ ค โ์ ์๋ฃ ๋ณด๊ณ ์ ์ฃ๋๋ค. ๋ก์ปฌ ๊ฒ์ฆ ๋ช
๋ น์ ํต๊ณผํด๋ CI์์๋ง ๋๋ ๊ฒ์ฌ๊ฐ push ๋ค์ ๊นจ์ง ์ ์๋ค. ๋น๋ฐ ๊ฐ์ผ๋ก ๋๋ ๊ธ์ง์ด ๊ฒ์ฌ๋ ๋ค๋ฅธ OS์ Node ๋ฒ์ ์กฐํฉ์ผ๋ก ๋๋ ๊ฒ์ฌ๊ฐ ๊ทธ๋ ๋ค. ์ฌ์ฉ์๊ฐ PR์ ์ด์ด ๋ณด๊ณ ์์ผ ์คํจ๋ฅผ ์๋ฉด ์ถํ๊ฐ ๋๋ฌ๋ค๊ณ ํ ๋ณด๊ณ ๊ฐ ํ๋ฆฐ ๋ง์ด ๋๋ค.
|
|
875
|
+
|
|
876
|
+
**Phase 4๊ฐ ์ด๋ป๊ฒ ๋๋๋ โ ์ ์ ์ด ์ ์ ๋๋ค.** 4.4์์ ์๋ ดํ๋ `skipped`๋ `not-accepted`, `requested`๋ก ๋์ด์๋ ๊ฐ๋ค. Phase 4์์ "์ฌ๊ธฐ์ ๋ฉ์ถ๋ค"๋ฅผ ๊ณจ๋์ ๋๋ 4.6์ฒ๋ผ ํ ๋ฒ ๋๋ ค ๋ณด๊ณ ์๋ง ์ฃ๋๋ค.
|
|
877
|
+
|
|
878
|
+
๋๊ธฐ๊ฐ ๊ธธ์ด Bash๋ฅผ ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ๋๋ฆฌ๊ณ ๋๋๋ฉด ๊ฒฐ๊ณผ ํ์ผ์ ์ฝ๋๋ค.
|
|
879
|
+
|
|
880
|
+
```bash
|
|
881
|
+
shipTmp=<Phase 0์์ ์ถ๋ ฅ๋ ์ ๋ ๊ฒฝ๋ก>
|
|
882
|
+
|
|
883
|
+
gestalt ship ci-wait --pr <prNumber> --head "$(git rev-parse HEAD)" --json \
|
|
884
|
+
> "$shipTmp/ci.json" 2> "$shipTmp/ci.err"; echo "EXIT=$?"
|
|
885
|
+
```
|
|
886
|
+
|
|
887
|
+
- **`--head`๋ฅผ ๊ผญ ๋๊ธด๋ค.** push ์งํ์๋ PR์ด ์์ง ์ ์ปค๋ฐ์ ๊ฐ๋ฆฌ์ผ์ ์ ์ปค๋ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ฒ ๊ฒ์ผ๋ก ์ฝ๋๋ค
|
|
888
|
+
- ๊ธฐ๋ณธ ์ํ์ 15๋ถ(`--timeout 900`)์ด๋ค. ์ฒดํฌ๊ฐ ํ๋๋ ์ ๋ถ์ ์ฑ 2๋ถ(`--grace 120`)์ด ์ง๋๋ฉด CI๊ฐ ์๋ค๊ณ ๋ณธ๋ค
|
|
889
|
+
- `EXIT=1`์ด๋ฉด ํ์ ์ ์ง์ด๋ด์ง ์๋๋ค. `ci.err`์ ์ฒซ ์ค์ ๊ทธ๋๋ก ์ฎ๊ธฐ๊ณ `ciStatus`๋ฅผ `unchecked`๋ก ์ ๋๋ค
|
|
890
|
+
|
|
891
|
+
`ci.json`์ `status`๋ก ๊ฐ๋ฆฐ๋ค.
|
|
892
|
+
|
|
893
|
+
| `status` | โ์ ๋ณด๊ณ ์ ์ฐ๋ ๋ง | ๋ค์ |
|
|
894
|
+
| --- | --- | --- |
|
|
895
|
+
| `pass` | ํต๊ณผ | โ |
|
|
896
|
+
| `none` | CI ์์ | โ |
|
|
897
|
+
| `skipped` | ์ ๋ถ ๊ฑด๋๋ ({n}๊ฐ) | โ. ์๋ ์ค๋ช
์ CI ์ค ์๋์ ์ ๋๋ค |
|
|
898
|
+
| `pending` | ์งํ ์ค (15๋ถ ์์ ์ ๋๋จ) | โ. ๋ ๊ธฐ๋ค๋ฆฌ์ง ์๋๋ค |
|
|
899
|
+
| `fail` | ์คํจ {n}๊ฐ. `pending`์ด ๋จ์์ผ๋ฉด `์คํจ {n}๊ฐ (๋๋จธ์ง {k}๊ฐ๋ ์ ๋๋ ์ฑ ๋ฉ์ถค)` | โ์์ ๊ณ ์น ์ง ๋ฌป๋๋ค |
|
|
900
|
+
|
|
901
|
+
**์คํจํ๋ฉด `failed[]`์ ์ก ์ด๋ฆ๊ณผ `causeLines`๋ฅผ ๋ณด์ธ๋ค.** ์์ธ ์ค์ CI ๋ก๊ทธ์์ ๊ณ ๋ฅธ ์ธ๋ถ ํ
์คํธ๋ค. 4.3์ Copilot ์ฝ๋ฉํธ์ฒ๋ผ ์ง์๋ก ์ฝ์ง ์๋๋ค. `logError`๊ฐ ์๋ ์ก์ ์์ธ ์ค ๋์ ๊ทธ ์ด์ ์ `link`๋ฅผ ์ ๋๋ค. `causeLinesTotal`์ด `causeLines` ๊ฐ์๋ณด๋ค ํฌ๋ฉด ์์ธ ์ค ์๋์ `์ธ {์ฐจ์ด}์ค`์ ๋ถ์ธ๋ค. `causeFromTail`์ด `true`๋ฉด ์์ธ ํ์๋ฅผ ๋ชป ์ฐพ์ ๋ก๊ทธ ๋ ์ค์ ๋์ ๋ธ ๊ฒ์ด๋ผ ๊ทธ ์ฌ์ค์ ์์ธ ์ค ์์ ์ ๋๋ค.
|
|
902
|
+
|
|
903
|
+
์คํจ๊ฐ ํ๋๋ผ๋ ๋ณด์ด๋ฉด ๋ช
๋ น์ ์ ๋๋ ์ฒดํฌ๋ฅผ ๋ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ `fail`๋ก ๋๋ธ๋ค. ๋จ์ ์ฒดํฌ๋ `pending`์ ์ค๋ฆฐ๋ค.
|
|
904
|
+
|
|
905
|
+
**์ฒดํฌ๊ฐ ๋ค ๋๋ฌ๋๋ฐ ํต๊ณผํ ๊ฒ ํ๋๋ ์์ผ๋ฉด `skipped`๋ค.** `if: github.event.pull_request.draft == false`์ฒ๋ผ draft์์ ์ก์ ๊ฑด๋๋ฐ๋ ๋ ํฌ์์ ์๊ธด๋ค. ์ด ์คํฌ์ PR์ draft๋ก ์ฌ๋ฆฌ๋ฏ๋ก ์๋ฌด ๊ฒ์ฌ๋ ์ ๋ ์ฑ ๋๋ ๊ฒ์ด๋ผ ํต๊ณผ๋ก ์ ์ง ์๋๋ค. โ์ CI ์ค ์๋์ "draft๋ผ์ ๊ฑด๋๋ด ์ก์ผ ์ ์์ด์. ready๋ก ๋ฐ๊พผ ๋ค CI๊ฐ ๋ค์ ๋์์"๋ฅผ ์ ๋๋ค. ํต๊ณผํ ์ฒดํฌ๊ฐ ํ๋๋ผ๋ ์์ผ๋ฉด ๋๋จธ์ง๊ฐ ๊ฑด๋๋ฐ์์ด๋ `pass`๋ค.
|
|
906
|
+
|
|
907
|
+
โ์์ "๊ณ ์น๋ค"๋ฅผ ๊ณ ๋ฅด๋ฉด 4.5์ ๊ฐ์ ์์๋ก ๊ฐ๋ค. [๊ฒ์ฆ ๋ช
๋ น ๋์กฐ](#๊ฒ์ฆ-๋ช
๋ น-๋์กฐ--23๊ณผ-45๊ฐ-์ด-์ ์-์ด๋ค) ์ ์ ๋จผ์ ๋๊ณ ๊ฒ์ฆ์ ๋๋ฆฐ ๋ค pushํด์ ์ด ์ ๋ก ๋์์จ๋ค. pushํ ์งํ [์ฒดํฌํฌ์ธํธ](#์ฒดํฌํฌ์ธํธ)๋ฅผ `ci`๋ก ์ ์ฅํ๋ค. ๊ฐ์ ์ก์ด ์ธ ๋ฒ ์ฐ์ ์คํจํ๋ฉด 2.5์ฒ๋ผ ๋ฉ์ถ๊ณ ๋จ์ ์คํจ๋ฅผ ๋ณด๊ณ ํ๋ค. CI๋ฅผ ๊ณ ์น ์ปค๋ฐ์ Copilot ๋ฆฌ๋ทฐ๋ฅผ ์ ๊ฑฐ์ณค์ผ๋ฏ๋ก โ์ ๊ทธ ์ฌ์ค์ ์ ๋๋ค.
|
|
742
908
|
|
|
743
909
|
## ์น์ธ ๋จ๊ณ โ โ ready ์ ํ
|
|
744
910
|
|
|
@@ -747,6 +913,7 @@ Copilot ๋ฆฌ๋ทฐ ์๋ ด ({N}๋ผ์ด๋)
|
|
|
747
913
|
- ๋ฐ์: {M}๊ฑด / ์ ์: {K}๊ฑด (์คํ {a}, ๊ท์น ์ฐ์ {b})
|
|
748
914
|
- ๋ฏธํด๊ฒฐ ์ค๋ ๋: {U}๊ฑด
|
|
749
915
|
- ๊ฒ์ฆ: {๋ ๋ผ์ด๋๋ฉด "{verifyCmd} PASS", ๊ฑด๋๋ด ๋ผ์ด๋๋ฉด "์ฝ๋ ๋ณ๊ฒฝ์ด ์์ด ๊ฑด๋๋ (๋ง์ง๋ง PASS: ๋ผ์ด๋ {R})"}
|
|
916
|
+
- CI: {CI ํ์ธ ์ ์ ๋ง}
|
|
750
917
|
|
|
751
918
|
{prUrl}์ ready๋ก ๋ฐ๊ฟ๊น์?
|
|
752
919
|
- ๋ฐ๊พผ๋ค / draft๋ก ๋๋ค
|
|
@@ -754,6 +921,36 @@ Copilot ๋ฆฌ๋ทฐ ์๋ ด ({N}๋ผ์ด๋)
|
|
|
754
921
|
|
|
755
922
|
**๋ฏธํด๊ฒฐ ์ค๋ ๋๊ฐ ๋จ์์ผ๋ฉด ๊ทธ ์๋ฅผ ๋ฐ๋์ ์ ๋๋ค.** ์ ์ํ ํญ๋ชฉ์ด ์๋๋ฐ ์ ๋ถ ๋ฐ์ํ๋ค๊ณ ๋ณด์ด๋ฉด ์ ๋๋ค.
|
|
756
923
|
|
|
924
|
+
**CI๊ฐ ์คํจํ์ผ๋ฉด ready๋ฅผ ๋ฌป์ง ์๋๋ค.** CI ์ค ์๋์ ์คํจํ ์ก๊ณผ ์์ธ ์ค, ๊ณ ์น๋ฉด ๋ฐ๋ ํ์ผ์ ํผ์น๊ณ ์ง๋ฌธ์ ๋ฐ๊พผ๋ค. 4.5์ โ์ ๊ฐ์ ์ด์ ๋ก ์น์ธ์ ๊ทผ๊ฑฐ๋ ๋ก๊ทธ๊ฐ ์๋๋ผ ๋ฐ๋ ์ฝ๋๋ค.
|
|
925
|
+
|
|
926
|
+
```
|
|
927
|
+
- CI: ์คํจ 1๊ฐ
|
|
928
|
+
- build (ubuntu-latest, 22) โ AssertionError: expected [ 'docs/a.md' ] to deeply equal []
|
|
929
|
+
๊ณ ์น๋ฉด ๋ฐ๋ ํ์ผ: docs/a.md
|
|
930
|
+
|
|
931
|
+
CI ์คํจ๋ฅผ ๊ณ ์น ๊น์?
|
|
932
|
+
- ๊ณ ์น๋ค / draft๋ก ๋๋ค
|
|
933
|
+
```
|
|
934
|
+
|
|
935
|
+
### ๋ฆฌ๋ทฐ๋ฅผ ๋ชป ๋ฐ๊ณ ๋ค์ด์ฌ ๋
|
|
936
|
+
|
|
937
|
+
`copilotStatus`๊ฐ `skipped`๋ `not-accepted`, `requested`๋ก โ์ ์ค๋ฉด ์ ํ์ ์ฒซ ์ค์ ๋ฐ๊พผ๋ค. ์๋ ดํ๋ค๊ณ ์ฐ๋ฉด ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ์ ๊ฒ์ฒ๋ผ ์ฝํ๋ค. `{N}`์ `copilotRounds`, `{L}`์ ๋ฆฌ๋ทฐ ์์ด ๋์ด์จ ๋ผ์ด๋ ๋ฒํธ๋ค. ์ ํ์ ๊ฒ์ฆ ์ค์ ์ฐ๋ `{R}`๊ณผ ๋ค๋ฅธ ๊ฐ์ด๋ค.
|
|
938
|
+
|
|
939
|
+
| `copilotStatus` | ์ ๋ผ์ด๋ ๋ฆฌ๋ทฐ | ์ฒซ ์ค |
|
|
940
|
+
| --- | --- | --- |
|
|
941
|
+
| `skipped` | โ | Phase 4 ์ฒซ ๋ฌธ๋จ์ ์ค. ์: `Copilot ๋ฆฌ๋ทฐ ๊ฑด๋๋ (์ฌ์ฉ์๊ฐ ์๋ต, ๊ทผ๊ฑฐ: ๋ํ)` |
|
|
942
|
+
| `not-accepted` | ์์ | `Copilot ๋ฆฌ๋ทฐ ์์ (์ ์ ์ ๋จ: {4.1์์ ์ ํ ์ด์ })` |
|
|
943
|
+
| `not-accepted` | ์์ | `Copilot ๋ฆฌ๋ทฐ {N}๋ผ์ด๋ ๋ฐ์, ๋ผ์ด๋ {L} ์ ์ ์ ๋จ ({4.1์์ ์ ํ ์ด์ })` |
|
|
944
|
+
| `requested` | ์์ | `Copilot ๋ฆฌ๋ทฐ ์ ์ด (์์ฒญ์ ์ ์๋จ, ๋ผ์ด๋ {L}์์ ๋๊ธฐ ์ค ์ ์ถ ์์)` |
|
|
945
|
+
| `requested` | ์์ | `Copilot ๋ฆฌ๋ทฐ {N}๋ผ์ด๋ ๋ฐ์, ๋ผ์ด๋ {L}์์๋ ๋ฆฌ๋ทฐ ์ ์ด (์์ฒญ์ ์ ์๋จ, ๋๊ธฐ ์ค ์ ์ถ ์์)` |
|
|
946
|
+
|
|
947
|
+
๋๋จธ์ง ์ค์ Copilot ๋ผ์ด๋๋ฅผ ๋ ์ ์ด ์๋์ง๋ก ๊ฐ๋ฆฐ๋ค.
|
|
948
|
+
|
|
949
|
+
- **ํ ๋ผ์ด๋๋ ๋ฆฌ๋ทฐ๋ฅผ ๋ชป ๋ฐ์์ผ๋ฉด**(`copilotRounds` 0) ๋ฐ์๊ณผ ์ ์, ๊ฒ์ฆ ์ค์ ์ฐ์ง ์๋๋ค. ์
๊ฒ ์๋๋ฐ 0๊ฑด์ผ๋ก ์ ์ผ๋ฉด ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ๊ณ ๊ณ ์น ๊ฒ ์๋ ๊ฒ๊ณผ ๊ตฌ๋ถ์ด ์ ๋๋ค. ๋ฏธํด๊ฒฐ ์ค๋ ๋๊ฐ 1๊ฑด ์ด์์ด๋ฉด ๊ทธ ์ค๋ง ๋จ๊ธด๋ค
|
|
950
|
+
- **์ ๋ผ์ด๋์์ ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ์ ๋ค ๋์ด์์ผ๋ฉด** ํ์ ๊ทธ๋๋ก ์ฐ๊ณ ์ฒซ ์ค๋ง ๋ฐ๊พผ๋ค. ๊ฒ์ฆ ์ค์๋ ๋ง์ง๋ง์ผ๋ก ๋ ๋ผ์ด๋๋ฅผ ์ ๋๋ค
|
|
951
|
+
|
|
952
|
+
CI ์ค์ ์ด๋ ๊ฒฝ์ฐ๋ ๋จ๊ธด๋ค. Copilot ๋ฆฌ๋ทฐ๋ฅผ ๋ชป ๋ฐ์์ด๋ CI ๊ฒฐ๊ณผ๋ ๋ฐ๋ก ์๋ค.
|
|
953
|
+
|
|
757
954
|
## Phase 5 โ ๋ง๋ฌด๋ฆฌ
|
|
758
955
|
|
|
759
956
|
**โ์์ "๋ฐ๊พผ๋ค"๋ฅผ ๊ณ ๋ฅธ ๊ฒฝ์ฐ์๋ง ready๋ก ์ฎ๊ธด๋ค.** "draft๋ก ๋๋ค"๋ฉด ์ด ์ค์ ๊ฑด๋๋ฐ๊ณ `prState`๋ฅผ `draft`๋ก ๋๋ค. ์๋ ๋ก์ปฌ PR ์ข
๋ฃ์ ์ํ ์ ๋ฆฌ๋ ์ด๋ ์ชฝ์ด๋ ๊ทธ๋๋ก ํ๋ค.
|
|
@@ -770,7 +967,7 @@ gestalt pr close <localPrId> --reason "GitHub #<prNumber>๋ก ์ด์ด๊ฐ"
|
|
|
770
967
|
|
|
771
968
|
์ข
๋ฃ๋ ๋ก์ปฌ PR๋ head ref๋ฅผ ๋ถ์ก์ผ๋ฏ๋ก ๋์ค์ `pr diff`์ `pr checkout`์ด ๊ทธ๋๋ก ๋๋ค.
|
|
772
969
|
|
|
773
|
-
๋ผ์ด๋ ์ํ๋ฅผ ์ง์ด๋ค. ๊ฒ์ฆ ๋ก๊ทธ๋ ๋๊ณ ๊ฐ ์ด์ ๊ฐ ์๋ค.
|
|
970
|
+
๋ผ์ด๋ ์ํ๋ฅผ ์ง์ด๋ค. ๊ฒ์ฆ ๋ก๊ทธ๋ ๋๊ณ ๊ฐ ์ด์ ๊ฐ ์๋ค. **์ง์ฐ๊ธฐ ์ ์ `checkpoint.json`์ `history`๋ฅผ ์ฝ์ด ๋๋ค.** ๋ํ๊ฐ ์์ถ๋ผ ์ ๋ผ์ด๋์ ์ด์ ์๊ฐ ์ ๋ณด์ด๋ฉด [์๋ฃ ๋ณด๊ณ ](#์๋ฃ-๋ณด๊ณ )์ ๋ผ์ด๋ ์ค์ ์ด ๊ฐ์ผ๋ก ์ฑ์ด๋ค.
|
|
774
971
|
|
|
775
972
|
```bash
|
|
776
973
|
rm -rf "$(cd "$(git rev-parse --git-common-dir)" && pwd)/gestalt-ship/$(git rev-parse --abbrev-ref HEAD)"
|
|
@@ -783,23 +980,73 @@ rm -rf "$(cd "$(git rev-parse --git-common-dir)" && pwd)/gestalt-ship/$(git rev-
|
|
|
783
980
|
| `localPrId` | ๋ก์ปฌ PR id (8์ 16์ง์) |
|
|
784
981
|
| `localRounds` | ๋ก์ปฌ ๋ฆฌ๋ทฐ๊ฐ ๋ช ๋ผ์ด๋ ๋์๋์ง |
|
|
785
982
|
| `prUrl` | GitHub PR URL |
|
|
786
|
-
| `copilotRounds` | Copilot
|
|
983
|
+
| `copilotRounds` | Copilot ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ์ ๋ผ์ด๋ ์. ์ธ๋ผ์ธ ์ฝ๋ฉํธ 0๊ฑด์ผ๋ก ์๋ ดํ ๋ผ์ด๋๋ ๋ฆฌ๋ทฐ๊ฐ ์ ์ถ๋์ผ๋ฏ๋ก ์ผ๋ค. ์์ฒญ๋ง ํ๊ณ ๋ฆฌ๋ทฐ๋ฅผ ๋ชป ๋ฐ์ ๋ผ์ด๋๋ ์ ์ผ๋ค |
|
|
984
|
+
| `copilotStatus` | `reviewed`, `requested`, `not-accepted`, `skipped` |
|
|
787
985
|
| `unresolvedAtReady` | ready ์์ ์ ๋ฏธํด๊ฒฐ ์ค๋ ๋ ์ |
|
|
788
986
|
| `prState` | `ready`, `draft`, `blocked`, `escalated` |
|
|
987
|
+
| `ciStatus` | `pass`, `fail`, `pending`, `none`, `skipped`, `unchecked`. [CI ํ์ธ](#ci-ํ์ธ)์ ํ์ ์ด๋ค. ๋ช
๋ น์ด ์คํจํด ํ์ ์ด ์์ผ๋ฉด `unchecked`, GitHub PR์ ๋ง๋ค๊ธฐ ์ ์ ๋ฉ์ท์ผ๋ฉด ๊ฐ์ด ์๋ค |
|
|
789
988
|
|
|
790
989
|
`blocked`๋ ์ํ์ด๋ ์กฐ๊ธฐ ์ข
๋ฃ๋ก ์ ์๋ ดํ ์ฑ ๋ฉ์ท๋ค๋ ๋ป์ด๋ค. `escalated`๋ ์ ํฉ ์ฌ๊ธ์ด ์ค๊ณ ์ดํ์ ์ง์ด 2.7๋ก ๋น ์ก๋ค๋ ๋ป์ด๋ค.
|
|
791
990
|
|
|
991
|
+
`copilotStatus`๋ Copilot ๋ฆฌ๋ทฐ๊ฐ ์ด๋์ ๋๋ฌ๋์ง๋ค. ์ฌ์ฉ์๊ฐ "Copilot ๋ฆฌ๋ทฐ๋ ๋๋ ๊ฑฐ์ผ?"๋ฅผ ๋ค์ ๋ฌป์ง ์๊ฒ ์๋ฃ ๋ณด๊ณ ์ ํญ์ ์ฃ๋๋ค.
|
|
992
|
+
|
|
993
|
+
| ๊ฐ | ๋ณด๊ณ ์ ์ฐ๋ ๋ง | ์ธ์ |
|
|
994
|
+
| --- | --- | --- |
|
|
995
|
+
| `reviewed` | ๋ฆฌ๋ทฐ ์ด | 4.2์์ ์์ฒญ ์ดํ ์ ์ถ๋ Copilot ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ์๋ค |
|
|
996
|
+
| `requested` | ์์ฒญํจ (๋ฆฌ๋ทฐ ์ ์ด) | ์์ฒญ์ ์ ์๋๋๋ฐ 4.2์ ๋๊ธฐ์์ ๋ฆฌ๋ทฐ ์์ด ๋์ด๊ฐ๋ค |
|
|
997
|
+
| `not-accepted` | ์ ์ ์ ๋จ | 4.1์์ POST๊ฐ ์คํจํ๊ฑฐ๋ ์กฐํ๋ฅผ ๋ง์น ๋๊น์ง ํ์๋ผ์ธ์ ์์ฒญ ์ด๋ฒคํธ๊ฐ ์๋ค. ๊ทธ ๋ค ์ฌ์ฉ์๊ฐ ๋ฆฌ๋ทฐ ์์ด ๊ฐ๊ธฐ๋ก ํ ๊ฒฝ์ฐ๋ ์ฌ๊ธฐ๋ค. ํ์๋ผ์ธ ์กฐํ๊ฐ ์ธ ๋ฒ ๋ค ์คํจํ ๋ค ๋ฆฌ๋ทฐ ์์ด ๊ฐ ๊ฒฝ์ฐ๋ ์ฌ๊ธฐ๊ณ ์ด์ ์ ์กฐํ ์คํจ๋ฅผ ์ ๋๋ค |
|
|
998
|
+
| `skipped` | ๊ฑด๋๋ | ์ฌ์ฉ์๊ฐ Phase 4๋ฅผ ๋นผ๋ผ๊ณ ์ง์ ๋งํด(์ด๋ฒ ๋ํ๋ ์ฌ์ฉ์ ๋ฉ๋ชจ๋ฆฌ) ์์ฒญ์ ์์ ์ ๋ณด๋๋ค |
|
|
999
|
+
|
|
1000
|
+
**`skipped`๋ ์ฌ์ฉ์๊ฐ ์ง์ ํ ๋ง์ด ์์ ๋๋ง ์ด๋ค.** ์ธ์ ํ๋ ๊ทผ๊ฑฐ๋ ์๋ ๋์ด๊ณ ์๋ฃ ๋ณด๊ณ ์ ์ด๋ ์ชฝ์ธ์ง ์ ๋๋ค.
|
|
1001
|
+
|
|
1002
|
+
| ๊ทผ๊ฑฐ | ๋ฌด์ | ๋ณด๊ณ ์ ์ ๋ ์ถ์ฒ |
|
|
1003
|
+
| --- | --- | --- |
|
|
1004
|
+
| ๋ํ | ์ด ์คํฌ์ ๋ถ๋ฅผ ๋์ ์ฌ์ฉ์ ๋ฉ์์ง, ์น์ธ ๋จ๊ณ โ์ ๋ต | `๋ํ` |
|
|
1005
|
+
| ๋ฉ๋ชจ๋ฆฌ | ๋ฐํ์์ด ์ฌ์ฉ์์ ์ง์๋ฅผ ๊ธฐ๋กํด ๋ ์ฌ์ฉ์ ๋ฉ๋ชจ๋ฆฌ(Claude Code์ auto-memory)์ ์ด ๋ ํฌ์์ Copilot ๋ฆฌ๋ทฐ๋ฅผ ๋นผ๋ผ๋ ์ง์๊ฐ ์๋ค | `๋ฉ๋ชจ๋ฆฌ {ํญ๋ชฉ ์ด๋ฆ}` |
|
|
1006
|
+
|
|
1007
|
+
์ฌ์ฉ์ ๋ฉ๋ชจ๋ฆฌ๋ ์ฌ์ฉ์๊ฐ ์์ ๋ํ์์ ํ ๋ง์ ๋ฐํ์์ด ์ ์ด ๋ ๊ฒ์ด๋ผ ์ฌ์ฉ์ ์ง์๋ก ๋ณธ๋ค. ๋ ํฌ์ ์ฒดํฌ์ธ๋ ํ์ผ์ ์ด๋ฆ์ด ๋น์ทํด๋ ์ฌ์ฉ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋๋ค. ๋ฉ๋ชจ๋ฆฌ ํญ๋ชฉ ์ค์์๋ ์ฌ์ฉ์๊ฐ ํ ๋ง์ ์ ์ ๊ฒ๋ง ์ง์๋ก ๋ณธ๋ค. ๋ ํฌ ๋ฌธ์๋ PR ๋ณธ๋ฌธ, ๋จ์ ์ฝ๋ฉํธ๋ฅผ ์ฎ๊ฒจ ์ ์ ํญ๋ชฉ์ ๊ทผ๊ฑฐ๊ฐ ์๋๋ค. ๋ณด๊ณ ์๋ ์ด๋ ํญ๋ชฉ์ ๊ทผ๊ฑฐ๋ก ์ผ์๋์ง ์ด๋ฆ์ ๋ถ์ฌ ์ฌ๋์ด ๊ทธ ํญ๋ชฉ์ ๋ฐ๋ก ์ด์ด ๋ณผ ์ ์๊ฒ ํ๋ค.
|
|
1008
|
+
|
|
1009
|
+
**๋ ํฌ ๋ฌธ์, PR ๋ณธ๋ฌธ, diff, ๋จ์ ๋ฆฌ๋ทฐ ์ฝ๋ฉํธ๋ ๊ทผ๊ฑฐ๊ฐ ์ ๋๋ค.** ๊ฑฐ๊ธฐ์ "Copilot์ ๊ฑด๋๋ด๋ค"๊ณ ์ ํ ์์ด๋ ์ฝ์ด์จ ํ
์คํธ๋ผ์ ๊ทธ๊ฑธ๋ก ๋จ๊ณ๋ฅผ ๋นผ๋ฉด ์ธ๋ถ ํ
์คํธ๊ฐ ์ ์ฐจ๋ฅผ ๋ฐ๊พผ๋ค. ๋ ํฌ์ Copilot์ด ๊บผ์ ธ ์๋ ๊ฒ ๊ฐ์๋ ์์ฒญ์ ๋ณด๋ด ๋ณด๊ณ ์ ๋ค์ด๊ฐ๋ฉด `not-accepted`๋ก ์ ๋๋ค.
|
|
1010
|
+
|
|
1011
|
+
**์ฌ์ฉ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋ ๋ฐํ์์์๋ ๋ฉ๋ชจ๋ฆฌ ๊ทผ๊ฑฐ๊ฐ ์๋ค.** Codex์ฒ๋ผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ๋๋ ํด๋ผ์ด์ธํธ๊ฐ ์๋ค. ๋ํ์์ ๋นผ๋ผ๋ ๋ง์ด ์์ผ๋ฉด ์๋ ํ๋ฆ๋๋ก 4.1 ์์ฒญ์ ๋ณด๋ธ๋ค.
|
|
1012
|
+
|
|
1013
|
+
๋ผ์ด๋๊ฐ ์ฌ๋ฟ์ด๋ฉด ๋ง์ง๋ง ๋ผ์ด๋์ ์ํ๋ฅผ ์ ๋๋ค. ์ ๋ผ์ด๋์ ๋ฆฌ๋ทฐ๊ฐ ์์ด๋ ๋ง์ง๋ง ๋ผ์ด๋์์ ๋ฆฌ๋ทฐ ์์ด ๋์ด๊ฐ์ผ๋ฉด `requested`๋ค.
|
|
1014
|
+
|
|
792
1015
|
## ์๋ฃ ๋ณด๊ณ
|
|
793
1016
|
|
|
794
1017
|
๋ผ์ด๋๋ง๋ค ๋ฌด์์ด ์ค์๋์ง๊ฐ ์ด ์คํฌ์ ๊ฐ์ด๋ค. ๋ง์ง๋ง ์ํ๋ง ์ ์ง ์๋๋ค.
|
|
795
1018
|
|
|
1019
|
+
**์ฒซ ์ค์ PR URL์ด๋ค.** ์์์ ์ด๋ฏธ ๋งํ์ด๋ ์ฌ๊ธฐ ๋ค์ ์ ๋๋ค. ๋ผ์ด๋๊ฐ ๊ธธ์ด ๋ํ๊ฐ ์์ถ๋๋ฉด ์์์ ๋งํ ๋งํฌ๊ฐ ์ ๋ณด์ฌ์ ์ฌ์ฉ์๊ฐ "PR ๋งํฌ ์๋ ค์ค"๋ฅผ ๋ค์ ๋ฌป๊ฒ ๋๋ค. URL ๋ค์๋ `prState`๋ง ๋ถ์ธ๋ค. GitHub PR์ ๋ง๋ค๊ธฐ ์ ์ ๋ฉ์ท์ผ๋ฉด(2.5, 2.6, 2.7, โ์์ "์ฌ๊ธฐ์ ๋ฉ์ถ๋ค"๋ฅผ ๊ณ ๋ฅธ ๊ฒฝ์ฐ) URL์ด ์์ผ๋ฏ๋ก ์ฒซ ์ค์ `๋ก์ปฌ PR {localPrId} โ {๋ฉ์ถ ์๋ฆฌ}`๋ฅผ ์ ๋๋ค. ์๋ฅผ ๋ค๋ฉด `๋ก์ปฌ PR 3fa9c2e1 โ 2.6 ์ํ์์ ๋ฉ์ถค`์ด๋ค.
|
|
1020
|
+
|
|
796
1021
|
```
|
|
797
1022
|
{prUrl} โ ready
|
|
798
1023
|
|
|
799
|
-
|
|
800
|
-
|
|
1024
|
+
Copilot: ๋ฆฌ๋ทฐ ์ด (3๋ผ์ด๋)
|
|
1025
|
+
CI: ํต๊ณผ (6๋ถ)
|
|
1026
|
+
๋ก์ปฌ ๋ฆฌ๋ทฐ 3๋ผ์ด๋: ์ด์ 7 โ 2 โ 0
|
|
1027
|
+
Copilot 3๋ผ์ด๋: ์ฝ๋ฉํธ 5 โ 1 โ 0
|
|
801
1028
|
๋ฐ์ 11๊ฑด / ์ ์ 2๊ฑด (์คํ 1, ๋ ํฌ ๊ท์น ์ฐ์ 1)
|
|
802
1029
|
๋ฏธํด๊ฒฐ ์ค๋ ๋ 0
|
|
803
1030
|
```
|
|
804
1031
|
|
|
1032
|
+
**`Copilot:` ์ค์ ๋นผ์ง ์๋๋ค.** `copilotStatus`์ "๋ณด๊ณ ์ ์ฐ๋ ๋ง"์ ๊ทธ๋๋ก ์ฐ๊ณ `๋ฆฌ๋ทฐ ์ด`์ด ์๋๋ฉด ์ด์ ๋ฅผ ๊ดํธ์ ์ ๋๋ค. `not-accepted`๋ฉด 4.1์์ ์ ํ ๋ง์ง๋ง ๋ผ์ด๋์ ์ด์ ๋ฅผ ๊ณ ์ณ ์ฐ์ง ์๊ณ ๊ดํธ์ ์ฎ๊ธด๋ค. `requested`๋ ๋ณด๊ณ ๋ง์ ์ด๋ฏธ ๊ดํธ๊ฐ ์์ผ๋ฏ๋ก ํ๋๋ก ํฉ์ณ `์์ฒญํจ (๋ฆฌ๋ทฐ ์ ์ด, ๋ผ์ด๋ {L}์์ ๋๊ธฐ ์ค ์ ์ถ ์์)`์ผ๋ก ์ ๋๋ค. ์์ธ์ ์ง์ํด ๋ฐ๊ฟ ์ ์ผ๋ฉด ์ฌ๋์ด ๊ฐ์ ์๋ฌ๋ก ๊ฒ์ํด ๋ณผ ์๊ฐ ์๋ค. ์์ ์์ ์
์ด 4.1์ ์ธ ๊ฒฝ์ฐ์ ์ฐจ๋ก๋๋ก ๋ง๋๋ค.
|
|
1033
|
+
|
|
1034
|
+
- `Copilot: ์ ์ ์ ๋จ (gh: Not Found (HTTP 404))`
|
|
1035
|
+
- `Copilot: ์ ์ ์ ๋จ (ํ์๋ผ์ธ ์กฐํ ์คํจ, ์ ์ ์ฌ๋ถ ํ์ธ ๋ชป ํจ: gh: API rate limit exceeded)`
|
|
1036
|
+
- `Copilot: ์ ์ ์ ๋จ (POST๋ ์ฑ๊ณต, ํ์๋ผ์ธ์ ์์ฒญ ์ด๋ฒคํธ ์์)`
|
|
1037
|
+
- `Copilot: ์์ฒญํจ (๋ฆฌ๋ทฐ ์ ์ด, ๋ผ์ด๋ 3์์ ๋๊ธฐ ์ค ์ ์ถ ์์)`
|
|
1038
|
+
- `Copilot: ๊ฑด๋๋ (์ฌ์ฉ์๊ฐ ์๋ต, ๊ทผ๊ฑฐ: ๋ฉ๋ชจ๋ฆฌ ship-skip-copilot.md)`
|
|
1039
|
+
|
|
1040
|
+
**`CI:` ์ค๋ ๋นผ์ง ์๋๋ค.** [CI ํ์ธ](#ci-ํ์ธ) ํ์ ๋ง์ ์ด๋ค. ํต๊ณผ์ ์คํจ์๋ ๊ดํธ๋ก ๊ธฐ๋ค๋ฆฐ ์๊ฐ์ ๋ถ์ธ๋ค. ์ ๋๋ ์ฒดํฌ๋ฅผ ๋จ๊ธฐ๊ณ ์คํจ๋ก ๋๋ฌ์ผ๋ฉด `CI: ์คํจ {n}๊ฐ ({๋ถ}, ๋๋จธ์ง {k}๊ฐ๋ ์ ๋๋ ์ฑ ๋ฉ์ถค)`์ด๋ค. ์คํจ๋ก ๋๋ฌ์ผ๋ฉด ์ก ์ด๋ฆ๊ณผ ์์ธ ์ค ์ฒซ ์ค์ ์๋์ ๋ค์ฌ ์ ๋๋ค. ํ์ ์ด ์์ผ๋ฉด `CI: ํ์ธ ๋ชป ํจ ({ci.err ์ฒซ ์ค})`์ด๋ค.
|
|
1041
|
+
|
|
1042
|
+
```
|
|
1043
|
+
CI: ์งํ ์ค (15๋ถ ์์ ์ ๋๋จ)
|
|
1044
|
+
CI: CI ์์
|
|
1045
|
+
CI: ์ ๋ถ ๊ฑด๋๋ (3๊ฐ)
|
|
1046
|
+
CI: ์คํจ 1๊ฐ (8๋ถ)
|
|
1047
|
+
- build (ubuntu-latest, 22) โ Error: write EPIPE
|
|
1048
|
+
```
|
|
1049
|
+
|
|
1050
|
+
๋ผ์ด๋ ์ค์ ์ด์ ์๋ ์ฒดํฌํฌ์ธํธ์ `history`์ ๋ง์์ผ ํ๋ค. [์ด์ด์ ํ๊ธฐ](#์ด์ด์-ํ๊ธฐ)๋ก ๋ค์ ์์ํ ์คํ์ด๋ฉด `์ฌ๊ฐ: {phase}๋จ๊ณ {round}๋ผ์ด๋๋ถํฐ` ์ค์ ๋ถ์ธ๋ค. `round`๊ฐ `null`์ด๋ฉด `์ฌ๊ฐ: {phase}๋จ๊ณ๋ถํฐ`๋ค. ๊ทธ ์ ๋ผ์ด๋๋ ์ด๋ฒ ๋ํ์์ ๋๋ฆฐ ๊ฒ ์๋๋ผ์ ์ฌ๋์ด ์ด๋ ฅ์ ์ด๋์ ๋ด์ผ ํ ์ง ์ ์ ์๊ฒ ํ๋ค.
|
|
1051
|
+
|
|
805
1052
|
**์ ํ ๊ฑธ ํ๋ค๊ณ ์ฐ์ง ์๋๋ค.** ์ด๋ ๋ผ์ด๋๋ฅผ ๋๊ตฌ๊ฐ ์์ด ๊ฑด๋๋ฐ์์ผ๋ฉด ๊ทธ ์ฌ์ค์ ์ฌ๊ธฐ ์ ๋๋ค. ๊ฒ์ฆ์ ์ฝ๋ ๋ณ๊ฒฝ์ด ์์ด ๊ฑด๋๋ด ๋ผ์ด๋๊ฐ ์์ผ๋ฉด ๊ทธ๊ฒ๋ ์ ๋๋ค.
|