Thank you for contributing! Bug reports, features, documentation, example configurations, tests, reviews, and issue triage are all welcome.
Setup, build, test, and architecture documentation lives in DEVELOPMENT.md. This guide covers the contribution process itself.
- Fork the repo (external contributors) or branch from
nightly(maintainers). - Make a focused change: one logical change per PR, with tests.
- Run
make fmt-check,cargo test --workspace, andmake lintbefore pushing. - Write Conventional Commits; verify with
make lint-commits. - Open a PR explaining what and why. A maintainer reviews, then rebase-merges.
Contributions require agreement to the CLA, and this project follows the Contributor Covenant Code of Conduct.
- Community Slack: ask questions, share ideas, or discuss approaches before opening a PR.
- GitHub Issues: report bugs or request features.
All contributors, both individual and corporate, must agree to the Mezmo Contributor License Agreement (CLA) before their contributions can be accepted. The CLA ensures that you grant the necessary rights for your contributions to be included in the project while you retain ownership of your work.
By submitting a pull request, commit, or other contribution to this repository after being presented with the CLA, you accept and agree to its terms. If you are contributing on behalf of your employer, please ensure you have authorization to accept the agreement on their behalf.
Organizations with ten (10) or more contributors may contact cla@mezmo.com to execute a separate Corporate Contributor License Agreement covering all authorized contributors within the organization. For any questions about the CLA or licensing, reach out to cla@mezmo.com.
Environment setup, build instructions, project structure, and Make targets are documented in DEVELOPMENT.md.
-
Create a branch from the latest
nightly:git checkout nightly git pull origin nightly git checkout -b feat/your-feature-name
-
Make your changes, keeping commits focused and atomic.
-
Run quality checks before pushing:
make fmt-check cargo test --workspace make lint(
make cibundles the fmt-check and lint hooks, but itstesthook is currently empty, so always runcargo test --workspaceyourself.) -
Push your branch and open a pull request.
Contributions are merged to nightly via rebase merging to maintain a linear commit history, so every commit must follow the commit message convention.
| Branch | Channel | What it is |
|---|---|---|
nightly |
nightly | Where development lands; every releasable merge publishes X.Y.Z-nightly.N. |
beta |
beta | A candidate cut from nightly, iterated as X.Y.Z-beta.N. Exists only during a release cycle. |
main |
stable | What latest, the Homebrew tap, and the package repository follow. |
Branch from and target nightly, not main. Maintainers move changes between channels. See the design note for the promotion workflow and the ADR for the rationale.
- Format with rustfmt (
make fmt); CI rejects unformatted code. - Pass clippy with warnings as errors (
make lint). - Follow existing patterns and conventions in the codebase.
- Avoid refactoring alongside feature work; submit refactors as separate PRs.
- Prefer clear, descriptive names over cleverness. Comment the "why", not the "what".
- Don't introduce compiler warnings.
- Unit tests are required.
cargo test --workspacemust pass before you submit; it needs no external services or API keys. Prefer unit tests for internal or algorithmic changes. - Integration tests are encouraged for user-facing changes. They call real LLM APIs and need an
OPENAI_API_KEYplus Docker; see DEVELOPMENT.md for suites, feature flags, and commands.
This project uses Conventional Commits, enforced by CI (make lint-commits):
<type>(<optional scope>): <description>
[body]
[optional footer(s)]
- The subject line must be entirely lowercase, under 72 characters, and not end with a period.
- Use the body to explain what and why, not how.
- If the change relates to a tracked ticket, include a
Ref: LOG-XXXXXXfooter; otherwise omit it (commitlint does not require it). UseFixes: #<issue number>when the change closes a GitHub issue.
| Type | When to Use |
|---|---|
feat |
A new feature |
fix |
A bug fix |
doc |
Documentation only changes |
style |
Formatting, missing semicolons, etc. (no code change) |
refactor |
Code change that neither fixes a bug nor adds a feature |
perf |
Performance improvement |
test |
Adding or updating tests |
chore |
Build process, tooling, or dependency updates |
ci |
CI/CD configuration changes |
Examples:
feat(config): add support for gemini provider
fix(streaming): correct sse event ordering on disconnect
doc: add ollama troubleshooting guide
For breaking changes, add ! after the type/scope and include a BREAKING CHANGE footer:
feat(config)!: rename [tools] section to [mcp.tools]
BREAKING CHANGE: The [tools] config section has been renamed to [mcp.tools].
Update your config.toml files accordingly.
Before you submit:
- Rebase on the latest
nightly(git fetch origin && git rebase origin/nightly). - Run the quality checks above, plus
make lint-commits. - Update documentation if your change affects user-facing behavior, configuration, or APIs (see Updating Documentation).
Guidelines:
- Title: clear and descriptive.
- Description: explain what the PR does and why: context, approach, trade-offs considered, and testing performed.
- Size: keep PRs focused and reasonably sized; break large changes into a series of smaller, reviewable PRs.
- Draft PRs: open one if you want early feedback on work in progress.
A suggested PR template:
## What
Brief description of what this PR does.
## Why
Motivation and context for the change.
## How
Summary of the approach and any notable implementation details.
## Testing
How this was tested (unit tests, integration tests, manual testing).After you submit, watch the PR for automated check results, the CLA bot's request to sign the contributor agreement, and reviewer feedback.
- All PRs require at least one maintainer review before merging.
- Reviewers may request changes; this is normal and part of maintaining quality. If you disagree with a suggestion, explain your reasoning.
- After approval, a maintainer rebase-merges your PR.
If your change affects any of the following, update the relevant docs (see the documentation map in CLAUDE.md):
- Configuration options: update
examples/reference.tomland the relevantexamples/files. - API behavior: update the corresponding page in the
mezmo/documentationrepo (aura/streaming-api-guide.mdxoraura/request-lifecycle.mdx). - New features: add a usage guide in the
mezmo/documentationrepo (aura/directory), not in this repo. - Build, testing, or architecture changes: update
DEVELOPMENT.mdand the relevant doc indocs/, and note any impacts inCLAUDE.md.
When reporting a bug, please include:
- AURA version (check
Cargo.toml) and Rust toolchain version (rustc --version) - Operating system and version
- Steps to reproduce, plus expected vs. actual behavior
- Relevant logs (set
RUST_LOG=debugorRUST_LOG=aura=tracefor verbose output) - Configuration (sanitized: remove API keys and secrets)
For feature requests, describe the use case and the problem you're trying to solve. Raising the idea in the community Slack first is a great way to refine it before opening a formal issue.
By contributing to AURA, you agree that your contributions will be licensed under the Apache License, Version 2.0, the same license that covers the project. All contributions are also subject to the Contributor License Agreement.