From 8f4a344f91d4f38ef28d54acef85d91443d07b18 Mon Sep 17 00:00:00 2001 From: minchodang Date: Sat, 18 Apr 2026 14:20:50 +0900 Subject: [PATCH 01/12] =?UTF-8?q?test:=20=EB=B2=88=EC=97=AD=20=EB=A6=AC?= =?UTF-8?q?=EB=B7=B0=20=EC=9B=8C=ED=81=AC=ED=94=8C=EB=A1=9C=EC=9A=B0=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Made-with: Cursor --- src/content/docs/useform/clearerrors.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/docs/useform/clearerrors.mdx b/src/content/docs/useform/clearerrors.mdx index 656695d11..8d7deb613 100644 --- a/src/content/docs/useform/clearerrors.mdx +++ b/src/content/docs/useform/clearerrors.mdx @@ -6,7 +6,7 @@ sidebar: apiLinks ## \ `clearErrors:` (name?: string | string[]) => void -이 함수는 폼의 에러를 직접 제거할 수 있습니다. +이 함수는 폼의 에러를 수동으로 제거할 수 있습니다. ### Props From 9776355fe377a00255f087d5c47f5a5d98ec9d6f Mon Sep 17 00:00:00 2001 From: minchodang Date: Sat, 18 Apr 2026 14:24:31 +0900 Subject: [PATCH 02/12] =?UTF-8?q?fix:=20translate-review=20=EC=9B=8C?= =?UTF-8?q?=ED=81=AC=ED=94=8C=EB=A1=9C=EC=9A=B0=EB=A5=BC=20curl=20?= =?UTF-8?q?=EB=B0=A9=EC=8B=9D=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD=20?= =?UTF-8?q?=EB=B0=8F=20=ED=8C=8C=EC=9D=BC=EB=AA=85=20=EC=98=A4=ED=83=80=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Made-with: Cursor --- .github/workflows/translate-review.yml | 140 +++++++++++++++++++++++ .github/workflows/trnaslate-review.yml | 151 ------------------------- 2 files changed, 140 insertions(+), 151 deletions(-) create mode 100644 .github/workflows/translate-review.yml delete mode 100644 .github/workflows/trnaslate-review.yml diff --git a/.github/workflows/translate-review.yml b/.github/workflows/translate-review.yml new file mode 100644 index 000000000..714050816 --- /dev/null +++ b/.github/workflows/translate-review.yml @@ -0,0 +1,140 @@ +name: Translation Review (GitHub Models) + +on: + pull_request: + types: [opened, synchronize] + paths: + - "src/content/**/*.mdx" + +permissions: + contents: read + pull-requests: write + models: read + +jobs: + review: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Get changed MDX files + id: changed + run: | + FILES=$(gh pr diff ${{ github.event.pull_request.number }} --name-only | grep '\.mdx$' || true) + if [ -z "$FILES" ]; then + echo "skip=true" >> "$GITHUB_OUTPUT" + echo "No MDX files changed." + else + echo "skip=false" >> "$GITHUB_OUTPUT" + fi + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Save PR diff to file + if: steps.changed.outputs.skip == 'false' + run: | + gh pr diff ${{ github.event.pull_request.number }} > /tmp/pr-diff.txt + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Review with GitHub Models + if: steps.changed.outputs.skip == 'false' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + PR_NUMBER: ${{ github.event.pull_request.number }} + run: | + set -Eeuo pipefail + + DIFF=$(cat /tmp/pr-diff.txt) + AGENTS=$(cat AGENTS.md) + REVIEW_INSTRUCTIONS=$(cat .github/copilot-review-instructions.md) + + read -r -d '' SYSTEM_PROMPT << 'SYSPROMPT' || true + 당신은 React Hook Form 한국어 번역 프로젝트의 코드 리뷰어입니다. + 반드시 한국어로 응답하세요. + + ## 번역 규칙 + PLACEHOLDER_AGENTS + + ## 리뷰 지침 + PLACEHOLDER_REVIEW + + ## 리뷰 형식 + + PR diff를 분석하고 번역 품질을 리뷰하세요. + 다음 항목을 중심으로 검토합니다: + + 1. **번역 용어 규칙 준수**: AGENTS.md의 번역 용어 표를 따르는지 + 2. **자연스러운 한국어 표현**: 어색한 번역투가 없는지 + 3. **기술적 정확성**: 원문의 의미가 정확히 전달되는지 + 4. **문서 구조**: MDX frontmatter, 섹션 제목 규칙을 따르는지 + 5. **코드 블록**: 코드 예제가 변경되지 않았는지 (주석 번역은 허용) + + 리뷰 결과를 다음 형식으로 작성하세요: + + ### 요약 + 전체적인 번역 품질에 대한 간단한 평가 (1-2문장) + + ### 수정 제안 + 수정이 필요한 부분이 있다면 각각: + - **파일**: 파일 경로 + - **위치**: 해당 내용 + - **현재**: 현재 번역 + - **제안**: 수정 제안 + - **이유**: 수정 이유 + + 수정할 부분이 없으면 "수정 제안 없음"이라고 작성하세요. + + ### 잘된 점 + 번역이 잘 된 부분이 있다면 간단히 언급하세요. + SYSPROMPT + + SYSTEM_PROMPT="${SYSTEM_PROMPT//PLACEHOLDER_AGENTS/$AGENTS}" + SYSTEM_PROMPT="${SYSTEM_PROMPT//PLACEHOLDER_REVIEW/$REVIEW_INSTRUCTIONS}" + + USER_MSG="다음 PR diff를 리뷰해주세요: + + \`\`\`diff + $DIFF + \`\`\`" + + RESPONSE=$(curl -s --max-time 120 \ + "https://models.github.ai/inference/chat/completions" \ + -H "Content-Type: application/json" \ + -H "Authorization: Bearer $GITHUB_TOKEN" \ + -d "$(jq -n \ + --arg model "openai/gpt-4o" \ + --arg system "$SYSTEM_PROMPT" \ + --arg user "$USER_MSG" \ + '{model: $model, messages: [ + {role: "system", content: $system}, + {role: "user", content: $user} + ], max_tokens: 4096}')") + + REVIEW_TEXT=$(echo "$RESPONSE" | jq -r '.choices[0].message.content // empty') + + if [ -z "$REVIEW_TEXT" ]; then + echo "Error response: $RESPONSE" + echo "::error::No review text returned from GitHub Models" + exit 1 + fi + + INPUT_TOKENS=$(echo "$RESPONSE" | jq -r '.usage.prompt_tokens // 0') + OUTPUT_TOKENS=$(echo "$RESPONSE" | jq -r '.usage.completion_tokens // 0') + echo "Tokens used - input: $INPUT_TOKENS, output: $OUTPUT_TOKENS" + + COMMENT_BODY=$(cat << EOF + ## 번역 리뷰 (GitHub Models) + + $REVIEW_TEXT + + --- + GPT-4o via GitHub Models | tokens: ${INPUT_TOKENS} in / ${OUTPUT_TOKENS} out + EOF + ) + + gh pr comment "$PR_NUMBER" --body "$COMMENT_BODY" + echo "Review comment posted successfully." diff --git a/.github/workflows/trnaslate-review.yml b/.github/workflows/trnaslate-review.yml deleted file mode 100644 index be05d0eba..000000000 --- a/.github/workflows/trnaslate-review.yml +++ /dev/null @@ -1,151 +0,0 @@ -name: Translation Review (GitHub Models) - -on: - pull_request: - types: [opened, synchronize] - paths: - - "src/content/**/*.mdx" - -permissions: - contents: read - pull-requests: write - models: read - -jobs: - review: - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Get changed MDX files - id: changed - run: | - FILES=$(gh pr diff ${{ github.event.pull_request.number }} --name-only | grep '\.mdx$' || true) - if [ -z "$FILES" ]; then - echo "skip=true" >> "$GITHUB_OUTPUT" - echo "No MDX files changed." - else - echo "skip=false" >> "$GITHUB_OUTPUT" - fi - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - name: Save PR diff to file - if: steps.changed.outputs.skip == 'false' - run: | - gh pr diff ${{ github.event.pull_request.number }} > /tmp/pr-diff.txt - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - name: Review with GitHub Models - if: steps.changed.outputs.skip == 'false' - uses: actions/github-script@v7 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - script: | - const fs = require("fs"); - - const diff = fs.readFileSync("/tmp/pr-diff.txt", "utf8"); - const agents = fs.readFileSync("AGENTS.md", "utf8"); - const reviewInstructions = fs.readFileSync( - ".github/copilot-review-instructions.md", - "utf8" - ); - - const systemPrompt = [ - "당신은 React Hook Form 한국어 번역 프로젝트의 코드 리뷰어입니다.", - "반드시 한국어로 응답하세요.", - "", - "## 번역 규칙", - agents, - "", - "## 리뷰 지침", - reviewInstructions, - "", - "## 리뷰 형식", - "", - "PR diff를 분석하고 번역 품질을 리뷰하세요.", - "다음 항목을 중심으로 검토합니다:", - "", - "1. **번역 용어 규칙 준수**: AGENTS.md의 번역 용어 표를 따르는지", - "2. **자연스러운 한국어 표현**: 어색한 번역투가 없는지", - "3. **기술적 정확성**: 원문의 의미가 정확히 전달되는지", - "4. **문서 구조**: MDX frontmatter, 섹션 제목 규칙을 따르는지", - "5. **코드 블록**: 코드 예제가 변경되지 않았는지 (주석 번역은 허용)", - "", - "리뷰 결과를 다음 형식으로 작성하세요:", - "", - "### 요약", - "전체적인 번역 품질에 대한 간단한 평가 (1-2문장)", - "", - "### 수정 제안", - "수정이 필요한 부분이 있다면 각각:", - "- **파일**: 파일 경로", - "- **위치**: 해당 내용", - "- **현재**: 현재 번역", - "- **제안**: 수정 제안", - "- **이유**: 수정 이유", - "", - '수정할 부분이 없으면 "수정 제안 없음"이라고 작성하세요.', - "", - "### 잘된 점", - "번역이 잘 된 부분이 있다면 간단히 언급하세요.", - ].join("\n"); - - const userMessage = "다음 PR diff를 리뷰해주세요:\n\n```diff\n" + diff + "\n```"; - - const response = await fetch("https://models.github.ai/inference/chat/completions", { - method: "POST", - headers: { - "Content-Type": "application/json", - "Authorization": `Bearer ${process.env.GITHUB_TOKEN}`, - }, - body: JSON.stringify({ - model: "openai/gpt-4o", - messages: [ - { role: "system", content: systemPrompt }, - { role: "user", content: userMessage }, - ], - max_tokens: 4096, - }), - }); - - if (!response.ok) { - const error = await response.text(); - core.setFailed(`GitHub Models API error: ${response.status} ${error}`); - return; - } - - const data = await response.json(); - const reviewText = data.choices?.[0]?.message?.content; - - if (!reviewText) { - core.setFailed("No review text returned from GitHub Models."); - return; - } - - const usage = data.usage || {}; - const inputTokens = usage.prompt_tokens || 0; - const outputTokens = usage.completion_tokens || 0; - core.info(`Tokens used - input: ${inputTokens}, output: ${outputTokens}`); - - // Post review as PR comment - await github.rest.issues.createComment({ - owner: context.repo.owner, - repo: context.repo.repo, - issue_number: context.payload.pull_request.number, - body: [ - "## 번역 리뷰 (GitHub Models)", - "", - reviewText, - "", - "---", - `GPT-4o via GitHub Models | tokens: ${inputTokens} in / ${outputTokens} out`, - ].join("\n"), - }); - - core.info("Review comment posted successfully."); From df582ef3ae86c7651f4a39cdb344c331eb5c26a4 Mon Sep 17 00:00:00 2001 From: minchodang Date: Sat, 18 Apr 2026 14:27:05 +0900 Subject: [PATCH 03/12] =?UTF-8?q?fix:=20curl=20=EC=9D=91=EB=8B=B5=20?= =?UTF-8?q?=EB=94=94=EB=B2=84=EA=B9=85=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20?= =?UTF-8?q?=EC=97=90=EB=9F=AC=20=EC=B2=98=EB=A6=AC=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Made-with: Cursor --- .github/workflows/translate-review.yml | 38 ++++++++++++++++++-------- 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/.github/workflows/translate-review.yml b/.github/workflows/translate-review.yml index 714050816..d6a2510fc 100644 --- a/.github/workflows/translate-review.yml +++ b/.github/workflows/translate-review.yml @@ -101,24 +101,40 @@ jobs: $DIFF \`\`\`" - RESPONSE=$(curl -s --max-time 120 \ + # JSON 페이로드 생성 + PAYLOAD=$(jq -n \ + --arg model "openai/gpt-4o" \ + --arg system "$SYSTEM_PROMPT" \ + --arg user "$USER_MSG" \ + '{model: $model, messages: [ + {role: "system", content: $system}, + {role: "user", content: $user} + ], max_tokens: 4096}') + + echo "Calling GitHub Models API..." + + HTTP_RESPONSE=$(curl -s -w "\n%{http_code}" --max-time 120 \ "https://models.github.ai/inference/chat/completions" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $GITHUB_TOKEN" \ - -d "$(jq -n \ - --arg model "openai/gpt-4o" \ - --arg system "$SYSTEM_PROMPT" \ - --arg user "$USER_MSG" \ - '{model: $model, messages: [ - {role: "system", content: $system}, - {role: "user", content: $user} - ], max_tokens: 4096}')") + -d "$PAYLOAD") + + HTTP_STATUS=$(echo "$HTTP_RESPONSE" | tail -n1) + RESPONSE=$(echo "$HTTP_RESPONSE" | sed '$d') + + echo "HTTP Status: $HTTP_STATUS" + + if [ "$HTTP_STATUS" != "200" ]; then + echo "API Error Response: $RESPONSE" + echo "::error::GitHub Models API returned status $HTTP_STATUS" + exit 1 + fi REVIEW_TEXT=$(echo "$RESPONSE" | jq -r '.choices[0].message.content // empty') if [ -z "$REVIEW_TEXT" ]; then - echo "Error response: $RESPONSE" - echo "::error::No review text returned from GitHub Models" + echo "Response body: $RESPONSE" + echo "::error::No review text in response" exit 1 fi From ee7a0a62e59b8fef3ee5daf35fd7d976f1aa34f3 Mon Sep 17 00:00:00 2001 From: minchodang Date: Sat, 18 Apr 2026 14:29:10 +0900 Subject: [PATCH 04/12] =?UTF-8?q?fix:=20pull=5Frequest=5Ftarget=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EB=B3=80=EA=B2=BD=ED=95=98=EC=97=AC=20GitHub=20Mod?= =?UTF-8?q?els=20API=20=EA=B6=8C=ED=95=9C=20=EB=AC=B8=EC=A0=9C=20=ED=95=B4?= =?UTF-8?q?=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Made-with: Cursor --- .github/workflows/translate-review.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/translate-review.yml b/.github/workflows/translate-review.yml index d6a2510fc..cd2d77545 100644 --- a/.github/workflows/translate-review.yml +++ b/.github/workflows/translate-review.yml @@ -1,7 +1,7 @@ name: Translation Review (GitHub Models) on: - pull_request: + pull_request_target: types: [opened, synchronize] paths: - "src/content/**/*.mdx" @@ -18,6 +18,7 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 with: + ref: ${{ github.event.pull_request.head.sha }} fetch-depth: 0 - name: Get changed MDX files From ad54fada05f45f8252934ddd59fccbf122406962 Mon Sep 17 00:00:00 2001 From: minchodang Date: Sat, 18 Apr 2026 14:31:14 +0900 Subject: [PATCH 05/12] =?UTF-8?q?fix:=20GH=5FMODELS=5FTOKEN=20=EC=82=AC?= =?UTF-8?q?=EC=9A=A9=ED=95=98=EC=97=AC=20GitHub=20Models=20API=20=EC=9D=B8?= =?UTF-8?q?=EC=A6=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Made-with: Cursor --- .github/workflows/translate-review.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/translate-review.yml b/.github/workflows/translate-review.yml index cd2d77545..c1e51389a 100644 --- a/.github/workflows/translate-review.yml +++ b/.github/workflows/translate-review.yml @@ -1,7 +1,7 @@ name: Translation Review (GitHub Models) on: - pull_request_target: + pull_request: types: [opened, synchronize] paths: - "src/content/**/*.mdx" @@ -18,7 +18,6 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 with: - ref: ${{ github.event.pull_request.head.sha }} fetch-depth: 0 - name: Get changed MDX files @@ -44,7 +43,8 @@ jobs: - name: Review with GitHub Models if: steps.changed.outputs.skip == 'false' env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GH_MODELS_TOKEN: ${{ secrets.GH_MODELS_TOKEN }} + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} PR_NUMBER: ${{ github.event.pull_request.number }} run: | set -Eeuo pipefail @@ -117,7 +117,7 @@ jobs: HTTP_RESPONSE=$(curl -s -w "\n%{http_code}" --max-time 120 \ "https://models.github.ai/inference/chat/completions" \ -H "Content-Type: application/json" \ - -H "Authorization: Bearer $GITHUB_TOKEN" \ + -H "Authorization: Bearer $GH_MODELS_TOKEN" \ -d "$PAYLOAD") HTTP_STATUS=$(echo "$HTTP_RESPONSE" | tail -n1) From 8c46a2e7cb10a5f3b71d43123ba18e66bd84e9f0 Mon Sep 17 00:00:00 2001 From: minchodang Date: Sat, 18 Apr 2026 14:33:57 +0900 Subject: [PATCH 06/12] =?UTF-8?q?feat:=20=EC=9D=B8=EB=9D=BC=EC=9D=B8=20?= =?UTF-8?q?=EB=A6=AC=EB=B7=B0=20=EC=BD=94=EB=A9=98=ED=8A=B8=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EC=B6=94=EA=B0=80=20-=20JSON=20=EC=9D=91=EB=8B=B5?= =?UTF-8?q?=20=ED=98=95=EC=8B=9D=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD,?= =?UTF-8?q?=20PR=20Review=20API=EB=A1=9C=20=EB=9D=BC=EC=9D=B8=EB=B3=84=20?= =?UTF-8?q?=EC=BD=94=EB=A9=98=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Made-with: Cursor --- .github/workflows/translate-review.yml | 129 +++++++++++++++++-------- 1 file changed, 87 insertions(+), 42 deletions(-) diff --git a/.github/workflows/translate-review.yml b/.github/workflows/translate-review.yml index c1e51389a..488d287b3 100644 --- a/.github/workflows/translate-review.yml +++ b/.github/workflows/translate-review.yml @@ -29,6 +29,7 @@ jobs: echo "No MDX files changed." else echo "skip=false" >> "$GITHUB_OUTPUT" + echo "$FILES" > /tmp/changed-files.txt fi env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -46,6 +47,8 @@ jobs: GH_MODELS_TOKEN: ${{ secrets.GH_MODELS_TOKEN }} GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} PR_NUMBER: ${{ github.event.pull_request.number }} + REPO: ${{ github.repository }} + HEAD_SHA: ${{ github.event.pull_request.head.sha }} run: | set -Eeuo pipefail @@ -63,46 +66,39 @@ jobs: ## 리뷰 지침 PLACEHOLDER_REVIEW - ## 리뷰 형식 - - PR diff를 분석하고 번역 품질을 리뷰하세요. - 다음 항목을 중심으로 검토합니다: - - 1. **번역 용어 규칙 준수**: AGENTS.md의 번역 용어 표를 따르는지 - 2. **자연스러운 한국어 표현**: 어색한 번역투가 없는지 - 3. **기술적 정확성**: 원문의 의미가 정확히 전달되는지 - 4. **문서 구조**: MDX frontmatter, 섹션 제목 규칙을 따르는지 - 5. **코드 블록**: 코드 예제가 변경되지 않았는지 (주석 번역은 허용) - - 리뷰 결과를 다음 형식으로 작성하세요: - - ### 요약 - 전체적인 번역 품질에 대한 간단한 평가 (1-2문장) - - ### 수정 제안 - 수정이 필요한 부분이 있다면 각각: - - **파일**: 파일 경로 - - **위치**: 해당 내용 - - **현재**: 현재 번역 - - **제안**: 수정 제안 - - **이유**: 수정 이유 - - 수정할 부분이 없으면 "수정 제안 없음"이라고 작성하세요. - - ### 잘된 점 - 번역이 잘 된 부분이 있다면 간단히 언급하세요. + ## 응답 형식 + + 반드시 아래 JSON 형식으로만 응답하세요. 다른 텍스트는 포함하지 마세요. + + { + "summary": "전체적인 번역 품질 평가 (1-2문장)", + "good_points": "번역이 잘 된 부분 (없으면 빈 문자열)", + "comments": [ + { + "path": "파일 경로 (예: src/content/docs/useform/clearerrors.mdx)", + "line": 변경된 라인 번호 (diff에서 + 기호가 있는 라인의 번호), + "body": "이 라인에 대한 리뷰 코멘트. 현재 번역의 문제점과 수정 제안을 포함" + } + ] + } + + 주의사항: + - comments 배열에는 수정이 필요한 부분만 포함하세요 + - 수정할 부분이 없으면 comments를 빈 배열 []로 하세요 + - line 번호는 반드시 diff에서 추가된(+) 라인의 번호여야 합니다 + - path는 diff에 표시된 파일 경로와 정확히 일치해야 합니다 + - 코드 블록 변경은 리뷰하지 마세요 (주석 번역은 허용) SYSPROMPT SYSTEM_PROMPT="${SYSTEM_PROMPT//PLACEHOLDER_AGENTS/$AGENTS}" SYSTEM_PROMPT="${SYSTEM_PROMPT//PLACEHOLDER_REVIEW/$REVIEW_INSTRUCTIONS}" - USER_MSG="다음 PR diff를 리뷰해주세요: + USER_MSG="다음 PR diff를 리뷰하고 JSON 형식으로 응답하세요: \`\`\`diff $DIFF \`\`\`" - # JSON 페이로드 생성 PAYLOAD=$(jq -n \ --arg model "openai/gpt-4o" \ --arg system "$SYSTEM_PROMPT" \ @@ -110,7 +106,7 @@ jobs: '{model: $model, messages: [ {role: "system", content: $system}, {role: "user", content: $user} - ], max_tokens: 4096}') + ], max_tokens: 4096, response_format: {type: "json_object"}}') echo "Calling GitHub Models API..." @@ -131,27 +127,76 @@ jobs: exit 1 fi - REVIEW_TEXT=$(echo "$RESPONSE" | jq -r '.choices[0].message.content // empty') + REVIEW_JSON=$(echo "$RESPONSE" | jq -r '.choices[0].message.content // empty') - if [ -z "$REVIEW_TEXT" ]; then + if [ -z "$REVIEW_JSON" ]; then echo "Response body: $RESPONSE" - echo "::error::No review text in response" + echo "::error::No review content in response" exit 1 fi + echo "Review JSON: $REVIEW_JSON" + INPUT_TOKENS=$(echo "$RESPONSE" | jq -r '.usage.prompt_tokens // 0') OUTPUT_TOKENS=$(echo "$RESPONSE" | jq -r '.usage.completion_tokens // 0') echo "Tokens used - input: $INPUT_TOKENS, output: $OUTPUT_TOKENS" - COMMENT_BODY=$(cat << EOF - ## 번역 리뷰 (GitHub Models) + SUMMARY=$(echo "$REVIEW_JSON" | jq -r '.summary // "요약 없음"') + GOOD_POINTS=$(echo "$REVIEW_JSON" | jq -r '.good_points // ""') + COMMENTS_COUNT=$(echo "$REVIEW_JSON" | jq '.comments | length') + + echo "Summary: $SUMMARY" + echo "Good points: $GOOD_POINTS" + echo "Comments count: $COMMENTS_COUNT" - $REVIEW_TEXT + if [ "$COMMENTS_COUNT" -gt 0 ]; then + echo "Creating PR review with inline comments..." + + REVIEW_COMMENTS=$(echo "$REVIEW_JSON" | jq '[.comments[] | {path: .path, line: .line, body: .body}]') + + REVIEW_BODY="## 번역 리뷰 (GitHub Models) + + ### 요약 + $SUMMARY + + ### 잘된 점 + ${GOOD_POINTS:-"특별히 언급할 사항 없음"} --- - GPT-4o via GitHub Models | tokens: ${INPUT_TOKENS} in / ${OUTPUT_TOKENS} out - EOF - ) + GPT-4o via GitHub Models | tokens: ${INPUT_TOKENS} in / ${OUTPUT_TOKENS} out | 인라인 코멘트: ${COMMENTS_COUNT}개" + + REVIEW_PAYLOAD=$(jq -n \ + --arg body "$REVIEW_BODY" \ + --arg commit_id "$HEAD_SHA" \ + --arg event "COMMENT" \ + --argjson comments "$REVIEW_COMMENTS" \ + '{body: $body, commit_id: $commit_id, event: $event, comments: $comments}') + + echo "Submitting review..." + gh api \ + --method POST \ + -H "Accept: application/vnd.github+json" \ + "/repos/$REPO/pulls/$PR_NUMBER/reviews" \ + --input - <<< "$REVIEW_PAYLOAD" + + else + echo "No inline comments, posting summary only..." + + COMMENT_BODY="## 번역 리뷰 (GitHub Models) + + ### 요약 + $SUMMARY + + ### 잘된 점 + ${GOOD_POINTS:-"특별히 언급할 사항 없음"} + + ### 수정 제안 + 수정 제안 없음 + + --- + GPT-4o via GitHub Models | tokens: ${INPUT_TOKENS} in / ${OUTPUT_TOKENS} out" + + gh pr comment "$PR_NUMBER" --body "$COMMENT_BODY" + fi - gh pr comment "$PR_NUMBER" --body "$COMMENT_BODY" - echo "Review comment posted successfully." + echo "Review posted successfully." From 2b5d5d4426211e7a55f305d11377735622c6ff02 Mon Sep 17 00:00:00 2001 From: minchodang Date: Sat, 18 Apr 2026 14:42:01 +0900 Subject: [PATCH 07/12] =?UTF-8?q?refactor:=20=EB=A6=AC=EB=B7=B0=20?= =?UTF-8?q?=ED=94=84=EB=A1=AC=ED=94=84=ED=8A=B8=20=EA=B0=9C=EC=84=A0=20-?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD=EC=A0=90=EC=97=90=EB=A7=8C=20=EC=A7=91?= =?UTF-8?q?=EC=A4=91,=20=EB=B2=88=EC=97=AD=20=EA=B7=9C=EC=B9=99=20?= =?UTF-8?q?=EA=B0=95=EC=A1=B0,=20=EB=B6=88=ED=95=84=EC=9A=94=ED=95=9C=20?= =?UTF-8?q?=EC=A7=80=EC=A0=81=20=EB=B0=A9=EC=A7=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Made-with: Cursor --- .github/workflows/translate-review.yml | 53 +++++++++++++++++--------- 1 file changed, 35 insertions(+), 18 deletions(-) diff --git a/.github/workflows/translate-review.yml b/.github/workflows/translate-review.yml index 488d287b3..0d53eb131 100644 --- a/.github/workflows/translate-review.yml +++ b/.github/workflows/translate-review.yml @@ -54,44 +54,61 @@ jobs: DIFF=$(cat /tmp/pr-diff.txt) AGENTS=$(cat AGENTS.md) - REVIEW_INSTRUCTIONS=$(cat .github/copilot-review-instructions.md) read -r -d '' SYSTEM_PROMPT << 'SYSPROMPT' || true - 당신은 React Hook Form 한국어 번역 프로젝트의 코드 리뷰어입니다. + 당신은 React Hook Form 한국어 번역 프로젝트의 번역 품질 리뷰어입니다. 반드시 한국어로 응답하세요. - ## 번역 규칙 + ## 당신의 역할 + - MDX 파일의 **번역 변경사항만** 리뷰합니다 + - 워크플로우(.yml), 설정 파일 등은 리뷰 대상이 아닙니다 + - diff에서 `-`로 시작하는 줄(삭제된 내용)과 `+`로 시작하는 줄(추가된 내용)을 비교하여 **변경의 적절성**을 판단합니다 + + ## 번역 규칙 (반드시 준수) PLACEHOLDER_AGENTS - ## 리뷰 지침 - PLACEHOLDER_REVIEW + ## 리뷰 기준 + + 1. **변경된 부분에만 집중**: diff의 변경점(-/+)만 리뷰하세요. 변경되지 않은 부분은 언급하지 마세요. + + 2. **번역 규칙 준수 여부**: 위 번역 규칙의 용어표를 따르는지 확인하세요. + - 예: form→폼, method→메서드, error→에러 + - 이중 표기가 필요한 용어: register→등록(register), blur→블러(blur) 등 + + 3. **자연스러운 한국어**: 번역투가 아닌 자연스러운 한국어인지 확인하세요. + - "~할 수 있습니다", "~합니다" 등 자연스러운 종결어미 + - 직역보다는 의미 전달이 명확한 표현 + + 4. **변경이 개선인지 판단**: + - 이전 번역(-)과 새 번역(+)을 비교하여 개선되었는지 확인 + - 불필요한 변경이나 오히려 나빠진 경우만 지적 + + 5. **코드 블록은 무시**: 코드 예제는 리뷰하지 마세요 (주석 번역은 허용) ## 응답 형식 - 반드시 아래 JSON 형식으로만 응답하세요. 다른 텍스트는 포함하지 마세요. + 반드시 아래 JSON 형식으로만 응답하세요. { - "summary": "전체적인 번역 품질 평가 (1-2문장)", - "good_points": "번역이 잘 된 부분 (없으면 빈 문자열)", + "summary": "변경된 번역에 대한 간단한 평가 (1-2문장). MDX 번역 변경만 언급하세요.", + "good_points": "변경이 좋은 이유나 잘된 점. 없으면 빈 문자열", "comments": [ { - "path": "파일 경로 (예: src/content/docs/useform/clearerrors.mdx)", - "line": 변경된 라인 번호 (diff에서 + 기호가 있는 라인의 번호), - "body": "이 라인에 대한 리뷰 코멘트. 현재 번역의 문제점과 수정 제안을 포함" + "path": "src/content/... 형식의 MDX 파일 경로", + "line": diff에서 +로 시작하는 라인의 번호 (숫자), + "body": "구체적인 문제점과 수정 제안. 왜 문제인지, 어떻게 고쳐야 하는지 명확히" } ] } - 주의사항: - - comments 배열에는 수정이 필요한 부분만 포함하세요 - - 수정할 부분이 없으면 comments를 빈 배열 []로 하세요 - - line 번호는 반드시 diff에서 추가된(+) 라인의 번호여야 합니다 - - path는 diff에 표시된 파일 경로와 정확히 일치해야 합니다 - - 코드 블록 변경은 리뷰하지 마세요 (주석 번역은 허용) + ## 중요 주의사항 + - **문제가 없으면 comments를 빈 배열 []로 하세요** - 억지로 문제를 찾지 마세요 + - 사소한 스타일 차이는 지적하지 마세요 + - "~도 괜찮아 보입니다" 같은 애매한 코멘트는 달지 마세요 + - 명확한 번역 규칙 위반이나 오역만 지적하세요 SYSPROMPT SYSTEM_PROMPT="${SYSTEM_PROMPT//PLACEHOLDER_AGENTS/$AGENTS}" - SYSTEM_PROMPT="${SYSTEM_PROMPT//PLACEHOLDER_REVIEW/$REVIEW_INSTRUCTIONS}" USER_MSG="다음 PR diff를 리뷰하고 JSON 형식으로 응답하세요: From 8261be2f6c099163bec202b79091298bb86383bc Mon Sep 17 00:00:00 2001 From: minchodang Date: Sat, 18 Apr 2026 14:44:51 +0900 Subject: [PATCH 08/12] =?UTF-8?q?test:=20=EB=B2=88=EC=97=AD=20=ED=91=9C?= =?UTF-8?q?=ED=98=84=20=EB=B3=80=EA=B2=BD=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?(=EC=88=98=EB=8F=99=EC=9C=BC=EB=A1=9C=20=E2=86=92=20=EC=A7=81?= =?UTF-8?q?=EC=A0=91)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Made-with: Cursor --- src/content/docs/useform/clearerrors.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/docs/useform/clearerrors.mdx b/src/content/docs/useform/clearerrors.mdx index 8d7deb613..656695d11 100644 --- a/src/content/docs/useform/clearerrors.mdx +++ b/src/content/docs/useform/clearerrors.mdx @@ -6,7 +6,7 @@ sidebar: apiLinks ## \ `clearErrors:` (name?: string | string[]) => void -이 함수는 폼의 에러를 수동으로 제거할 수 있습니다. +이 함수는 폼의 에러를 직접 제거할 수 있습니다. ### Props From 2bf63a8551818b7ed2ede8beec61ad7d601f14dd Mon Sep 17 00:00:00 2001 From: minchodang Date: Sat, 18 Apr 2026 14:46:33 +0900 Subject: [PATCH 09/12] =?UTF-8?q?test:=20=EC=97=AC=EB=9F=AC=20MDX=20?= =?UTF-8?q?=ED=8C=8C=EC=9D=BC=20=EB=B2=88=EC=97=AD=20=ED=91=9C=ED=98=84=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Made-with: Cursor --- src/content/docs/useform/reset.mdx | 2 +- src/content/docs/useform/seterror.mdx | 2 +- src/content/docs/useform/trigger.mdx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/content/docs/useform/reset.mdx b/src/content/docs/useform/reset.mdx index bec0c18f3..b43fe316b 100644 --- a/src/content/docs/useform/reset.mdx +++ b/src/content/docs/useform/reset.mdx @@ -6,7 +6,7 @@ sidebar: apiLinks ## \ `reset:` `(values?: T | ResetAction, options?: Record) => void` -전체 폼 상태, 필드 참조 및 구독을 초기화합니다. 선택적 인자가 있으며, 부분적인 폼 상태 초기화를 허용할 수 있습니다. +전체 폼 상태, 필드 참조 및 구독을 초기화합니다. 선택적 인자를 통해 부분적인 폼 상태만 초기화할 수도 있습니다. ### Props diff --git a/src/content/docs/useform/seterror.mdx b/src/content/docs/useform/seterror.mdx index a06e1de9a..98271854a 100644 --- a/src/content/docs/useform/seterror.mdx +++ b/src/content/docs/useform/seterror.mdx @@ -6,7 +6,7 @@ sidebar: apiLinks ## \ `setError:` `(name: string, error: FieldError, { shouldFocus?: boolean }) => void` -이 함수는 하나 이상의 에러를 수동으로 설정할 수 있도록 합니다. +이 함수를 사용하면 하나 이상의 에러를 직접 설정할 수 있습니다. ### Props diff --git a/src/content/docs/useform/trigger.mdx b/src/content/docs/useform/trigger.mdx index 5198f4fd7..4384f02b8 100644 --- a/src/content/docs/useform/trigger.mdx +++ b/src/content/docs/useform/trigger.mdx @@ -6,7 +6,7 @@ sidebar: apiLinks ## `trigger:` `(name?: string | string[]) => Promise` -폼 또는 인풋의 유효성 검사를 수동으로 트리거합니다. 이 메서드는 의존적인 유효성 검사가 있는 경우(입력 유효성 검사가 다른 입력 값에 의존하는 경우)에도 유용합니다. +폼 또는 인풋의 유효성 검사를 직접 트리거합니다. 이 메서드는 의존적인 유효성 검사가 있을 때(한 입력의 유효성 검사가 다른 입력 값에 의존하는 경우) 유용합니다. ### Props From e260eb2e6272b2464a16dbfb64684d3f15123298 Mon Sep 17 00:00:00 2001 From: minchodang Date: Sat, 18 Apr 2026 14:54:55 +0900 Subject: [PATCH 10/12] =?UTF-8?q?refactor:=20=ED=94=84=EB=A1=AC=ED=94=84?= =?UTF-8?q?=ED=8A=B8=EC=97=90=20=EA=B0=99=EC=9D=80=20=EB=9D=BC=EC=9D=B8=20?= =?UTF-8?q?=EB=82=B4=20=EB=AA=A8=EB=93=A0=20=EB=B3=80=EA=B2=BD=EC=A0=90=20?= =?UTF-8?q?=ED=8F=AC=ED=95=A8=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=A7=80?= =?UTF-8?q?=EC=B9=A8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Made-with: Cursor --- .github/workflows/translate-review.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/translate-review.yml b/.github/workflows/translate-review.yml index 0d53eb131..4647820d3 100644 --- a/.github/workflows/translate-review.yml +++ b/.github/workflows/translate-review.yml @@ -106,6 +106,8 @@ jobs: - 사소한 스타일 차이는 지적하지 마세요 - "~도 괜찮아 보입니다" 같은 애매한 코멘트는 달지 마세요 - 명확한 번역 규칙 위반이나 오역만 지적하세요 + - **같은 라인에 여러 변경이 있으면 모든 변경점을 코멘트에 포함하세요** + - diff의 - 라인과 + 라인을 단어 단위로 꼼꼼히 비교하여 모든 차이점을 파악하세요 SYSPROMPT SYSTEM_PROMPT="${SYSTEM_PROMPT//PLACEHOLDER_AGENTS/$AGENTS}" From 6b888fc766580dd6e97627fd3a6bb721a303aa11 Mon Sep 17 00:00:00 2001 From: minchodang Date: Sat, 18 Apr 2026 14:58:48 +0900 Subject: [PATCH 11/12] =?UTF-8?q?feat:=20word-diff=20=EB=8F=84=EC=9E=85?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EB=8B=A8=EC=96=B4=20=EB=8B=A8=EC=9C=84=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=EC=A0=90=20=EC=A0=95=ED=99=95=ED=9E=88=20?= =?UTF-8?q?=ED=8C=8C=EC=95=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Made-with: Cursor --- .github/workflows/translate-review.yml | 30 ++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/.github/workflows/translate-review.yml b/.github/workflows/translate-review.yml index 4647820d3..b0b4d9c28 100644 --- a/.github/workflows/translate-review.yml +++ b/.github/workflows/translate-review.yml @@ -37,7 +37,15 @@ jobs: - name: Save PR diff to file if: steps.changed.outputs.skip == 'false' run: | + # 일반 diff (라인 번호 파악용) gh pr diff ${{ github.event.pull_request.number }} > /tmp/pr-diff.txt + + # word-diff (단어 단위 변경점 파악용) + # [-삭제된 단어-] {+추가된 단어+} 형식으로 표시 + BASE_SHA=$(gh pr view ${{ github.event.pull_request.number }} --json baseRefName -q '.baseRefName') + git fetch origin "$BASE_SHA" --depth=1 2>/dev/null || true + git diff --word-diff origin/"$BASE_SHA"..HEAD -- 'src/content/**/*.mdx' > /tmp/pr-word-diff.txt || \ + gh pr diff ${{ github.event.pull_request.number }} > /tmp/pr-word-diff.txt env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -53,6 +61,7 @@ jobs: set -Eeuo pipefail DIFF=$(cat /tmp/pr-diff.txt) + WORD_DIFF=$(cat /tmp/pr-word-diff.txt) AGENTS=$(cat AGENTS.md) read -r -d '' SYSTEM_PROMPT << 'SYSPROMPT' || true @@ -62,7 +71,10 @@ jobs: ## 당신의 역할 - MDX 파일의 **번역 변경사항만** 리뷰합니다 - 워크플로우(.yml), 설정 파일 등은 리뷰 대상이 아닙니다 - - diff에서 `-`로 시작하는 줄(삭제된 내용)과 `+`로 시작하는 줄(추가된 내용)을 비교하여 **변경의 적절성**을 판단합니다 + - **word-diff 형식**을 사용하여 변경점을 정확히 파악합니다: + - `[-삭제된 텍스트-]`: 이전 버전에서 삭제된 부분 + - `{+추가된 텍스트+}`: 새 버전에서 추가된 부분 + - 같은 라인에서 여러 변경이 있으면 **모든 변경점**을 리뷰에 포함하세요 ## 번역 규칙 (반드시 준수) PLACEHOLDER_AGENTS @@ -106,13 +118,23 @@ jobs: - 사소한 스타일 차이는 지적하지 마세요 - "~도 괜찮아 보입니다" 같은 애매한 코멘트는 달지 마세요 - 명확한 번역 규칙 위반이나 오역만 지적하세요 - - **같은 라인에 여러 변경이 있으면 모든 변경점을 코멘트에 포함하세요** - - diff의 - 라인과 + 라인을 단어 단위로 꼼꼼히 비교하여 모든 차이점을 파악하세요 + - **word-diff의 모든 [-삭제-]와 {+추가+}를 확인하고 코멘트에 포함하세요** + - 예: "[-수동으로-]{+직접+}" 와 "[-있는 경우-]{+있을 때+}"가 같은 라인에 있으면 둘 다 언급 SYSPROMPT SYSTEM_PROMPT="${SYSTEM_PROMPT//PLACEHOLDER_AGENTS/$AGENTS}" - USER_MSG="다음 PR diff를 리뷰하고 JSON 형식으로 응답하세요: + USER_MSG="다음 PR의 번역 변경사항을 리뷰하고 JSON 형식으로 응답하세요. + + ## Word Diff (단어 단위 변경점) + [-삭제-]와 {+추가+} 표시를 확인하여 정확히 무엇이 변경되었는지 파악하세요. + + \`\`\`diff + $WORD_DIFF + \`\`\` + + ## 일반 Diff (라인 번호 참조용) + 인라인 코멘트의 line 번호는 이 diff를 참고하세요. \`\`\`diff $DIFF From e086836a68c972cc79efd2ac084f031b0f052ef7 Mon Sep 17 00:00:00 2001 From: minchodang Date: Sat, 18 Apr 2026 15:04:16 +0900 Subject: [PATCH 12/12] =?UTF-8?q?refactor:=20=ED=94=84=EB=A1=AC=ED=94=84?= =?UTF-8?q?=ED=8A=B8=20=EA=B0=9C=EC=84=A0=20-=20=EC=8B=A4=EC=A0=9C=20?= =?UTF-8?q?=EB=A6=AC=EB=B7=B0=EC=96=B4=EC=B2=98=EB=9F=BC=20=ED=95=84?= =?UTF-8?q?=EC=9A=94=ED=95=A0=20=EB=95=8C=EB=A7=8C=20=EC=BD=94=EB=A9=98?= =?UTF-8?q?=ED=8A=B8,=20=EA=B5=AC=EC=B2=B4=EC=A0=81=20=EA=B7=BC=EA=B1=B0?= =?UTF-8?q?=20=EC=9A=94=EA=B5=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Made-with: Cursor --- .github/workflows/translate-review.yml | 76 +++++++++++++------------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/.github/workflows/translate-review.yml b/.github/workflows/translate-review.yml index b0b4d9c28..f3714c42a 100644 --- a/.github/workflows/translate-review.yml +++ b/.github/workflows/translate-review.yml @@ -68,58 +68,58 @@ jobs: 당신은 React Hook Form 한국어 번역 프로젝트의 번역 품질 리뷰어입니다. 반드시 한국어로 응답하세요. - ## 당신의 역할 - - MDX 파일의 **번역 변경사항만** 리뷰합니다 - - 워크플로우(.yml), 설정 파일 등은 리뷰 대상이 아닙니다 - - **word-diff 형식**을 사용하여 변경점을 정확히 파악합니다: - - `[-삭제된 텍스트-]`: 이전 버전에서 삭제된 부분 - - `{+추가된 텍스트+}`: 새 버전에서 추가된 부분 - - 같은 라인에서 여러 변경이 있으면 **모든 변경점**을 리뷰에 포함하세요 - - ## 번역 규칙 (반드시 준수) + ## 번역 규칙 PLACEHOLDER_AGENTS - ## 리뷰 기준 + ## Word-Diff 읽는 법 + - `[-삭제된 텍스트-]`: 이전 버전 + - `{+추가된 텍스트+}`: 새 버전 + - 예: `[-수동으로-]{+직접+}` = "수동으로"가 "직접"으로 변경됨 - 1. **변경된 부분에만 집중**: diff의 변경점(-/+)만 리뷰하세요. 변경되지 않은 부분은 언급하지 마세요. + ## 리뷰 방법 - 2. **번역 규칙 준수 여부**: 위 번역 규칙의 용어표를 따르는지 확인하세요. - - 예: form→폼, method→메서드, error→에러 - - 이중 표기가 필요한 용어: register→등록(register), blur→블러(blur) 등 + **각 변경에 대해 다음을 분석하세요:** - 3. **자연스러운 한국어**: 번역투가 아닌 자연스러운 한국어인지 확인하세요. - - "~할 수 있습니다", "~합니다" 등 자연스러운 종결어미 - - 직역보다는 의미 전달이 명확한 표현 + 1. **변경 내용 나열**: word-diff에서 모든 `[-...-]{+...+}` 쌍을 찾아 나열 + 2. **변경 이유 추론**: 왜 이렇게 변경했는지 파악 + 3. **적절성 판단**: + - 번역 규칙에 맞는가? + - 더 자연스러운 한국어인가? + - 원래 의미를 잘 전달하는가? + 4. **결론**: 좋은 변경인지, 불필요한 변경인지, 오히려 나빠진 변경인지 - 4. **변경이 개선인지 판단**: - - 이전 번역(-)과 새 번역(+)을 비교하여 개선되었는지 확인 - - 불필요한 변경이나 오히려 나빠진 경우만 지적 - - 5. **코드 블록은 무시**: 코드 예제는 리뷰하지 마세요 (주석 번역은 허용) - - ## 응답 형식 - - 반드시 아래 JSON 형식으로만 응답하세요. + ## 응답 형식 (JSON) { - "summary": "변경된 번역에 대한 간단한 평가 (1-2문장). MDX 번역 변경만 언급하세요.", - "good_points": "변경이 좋은 이유나 잘된 점. 없으면 빈 문자열", + "summary": "전체 요약 (1-2문장)", "comments": [ { - "path": "src/content/... 형식의 MDX 파일 경로", - "line": diff에서 +로 시작하는 라인의 번호 (숫자), - "body": "구체적인 문제점과 수정 제안. 왜 문제인지, 어떻게 고쳐야 하는지 명확히" + "path": "src/content/.../파일.mdx", + "line": 변경된 라인 번호 (숫자), + "body": "**변경 내용:**\n- `이전` → `이후`\n- `이전2` → `이후2`\n\n**평가:** 좋은/나쁜 변경인 이유를 구체적으로 설명" } ] } - ## 중요 주의사항 - - **문제가 없으면 comments를 빈 배열 []로 하세요** - 억지로 문제를 찾지 마세요 - - 사소한 스타일 차이는 지적하지 마세요 - - "~도 괜찮아 보입니다" 같은 애매한 코멘트는 달지 마세요 - - 명확한 번역 규칙 위반이나 오역만 지적하세요 - - **word-diff의 모든 [-삭제-]와 {+추가+}를 확인하고 코멘트에 포함하세요** - - 예: "[-수동으로-]{+직접+}" 와 "[-있는 경우-]{+있을 때+}"가 같은 라인에 있으면 둘 다 언급 + ## 코멘트 기준 (실제 리뷰어처럼) + + **코멘트를 다는 경우:** + - 번역 규칙 위반 (용어표 미준수) + - 오역 또는 의미 왜곡 + - 어색한 번역투 + - 정말 잘한 변경 (구체적 이유와 함께 칭찬) + + **코멘트를 달지 않는 경우:** + - 변경이 납득됨, 이해됨, 괜찮음 → 굳이 안 달아도 됨 + - summary에서 간단히 언급하면 충분 + + ## 필수 규칙 + - 코멘트의 body에는 반드시: + 1. 변경 내용 (`이전` → `이후` 형식) + 2. 왜 문제인지 / 왜 좋은지 구체적 이유 + - "좋아 보입니다" 같은 애매한 표현 금지. 구체적 근거 필수. + - 워크플로우(.yml) 파일 변경은 무시하세요 + - 문제 없으면 comments를 빈 배열 []로 하세요 SYSPROMPT SYSTEM_PROMPT="${SYSTEM_PROMPT//PLACEHOLDER_AGENTS/$AGENTS}"