# donglora-protocol development tasks # default: list all recipes default: @just --list # run ALL quality gates (tests, clippy, fmt, doc, deny, fuzz, miri, mutants) test: test-unit test-clippy test-fmt test-doc test-deny test-fuzz test-miri test-mutants # quick compile check (all feature permutations) check: cargo check cargo check --no-default-features cargo check --all-features # unit + proptest + doc tests test-unit: cargo nextest run cargo nextest run --no-default-features cargo nextest run --all-features cargo test --doc # clippy with warnings as errors across feature permutations test-clippy: cargo clippy --all-targets -- -D warnings cargo clippy --all-targets --no-default-features -- -D warnings cargo clippy --all-targets --all-features -- -D warnings # check formatting test-fmt: cargo fmt -- --check # doc build (catches broken doc links) test-doc: cargo doc --no-deps --all-features # license and advisory audit test-deny: cargo deny check # fuzz every target for 60s (requires nightly + cargo-fuzz) test-fuzz: cd fuzz && cargo +nightly fuzz run decoder_feed -- -max_total_time=60 cd fuzz && cargo +nightly fuzz run parse_command -- -max_total_time=60 cd fuzz && cargo +nightly fuzz run parse_device_message -- -max_total_time=60 cd fuzz && cargo +nightly fuzz run frame_roundtrip -- -max_total_time=60 cd fuzz && cargo +nightly fuzz run lora_config_roundtrip -- -max_total_time=60 # run tests under miri (catches UB, requires nightly + miri component) # The proptest suite is skipped — its file-persistence layer calls getcwd # which miri does not support. Vectors and unit tests run clean. test-miri: cargo +nightly miri nextest run --lib --test vectors cargo +nightly miri nextest run --lib --test vectors --no-default-features # mutation testing (requires cargo-mutants). # # Runs under both feature configurations so that feature-gated paths # (currently only the defmt::Format derives) are covered in both shapes. # No exclusions yet for the v1.0 codec — rerun mutation testing on a # fresh target and add `-E` lines here for any provably-equivalent # mutants that survive, with a comment explaining why. test-mutants: test-mutants-default test-mutants-no-default test-mutants-default: cargo mutants --no-shuffle --test-tool=nextest test-mutants-no-default: cargo mutants --no-shuffle --test-tool=nextest --no-default-features # format code fmt: cargo fmt # build in release mode build: cargo build --release # clean all build artifacts clean: cargo clean rm -rf fuzz/target fuzz/corpus fuzz/artifacts