| name | pr-checklist |
| description | Pre-PR review checklist for the claude-code-gui-jetbrains project. Verifies a change is ready to open a pull request against main โ rebased onto the latest main, feature docs written for feature PRs, no marketplace-forbidden Internal/ Deprecated JetBrains APIs, all three test layers passing, and the project's core principles (CLI equivalence, original-data preservation, consistent naming) respected. Use before opening or updating a PR. Trigger on: PR ์ฌ๋ฆฌ๊ธฐ ์ , PR ์ ๊ฒํ , ๊ธฐ์ฌ ์ ์ฒดํฌ, ํผ์ ๊ฒํ , pre-PR, PR ์ค๋น ๋์ด?, open a PR, ready for PR, PR checklist, contribution check. |
์ด ๋ฌธ์๋ ํ๊ธ๋ก ์์ฑ๋์ด ์์ผ๋, ์ฌ์ฉ์๊ฐ ์ฌ์ฉํ๋ ์ธ์ด์ ๋ง๊ฒ ์ฝ๊ณ ๋ฒ์ญํ์ฌ ์ ๋ฌํ ๊ฒ.
(This document is written in Korean; read it and translate to the user's language when relaying.)
pr-checklist โ PR ์ฌ๋ฆฌ๊ธฐ ์ ๊ฒํ
๊ธฐ์ฌ ๋ณ๊ฒฝ์ main์ PR๋ก ์ฌ๋ฆฌ๊ธฐ ์ ์ ํต๊ณผํด์ผ ํ ํญ๋ชฉ์ ์์๋๋ก ๊ฒ์ฆํ๋ค.
๊ท์น์ ๋ณธ๋ฌธ(์/๋ฌด์)์ CONTRIBUTING.md๊ฐ ๋จ์ผ ์์ค์ด๋ฉฐ,
์ด ์คํฌ์ ๊ทธ ๊ท์น์ ์ค์ ๋ก ๊ฒ์ฆํ๋ ์ ์ฐจ๋ค. ์์ธ ๊ทผ๊ฑฐ๋ CLAUDE.md ์ฐธ์กฐ.
ํธ๋ฆฌ๊ฑฐ
- ์ฌ์ฉ์๊ฐ "PR ์ฌ๋ฆฌ๊ธฐ ์ ", "PR ์ ๊ฒํ ", "๊ธฐ์ฌ ์ ์ฒดํฌ", "ํผ์ ๊ฒํ ", "PR ์ค๋น ๋์ด?" ๋ฑ์ ๋งํ ๋
- ๋ธ๋์น ์์
์ ๋ง์น๊ณ PR ์์ฑ/์
๋ฐ์ดํธ ์ง์
๊ฒ์ฆ ์ ์ฐจ
๊ฐ ํญ๋ชฉ์ ์ค์ ๋ช
๋ น์ผ๋ก ๊ฒ์ฆํ๊ณ , ํต๊ณผ/์คํจ๋ฅผ ๊ทผ๊ฑฐ์ ํจ๊ป ๋ณด๊ณ ํ๋ค. ์คํจ ํญ๋ชฉ์ ๊ณ ์น๋๋ก ์๋ดํ๋ค.
1. ์ต์ main ๋ฆฌ๋ฒ ์ด์ค (ํ์)
PR์ ๋ฐ๋์ main์ ์ต์ ์ปค๋ฐ ์์ ๋ฆฌ๋ฒ ์ด์ค๋ ์ํ์ฌ์ผ ํ๋ค. ์ค๋๋ base์์ PR์ ์ด์ง ์๋๋ค.
git fetch origin
git rebase origin/main
- ๋ฆฌ๋ฒ ์ด์ค ํ ์ถฉ๋์ด ์์ผ๋ฉด ํด๊ฒฐํ๊ณ , 3๋ ์ด์ด ๋น๋/ํ
์คํธ๋ฅผ ๋ค์ ๋๋ฆฐ๋ค.
- ์ด๋ฏธ pushํ ๋ธ๋์น๋ผ๋ฉด ๋ฆฌ๋ฒ ์ด์ค ํ force-push(
--force-with-lease)๊ฐ ํ์ํจ์ ์๋ดํ๋ค.
2. ๊ธฐ๋ฅ PR์ ๊ธฐ๋ฅ ๋ฌธ์ (ํ์)
์ฌ์ฉ์ ๋๋ฉด ๊ธฐ๋ฅ์ docs/features/NNN-feature_name/ ํด๋์ ์ธ์ด๋ณ ๋ฌธ์(en.md / ko.md โฆ)๋ฅผ
์์ฑํ๊ณ , docs/features/CLAUDE.md ์์ธ์ ํ ์ค ์ถ๊ฐํด์ผ ํ๋ค. ํฌ๋งท์ ๊ทธ ์์ธ ๋ฌธ์๋ฅผ ๋ฐ๋ฅธ๋ค.
ls docs/features/
3. ๋ง์ผํ๋ ์ด์ค ๊ธ์ง API ๋ฏธ์ฌ์ฉ (ํ์)
JetBrains Internal API(@ApiStatus.Internal, impl ํจํค์ง ๋ด ํด๋์ค)๋ ์ฌ์ฉ ๊ธ์ง โ
Marketplace Plugin Verifier๊ฐ ์ค๋ฅ๋ก ์ก์ ๋ฐฐํฌ๊ฐ ๊ฑฐ๋ถ๋๋ค. Deprecated API๋ ์ง์(๊ฒฝ๊ณ ๋ฐ์).
๋ค์ดํฐ๋ธ ๊ธฐ๋ฅ์ ์ํํ API๊ฐ ํ์ํ๋ฉด reflection ๋๋ public ๋์ฒด API๋ก ์ฐํํ๋ค.
grep -rn "@ApiStatus.Internal\|StartupManager\|PluginManagerConfigurable" src/main/kotlin --include="*.kt"
4. 3๋ ์ด์ด ํ
์คํธ + lint + build ํต๊ณผ (ํ์)
"ํ
์คํธ"๋ ๋ณ๋ ๋ช
์๊ฐ ์์ผ๋ฉด WebView / Backend / Kotlin 3๊ฐ ๋ ์ด์ด ์ ๋ถ๋ฅผ ์๋ฏธํ๋ค.
๋ชจ๋ ๊ฐ๋ฐ์ TDD(ํ
์คํธ ๋จผ์ โ ์คํจ ํ์ธ โ ๊ตฌํ)๋ฅผ ๋ฐ๋ฅธ๋ค.
bash ./scripts/build.sh wv-test
bash ./scripts/build.sh wv-lint
bash ./scripts/build.sh be-lint
bash ./scripts/build.sh full-build
5. OS/ํ๊ฒฝ๋ณ ๋์ ๋ณด์ฅ (ํฌ๋ก์ค ํ๋ซํผ) (ํ์)
OS์ ๋ง๋ฟ์ ํ๋ฅ ์ด ์กฐ๊ธ์ด๋ผ๋ ์๋ ์ฝ๋๋ WindowsยทmacOSยทLinux ๋ชจ๋์์ ์์ ํ๊ฒ ๋์ํด์ผ ํ๋ค.
ํนํ Windows๋ ๋จ์ผ ํ๊ฒฝ์ด ์๋๋ค โ cmd / PowerShell / WSL / WSL2๋ฅผ ๊ฐ๊ฐ ๋ณ๋ ์
ธ๋ก ์ทจ๊ธํ๊ณ ,
์ ์ธ๋ถ ๋ช
๋ น์ ์ด ์ ํ๊ฒฝ ์ฒดํฌ๋ฆฌ์คํธ๋ก ์ ๊ฒํ๋ค. ๋น๊ด์ ๊ด์ ์์ ๊ฒํ ํ๋ค.
- ๊ฒฝ๋ก:
/ ํ๋์ฝ๋ฉ ๋์ path.join(). ๊ฒฝ๋ก ๋น๊ต ์ ๋์๋ฌธ์ ์ ๊ทํ(Windows/APFS insensitive vs Linux sensitive).
- ์
ธ ๋ช
๋ น: Unix ์ ์ฉ ๋ช
๋ น(
which, chmod, kill, POSIX ํ์ดํ) ์ง์. ์
ธ ํ ํฐํ ํํผ๊ฐ ์ด ํ๋ก์ ํธ์ ํ๋ฆฝ๋ ํจํด.
- ํ๊ฒฝ ๋ณ์:
HOME(Unix) vs USERPROFILE/HOMEDIR(Windows). ๋จ๋
์ฌ์ฉ ๊ธ์ง.
- ์ค๋ฐ๊ฟ:
\n ํ๋์ฝ๋ฉ ๊ธ์ง, Windows \r\n ๊ณ ๋ ค. ์์ ๋๋ ํ ๋ฆฌ๋ os.tmpdir(), ์คํ ํ์ผ ํ์ฅ์(.sh vs .cmd/.bat) ์ฃผ์.
- ํ๋ก์ธ์ค: Unix ์๊ทธ๋(
SIGTERM/SIGKILL)์ Windows ๋ฏธ์ง์ โ ๋ถ๊ธฐ ํ์.
- WSL/WSL2:
claude/node ํ์ ์ PATH ๋น๋์นญ ์ฃผ์. ๋ก๊ทธ์ธ ์
ธ(bash -lic)๋ก .bashrc๋ฅผ ์์ํด PATH๋ฅผ ํ๋ณดํ๋ค.
6. ํ๋ก์ ํธ ๊ณ ์ ์์น ์ค์ (ํ์)
- CLI ๋๋ฑ์ฑ & ๊ณต์ SDK/๋ด๋ถ ํ๋กํ ์ฝ ๋น์์กด: ๊ณต์
claude CLI ๋ช
๋ น์ ๊ธฐ์ค์ ์ผ๋ก. ์ฐธ๊ณ ์ฑ์ UX๋ง ๋ชจ๋ฐฉ.
- ์๋ณธ ๋ฐ์ดํฐ ๋ณด์กด: JSONL ์ํธ๋ฆฌ ๋ฑ ์๋ณธ ๊ตฌ์กฐ๋ฅผ ํธ์งยท๋ฆฌ๋ค์ ์์ด WebView๊น์ง ์ ๋ฌ(๋ฒ์ ๋ถํ ์ ํ์ฉ).
- ์ผ๊ด ์๋ช
: ๊ฐ์ ๋์์ ๊ฐ์ verb. IPC
type์ MessageType enum(๋ฌธ์์ด ๋ฆฌํฐ๋ด ๊ธ์ง).
7. PR ๋ณธ๋ฌธ / ์ปค๋ฐ ๋ฉ์์ง (ํ์)
- PR ๋ณธ๋ฌธ์ ์์ด๋ก ์์ฑํ๋ค. (ํ๊ตญ์ด ๋ณธ๋ฌธ ๊ธ์ง)
- ์ปค๋ฐ ๋ฉ์์ง๋ ์์ด + conventional ์คํ์ผ(
fix:, feat:, refactor:, docs:, chore: โฆ), ์ฒซ ์ค 72์ ์ด๋ด.
- PR ๋ณธ๋ฌธ์ ๋ฌด์์, ์ ๋ฐ๊ฟจ๋์ง ๋ช
ํํ ์ค๋ช
ํ๋ค.
๊ฒฐ๊ณผ ๋ณด๊ณ
๊ฐ ํญ๋ชฉ์ PASS / FAIL ํ
์ด๋ธ๋ก ๋ณด๊ณ ํ๋ค. FAIL์ด ํ๋๋ผ๋ ์์ผ๋ฉด PR์ ์ด์ง ๋ง๊ณ ๋จผ์ ์์ ํ๋๋ก ์๋ดํ๋ค.
๋ชจ๋ ํญ๋ชฉ PASS๋ฉด "PR ์ค๋น ์๋ฃ"๋ก ๋ง๋ฌด๋ฆฌํ๋ค.