From 2ab772a2a67f02a32381217cc53d063f61f14301 Mon Sep 17 00:00:00 2001 From: jyx-07 Date: Tue, 3 Nov 2026 18:14:27 +0900 Subject: [PATCH 1/3] =?UTF-8?q?docs(global):=20=EA=B3=84=ED=9A=8D=20?= =?UTF-8?q?=EB=AC=B8=EC=84=9C=EB=A5=BC=20=EC=BB=A4=EB=B0=8B=EA=B3=BC=20PR?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=EC=A0=9C=EC=99=B8=ED=95=98=EB=8A=94=20ski?= =?UTF-8?q?ll=20=EA=B7=9C=EC=B9=99=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .agents/skills/git-commit/SKILL.md | 2 ++ .agents/skills/planning/SKILL.md | 3 ++- .agents/skills/write-pr/SKILL.md | 3 +++ .claude/skills/git-commit/SKILL.md | 2 ++ .claude/skills/planning/SKILL.md | 3 ++- .claude/skills/write-pr/SKILL.md | 3 +++ 6 files changed, 14 insertions(+), 2 deletions(-) diff --git a/.agents/skills/git-commit/SKILL.md b/.agents/skills/git-commit/SKILL.md index 3c5d6d3..377dc36 100644 --- a/.agents/skills/git-commit/SKILL.md +++ b/.agents/skills/git-commit/SKILL.md @@ -63,6 +63,8 @@ Commit when the user asks for it. Finishing a piece of work is not itself a requ - Unrelated changes → separate commits 3. For each logical group: - Stage the relevant files **by name**: `git add ...` + - Never stage planning documents — `*.spec.md`, `plan*.md`, `계획*.md`. They are working notes from + the planning skill, not part of the change. If one is already staged, unstage it. - Never `git add -A` or `git add .` — they sweep in whatever else is in the tree, which is how an unrelated file or a secret ends up in someone's commit. Leave the rest unstaged and tell the user what you skipped. diff --git a/.agents/skills/planning/SKILL.md b/.agents/skills/planning/SKILL.md index fcce153..eb40c7d 100644 --- a/.agents/skills/planning/SKILL.md +++ b/.agents/skills/planning/SKILL.md @@ -32,7 +32,8 @@ Cite `file:line` for every claim you rely on. ## Step 3 — Write the Spec -Write it to `.spec.md` and tell me the path. It exists to survive the conversation, so record +Write it to `.spec.md` and tell me the path. The spec is a working document: never stage, +commit, or push it, and keep it out of every PR. It exists to survive the conversation, so record the reasoning and not just the conclusion: - **Goal** — what changes for the user, and what is explicitly out of scope diff --git a/.agents/skills/write-pr/SKILL.md b/.agents/skills/write-pr/SKILL.md index cd961ea..4df6be0 100644 --- a/.agents/skills/write-pr/SKILL.md +++ b/.agents/skills/write-pr/SKILL.md @@ -27,6 +27,9 @@ git diff "origin/$BASE...HEAD" cat .github/PULL_REQUEST_TEMPLATE.md 2>/dev/null ``` +If the diff adds a planning document (`*.spec.md`, `plan*.md`, `계획*.md`), remove it from the branch with a +`git rm --cached` commit before creating the PR, and keep the local file. Planning documents never go into a PR. + ## Step 3 — Learn This Project's Scope Vocabulary Read `.agents/shared/commit-conventions.md` — it holds the commands for reading the repo's existing diff --git a/.claude/skills/git-commit/SKILL.md b/.claude/skills/git-commit/SKILL.md index c7ca4e0..bb8af72 100644 --- a/.claude/skills/git-commit/SKILL.md +++ b/.claude/skills/git-commit/SKILL.md @@ -63,6 +63,8 @@ Commit when the user asks for it. Finishing a piece of work is not itself a requ - Unrelated changes → separate commits 3. For each logical group: - Stage the relevant files **by name**: `git add ...` + - Never stage planning documents — `*.spec.md`, `plan*.md`, `계획*.md`. They are working notes from + the planning skill, not part of the change. If one is already staged, unstage it. - Never `git add -A` or `git add .` — they sweep in whatever else is in the tree, which is how an unrelated file or a secret ends up in someone's commit. Leave the rest unstaged and tell the user what you skipped. diff --git a/.claude/skills/planning/SKILL.md b/.claude/skills/planning/SKILL.md index 2824884..40a21c1 100644 --- a/.claude/skills/planning/SKILL.md +++ b/.claude/skills/planning/SKILL.md @@ -36,7 +36,8 @@ isn't available, do the same three passes yourself, one after another. ## Step 3 — Write the Spec -Write it to `.spec.md` and tell me the path. It exists to survive the conversation, so record +Write it to `.spec.md` and tell me the path. The spec is a working document: never stage, +commit, or push it, and keep it out of every PR. It exists to survive the conversation, so record the reasoning and not just the conclusion: - **Goal** — what changes for the user, and what is explicitly out of scope diff --git a/.claude/skills/write-pr/SKILL.md b/.claude/skills/write-pr/SKILL.md index b03c78b..98a58bb 100644 --- a/.claude/skills/write-pr/SKILL.md +++ b/.claude/skills/write-pr/SKILL.md @@ -27,6 +27,9 @@ git diff "origin/$BASE...HEAD" cat .github/PULL_REQUEST_TEMPLATE.md 2>/dev/null ``` +If the diff adds a planning document (`*.spec.md`, `plan*.md`, `계획*.md`), remove it from the branch with a +`git rm --cached` commit before creating the PR, and keep the local file. Planning documents never go into a PR. + ## Step 3 — Learn This Project's Scope Vocabulary Read `.claude/shared/commit-conventions.md` — it holds the commands for reading the repo's existing From a18ecf6d621678019c6201e64541f34fca0e35fd Mon Sep 17 00:00:00 2001 From: jyx-07 Date: Tue, 3 Nov 2026 23:16:12 +0900 Subject: [PATCH 2/3] =?UTF-8?q?ci:=20force=20push=EB=A5=BC=20=EC=A0=9C?= =?UTF-8?q?=EC=99=B8=ED=95=9C=20push=EB=A7=8C=20Discord=EB=A1=9C=20?= =?UTF-8?q?=EC=95=8C=EB=A6=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/rush-push-notify.yml | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 .github/workflows/rush-push-notify.yml diff --git a/.github/workflows/rush-push-notify.yml b/.github/workflows/rush-push-notify.yml new file mode 100644 index 0000000..6c72e15 --- /dev/null +++ b/.github/workflows/rush-push-notify.yml @@ -0,0 +1,24 @@ +name: Push Notification + +# 저장소 웹훅은 force push를 걸러낼 수 없어 push 이벤트를 받지 않습니다. +# 대신 이 워크플로가 일반 push만 같은 Discord 채널로 전달합니다. +on: + push: + +permissions: {} + +jobs: + notify: + name: Forward Push to Discord + if: ${{ !github.event.forced }} + runs-on: ubuntu-latest + env: + DISCORD_WEBHOOK: ${{ secrets.DISCORD_GITHUB_WEBHOOK }} + steps: + - name: Send Push Event + if: env.DISCORD_WEBHOOK != '' + run: | + curl -fsS -X POST "$DISCORD_WEBHOOK" \ + -H "Content-Type: application/json" \ + -H "X-GitHub-Event: push" \ + --data-binary @"$GITHUB_EVENT_PATH" From 6f3ee00e7dac113a058f7b4efd6fd3651753a904 Mon Sep 17 00:00:00 2001 From: jyx-07 Date: Tue, 3 Nov 2026 23:17:32 +0900 Subject: [PATCH 3/3] =?UTF-8?q?docs(global):=20=EC=97=AC=EB=9F=AC=20scope?= =?UTF-8?q?=EC=97=90=20=EA=B1=B8=EC=B9=9C=20PR=20=EC=A0=9C=EB=AA=A9?= =?UTF-8?q?=EC=9D=84=20global=EB=A1=9C=20=ED=86=B5=EC=9D=BC=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=EA=B7=9C=EC=B9=99=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .agents/skills/write-pr/SKILL.md | 2 +- .claude/skills/write-pr/SKILL.md | 2 +- .github/workflows/rush-ci.yml | 11 +++++++---- AGENTS.md | 2 +- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/.agents/skills/write-pr/SKILL.md b/.agents/skills/write-pr/SKILL.md index 4df6be0..3ea5adb 100644 --- a/.agents/skills/write-pr/SKILL.md +++ b/.agents/skills/write-pr/SKILL.md @@ -51,7 +51,7 @@ matches, attach none — a wrong label is worse than no label, and an undefined **Title** — Generate 3 options in the format `[scope] description`: -- Scope: from Step 3. Lowercase, in brackets — `[member]`, `[expo]`, `[global]` +- Scope: from Step 3. Lowercase, in brackets — `[member]`, `[expo]`, `[global]`. One scope only; a PR spanning several scopes uses `[global]`, never a comma-separated list - Description: Korean, concise, no emojis, max 50 characters total - Wrap class names, method names, annotations, file names, and technical terms in backticks (e.g., `@Transactional`, `MemberService`, `SKILL.md`) diff --git a/.claude/skills/write-pr/SKILL.md b/.claude/skills/write-pr/SKILL.md index 98a58bb..4985537 100644 --- a/.claude/skills/write-pr/SKILL.md +++ b/.claude/skills/write-pr/SKILL.md @@ -51,7 +51,7 @@ matches, attach none — a wrong label is worse than no label, and an undefined **Title** — Generate 3 options in the format `[scope] description`: -- Scope: from Step 3. Lowercase, in brackets — `[member]`, `[expo]`, `[global]` +- Scope: from Step 3. Lowercase, in brackets — `[member]`, `[expo]`, `[global]`. One scope only; a PR spanning several scopes uses `[global]`, never a comma-separated list - Description: Korean, concise, no emojis, max 50 characters total - Wrap class names, method names, annotations, file names, and technical terms in backticks (e.g., `@Transactional`, `MemberService`, `SKILL.md`) diff --git a/.github/workflows/rush-ci.yml b/.github/workflows/rush-ci.yml index 4009d8f..5d06810 100644 --- a/.github/workflows/rush-ci.yml +++ b/.github/workflows/rush-ci.yml @@ -54,10 +54,13 @@ jobs: return; } - const invalidScopes = scopesPart.split(',').map(s => s.trim()) - .filter(scope => !allowedScopes.includes(scope)); - if (invalidScopes.length > 0) { - core.setFailed(`Invalid scope(s): ${invalidScopes.join(', ')}`); + if (scopesPart.includes(',')) { + core.setFailed('Use a single scope. For changes spanning several scopes, use [global]'); + return; + } + + if (!allowedScopes.includes(scopesPart.trim())) { + core.setFailed(`Invalid scope: ${scopesPart}`); } setup-pr-metadata: diff --git a/AGENTS.md b/AGENTS.md index b612178..eb1c2c9 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -58,7 +58,7 @@ These are the same commands CI (`.github/workflows/rush-ci.yml`) runs. Make them ## Pull Requests - Every PR except a release PR targets `develop`. -- Titles use the `[scope] title` format. Pick scopes from `global`, `gateway`, `config`, `eureka`, `auth`, `shop`, `minigame`, `stage`, `user`, `sp`, `live`, `chat`, `ci/cd`, separating multiple scopes with commas. Do not use a colon (`:`) in the title. +- Titles use the `[scope] title` format. Pick scopes from `global`, `gateway`, `config`, `eureka`, `auth`, `shop`, `minigame`, `stage`, `user`, `sp`, `live`, `chat`, `ci/cd`. When a PR spans more than one scope, use `[global]` instead of listing them. Do not use a colon (`:`) in the title. - Bodies use the 개요 and 본문 sections of `.github/PULL_REQUEST_TEMPLATE.md` and stay short: - 개요: one sentence on what changes. - 본문: up to five one-line bullets on what changed. Add a merge-order or follow-up note only when one exists.