# Contributing to Concurrent AVL Tree
Thank you for your interest in contributing! This project follows strict Rust engineering standards to ensure safety, performance, and maintainability.
## 🛠️ Development Setup
1. Install Rust `1.91.1+` via `rustup`.
2. Clone the repository: `git clone https://codeberg.org/dzulkifli/concurrent-avl-tree.git`
3. Build: `cargo build --release`
4. Run tests: `cargo test`
## Code Standards
- **Formatting**: `cargo fmt` (enforced by CI). Follows `rustfmt.toml`.
- **Linting**: `cargo clippy -- -D warnings`. All `pub` items must pass `missing_docs`, `missing_safety_doc`, `missing_errors_doc`, and `missing_panics_doc`.
- **Documentation**: Every public API requires strict `rustdoc` sections: `## Description`, `## Invariant`, `## Thread Safety`, `## Complexity`, `## Examples`.
- **Testing**: Minimum 80% coverage for public API. Doc tests must compile and pass. Use `cargo-llvm-cov` for verification.
- **Safety**: `unsafe` blocks are prohibited unless formally justified and accompanied by exhaustive tests. `Send`/`Sync` guarantees must be explicitly documented.
## Pull Request Process
1. Create a feature branch from `main`.
2. Implement changes, ensuring `cargo test`, `cargo fmt --check`, and `cargo clippy -- -D warnings` pass.
3. Update `CHANGELOG.md` under `[Unreleased]` following Keep a Changelog format.
4. Submit PR with clear description, benchmark deltas (if applicable), and link to related issue.
5. Maintainers will review within 48 hours. CI must pass before merge.
## License
By contributing, you agree that your submissions will be licensed under the MIT License.