Thanks for your interest in contributing to Steward! This document outlines how to get started.
- Fork the repository
- Clone your fork locally
- Install Rust (1.75+ recommended): https://rustup.rs
- Build the project:
cargo build - Run tests:
cargo test
# Build all crates
cargo build
# Run tests
cargo test
# Run with clippy lints
cargo clippy --all-targets -- -D warnings
# Format code
cargo fmt
# Run the CLI
cargo run -p steward-cli -- evaluate --contract contracts/general.yaml --output output.txt- Check existing issues first to avoid duplicates
- Use a clear, descriptive title
- Include steps to reproduce the issue
- Describe expected vs actual behavior
- Include relevant contract and output samples if applicable
- Open an issue describing the feature
- Explain the use case and why it would be valuable
- Reference the blueprint (
docs/steward-blueprint-specs.md) if relevant - Be open to discussion about implementation approaches
- Create a branch from
mainfor your changes - Make your changes with clear, focused commits
- Ensure all tests pass (
cargo test) - Ensure code is formatted (
cargo fmt) - Ensure clippy passes (
cargo clippy) - Open a PR with a clear description of changes
- Link any related issues
- Run
cargo fmtbefore committing - Follow existing patterns in the codebase
- Use meaningful variable and function names
- Add doc comments to public APIs
- Include unit tests for new functionality
- steward-core must never make LLM calls — this is deterministic evaluation only
- Lenses must stay independent — no lens may access another lens's findings
- Evidence is required — every BLOCKED state must cite rule_id and evidence
- Golden tests: Exact JSON output matching for contract + output pairs
- Property tests: Invariants (determinism, BLOCKED dominance, confidence bounds)
- No substring matching: Tests assert exact structure, not "contains"
- Lenses: Implement remaining lenses (Dignity, Restraint, Transparency, Accountability)
- Contract domains: Add domain-specific contracts (healthcare, finance, legal)
- Bindings: Python (PyO3) and TypeScript (napi-rs) bindings
- Documentation: Examples, tutorials, contract authoring guides
- Testing: Golden tests, property tests, edge cases
Open an issue or reach out to the maintainers. We're happy to help!