# Contributing to Cerebro
Thank you for your interest in contributing to **Cerebro**! We welcome contributions from the community to help make this semantic memory engine even better.
## How to Contribute
### 1. Reporting Bugs
- Use the [GitHub Issue Tracker](https://github.com/surajknanda10/cerebro/issues) specifically for bugs.
- Include details about your environment, the version of Cerebro you are using, and a reproducible example if possible.
### 2. Feature Requests
- Check the [BACKLOG.md](BACKLOG.md) to see if the feature is already planned.
- Open a "Feature Request" issue to discuss your proposal before implementation.
### 3. Pull Requests
1. **Fork the repository** and create your branch from `main`.
2. **Setup your environment**: Ensure you have the latest stable Rust toolchain installed.
3. **Run Tests**: Make sure all tests pass before submitting!
```bash
cargo test
```
4. **Code Style**: We follow standard Rust formatting. Run `cargo fmt` before committing.
5. **Documentation**: If you're adding a new feature, please update `ARCHITECTURE.md` or `USER_GUIDE.md` as appropriate.
6. **Commit Messages**: Use descriptive commit messages (e.g., `feat: add support for X`, `fix: resolve issue with Y`).
## Publishing to crates.io
Cerebro uses GitHub Actions for automated publishing. Ensure you have added your crates.io API token as a GitHub Repository Secret named `CARGO_REGISTRY_TOKEN`.
To cut a new release:
1. Update the `version` in `Cargo.toml`.
2. Document the changes in `docs/CHANGELOG.md`.
3. Commit and push the changes.
4. Push the newly tagged release to trigger the GitHub Actions publish workflow:
```bash
git tag v1.1.8
git push origin v1.1.8
```
The `.github/workflows/publish.yml` action will automatically build and publish the crate to crates.io using the `crates-io` GitHub environment.
## Code of Conduct
We are committed to providing a friendly, safe, and welcoming environment for everyone. Please be respectful and professional in all interactions.
## Technical Context
Before diving in, we highly recommend reading:
- **[ARCHITECTURE.md](ARCHITECTURE.md)**: To understand the trait-based modular design.
- **[USER_GUIDE.md](USER_GUIDE.md)**: To see how the library is intended to be used.
---