Guidelines for submitting and reviewing pull requests.
Before Submitting
Pre-PR Checklist
-
Code compiles without warnings:
cargo build -
All tests pass:
cargo test -
Code is formatted:
cargo fmt -
Lints pass:
cargo clippy -- -D warnings - Documentation updated if needed
- Changelog updated for user-facing changes
- Commit messages follow conventions
Branch Preparation
# Sync with upstream
# Squash WIP commits
# Mark commits as 'squash' or 'fixup'
# Force push to update branch
Creating a Pull Request
PR Title Format
<type>: <description>
Examples:
feat: add circuit breaker for upstream connections
fix: resolve memory leak in WebSocket handler
docs: update agent development guide
refactor: simplify config parsing logic
perf: optimize route matching algorithm
test: add integration tests for health checks
chore: update dependencies
PR Description Template
- --
- --
- ---
PR Size Guidelines
Ideal PR Size
| Type | Lines Changed | Files |
|---|---|---|
| Bug fix | < 100 | 1-3 |
| Feature | < 500 | 3-10 |
| Refactor | < 300 | 5-15 |
Large PRs
If your PR is large:
- Consider splitting into smaller PRs
- Add detailed description explaining the scope
- Use a feature branch with incremental commits
- Request multiple reviewers
Stacked PRs
For large features:
main
└── feature/base-infrastructure (PR #1)
└── feature/core-logic (PR #2)
└── feature/api-integration (PR #3)
Review Process
Getting Reviews
- Request Reviewers: Add relevant team members
- Add Labels:
needs-review, feature area labels - Link Issues: Reference related issues
- CI Must Pass: All checks must be green
Review Timeline
| Priority | Target Response |
|---|---|
| Critical (security) | Same day |
| High (blocking) | 1 day |
| Normal | 2-3 days |
| Low (docs, chores) | 1 week |
Review States
| State | Meaning |
|---|---|
| Approved | Ready to merge |
| Changes Requested | Must address feedback |
| Commented | Non-blocking feedback |
Responding to Reviews
Addressing Feedback
# Make requested changes
# Push updates
# Re-request review
Discussing Feedback
- Respond to all comments
- Explain your reasoning if you disagree
- Mark conversations as resolved when addressed
- Use “Resolve conversation” button
Common Review Patterns
Nit - Minor suggestion, non-blocking:
nit: Consider renaming this variable for clarity
Question - Seeking clarification:
Q: Why did you choose this approach over X?
Suggestion - Proposed change:
suggestion: This could be simplified:
\`\`\`rust
let result = items.iter().filter(|x| x.is_valid()).count();
\`\`\`
Merge Requirements
Required Checks
- CI passes (tests, lint, format)
- At least one approval
- No unresolved conversations
- Branch is up to date with main
Merge Strategy
Use Squash and Merge for most PRs:
feat: add circuit breaker (#123)
- Implement failure counting
- Add configurable threshold
- Include metrics
Co-authored-by: Reviewer <reviewer@example.com>
Use Rebase and Merge for:
- Multiple logical commits that should be preserved
- Large features with meaningful history
After Merge
- Delete the feature branch
- Verify deployment (if applicable)
- Close related issues
- Update documentation if needed
Special Cases
Draft PRs
Use draft PRs for:
- Work in progress needing early feedback
- Experiments
- RFC-style discussions
# Create PR as draft via CLI
Breaking Changes
For breaking changes:
- Add
breakinglabel - Document migration path in PR description
- Update CHANGELOG with
### BREAKING - Consider deprecation period
Security Fixes
For security-related changes:
- Do NOT include exploit details in public PR
- Coordinate with maintainers privately
- Prepare security advisory
- Merge and release together
Reverts
If a change needs to be reverted:
# Create PR with explanation
PR Hygiene
Keep PRs Current
# Update branch regularly
Close Stale PRs
PRs inactive for 30+ days may be closed. To reopen:
- Rebase on current main
- Address any outdated feedback
- Re-request review
PR Labels
| Label | Meaning |
|---|---|
needs-review | Ready for review |
wip | Work in progress |
breaking | Contains breaking changes |
security | Security-related |
docs | Documentation only |
good-first-issue | Good for newcomers |
GitHub CLI Commands
# Create PR
# Check PR status
# View PR
# Checkout PR locally
# Merge PR
# Request review
Next Steps
- Contributing - Contribution guidelines
- Code Style - Formatting conventions
- Release Process - How releases work