[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6EMJ22CGJDTXK4DM9PDRPD5":3,"skill-same:01M6EMJ22CGJDTXK4DM9PDRPD5":78},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":49,"commitSha":50,"skillDirectory":51,"forksCount":52,"repositoryHtmlUrl":53,"repositoryHomepageUrl":54,"ownerHtmlUrl":55,"ownerBlogUrl":6,"ownerDescription":56,"updatedAt":57,"install":58,"resources":71},"01M6EMJ22CGJDTXK4DM9PDRPD5","github-pr-merge",null,"MUST use this skill when user asks to merge PR, close PR, finalize PR, or mentions \"PR 머지\u002F병합\". This skill OVERRIDES default PR merge behavior. Runs pre-merge validation (tests, lint, CI, comments), confirms with user, merges with proper format, handles post-merge cleanup.","ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",67,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fbae-changhyun\u002Fgithub-pr-merge\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"merge","pr","github","pr merge","github pr merge","github pr","post","close","tests","merge pr","default","use","user","behavior","format","ci","validation","finalize pr","lint","cleanup","2026-11-10 10:12:30",false,"---\nname: github-pr-merge\ndescription: MUST use this skill when user asks to merge PR, close PR, finalize PR, or mentions \"PR 머지\u002F병합\". This skill OVERRIDES default PR merge behavior. Runs pre-merge validation (tests, lint, CI, comments), confirms with user, merges with proper format, handles post-merge cleanup.\n---\n\n# GitHub PR Merge\n\nMerges Pull Requests after validating pre-merge checklist and handling post-merge cleanup.\n\n## Quick Start\n\n```bash\n# 1. Get PR info\nPR=$(gh pr view --json number -q '.number')\nREPO=$(gh repo view --json nameWithOwner -q '.nameWithOwner')\n\n# 2. Run pre-merge checklist\nmake test && make lint && gh pr checks $PR\n\n# 3. Verify all comments replied\ngh api repos\u002F$REPO\u002Fpulls\u002F$PR\u002Fcomments --jq '[.[] | select(.in_reply_to_id == null)] | length'\n\n# 4. Merge with concise message\ngh pr merge $PR --merge --delete-branch --body \"- Change 1\n- Change 2\n\nReviews: N\u002FN addressed\nTests: X passed\"\n\n# 5. Post-merge cleanup\ngit checkout develop && git pull && git branch -d feature\u002F\u003Cname>\n```\n\n## Pre-Merge Checklist\n\n**ALWAYS verify before merging:**\n\n| Check | Command | Required |\n|-------|---------|----------|\n| Tests passing | `make test` | Yes |\n| Linting passing | `make lint` | Yes |\n| CI checks green | `gh pr checks $PR` | Yes |\n| All comments replied | See workflow | Yes |\n| No unresolved threads | Review PR page | Yes |\n\n## Core Workflow\n\n### 1. Identify PR\n\n```bash\nPR=$(gh pr view --json number -q '.number')\nREPO=$(gh repo view --json nameWithOwner -q '.nameWithOwner')\necho \"PR #$PR in $REPO\"\n```\n\n### 2. Check Comments Status\n\n```bash\n# Count original comments (not replies)\nORIGINALS=$(gh api repos\u002F$REPO\u002Fpulls\u002F$PR\u002Fcomments --jq '[.[] | select(.in_reply_to_id == null)] | length')\n\n# Count comments that have at least one reply\nREPLIED=$(gh api repos\u002F$REPO\u002Fpulls\u002F$PR\u002Fcomments --jq '\n  [.[] | select(.in_reply_to_id)] | [.[].in_reply_to_id] | unique | length\n')\n\necho \"Original comments: $ORIGINALS, With replies: $REPLIED\"\n```\n\n**If unreplied comments exist:**\n- DO NOT reply from this skill\n- STOP the merge process\n- Inform user: \"Found unreplied comments. Run pr-review first.\"\n\n### 3. Run Validation\n\n```bash\n# Run tests\nmake test\n\n# Run linting\nmake lint\n\n# Check CI status\ngh pr checks $PR\n```\n\n**All checks MUST pass before proceeding.**\n\n### 4. Show PR Summary\n\n```bash\ngh pr view $PR --json title,body,commits,changedFiles --jq '\n  \"Title: \\(.title)\\nCommits: \\(.commits | length)\\nFiles: \\(.changedFiles)\"\n'\n```\n\n### 5. Confirm with User\n\n**ALWAYS ask before merging:**\n```\nPre-merge checklist verified:\n- Tests: passing\n- Lint: passing\n- CI: green\n- Comments: all replied\n\nReady to merge PR #X. Proceed?\n```\n\n### 6. Execute Merge\n\n```bash\ngh pr merge $PR --merge --delete-branch --body \"$(cat \u003C\u003C'EOF'\n- Key change 1\n- Key change 2\n- Key change 3\n\nReviews: N\u002FN addressed\nTests: X passed\nRefs: Task N\nEOF\n)\"\n```\n\n**Note**: `--delete-branch` automatically deletes the remote branch after merge.\n\n### 7. Post-Merge Cleanup\n\n```bash\ngit checkout develop\ngit pull origin develop\ngit branch -d feature\u002F\u003Cbranch-name>  # local cleanup\n```\n\n## Merge Message Format\n\n**Concise format** (recommended):\n\n```\n- Key change 1 (what was added\u002Ffixed)\n- Key change 2\n- Key change 3\n\nReviews: 7\u002F7 addressed\nTests: 628 passed (88% cov)\nRefs: Task 8\n```\n\n**Guidelines**:\n- 3-5 bullet points max for changes\n- One line for reviews summary\n- One line for test results\n- One line for task references\n- Total: ~10 lines max\n\n## Important Rules\n\n- **ALWAYS** run full pre-merge checklist before merging\n- **ALWAYS** verify all review comments have replies\n- **ALWAYS** confirm with user before executing merge\n- **ALWAYS** use merge commit (--merge), never squash\u002Frebase\n- **ALWAYS** delete feature branch after successful merge\n- **NEVER** merge with failing tests or lint\n- **NEVER** merge with unresolved CI checks\n- **NEVER** skip user confirmation\n- **NEVER** reply to PR comments from this skill - use pr-review instead\n- **STOP** merge if unreplied comments exist\n\n## Error Handling\n\n| Issue | Action |\n|-------|--------|\n| Tests failing | Stop and inform user |\n| Lint errors | Stop and inform user |\n| CI checks pending | Wait or inform user |\n| Unreplied comments | Direct to pr-review skill |\n| Branch protection | Inform of required approvals |\n\n## Related Skills\n\n- **pr-review** - For resolving review comments before merge\n- **pr-create** - For creating PRs\n- **git-commit** - For commit message format\n","# GitHub PR Merge\n\nMerges Pull Requests after validating pre-merge checklist and handling post-merge cleanup.\n\n## Quick Start\n\n```bash\n# 1. Get PR info\nPR=$(gh pr view --json number -q '.number')\nREPO=$(gh repo view --json nameWithOwner -q '.nameWithOwner')\n\n# 2. Run pre-merge checklist\nmake test && make lint && gh pr checks $PR\n\n# 3. Verify all comments replied\ngh api repos\u002F$REPO\u002Fpulls\u002F$PR\u002Fcomments --jq '[.[] | select(.in_reply_to_id == null)] | length'\n\n# 4. Merge with concise message\ngh pr merge $PR --merge --delete-branch --body \"- Change 1\n- Change 2\n\nReviews: N\u002FN addressed\nTests: X passed\"\n\n# 5. Post-merge cleanup\ngit checkout develop && git pull && git branch -d feature\u002F\u003Cname>\n```\n\n## Pre-Merge Checklist\n\n**ALWAYS verify before merging:**\n\n| Check | Command | Required |\n|-------|---------|----------|\n| Tests passing | `make test` | Yes |\n| Linting passing | `make lint` | Yes |\n| CI checks green | `gh pr checks $PR` | Yes |\n| All comments replied | See workflow | Yes |\n| No unresolved threads | Review PR page | Yes |\n\n## Core Workflow\n\n### 1. Identify PR\n\n```bash\nPR=$(gh pr view --json number -q '.number')\nREPO=$(gh repo view --json nameWithOwner -q '.nameWithOwner')\necho \"PR #$PR in $REPO\"\n```\n\n### 2. Check Comments Status\n\n```bash\n# Count original comments (not replies)\nORIGINALS=$(gh api repos\u002F$REPO\u002Fpulls\u002F$PR\u002Fcomments --jq '[.[] | select(.in_reply_to_id == null)] | length')\n\n# Count comments that have at least one reply\nREPLIED=$(gh api repos\u002F$REPO\u002Fpulls\u002F$PR\u002Fcomments --jq '\n  [.[] | select(.in_reply_to_id)] | [.[].in_reply_to_id] | unique | length\n')\n\necho \"Original comments: $ORIGINALS, With replies: $REPLIED\"\n```\n\n**If unreplied comments exist:**\n- DO NOT reply from this skill\n- STOP the merge process\n- Inform user: \"Found unreplied comments. Run pr-review first.\"\n\n### 3. Run Validation\n\n```bash\n# Run tests\nmake test\n\n# Run linting\nmake lint\n\n# Check CI status\ngh pr checks $PR\n```\n\n**All checks MUST pass before proceeding.**\n\n### 4. Show PR Summary\n\n```bash\ngh pr view $PR --json title,body,commits,changedFiles --jq '\n  \"Title: \\(.title)\\nCommits: \\(.commits | length)\\nFiles: \\(.changedFiles)\"\n'\n```\n\n### 5. Confirm with User\n\n**ALWAYS ask before merging:**\n```\nPre-merge checklist verified:\n- Tests: passing\n- Lint: passing\n- CI: green\n- Comments: all replied\n\nReady to merge PR #X. Proceed?\n```\n\n### 6. Execute Merge\n\n```bash\ngh pr merge $PR --merge --delete-branch --body \"$(cat \u003C\u003C'EOF'\n- Key change 1\n- Key change 2\n- Key change 3\n\nReviews: N\u002FN addressed\nTests: X passed\nRefs: Task N\nEOF\n)\"\n```\n\n**Note**: `--delete-branch` automatically deletes the remote branch after merge.\n\n### 7. Post-Merge Cleanup\n\n```bash\ngit checkout develop\ngit pull origin develop\ngit branch -d feature\u002F\u003Cbranch-name>  # local cleanup\n```\n\n## Merge Message Format\n\n**Concise format** (recommended):\n\n```\n- Key change 1 (what was added\u002Ffixed)\n- Key change 2\n- Key change 3\n\nReviews: 7\u002F7 addressed\nTests: 628 passed (88% cov)\nRefs: Task 8\n```\n\n**Guidelines**:\n- 3-5 bullet points max for changes\n- One line for reviews summary\n- One line for test results\n- One line for task references\n- Total: ~10 lines max\n\n## Important Rules\n\n- **ALWAYS** run full pre-merge checklist before merging\n- **ALWAYS** verify all review comments have replies\n- **ALWAYS** confirm with user before executing merge\n- **ALWAYS** use merge commit (--merge), never squash\u002Frebase\n- **ALWAYS** delete feature branch after successful merge\n- **NEVER** merge with failing tests or lint\n- **NEVER** merge with unresolved CI checks\n- **NEVER** skip user confirmation\n- **NEVER** reply to PR comments from this skill - use pr-review instead\n- **STOP** merge if unreplied comments exist\n\n## Error Handling\n\n| Issue | Action |\n|-------|--------|\n| Tests failing | Stop and inform user |\n| Lint errors | Stop and inform user |\n| CI checks pending | Wait or inform user |\n| Unreplied comments | Direct to pr-review skill |\n| Branch protection | Inform of required approvals |\n\n## Related Skills\n\n- **pr-review** - For resolving review comments before merge\n- **pr-create** - For creating PRs\n- **git-commit** - For commit message format\n",{"name":5,"description":7},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Faiskillstore\u002Fmarketplace\u002Fbae-changhyun\u002Fgithub-pr-merge",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":8,"skillName":5,"commands":59,"prompt":69,"zipAvailable":70},[60,63,66],{"tool":61,"command":62},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill github-pr-merge",{"tool":64,"command":65},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill github-pr-merge",{"tool":67,"command":68},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill github-pr-merge","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fbae-changhyun\u002Fgithub-pr-merge\u002FSKILL.md",true,[72],{"path":73,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":76,"sourceHtmlUrl":77},"skill-report.json","REFERENCE","参考文档",11711,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fbae-changhyun\u002Fgithub-pr-merge\u002Fskill-report.json",[79,89,99,108,114,121],{"skillNo":80,"name":81,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":82,"categories":83,"keywords":85,"publishedAt":44},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[84],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[86,87,88],"model","model hierarchy","model hierarchy skill",{"skillNo":90,"name":91,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":92,"categories":93,"keywords":95,"publishedAt":44},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[94],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[96,97,98],"MCP","zoom","zoom mcp",{"skillNo":100,"name":101,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":102,"categories":103,"keywords":104,"publishedAt":44},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[105,106,107,97],"sdk","zoom apps sdk","apps",{"skillNo":109,"name":110,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":111,"categories":112,"keywords":113,"publishedAt":44},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[110],{"skillNo":115,"name":116,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":117,"categories":118,"keywords":120,"publishedAt":44},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[119],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[116],{"skillNo":122,"name":123,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":124,"categories":125,"keywords":126,"publishedAt":44},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[123]]