Create maintainer-friendly pull requests for open source projects with clean code submissions and professional communication. Prevents 16 common mistakes that cause PR rejection. Use when: contributing to public repositories, submitting PRs to community projects, migrating from contributor to maintainer workflows, or troubleshooting PR rejection, working on main branch errors, failing CI checks, or personal artifacts in commits.
Inherits all available tools
Additional assets for this skill
This skill inherits all available tools. When active, it can use any tool Claude has access to.
LICENSEREADME.mdassets/bad-pr-example.mdassets/good-pr-example.mdreferences/commit-message-guide.mdreferences/files-to-exclude.mdreferences/pr-checklist.mdreferences/pr-template.mdscripts/clean-branch.shscripts/pre-pr-check.shname: open-source-contributions description: | Create maintainer-friendly pull requests for open source projects with clean code submissions and professional communication. Prevents 16 common mistakes that cause PR rejection.
Version: 1.2.0 | Last Verified: 2025-11-28 | Production Tested: ✅
Auto-triggers: "submit PR to", "contribute to", "pull request for", "open source contribution"
Create maintainer-friendly PRs while avoiding the 16 common mistakes that cause rejection.
Planning & Notes Documents:
❌ SESSION.md # Session tracking notes
❌ NOTES.md # Personal development notes
❌ TODO.md # Personal todo lists
❌ planning/* # Planning documents directory
❌ IMPLEMENTATION_PHASES.md # Project planning
❌ DATABASE_SCHEMA.md # Unless adding new schema to project
❌ ARCHITECTURE.md # Unless documenting new architecture
❌ SCRATCH.md # Temporary notes
❌ DEBUGGING.md # Debugging notes
❌ research-logs/* # Research notes
Screenshots & Visual Assets:
❌ screenshots/debug-*.png # Debugging screenshots
❌ screenshots/test-*.png # Testing screenshots
❌ screenshot-*.png # Ad-hoc screenshots
❌ screen-recording-*.mp4 # Screen recordings
❌ before-after-local.png # Local comparison images
✅ screenshots/feature-demo.png # IF demonstrating feature in PR description
✅ docs/assets/ui-example.png # IF part of documentation update
Test Files (Situational):
❌ test-manual.js # Manual testing scripts
❌ test-debug.ts # Debugging test files
❌ quick-test.py # Quick validation scripts
❌ scratch-test.sh # Temporary test scripts
❌ example-local.json # Local test data
✅ tests/feature.test.js # Proper test suite additions
✅ tests/fixtures/data.json # Required test fixtures
✅ __tests__/component.tsx # Component tests
Build & Dependencies:
❌ node_modules/ # Dependencies (in .gitignore)
❌ dist/ # Build output (in .gitignore)
❌ build/ # Build artifacts (in .gitignore)
❌ .cache/ # Cache files (in .gitignore)
❌ package-lock.json # Unless explicitly required by project
❌ yarn.lock # Unless explicitly required by project
IDE & OS Files:
❌ .vscode/ # VS Code settings
❌ .idea/ # IntelliJ settings
❌ .DS_Store # macOS file system
❌ Thumbs.db # Windows thumbnails
❌ *.swp, *.swo # Vim swap files
❌ *~ # Editor backup files
Secrets & Sensitive Data:
❌ .env # Environment variables (NEVER!)
❌ .env.local # Local environment config
❌ config/local.json # Local configuration
❌ credentials.json # Credentials (NEVER!)
❌ *.key, *.pem # Private keys (NEVER!)
❌ secrets/* # Secrets directory (NEVER!)
Temporary & Debug Files:
❌ temp/* # Temporary files
❌ tmp/* # Temporary directory
❌ debug.log # Debug logs
❌ *.log # Log files
❌ dump.sql # Database dumps
❌ core # Core dumps
❌ *.prof # Profiling output
✅ Source code changes # The actual feature/fix
✅ Tests for changes # Required tests for new code
✅ Documentation updates # README, API docs, inline comments
✅ Configuration changes # If part of the feature
✅ Migration scripts # If needed for the feature
✅ Package.json updates # If adding/removing dependencies
✅ Schema changes # If part of feature (with migrations)
✅ CI/CD updates # If needed for new workflows
Use the bundled scripts/pre-pr-check.sh to scan for artifacts:
./scripts/pre-pr-check.sh
What it checks:
git status
git diff --stat
Ask yourself:
Manual removal:
git rm --cached SESSION.md
git rm --cached -r planning/
git rm --cached screenshots/debug-*.png
git rm --cached test-manual.js
Or use the clean script:
./scripts/clean-branch.sh
Add personal patterns to .git/info/exclude (affects only YOUR checkout):
# Personal development artifacts
SESSION.md
NOTES.md
TODO.md
planning/
screenshots/debug-*.png
test-manual.*
scratch.*
Template (see references/pr-template.md):
## What?
[Brief description of what this PR does]
## Why?
[Explain the reasoning, business value, or problem being solved]
## How?
[Describe the implementation approach and key decisions]
## Testing
[Step-by-step instructions for reviewers to test]
## Checklist
- [ ] Tests added/updated
- [ ] Documentation updated
- [ ] CI passing
- [ ] Breaking changes documented
## Related Issues
Closes #123
Relates to #456
Conventional Commits: <type>(<scope>): <subject>
Types: feat, fix, docs, refactor, test, ci, chore
Example: feat(auth): add OAuth2 support for Google and GitHub
See references/commit-message-guide.md for complete guide.
Research-backed guidelines:
Keep PRs small:
if (featureFlags.newAuth) {
// New OAuth flow (incomplete but behind flag)
} else {
// Existing flow
}
Before contributing:
/, /.github/, /docs/)npm run lint, npm run formatnpm test && npm run lint && npm run build
Response templates:
See Critical Workflow Rules section for detailed guidance on Rules 1-3
RULE 1: ALWAYS Work on a Feature Branch
# ✅ CORRECT
git checkout main
git pull upstream main
git checkout -b feature/add-oauth-support
# make changes on feature branch
git commit -m "feat(auth): add OAuth support"
Branch naming: feature/name, fix/issue-123, docs/update-readme, refactor/utils, test/add-tests
RULE 2: Test Thoroughly BEFORE Submitting PR
Never submit without:
npm test && npm run lint && npm run buildTesting checklist template:
## Testing Performed
### Automated Tests
- ✅ All existing tests pass
- ✅ Added 12 new tests for OAuth flow
- ✅ Coverage increased from 85% to 87%
### Manual Testing
- ✅ Tested Google/GitHub OAuth flows end-to-end
- ✅ Verified error handling
- ✅ Tested on Chrome, Firefox, Safari
RULE 3: Keep PRs Focused and Cohesive
One PR = One Feature/Fix
Keep focused:
git diff - Is every change necessary for THIS feature?Break large features into phases:
PR #1: Database schema and models
PR #2: API endpoints
PR #3: Frontend components
PR #4: Integration and tests
Create: gh pr create --draft
Mark ready: gh pr ready (when code complete, tests passing, CI passing)
Auto-closing keywords (in PR description):
Closes #123
Fixes #456
Resolves #789
# Multiple: Fixes #10, closes #20, resolves #30
# Cross-repo: Fixes owner/repo#123
gh pr create --fill # Auto-fill from commits
gh pr create --draft # Draft PR
gh pr status # See your PRs
gh pr checks # View CI status
gh pr ready # Mark draft as ready
See references/pr-checklist.md for complete version.
Pre-Contribution:
Development:
npm test && npm run lint && npm run buildCleanup:
./scripts/pre-pr-check.shPR Quality:
Post-Submission:
See bundled examples and scripts:
scripts/pre-pr-check.sh - Scan for artifacts before submissionscripts/clean-branch.sh - Remove common personal artifactsreferences/pr-template.md - PR description templatereferences/pr-checklist.md - Complete checklistreferences/commit-message-guide.md - Conventional commits guideassets/good-pr-example.md - Well-structured PR exampleassets/bad-pr-example.md - Common mistakes to avoid./scripts/pre-pr-check.sh: Scan for artifacts before submissionProduction Tested: ✅ Real-world open source contributions and maintainer feedback
Token Efficiency: ~70% savings vs trial-and-error
Errors Prevented: 16 common mistakes
Last Verified: 2025-11-28