# Contributing to Prismatica
Thanks for your help improving **prismatica**! I am so happy to have you!
There are opportunities to contribute to **prismatica** at any level. It doesn't matter if
you are just getting started with Rust or are the most weathered expert, we can
use your help.
**No contribution is too small and all contributions are valued.**
## Code of Conduct
The **prismatica** project adheres to the [Rust Code of Conduct][coc]. This describes
the _minimum_ behaviour expected from all contributors. Instances of violations of the
Code of Conduct can be reported by contacting me at
[albin@sjoegren.se](mailto:albin@sjoegren.se).
[coc]: https://github.com/rust-lang/rust/blob/master/CODE_OF_CONDUCT.md
## Need Help?
Reach out to me via email at [albin@sjoegren.se](mailto:albin@sjoegren.se) for any concern not covered in this guide.
## Reporting Bugs
Open an issue at <https://github.com/resonant-jovian/prismatica/issues> with:
- A clear description of the problem
- Steps to reproduce
- Expected vs. actual behavior
- Rust version (`rustc --version`) and OS
## Pull Request Process
1. Fork the repository and create a feature branch from `main`.
2. Make your changes (see requirements below).
3. Open a pull request against `main` with a concise description of the change.
4. Address any review feedback.
Bug fixes and new features should include tests.
## Development Setup
```bash
git clone https://github.com/resonant-jovian/prismatica.git
cd prismatica
cargo xtask fetch all # Download upstream colormap data
cargo xtask generate all # Generate Rust source from data/
cargo test --all-features -- --test-threads=1
```
## Code Quality Requirements
Before submitting a PR, verify all of the following pass:
```bash
cargo fmt --all # Format
cargo clippy --all-targets --all-features -- -D warnings # Lint
cargo test --all-features -- --test-threads=1 # Tests
cargo check --no-default-features --features core # no_std compat
```
The crate enforces:
- `#![no_std]` -- all code must work without the standard library.
- `#![forbid(unsafe_code)]` -- no `unsafe` blocks, ever.
- `#![deny(clippy::unwrap_used)]` -- use `expect()` or proper error handling.
## Generated Files
Files marked with `// Auto-generated by prismatica xtask -- do not edit` are
generated from upstream data. **Do not edit these files by hand.** Instead,
modify the code generation pipeline in the `xtask/` crate and re-run:
```bash
cargo xtask fetch all && cargo xtask generate all
```
## Minimum Supported Rust Version (MSRV)
The MSRV is **1.85**. Ensure your toolchain meets this minimum.
## Versioning Policy
With **prismatica** >=1.0.0:
* Patch (1.\_.x) releases _should only_ contain bug fixes or documentation
changes. Besides this, these releases should not substantially change
runtime behaviour.
* Minor (1.x) releases may contain new functionality, MSRV increases (see
above), minor dependency updates, deprecations, and larger internal
implementation changes.
* Major (x.0.0) releases may contain breaking API changes.
This is as defined by [Semantic Versioning 2.0](https://semver.org/).
## License
By contributing, you agree that your contributions will be licensed under the
GPL-3.0-only license, the same license that covers the project.