Install
openclaw skills install @linux2010/github-contributionAutomated GitHub contribution workflow with intelligent issue discovery via positive label detection. Use when: (1) Contributing to open source projects, (2) Discovering high-value issues via maintainer-approved labels, (3) Fork synchronization and PR submission, (4) Analyzing issue quality by label signals.
openclaw skills install @linux2010/github-contributionAutomated GitHub contribution workflow that handles fork synchronization, branch creation, and PR submission while maintaining clean fork state. Includes intelligent issue discovery with positive label detection.
Modern repositories use automated labeling systems to identify high-value, maintainer-approved issues. These positive labels signal issues that are:
Golden Rule: Prioritize issues with positive labels over random bugs.
| Category | Label Pattern | Meaning | Priority |
|---|---|---|---|
| Queueable | *:queueable-fix, *:queue_fix_pr | Marked as ready for PR work | ⭐⭐⭐⭐⭐ |
| Reproducible | *:source-repro, confirmed, reproducible | Issue reproduction validated | ⭐⭐⭐⭐⭐ |
| Impact Assessed | impact:*, severity:*, priority:* | Clear impact scope | ⭐⭐⭐⭐ |
| Value Rated | issue-rating: *, value:*, diamond, gold | Official value rating | ⭐⭐⭐⭐⭐ |
| Implementation Clear | *:fix-shape-*, fix-shape-clear | Clear implementation path | ⭐⭐⭐⭐ |
| Contributor Welcome | good first issue, help wanted, contributions welcome | Explicitly inviting contributions | ⭐⭐⭐⭐ |
| Scope Defined | scope:*, area:*, module:* | Clear modification scope | ⭐⭐⭐ |
OpenClaw uses ClawSweeper automation to identify high-value issues:
# ClawSweeper labels (HIGH PRIORITY - maintainer-validated)
gh issue list --repo openclaw/openclaw --label "clawsweeper:fix-shape-clear" --state open
gh issue list --repo openclaw/openclaw --label "clawsweeper:queueable-fix" --state open
gh issue list --repo openclaw/openclaw --label "clawsweeper:source-repro" --state open
# Impact assessment labels
gh issue list --repo openclaw/openclaw --label "impact:auth-provider" --state open
# Value rating labels (🦞 diamond lobster = HIGHEST VALUE)
gh issue list --repo openclaw/openclaw --label "issue-rating: 🦞 diamond lobster" --state open
gh issue list --repo openclaw/openclaw --label "issue-rating: *" --state open
ClawSweeper Label Meanings:
clawsweeper:fix-shape-clear → Clear implementation path identifiedclawsweeper:queueable-fix → Marked as queue-able for PR workclawsweeper:source-repro → High-confidence source-level reproduction foundimpact:auth-provider → Auth/provider/model routing may break (critical)issue-rating: 🦞 diamond lobster → Highest value issue (fix immediately)# Discover all labels in the repository
gh api repos/owner/repo/labels --paginate | jq '.[].name'
# Filter for positive label patterns
gh api repos/owner/repo/labels --paginate | jq '.[].name' | \
grep -E '(queueable|fix-shape|source-repro|impact|issue-rating|severity|priority|good-first|help-wanted|confirmed|reproducible)'
# Single positive label
gh issue list --repo owner/repo \
--label "clawsweeper:queueable-fix" \
--state open \
--json number,title,labels,createdAt
# Multiple positive labels (OR logic)
gh issue list --repo owner/repo \
--label "queueable-fix,fix-shape-clear,source-repro" \
--state open \
--json number,title,labels,createdAt
# Value-rated issues only
gh issue list --repo owner/repo \
--label "issue-rating: *" \
--state open \
--json number,title,labels,createdAt
Priority Tiers:
| Tier | Label Combination | Action |
|---|---|---|
| 🦞 Diamond | queueable-fix + source-repro + impact:* | Fix immediately |
| 💎 Gold | fix-shape-clear + impact:* | High priority |
| 🔥 Platinum | source-repro + severity:critical | Urgent fix |
| 🥈 Silver | good first issue + help wanted | Good start |
| ✅ Standard | Single positive label | Normal queue |
| ⚪ Low | No positive labels | Skip unless urgent |
# Get full issue details
gh issue view <issue-number> --repo owner/repo
# Check issue comments for context
gh issue view <issue-number> --repo owner/repo --comments
# Check if already being worked on
gh pr list --repo owner/repo --search "fixes #<issue-number>"
# Verify no existing PRs
gh pr list --repo owner/repo --state open --search "<issue-keyword>"
# Search across multiple repositories
gh search issues \
--label "queueable-fix,fix-shape-clear,source-repro" \
--state open \
--limit 50 \
--json repository,title,number,url
# Target specific organizations
gh search issues \
--owner openclaw \
--label "impact:*" \
--state open \
--sort created \
--order desc
Proceed if issue has:
Skip if issue has:
# One-liner: Find all queueable-fix issues
gh issue list --repo openclaw/openclaw --label "clawsweeper:queueable-fix" --state open --limit 10
# Find highest value issues (diamond rated)
gh issue list --repo openclaw/openclaw --label "issue-rating: 🦞 diamond lobster" --state open
# Find reproducible issues with clear implementation path
gh issue list --repo openclaw/openclaw \
--label "clawsweeper:source-repro,clawsweeper:fix-shape-clear" \
--state open
# Find impact:auth issues (critical system)
gh issue list --repo openclaw/openclaw --label "impact:auth-provider" --state open
# Batch discover: All positive labels
for label in "clawsweeper:queueable-fix" "clawsweeper:fix-shape-clear" "clawsweeper:source-repro"; do
echo "=== $label ==="
gh issue list --repo openclaw/openclaw --label "$label" --state open --json number,title --limit 5
done
After discovering a high-value issue:
Pro Tip: Issues with multiple positive labels (e.g., queueable + source-repro + impact) have 90%+ merge rate because maintainers have pre-validated the fix path.
./github-contribution.sh <username> <owner/repo> <issue-number> <branch-name> [projects-root]
# Fix issue #123 in openclaw/openclaw
./github-contribution.sh Linux2010 openclaw/openclaw 123 fix/issue-description
# Specify custom project root
./github-contribution.sh Linux2010 openclaw/openclaw 456 fix/bug-fix /custom/path
#!/bin/bash
# sync-fork.sh - Safe fork synchronization
git checkout main
git fetch upstream
git reset --hard upstream/main
git clean -fdx # Remove all untracked files
# Verify clean state
if [[ $(git status --porcelain) ]]; then
echo "❌ Warning: Working tree not clean"
exit 1
fi
echo "✅ Fork synchronized successfully"
# Prevent accidental main branch pushes
git config branch.main.pushRemote no_push
# Set safe push default
git config push.default nothing
Before fixing any bug, always write a change plan first. This ensures minimal, safe changes and makes PR review easier.
Answer these 5 questions in plain language before writing any code:
| # | Question | Purpose |
|---|---|---|
| 1 | Observed behavior | What's broken? (What the user sees) |
| 2 | Expected behavior | What should happen? (Correct behavior) |
| 3 | Suspected root cause | Where's the bug? (Specific code location) |
| 4 | Safest seam to modify | Minimal change location? (Narrowest fix) |
| 5 | Risk surface | What else could break? (Impact scope) |
## Change Plan for Issue #<number>
1. **Observed behavior**:
<Describe what's broken - the user-visible symptom>
2. **Expected behavior**:
<Describe what should happen instead>
3. **Suspected root cause**:
<Point to specific file/line/function that causes the bug>
4. **Safest seam to modify**:
<Identify the minimal code change location - smallest safe fix>
5. **Risk surface**:
<List what could be affected by this change>
## Change Plan for Issue #5968
1. **Observed behavior**:
`extract_content_or_reasoning()` crashes when `response.choices` is None, missing, or empty list.
2. **Expected behavior**:
Function should return empty string gracefully when no usable choices exist.
3. **Suspected root cause**:
Line `msg = response.choices[0].message` in `agent/auxiliary_client.py` assumes choices is always non-empty.
4. **Safest seam to modify**:
Add a guard at the top of `extract_content_or_reasoning()` before accessing choices:
`if not getattr(response, "choices", None): return ""`
5. **Risk surface**:
Minimal - only affects edge cases where API response is malformed.
| Scenario | Required? |
|---|---|
| Bug fix | ✅ Always |
| Paper-cut UX improvement | ✅ Always |
| Feature addition | ❌ Use feature spec instead |
| Refactoring | ❌ Use refactor plan instead |
| Documentation fix | ❌ Not needed |
| Benefit | Why It Matters |
|---|---|
| Forces understanding | Can't fix what you don't understand |
| Defines boundaries | Prevents scope creep and "opportunistic" changes |
| Reduces risk | Identifies potential side effects upfront |
| Speeds review | Maintainer can understand intent in 20 seconds |
| Enables rollback | Clear what was changed and why |
Before coding:
If you answered "no" to any question, do more investigation before coding.
repo scopeworkflow scope (for full automation)Merge Success Rate =
(PR Description Completeness × 0.2) +
(Review Response Speed × 0.25) +
(Test Coverage × 0.2) +
(Conflict Resolution Status × 0.15) +
(Review Resolution Rate × 0.2)
Target: > 80% success rate
Before pushing PR:
Code Quality:
type(scope): descriptionCI Pre-flight (MUST pass locally):
pnpm protocol:check - Protocol validationpnpm test - All tests passpnpm lint - No lint errorspnpm tsc --noEmit - TypeScript compilationReview Readiness:
7 commits in same day:
1. Main fix implementation
2. Changelog update
3. Merge main (resolve conflicts)
4. Tests: add coverage for review comments
5. Fix: address Greptile suggestions
6. Extra hardening (defensive programming)
7. Merge main (final sync)
Key Learnings:
When Aisle Security reports issues:
1. Quote SECURITY.md to explain why it's out of scope
2. But still fix it (defensive programming)
3. List specific hardening done
4. Provide verification commands
Key Learnings:
| Mistake | Impact | Solution |
|---|---|---|
| ❌ Missing Changelog | -20% | Always update CHANGELOG.md |
| ❌ Slow review response (>24h) | -25% | Respond within 24h, ideally <30min |
| ❌ Incomplete test coverage | -20% | Add tests for edge cases |
| ❌ Merge conflicts | -15% | Daily rebase upstream |
| ❌ Unresolved bot reviews | -20% | 100% resolve all comments |
| ❌ CI failures | Automatic reject | Pre-flight check locally |
| Metric | Target | Current Best Practice |
|---|---|---|
| Greptile Score | ≥ 4/5 | Address all P1/P2 issues |
| Aisle Security | 0 unresolved | Respond or fix all |
| Test Coverage | ≥ 1 new test | Include edge cases |
| CI Pass Rate | 100% | Pre-check locally |
| Behind upstream | 0 commits | Daily rebase |
| Response Time | < 24h | Same day preferred |
Title Format:
✅ fix(hooks): fail closed on unreadable loader paths
✅ feat(context-engine): plumb sessionKey into all methods
✅ docs: codify American English spelling convention
✅ security: include accountId in session keys
Commit Message Structure:
First line: What was done (concise description)
Second paragraph: Why (problem background, impact)
Optional: Regeneration-Prompt / AI assistance notes
Example (#44411):
fix(ci): restore generated protocol swift outputs
Regenerate the Swift protocol models so PushTestResult keeps the
transport field required by the current gateway schema, and update
protocol:check to diff both generated Swift destinations because
the generator writes both files.
Regeneration-Prompt: |
Investigate the protocol CI failure on current origin/main...
Golden Rule: Always rebase on the original PR branch, never create a new branch.
# 1. Confirm current branch
git branch --show-current
# 2. Confirm PR's branch name
gh pr view <PR-number> --json headRefName --jq .headRefName
# 3. Switch to correct branch if needed
git checkout <PR-branch-name>
# 4. Rebase on the SAME branch (do NOT create new branch)
git fetch upstream
git rebase upstream/main
# 5. Push to the SAME branch
git push -f origin <same-branch-name>
| ❌ Wrong | ✅ Correct |
|---|---|
git checkout -b new-branch then rebase | Stay on original branch, rebase there |
| Switch to different branch for rebase | Rebase on PR's own branch |
| Skip branch confirmation | Always run git branch --show-current first |
| Don't verify PR branch name | Use gh pr view to confirm |
Before rebasing:
git branch --show-current to confirm current branchgh pr view <num> --json headRefName to confirm PR branchgit checkout <PR-branch> firstAfter rebasing:
git log --oneline -3 to verify commitspnpm test or relevant testsgit push -f origin <branch> to update PR# Check current branch
$ git branch --show-current
fix/47752-final # ✅ Correct!
# Confirm PR branch
$ gh pr view 48568 --json headRefName --jq .headRefName
fix/47752-final # ✅ Matches!
# Rebase on same branch
git fetch upstream
git rebase upstream/main
# Test
pnpm test src/infra/heartbeat-runner.timeout.test.ts
# Push to same branch
git push -f origin fix/47752-final
Problem: Accidentally created new branch during rebase
Solution:
# Go back to original branch
git checkout <original-branch>
# Rebase there instead
git rebase upstream/main
# Delete the accidental branch
git branch -D <accidental-branch>
# Push to original branch
git push -f origin <original-branch>