# Contributing to Prismatica
Thank you for your interest in contributing to Prismatica. This document covers
the essentials for reporting bugs, submitting changes, and meeting code quality
requirements.
## 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.
## 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
```
MSRV is **1.85**. Ensure your toolchain meets this minimum.
## 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
```
## 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.