Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Contributing

This page is a starting point across all three repositories. Each repository’s own CONTRIBUTING.md remains authoritative for its repository-specific process — this page does not duplicate them, only orients you toward the right one.

Three contribution paths

Core engine — Protocol-Canary

Where to work: crates/canary-* (the CLI, project detection, fixture loading, the XDR/RPC/Soroban runners, policy evaluation, reporting).

What belongs here: changes to how compatibility checks are executed or reported — a new surface capability, a new report format, a bug in project detection, a new configuration option. Protocol-specific assertions belong in ProtocolCanary-Fixtures instead, not here.

How to test:

cargo fmt --all --check
cargo check --workspace --all-targets
cargo test --workspace
cargo clippy --workspace --all-targets -- -D warnings

All four must pass. Unit tests must not require network access; anything that talks to a real RPC endpoint belongs in tests/integration and must be explicitly opt-in.

How to submit: a pull request against StellarCanary/Protocol-Canary, following its CONTRIBUTING.md (workspace structure, coding standards, and commit style).

Fixtures — ProtocolCanary-Fixtures

Where to work: a protocol-pack directory (e.g. protocol-28/), organized by surface and CAP.

What belongs here: a new compatibility assertion for a real, verifiable piece of protocol behavior — never a fixture added just to raise a coverage number. See Authoring a Fixture for the full workflow.

How to test:

python3 tools/validate/validate.py
python3 -m unittest discover tests

No build system is required — the validator uses only the Python 3.11+ standard library.

How to submit: a pull request against StellarCanary/ProtocolCanary-Fixtures, following its CONTRIBUTING.md.

GitHub Action — ProtocolCanary-Action

Where to work: src/ (TypeScript), bundled to the committed dist/index.js.

What belongs here: changes to how CI consumes Canary’s report — the summary, annotations, artifact handling, installation/pinning logic. Compatibility logic itself belongs in Protocol-Canary, not here.

How to test:

npm run typecheck
npm run lint
npm test
npm run build

Unit and integration tests never require network access or a real stellar-canary binary — they run against a mock CLI (tests/fixtures/mock-canary.cjs) that simulates every documented result state via the MOCK_CANARY_SCENARIO environment variable. The repository’s own integration.yml workflow is the only place it talks to a real Canary build and a real Testnet endpoint, and it never gates a pull request.

How to submit: a pull request against StellarCanary/ProtocolCanary-Action, following its CONTRIBUTING.md.

Contributing to this documentation site

The site itself lives at docs-site/ in the Protocol-Canary repository. See docs-site/README.md for how to build and preview it locally with mdBook. Keep implementation detail in each repository’s own docs//CONTRIBUTING.md and link to it from here rather than duplicating it — this site is the developer journey, not a second source of truth.