Contributing
Local workflow
Section titled “Local workflow”# Rust sidecargo fmt # pre-commit hook enforces --checkcargo clippy -- -D warningscargo test
# Docs sidecd websitenpm cinpm run dev # live preview at http://localhost:4321/chartgennpm run build # what GitHub Pages runsThe pre-commit hook enforces cargo fmt. Clippy is gate-keeped in CI with
-D warnings. Never push with --no-verify.
Keeping docs in sync
Section titled “Keeping docs in sync”website/src/content/docs/reference/indicators.md is generated. Do not
hand-edit it. When you add, remove, or reparameterize an indicator:
cargo run --example gen_docs # rewrites indicators.md./scripts/gen_screenshots.sh # refreshes website/src/assets/indicators/*.pngCI has a docs-drift job that reruns cargo run --example gen_docs and
fails the build if the committed indicators.md differs from the generated
one. If a PR lands that only changes Indicator::description() /
Indicator::params(), you will see this job fail — commit the regenerated
file.
Other docs are hand-written, but must be kept in sync when you ship a
user-facing change. See the project CLAUDE.md for the checklist Claude
follows; human contributors should follow the same rules.
CI jobs
Section titled “CI jobs”.github/workflows/ci.yml:
| Job | What it runs |
|---|---|
check | cargo check --all-targets. |
test | cargo test (e2e + unit). |
clippy | cargo clippy -- -D warnings. |
fmt | cargo fmt --check. |
docs-drift | Reruns cargo run --example gen_docs and fails if reference/indicators.md moved. |
build-release | After the gates pass, builds the Linux x86_64 release artifact. |
Separate workflows handle GitHub Pages (docs.yml, Node 22 after PR #60),
Coolify auto-deploy (deploy.yml, runs on workflow_run success), and
tagged releases (release.yml, publishes four platform artifacts on v*
tags — see deployment).
Review
Section titled “Review”After opening a PR, wait for CodeRabbit AI to post a review before merging.
If CodeRabbit stalls on “Review in progress”, comment @coderabbitai review
to retrigger it. Never merge while its review is pending.