# Contributing
## Workflow
1. Read the crate docs and existing tests before changing behavior.
2. Keep grammar expansion deterministic.
3. Prefer adding tests with every bug fix or API addition.
4. Run `cargo fmt`, `cargo check`, and `cargo test` before sending changes.
## Style
- Avoid `unsafe`.
- Preserve serde compatibility for public data types.
- Keep examples runnable and README snippets realistic.
- Prefer focused additions over broad rewrites.
## Grammar Changes
- Validate new grammar fields against end-to-end loading, not just parsing.
- Cover include/exclude/runtime filters when behavior changes.
- Add streaming iterator tests if expansion semantics change.
## Release Readiness
- Zero warnings on `cargo check --all-targets`
- Tests passing
- Examples compiling
- README snippets kept in sync with the public API