Thank you for contributing to StellarForge CLI. The project is being built as production-grade open-source infrastructure, so contribution quality, security, reviewability, and clear scope matter more than raw PR volume.
- Read the relevant issue completely.
- Confirm the issue is available and assigned when assignment is required.
- Check linked ADRs, architecture docs, and dependencies.
- For Stellar Wave work, read
docs/contributing/wave-architecture.mdbefore implementation; it defines frozen contracts, protected/core surfaces, and parallel-contribution rules. - Ask for clarification in the issue before making architecture-expanding assumptions.
- Do not disclose suspected vulnerabilities in public issues; follow
SECURITY.md.
- Fork or clone the repository.
- Create a focused branch from the current default branch.
- Make the smallest coherent change that satisfies the issue.
- Add or update tests for behavior changes. Follow
docs/contributing/testing.mdfor fixture and integration-test conventions. - Update documentation where behavior, commands, configuration, or contributor workflows change.
- Add a Changeset when the PR affects the published CLI or user-visible behavior. Follow
docs/contributing/changesets.mdfor release-impact and command guidance. - Run the available local checks before opening a PR. Follow
docs/contributing/static-quality.mdfor lint, formatting, and type-check expectations. - Open a pull request and complete the PR template accurately.
A Changeset is normally required for user-visible or published-package changes, including:
- bug fixes affecting CLI users;
- new commands or options;
- command behavior changes;
- shipped template changes;
- breaking changes;
- meaningful user-facing performance improvements.
A Changeset is normally not required for documentation-only changes, tests with no shipped behavior change, issue/PR templates, or internal CI maintenance. Maintainers may request one when release communication is still warranted.
Use npm run changeset to create release intent, npm run changeset:status to inspect pending changes, and npm run changeset:version only when intentionally generating local version/changelog updates. Publishing remains a separate protected workflow and is not part of normal contributor PRs.
Contributions must follow secure engineering practices. In particular:
- never build shell commands by concatenating untrusted input;
- validate paths and prevent traversal or unintended overwrites;
- do not log secrets, private keys, seed phrases, tokens, or sensitive environment values;
- validate configuration through explicit schemas;
- keep dependencies minimal and justified;
- avoid privileged workflow execution of untrusted pull-request code;
- include tests for security-sensitive behavior.
Changes involving filesystem mutation, subprocess execution, dependency installation, deployment, credentials, release automation, or workflow permissions receive heightened review. Sensitive ownership boundaries are documented in docs/contributing/ownership.md; CODEOWNERS can request review, while mandatory enforcement depends on the repository ruleset documented in docs/contributing/repository-ruleset.md.
Pull requests should:
- reference the issue they address;
- explain what changed and why;
- stay within agreed scope;
- include tests where applicable;
- identify security impact;
- identify release/Changeset impact;
- update docs where applicable;
- pass required CI/security checks.
Maintainers may request changes even when CI passes if the implementation conflicts with architecture, security, maintainability, or project scope.
Issues marked good first issue are intentionally scoped to be approachable without undocumented architecture knowledge. Please do not treat unassigned work as reserved unless the issue says otherwise.
Keep commits understandable and focused. Avoid unrelated formatting or refactoring in feature PRs. Branch naming may use concise prefixes such as feat/, fix/, docs/, test/, refactor/, or chore/.
Participation in StellarForge repositories is subject to CODE_OF_CONDUCT.md.