This document defines how issues are triaged, how pull requests are reviewed, and what is required before a PR can be merged into main.
For detailed sprint labeling standards and issue triage conventions, see docs/SPRINT_AND_TRIAGE_CONVENTIONS.md and repository taxonomy definitions in docs/ISSUE_TAXONOMY_AND_LABELS.md.
For detailed code review standards, approval thresholds across component criticality tiers (Tiers 1-4), reviewer SLAs, and comment conventions, see docs/CODE_REVIEW_STANDARDS.md and repository code owners in .github/CODEOWNERS.
For the cross-team triage rotation schedule, primary/secondary ownership, and escalation timelines, see docs/TRIAGE_ROTATION_CALENDAR.md.
For backend module-level ownership routing (which maintainer owns each source file, middleware, and domain), see docs/BACKEND_MODULE_OWNERSHIP.md — includes a file→domain quick lookup, PR review routing cheat sheet, and issue triage command patterns.
When a new issue is opened, a maintainer will triage it within 3 business days using the following steps:
- Confirm the issue is not a duplicate (search open and closed issues).
- Confirm it is actionable — bug reports must include reproduction steps; feature requests must describe the expected behavior.
- If the issue is unclear, add the
needs-infolabel and ask the author for clarification.
| Label | When to apply |
|---|---|
bug |
Confirmed defect in existing behavior |
enhancement |
New feature or improvement request |
documentation |
Docs-only change |
good first issue |
Well-scoped, low-complexity task suitable for new contributors |
help wanted |
Maintainers welcome external contributions |
needs-info |
More information required from the author |
wontfix |
Out of scope or intentionally not addressed |
security |
Security-related issue (handle with care — avoid public disclosure of vulnerabilities) |
Stellar Wave |
Tracked as part of the Stellar Wave contributor program |
- P0 – Critical: Production outage, data loss, or security vulnerability. Address immediately.
- P1 – High: Significant user-facing breakage. Target next release.
- P2 – Medium: Non-blocking bug or valuable enhancement. Schedule in upcoming sprint.
- P3 – Low: Minor improvement, cosmetic issue, or nice-to-have. Address when bandwidth allows.
- If a maintainer will handle it, self-assign.
- If open for community contribution, add
help wantedand optionallygood first issue. - For Stellar Wave program issues, follow the Wave assignment process via Drips.
All PRs must be reviewed before merging. Reviewers should evaluate the following:
- The code does what the linked issue or PR description says it does.
- Edge cases and error paths are handled.
- No regressions introduced in existing functionality.
- Code follows the project's existing style and conventions (TypeScript, Rust, etc.).
- No unnecessary complexity or over-engineering.
- No dead code, debug statements, or TODO comments left in.
- New behavior is covered by unit or integration tests.
- Existing tests still pass (
cargo test,npm test). - For smart contract changes: security-critical paths have dedicated test cases.
- PR author completed the security checklist in the PR template.
- Slither static analysis passed or all findings are documented as false positives.
- No new attack surfaces introduced (reentrancy, access control, input validation).
- See
docs/SECURITY_CHECKLIST.mdfor the full checklist.
- Public APIs, contract functions, and non-obvious logic are commented.
- If the change affects user-facing behavior, relevant docs are updated.
- PR title follows the format:
<Type>: <Short description>(e.g.,Fix: Resolve deposit rounding error). - PR description includes Goal, Changes, and Testing sections.
- The PR is linked to its issue (e.g.,
Closes #585). - Branch is up to date with
mainand has no merge conflicts. - Commits are clean and descriptive.
A PR is ready to merge when all of the following are true:
- At least 1 approving review from a maintainer (2 for smart contract changes).
- All CI checks pass:
- Frontend lint and tests (
frontend.yml) - Rust/WASM build and tests (
rust-wasm.yml) - Secret scanning (
secret-scanning.yml) - Slither analysis (
slither.yml) — no unresolved High/Medium findings
- Frontend lint and tests (
- No unresolved review comments.
- PR is linked to the relevant issue.
- The branch is up to date with
main. - For smart contract changes: security checklist is fully signed off.
- Maintainers with write access may merge after the above criteria are met.
- Contributors must not merge their own PRs unless explicitly granted permission.
- Do not merge directly to
main— all changes go through a PR.
- Response time: Reviewers should provide initial feedback within 3 business days of a PR being marked ready for review.
- Constructive feedback: Comments should explain why a change is needed, not just what to change.
- Blocking vs. non-blocking: Prefix non-blocking suggestions with
nit:oroptional:so the author knows what must be addressed before merge. - Re-review: After an author addresses feedback, re-review within 2 business days.
If a PR or issue is stalled (no response for 5+ business days), the contributor may:
- Leave a comment tagging a maintainer.
- Mention it in the project's community channel.
Maintainers reserve the right to close stale PRs (no activity for 30 days) with a comment explaining why.