Contributing
Thanks for your interest in contributing to Isartor! Isartor is maintained by one developer as a side project. Here's how to make your contribution land quickly.
Before You Open a PR
- Check existing issues — your idea may already be tracked.
- Open an issue first for any non-trivial change.
- One PR per issue — keep scope tight.
Looking for something to work on? Check out the good first issues label on GitHub.
Development Setup
Prerequisites
- Rust 1.75+ — install via rustup
- Docker — required for integration tests and the observability stack
- curl + jq — for manual testing
Clone and Build
git clone https://github.com/isartor-ai/Isartor.git
cd Isartor
cargo build
Run the Test Suite
# Full test suite
cargo test --all-features
# Or use Make
make test
# Run a specific test binary
cargo test --test unit_suite
cargo test --test integration_suite
cargo test --test scenario_suite
# Run a single test with output
cargo test --test scenario_suite deflection_rate_at_least_60_percent -- --nocapture
Lint & Format
# Format check (same as CI)
cargo fmt --all -- --check
# Apply formatting
cargo fmt --all
# Clippy lint check (same as CI)
cargo clippy --all-targets --all-features -- -D warnings
Release Build
cargo build --release
# or
make build
Benchmarks
# Criterion micro-benchmarks
cargo bench --bench cache_latency
cargo bench --bench e2e_pipeline
# Full benchmark harness (requires running Isartor instance)
make benchmark
# Dry-run smoke test (no server needed)
make benchmark-dry-run
PR Checklist
-
cargo test --all-featurespasses -
cargo clippy --all-targets --all-features -- -D warningshas no new warnings -
cargo fmt --all -- --checkpasses - PR description explains WHY, not just WHAT
- Documentation updated if behaviour changes
What Gets Merged Quickly
- Bug fixes with a test that reproduces the bug
- Documentation improvements
- Performance improvements with benchmark evidence
What Takes Longer
- New features — needs design discussion in an issue first
- Changes to the deflection layer logic — core path changes require careful review
Code Conventions
- Tests are grouped into integration-test binaries (
unit_suite,integration_suite,scenario_suite) that re-export submodules. When adding a test, place it in the appropriate binary rather than creating a standalone file. - Configuration uses
ISARTOR__...environment variables with double underscores as separators. - The Axum middleware stack wraps inside-out. See
src/main.rsfor the documented layer order. - Use
spawn_blockingfor CPU-intensive work (embeddings, model inference) to avoid starving the Tokio runtime. - The
src/compression/module uses a Fusion Pipeline pattern: statelessCompressionStagetrait objects executed in order. To add a new compression stage, implement theCompressionStagetrait and wire it insrc/compression/optimize.rs::build_pipeline().
Response Time
Issues and PRs are reviewed within 24–48 hours on weekdays. Weekend responses are not guaranteed.
See also: Testing · Architecture · Troubleshooting