This guide documents how maintainers label, prioritize, respond to, and close issues and pull requests in this repository.
- Triage Workflow Overview
- Issue Triage
- Pull Request Triage
- Label System
- Priority Levels
- Response Templates
- Closing Issues and PRs
- Escalation Process
Goal: Ensure every issue and PR receives timely attention, clear labeling, and appropriate prioritization.
Triage Frequency: Daily for new issues/PRs, weekly review of stale items.
Triage Responsibilities:
- Any maintainer can perform initial triage
- Complex issues may require domain expert review
- Security issues follow special handling (see Security Triage)
When a new issue arrives:
-
Read the issue thoroughly
- Understand the problem or request
- Check if the template was followed
- Verify all required information is present
-
Add
needs-triagelabel (if not already present)- This label is automatically added by most issue templates
-
Validate completeness
- If information is missing, use the Missing Information template
- Add
needs-infolabel and wait for response - Set a 7-day reminder to follow up
Add appropriate type labels:
| Label | When to Use |
|---|---|
bug |
Unexpected behavior or errors |
enhancement |
New features or improvements |
documentation |
Docs issues or improvements |
operations |
Deployment, infrastructure, performance |
security |
Security vulnerabilities or hardening |
rebalancing-strategy |
Specific to rebalancing strategy features |
Add component labels:
| Label | Component |
|---|---|
frontend |
React UI, components, styling |
backend |
Node.js API, services, database |
contract |
Soroban smart contracts |
deployment |
Docker, infrastructure, CI/CD |
testing |
Test infrastructure or coverage |
Assign a priority label based on impact and urgency:
| Priority | Criteria | Response Time |
|---|---|---|
P0-critical |
Service down, data loss, security breach | Immediate (< 4 hours) |
P1-high |
Major functionality broken, significant user impact | 1-2 days |
P2-medium |
Minor bugs, moderate enhancements | 1 week |
P3-low |
Nice-to-haves, optimizations, minor docs | 2-4 weeks |
Priority Decision Matrix:
High Impact + Urgent = P0 (Critical)
High Impact + Not Urgent = P1 (High)
Low Impact + Urgent = P2 (Medium)
Low Impact + Not Urgent = P3 (Low)
Add status labels as needed:
good-first-issue- Suitable for new contributorshelp-wanted- Community contributions welcomeblocked- Waiting on external dependency or decisionduplicate- Duplicate of existing issue (link to original)wontfix- Valid issue but won't be addressed (explain why)needs-discussion- Requires team or community input
- Assign to maintainer if someone is actively working on it
- Add to milestone if it's planned for a specific release
- Add to project board if using GitHub Projects for tracking
Respond to the issue within 48 hours:
- Thank the reporter
- Confirm the issue is understood
- Provide initial assessment (priority, timeline, or need for more info)
- Set expectations for next steps
Use Response Templates for common scenarios.
Once categorized, prioritized, and responded to, remove the needs-triage label.
When a new PR arrives:
-
Check PR quality
- Does it reference an issue? (Prefer issue-first workflow)
- Is the description clear and complete?
- Are tests included?
- Does CI pass?
-
Add labels
- Type:
bug,enhancement,documentation, etc. - Component:
frontend,backend,contract, etc. - Size:
size/XS,size/S,size/M,size/L,size/XL
- Type:
Add a size label based on lines changed and complexity:
| Label | Lines Changed | Complexity |
|---|---|---|
size/XS |
< 10 | Trivial (typo, config) |
size/S |
10-50 | Simple (single file, clear change) |
size/M |
50-200 | Moderate (multiple files, some complexity) |
size/L |
200-500 | Large (significant feature or refactor) |
size/XL |
> 500 | Extra large (major feature, consider splitting) |
- Assign reviewers based on component expertise
- Request changes if PR doesn't meet quality standards
- Approve if changes look good (but see Merge Criteria)
A PR can be merged when:
- At least one maintainer approval
- All CI checks pass (tests, linting, build)
- No unresolved review comments
- Changelog updated (if user-facing change)
- Documentation updated (if needed)
- No merge conflicts
For critical changes (security, breaking changes, contract updates):
- Two maintainer approvals required
- Additional testing in staging environment
- Deployment plan documented
- Use squash and merge for feature branches (clean history)
- Use merge commit for release branches (preserve history)
- Delete the branch after merging
- Ensure linked issues are closed automatically (use "Closes #123" in PR description)
| Label | Color | Description |
|---|---|---|
bug |
Red | Something isn't working |
enhancement |
Blue | New feature or request |
documentation |
Light blue | Documentation improvements |
operations |
Orange | Infrastructure and deployment |
security |
Dark red | Security issues |
rebalancing-strategy |
Purple | Rebalancing strategy features |
| Label | Color | Description |
|---|---|---|
frontend |
Cyan | React frontend |
backend |
Green | Node.js backend |
contract |
Yellow | Soroban smart contracts |
deployment |
Brown | Docker and infrastructure |
testing |
Pink | Test infrastructure |
| Label | Color | Description |
|---|---|---|
P0-critical |
Dark red | Immediate attention required |
P1-high |
Red | High priority |
P2-medium |
Orange | Medium priority |
P3-low |
Yellow | Low priority |
| Label | Color | Description |
|---|---|---|
needs-triage |
Gray | Awaiting initial triage |
needs-info |
Gray | Waiting for more information |
good-first-issue |
Green | Good for newcomers |
help-wanted |
Green | Community contributions welcome |
blocked |
Red | Blocked by external dependency |
duplicate |
Gray | Duplicate of another issue |
wontfix |
Gray | Valid but won't be fixed |
needs-discussion |
Purple | Requires team discussion |
| Label | Color | Description |
|---|---|---|
size/XS |
Light green | < 10 lines |
size/S |
Green | 10-50 lines |
size/M |
Yellow | 50-200 lines |
size/L |
Orange | 200-500 lines |
size/XL |
Red | > 500 lines |
Criteria:
- Production service is down or severely degraded
- Data loss or corruption
- Critical security vulnerability
- Complete loss of core functionality
Response:
- Immediate acknowledgment (< 4 hours)
- All hands on deck if needed
- Hotfix process may bypass normal review
- Post-incident review required
Examples:
- Backend API returning 500 errors for all requests
- Smart contract vulnerability allowing fund theft
- Database corruption preventing all operations
Criteria:
- Major functionality broken for significant user segment
- High-impact bug affecting core features
- Security issue with moderate risk
- Blocking issue for upcoming release
Response:
- Acknowledge within 24 hours
- Fix within 1-2 days
- May require expedited review
Examples:
- Wallet connection failing for Freighter users
- Rebalancing execution failing intermittently
- API endpoint returning incorrect data
Criteria:
- Minor bugs with workarounds
- Moderate feature enhancements
- Non-blocking issues
- Documentation gaps
Response:
- Acknowledge within 48 hours
- Fix within 1 week
- Normal review process
Examples:
- UI layout issue on mobile
- Missing API documentation
- Performance optimization opportunity
Criteria:
- Nice-to-have features
- Minor optimizations
- Cosmetic issues
- Low-impact documentation improvements
Response:
- Acknowledge within 1 week
- Fix when capacity allows (2-4 weeks)
- Good candidates for community contributions
Examples:
- Typo in documentation
- UI polish suggestions
- Code refactoring for maintainability
Thanks for reporting this! To help us investigate, could you please provide:
- [ ] [Specific information needed]
- [ ] [Additional context needed]
I've added the `needs-info` label. We'll follow up once we have these details.Thanks for the detailed report! I've confirmed this is a bug and labeled it as `P[X]-[priority]`.
**Next steps:**
- [Immediate action or investigation plan]
- Expected timeline: [timeframe]
We'll keep you updated on progress.Thanks for the suggestion! This is an interesting idea.
**Initial assessment:**
- Aligns with project goals: [Yes/No/Partially]
- Complexity: [Low/Medium/High]
- Priority: [P2/P3]
We've added this to our backlog. Community contributions are welcome if you'd like to work on this!
See [CONTRIBUTING.md](../CONTRIBUTING.md) for setup instructions.Thanks for raising this! This requires some team discussion to determine the best approach.
**Discussion points:**
- [Key question 1]
- [Key question 2]
I've added the `needs-discussion` label. We'll update this issue once we've reached a decision.Thanks for reporting! This is a duplicate of #[issue-number].
I'm closing this in favor of the original issue. Please follow #[issue-number] for updates and feel free to add any additional context there.Thanks for the suggestion. After review, we've decided not to pursue this because:
- [Reason 1]
- [Reason 2]
We appreciate your input! If you have other ideas or concerns, please feel free to open a new issue.This issue has been inactive for [X] days.
If this is still relevant, please provide an update. Otherwise, we'll close this in 7 days to keep our issue tracker focused.
To reopen later, just comment and we'll take another look.Close immediately:
- Duplicate issues (link to original)
- Spam or off-topic
- Already fixed in latest version
- Won't fix (with explanation)
Close after resolution:
- Bug is fixed and merged
- Feature is implemented and merged
- Question is answered and confirmed
Close after inactivity:
- No response to
needs-infoafter 14 days - Stale issues with no activity for 60 days (after warning)
Close immediately:
- Spam or malicious
- Violates code of conduct
- Duplicate of existing PR
Close after review:
- Author abandoned (no response for 30 days after review)
- Superseded by another PR
- Approach rejected (with explanation)
Merge and close:
- Meets all merge criteria
- Approved by required reviewers
- CI passes
Before closing an issue or PR:
- Provide clear explanation for closure
- Link to related issues/PRs if applicable
- Thank the contributor for their time
- Add appropriate labels (
duplicate,wontfix, etc.) - Update project board or milestone if needed
Escalate to core maintainers when:
- Security issues: Always escalate critical security reports
- Breaking changes: Major API or contract changes
- Architectural decisions: Significant design or technology choices
- Community conflicts: Code of conduct violations or disputes
- Resource needs: Infrastructure or budget requirements
- Tag core maintainers in the issue/PR with
@mention - Add
needs-discussionlabel - Summarize the situation and specific decision needed
- Provide options with pros/cons if applicable
- Set a deadline for decision if time-sensitive
- GitHub Issues: For technical decisions (public discussion)
- GitHub Discussions: For community input on direction
- Private channels: For security issues or sensitive matters (see SECURITY.md)
Security issues require special handling:
- Do not discuss publicly - use GitHub Security Advisories
- Acknowledge privately within 24 hours
- Assess severity using CVSS or similar framework
- Develop fix in private fork if needed
- Coordinate disclosure with reporter (typically 90-day window)
- Release patch and security advisory simultaneously
- Notify users via appropriate channels
- Can be discussed publicly in regular issues
- Follow normal triage process with
securitylabel - Prioritize appropriately (usually P1 or P2)
See SECURITY.md for full security policy.
Track these metrics to improve triage process:
- Time to first response: Target < 48 hours for issues, < 24 hours for PRs
- Time to triage: Target < 48 hours to remove
needs-triagelabel - Time to close: Track by priority level
- Stale issue rate: Target < 10% of open issues stale (> 60 days inactive)
Review metrics monthly and adjust process as needed.
- CONTRIBUTING.md - Contributor setup and workflow
- CODE_OF_CONDUCT.md - Community guidelines
- SECURITY.md - Security policy and reporting
- OPERATIONS.md - Operational procedures
- Backlog Grooming Guide - Issue backlog management
This triage guide should be reviewed and updated quarterly or when processes change significantly.
Last Updated: [Date] Next Review: [Date + 3 months]