mirror of
https://github.com/PR0M3TH3AN/Marlin.git
synced 2025-09-07 06:38:44 +00:00
2.0 KiB
2.0 KiB
Marlin – Contributor Guidelines
This project follows a lightweight “spec first” workflow with strict CI gates. Follow the instructions below so your PRs can merge cleanly.
Workflow
- Branching – trunk‑based. Work in a feature branch, open a PR, obtain two reviews, then squash‑merge.
- Design Proposals – any major feature or epic starts with a DP‑xxx document
in
docs/adr/
describing schema changes, example CLI output and performance targets. - Coverage gate – Tarpaulin must report ≥ 85 % coverage on lines touched in a sprint. CI fails otherwise.
- Performance gate – cold start P95 ≤ 3 s on a 100 k file corpus (unless the relevant DP states a different budget). CI benchmarks enforce this.
- Documentation – update
README.md
and the auto‑generated CLI cheatsheet in the same PR that adds or changes functionality. - Demo – closing an epic requires a ≤ 2‑min asciinema or GIF committed under
docs/demos/
.
Coding standards
- Run
cargo fmt --all -- --check
andcargo clippy -- -D warnings
before committing. - Internal logging uses
tracing
(info!
,warn!
etc.); avoidprintln!
except in CLI output. - Handle mutex poisoning and other errors with
anyhow::Result
rather than panicking. - Ensure every text file ends with a single newline.
- Generated coverage reports (
cobertura.xml
,tarpaulin-report.html
) and other artifacts listed in.gitignore
must not be checked in.
Testing
- Execute
./run_all_tests.sh
locally before pushing. It builds the CLI, runs unit and integration tests across crates, performs benchmarks and exercises demo flows. - CI replicates these steps and uploads benchmark and coverage artifacts.
Commit and PR etiquette
- Use concise, imperative commit messages (e.g. “Add file watcher debouncer”). Reference the relevant DP or issue in the body if applicable.
- PRs should link to the associated DP or issue, include documentation updates and—when closing an epic—a short asciinema/GIF demo.