[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6ACBDKKTXZ8Y36YHBADT8JA":3,"skill-same:01M6ACBDKKTXZ8Y36YHBADT8JA":59},{"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":31,"linkOnly":32,"markdownContent":33,"markdownBody":34,"frontMatter":35,"refName":36,"commitSha":37,"skillDirectory":38,"forksCount":39,"repositoryHtmlUrl":40,"repositoryHomepageUrl":41,"ownerHtmlUrl":42,"ownerBlogUrl":43,"ownerDescription":6,"updatedAt":44,"install":45,"resources":58},"01M6ACBDKKTXZ8Y36YHBADT8JA","gh-pull-request",null,"Verify, commit, and push changes on a PR branch. Runs pre-flight checks (compile, checkstyle, license headers) before every push. Also creates the PR if one doesn't exist yet.","apache\u002Fskywalking","apache","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F47359?v=4","01M6AC83E6K4FDKK7HZ8WNMQKE","The Apache Software Foundation","01M6ACB19NRCBY51M74TPEM71Y",25004,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fapache\u002Fskywalking\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fgh-pull-request\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000007","代码审查","SCENARIO","使用场景",[24,25,26,27,28,29,30],"pull request","pull","gh pull request","commit","pr","push","compile","2026-11-10 10:12:30",false,"---\nname: gh-pull-request\ndescription: Verify, commit, and push changes on a PR branch. Runs pre-flight checks (compile, checkstyle, license headers) before every push. Also creates the PR if one doesn't exist yet.\n---\n\n# PR Branch Workflow\n\nRun pre-flight checks, commit, push, and optionally create a PR.\n\n## Pre-flight checks\n\nRun these checks before every commit+push and fix any failures:\n\n### 1. Compile and checkstyle\n\n```bash\n# Checkstyle\n.\u002Fmvnw -B -q clean checkstyle:check\n\n# Full build (compile + javadoc)\n.\u002Fmvnw clean flatten:flatten install javadoc:javadoc -B -q -Pall \\\n  -Dmaven.test.skip \\\n  -Dcheckstyle.skip \\\n  -Dgpg.skip\n```\n\n### 2. License header check\n\n```bash\nlicense-eye header check\n```\n\nIf invalid files are found, fix with `license-eye header fix` and re-check.\n\n### 3. Unnecessary fully-qualified class names\n\nThe project checkstyle forbids inline FQCNs — every type reference in code should resolve\nthrough an `import`, not a fully-qualified name. Checkstyle does not always catch this (it\nmisses cases like inline `java.util.HashMap`, `java.util.concurrent.TimeUnit`, or\n`org.apache.skywalking.oap.server.telemetry.api.HistogramMetrics.Timer` used as a local\nvariable type, generic parameter, or `new` target). Audit the files the branch touched\nbefore pushing:\n\nUse the `Grep` tool (ripgrep) rather than BSD `grep` on macOS — the scan below relies on a\nnegative lookahead that BSD `grep` doesn't support and GNU `grep -P` does:\n\n```\npattern: ^(?!\\s*(import |package |\\s*\\*)).*\\b(java\\.util\\.|java\\.io\\.|java\\.nio\\.|java\\.util\\.concurrent\\.|javassist\\.|org\\.apache\\.skywalking\\.)[A-Z][A-Za-z0-9_]*\nglob:    *.java\noutput_mode: content\n-n: true\n```\n\nScope the scan to files the branch touched, not the whole tree — pre-existing FQDNs on\nunrelated files generate noise. Use `git diff --name-only master...HEAD -- '*.java'` to get\nthe changed list, then run the ripgrep pattern against each.\n\nAcceptable exceptions (same as the `CLAUDE.md` rule):\n - Two classes with the same simple name would collide if both imported.\n - A Javadoc `{@link}` where the short name would be ambiguous to the reader.\n - Inside a string literal (e.g., a class name passed to `Class.forName`).\n\nFix every other hit — add an `import` and switch to the short name. This includes\n`new java.util.HashMap\u003C>()`, `java.util.Set\u003CString>` parameter types, and\n`org.apache.skywalking.oap.server.telemetry.api.HistogramMetrics.Timer` as a local\nvariable type. Field declarations, method signatures, local variables, and generic\ntype arguments should all use the imported short name.\n\nRe-run checkstyle after the fix — a sloppy `sed`\u002F`replace_all` can corrupt the `import`\nline itself (e.g., turning `import java.util.concurrent.locks.ReentrantLock;` into\n`import ReentrantLock;`), which causes a cryptic checkstyle `Range [0, -1) out of\nbounds for length N` error, not a normal violation line. If you see that error, inspect\nthe imports block first.\n\n## Commit and push\n\nAfter checks pass, commit and push:\n\n```bash\ngit add \u003Cfiles>\ngit commit -m \"\u003Cmessage>\"\ngit push -u origin \u003Cbranch-name>\n```\n\n### Branch strategy\n- **Never work directly on master branch**\n- If on master, create a new branch first: `git checkout -b feature\u002F\u003Cname>` or `git checkout -b fix\u002F\u003Cname>`\n\n## Create PR (if not yet created)\n\nCheck whether a PR already exists for the current branch:\n\n```bash\ngh pr view --json number 2>\u002Fdev\u002Fnull\n```\n\nIf no PR exists, create one:\n\n### PR title\nSummarize the changes concisely. Examples:\n- `Fix BanyanDB query timeout issue`\n- `Add support for OpenTelemetry metrics`\n\n### PR description\n\nRead `.github\u002FPULL_REQUEST_TEMPLATE` and use its **exact format with checkboxes**. Do NOT use a custom summary format.\n\nKey template sections — uncomment the relevant one:\n\n**For Bug Fixes:**\n```\n### Fix \u003Cbug description or issue link>\n- [ ] Add a unit test to verify that the fix works.\n- [ ] Explain briefly why the bug exists and how to fix it.\n```\n\n**For New Features:**\n```\n### \u003CFeature description>\n- [ ] If this is non-trivial feature, paste the links\u002FURLs to the design doc.\n- [ ] Update the documentation to include this new feature.\n- [ ] Tests(including UT, IT, E2E) are added to verify the new feature.\n- [ ] If it's UI related, attach the screenshots below.\n```\n\n**For Performance Improvements:**\n```\n### Improve the performance of \u003Cclass or module or ...>\n- [ ] Add a benchmark for the improvement.\n- [ ] The benchmark result.\n- [ ] Links\u002FURLs to the theory proof or discussion articles\u002Fblogs.\n```\n\n**Always include:**\n```\n- [ ] If this pull request closes\u002Fresolves\u002Ffixes an existing issue, replace the issue number. Closes #\u003Cissue number>.\n- [ ] Update the [`CHANGES` log](https:\u002F\u002Fgithub.com\u002Fapache\u002Fskywalking\u002Fblob\u002Fmaster\u002Fdocs\u002Fen\u002Fchanges\u002Fchanges.md).\n```\n\n### Create command\n\n```bash\ngh pr create --title \"\u003Ctitle>\" --body \"$(cat \u003C\u003C'EOF'\n\u003CPR body from template>\nEOF\n)\"\n```\n\n### Post-creation\n- Add `copilot` as a reviewer: `gh pr edit \u003Cnumber> --add-reviewer copilot`\n- Do NOT add AI assistant as co-author. Code responsibility is on the committer's hands.\n- Return the PR URL when done.\n\n## After the PR is merged\n\nOnce the PR is merged, sync the default branch and clean up the feature branch:\n\n```bash\n# 1. Prune stale remote refs. GitHub auto-deletes the PR's branch on merge, so\n#    the remote feature branch is usually already gone; --prune removes the\n#    dangling local tracking ref.\ngit fetch origin --prune\n\n# 2. Switch back to the default branch and fast-forward it to include the merge.\ngit checkout master\ngit pull --ff-only origin master\n\n# 3. Confirm the change actually landed in master before deleting anything —\n#    `git log --oneline -1` should show the merge\u002Fsquash commit with the PR\n#    number, or grep for a symbol the PR introduced.\ngit log --oneline -1\n\n# 4. Delete the local feature branch. SkyWalking SQUASH-merges PRs, so the\n#    feature branch's commit is NOT an ancestor of master (master gets a new\n#    squash commit instead). `git branch -d` therefore reports \"not fully\n#    merged\" — that is expected, not an error. After confirming the content is\n#    in master (step 3), force-delete:\ngit branch -d \u003Cbranch> 2>\u002Fdev\u002Fnull || git branch -D \u003Cbranch>\n```\n\nNotes:\n- `git branch -d` failing with \"not fully merged\" on a squash-merged PR is normal — the squash commit has a different SHA than the feature commit. Verify via step 3, then `-D`.\n- If the remote branch was not auto-deleted (some repo settings), remove it explicitly: `git push origin --delete \u003Cbranch>`.\n- Do NOT skip step 3. Force-deleting a local branch whose work didn't actually merge loses it.\n","# PR Branch Workflow\n\nRun pre-flight checks, commit, push, and optionally create a PR.\n\n## Pre-flight checks\n\nRun these checks before every commit+push and fix any failures:\n\n### 1. Compile and checkstyle\n\n```bash\n# Checkstyle\n.\u002Fmvnw -B -q clean checkstyle:check\n\n# Full build (compile + javadoc)\n.\u002Fmvnw clean flatten:flatten install javadoc:javadoc -B -q -Pall \\\n  -Dmaven.test.skip \\\n  -Dcheckstyle.skip \\\n  -Dgpg.skip\n```\n\n### 2. License header check\n\n```bash\nlicense-eye header check\n```\n\nIf invalid files are found, fix with `license-eye header fix` and re-check.\n\n### 3. Unnecessary fully-qualified class names\n\nThe project checkstyle forbids inline FQCNs — every type reference in code should resolve\nthrough an `import`, not a fully-qualified name. Checkstyle does not always catch this (it\nmisses cases like inline `java.util.HashMap`, `java.util.concurrent.TimeUnit`, or\n`org.apache.skywalking.oap.server.telemetry.api.HistogramMetrics.Timer` used as a local\nvariable type, generic parameter, or `new` target). Audit the files the branch touched\nbefore pushing:\n\nUse the `Grep` tool (ripgrep) rather than BSD `grep` on macOS — the scan below relies on a\nnegative lookahead that BSD `grep` doesn't support and GNU `grep -P` does:\n\n```\npattern: ^(?!\\s*(import |package |\\s*\\*)).*\\b(java\\.util\\.|java\\.io\\.|java\\.nio\\.|java\\.util\\.concurrent\\.|javassist\\.|org\\.apache\\.skywalking\\.)[A-Z][A-Za-z0-9_]*\nglob:    *.java\noutput_mode: content\n-n: true\n```\n\nScope the scan to files the branch touched, not the whole tree — pre-existing FQDNs on\nunrelated files generate noise. Use `git diff --name-only master...HEAD -- '*.java'` to get\nthe changed list, then run the ripgrep pattern against each.\n\nAcceptable exceptions (same as the `CLAUDE.md` rule):\n - Two classes with the same simple name would collide if both imported.\n - A Javadoc `{@link}` where the short name would be ambiguous to the reader.\n - Inside a string literal (e.g., a class name passed to `Class.forName`).\n\nFix every other hit — add an `import` and switch to the short name. This includes\n`new java.util.HashMap\u003C>()`, `java.util.Set\u003CString>` parameter types, and\n`org.apache.skywalking.oap.server.telemetry.api.HistogramMetrics.Timer` as a local\nvariable type. Field declarations, method signatures, local variables, and generic\ntype arguments should all use the imported short name.\n\nRe-run checkstyle after the fix — a sloppy `sed`\u002F`replace_all` can corrupt the `import`\nline itself (e.g., turning `import java.util.concurrent.locks.ReentrantLock;` into\n`import ReentrantLock;`), which causes a cryptic checkstyle `Range [0, -1) out of\nbounds for length N` error, not a normal violation line. If you see that error, inspect\nthe imports block first.\n\n## Commit and push\n\nAfter checks pass, commit and push:\n\n```bash\ngit add \u003Cfiles>\ngit commit -m \"\u003Cmessage>\"\ngit push -u origin \u003Cbranch-name>\n```\n\n### Branch strategy\n- **Never work directly on master branch**\n- If on master, create a new branch first: `git checkout -b feature\u002F\u003Cname>` or `git checkout -b fix\u002F\u003Cname>`\n\n## Create PR (if not yet created)\n\nCheck whether a PR already exists for the current branch:\n\n```bash\ngh pr view --json number 2>\u002Fdev\u002Fnull\n```\n\nIf no PR exists, create one:\n\n### PR title\nSummarize the changes concisely. Examples:\n- `Fix BanyanDB query timeout issue`\n- `Add support for OpenTelemetry metrics`\n\n### PR description\n\nRead `.github\u002FPULL_REQUEST_TEMPLATE` and use its **exact format with checkboxes**. Do NOT use a custom summary format.\n\nKey template sections — uncomment the relevant one:\n\n**For Bug Fixes:**\n```\n### Fix \u003Cbug description or issue link>\n- [ ] Add a unit test to verify that the fix works.\n- [ ] Explain briefly why the bug exists and how to fix it.\n```\n\n**For New Features:**\n```\n### \u003CFeature description>\n- [ ] If this is non-trivial feature, paste the links\u002FURLs to the design doc.\n- [ ] Update the documentation to include this new feature.\n- [ ] Tests(including UT, IT, E2E) are added to verify the new feature.\n- [ ] If it's UI related, attach the screenshots below.\n```\n\n**For Performance Improvements:**\n```\n### Improve the performance of \u003Cclass or module or ...>\n- [ ] Add a benchmark for the improvement.\n- [ ] The benchmark result.\n- [ ] Links\u002FURLs to the theory proof or discussion articles\u002Fblogs.\n```\n\n**Always include:**\n```\n- [ ] If this pull request closes\u002Fresolves\u002Ffixes an existing issue, replace the issue number. Closes #\u003Cissue number>.\n- [ ] Update the [`CHANGES` log](https:\u002F\u002Fgithub.com\u002Fapache\u002Fskywalking\u002Fblob\u002Fmaster\u002Fdocs\u002Fen\u002Fchanges\u002Fchanges.md).\n```\n\n### Create command\n\n```bash\ngh pr create --title \"\u003Ctitle>\" --body \"$(cat \u003C\u003C'EOF'\n\u003CPR body from template>\nEOF\n)\"\n```\n\n### Post-creation\n- Add `copilot` as a reviewer: `gh pr edit \u003Cnumber> --add-reviewer copilot`\n- Do NOT add AI assistant as co-author. Code responsibility is on the committer's hands.\n- Return the PR URL when done.\n\n## After the PR is merged\n\nOnce the PR is merged, sync the default branch and clean up the feature branch:\n\n```bash\n# 1. Prune stale remote refs. GitHub auto-deletes the PR's branch on merge, so\n#    the remote feature branch is usually already gone; --prune removes the\n#    dangling local tracking ref.\ngit fetch origin --prune\n\n# 2. Switch back to the default branch and fast-forward it to include the merge.\ngit checkout master\ngit pull --ff-only origin master\n\n# 3. Confirm the change actually landed in master before deleting anything —\n#    `git log --oneline -1` should show the merge\u002Fsquash commit with the PR\n#    number, or grep for a symbol the PR introduced.\ngit log --oneline -1\n\n# 4. Delete the local feature branch. SkyWalking SQUASH-merges PRs, so the\n#    feature branch's commit is NOT an ancestor of master (master gets a new\n#    squash commit instead). `git branch -d` therefore reports \"not fully\n#    merged\" — that is expected, not an error. After confirming the content is\n#    in master (step 3), force-delete:\ngit branch -d \u003Cbranch> 2>\u002Fdev\u002Fnull || git branch -D \u003Cbranch>\n```\n\nNotes:\n- `git branch -d` failing with \"not fully merged\" on a squash-merged PR is normal — the squash commit has a different SHA than the feature commit. Verify via step 3, then `-D`.\n- If the remote branch was not auto-deleted (some repo settings), remove it explicitly: `git push origin --delete \u003Cbranch>`.\n- Do NOT skip step 3. Force-deleting a local branch whose work didn't actually merge loses it.\n",{"name":5,"description":7},"master","f4d38fdc21e5a929ef89556a1d7c337957523aa9",".claude\u002Fskills\u002Fgh-pull-request",6625,"https:\u002F\u002Fgithub.com\u002Fapache\u002Fskywalking","https:\u002F\u002Fskywalking.apache.org\u002F","https:\u002F\u002Fgithub.com\u002Fapache","https:\u002F\u002Fwww.apache.org\u002F","2026-11-15 01:32:44",{"source":8,"skillName":5,"commands":46,"prompt":56,"zipAvailable":57},[47,50,53],{"tool":48,"command":49},"npx","npx skills add apache\u002Fskywalking --skill gh-pull-request",{"tool":51,"command":52},"bunx","bunx skills add apache\u002Fskywalking --skill gh-pull-request",{"tool":54,"command":55},"pnpm","pnpm dlx skills add apache\u002Fskywalking --skill gh-pull-request","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fapache\u002Fskywalking\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fgh-pull-request\u002FSKILL.md",true,[],[60,74,85,101,111,118],{"skillNo":61,"name":62,"nameZh":6,"description":63,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":64,"categories":65,"keywords":69,"publishedAt":31},"01M6ACBTY89EEM81A0WWN0QQT3","test","Run unit tests, integration tests, or slow integration tests matching CI. Use to validate changes before submitting a PR.","https:\u002F\u002Fgithub.com\u002Fapache\u002Fskywalking\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Ftest\u002FSKILL.md",[66],{"categoryNo":67,"categoryName":68,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",[62,70,71,72,28,73],"validate","run","unit tests","integration tests",{"skillNo":75,"name":76,"nameZh":6,"description":77,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":78,"categories":79,"keywords":81,"publishedAt":31},"01M6ACBRBNXZ57EN1G8GREKFY5","run-e2e","Run SkyWalking E2E tests locally","https:\u002F\u002Fgithub.com\u002Fapache\u002Fskywalking\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Frun-e2e\u002FSKILL.md",[80],{"categoryNo":67,"categoryName":68,"taxonomyType":21,"taxonomyTypeDesc":22},[82,71,83,84,62],"run e2e","e2e tests","skywalking",{"skillNo":86,"name":87,"nameZh":6,"description":88,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":89,"categories":90,"keywords":97,"publishedAt":31},"01M6ACBNH0HSYFX2K9CYJSPAVM","package","Rebuild the SkyWalking distribution and OAP Docker image after source changes. Use before running e2e tests so the image reflects your code changes. Avoids the \"image looks updated but runtime has stale jars\" trap.","https:\u002F\u002Fgithub.com\u002Fapache\u002Fskywalking\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fpackage\u002FSKILL.md",[91,94],{"categoryNo":92,"categoryName":93,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000011","运维与部署",{"categoryNo":95,"categoryName":96,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体",[87,83,98,99,100,84],"code","image","docker",{"skillNo":102,"name":103,"nameZh":6,"description":104,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":105,"categories":106,"keywords":107,"publishedAt":31},"01M6ACBJQMZV0S42P4WMCFFPGP","new-monitoring-feature","Add a new monitoring target \u002F layer to SkyWalking OAP. Orients you to the OAL \u002F MAL \u002F LAL \u002F TAL \u002F SpanListener extension points, the UI template + submodule touchpoints, the docs set that must move together, and the cross-cutting traps that don't live in any one skill.","https:\u002F\u002Fgithub.com\u002Fapache\u002Fskywalking\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fnew-monitoring-feature\u002FSKILL.md",[],[108,109,110,84],"new monitoring feature","extension points","docs",{"skillNo":112,"name":113,"nameZh":6,"description":114,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":115,"categories":116,"keywords":117,"publishedAt":31},"01M6ACBG5P0NY2A7AEX89BZNFH","license","Check and fix Apache 2.0 license headers and dependency licenses using skywalking-eyes. Use before submitting a PR.","https:\u002F\u002Fgithub.com\u002Fapache\u002Fskywalking\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Flicense\u002FSKILL.md",[],[113,28,9,84],{"skillNo":119,"name":120,"nameZh":6,"description":121,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":122,"categories":123,"keywords":124,"publishedAt":31},"01M6ACBB39DNW4G2SR836V0RA8","generate-classes","Generate bytecode classes from DSL scripts (MAL, OAL, LAL, Hierarchy). Runs the compiler and dumps .class files for inspection.","https:\u002F\u002Fgithub.com\u002Fapache\u002Fskywalking\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fgenerate-classes\u002FSKILL.md",[],[125,126],"generate classes","generate"]