Archived
feat: publish-ready overhaul — lints, tests, docs, CI, fuzzing, mutant testing
- Enable clippy pedantic + nursery lints; fix all warnings - Add config validation (SF, CR, frequency range checks) - Zeroize passphrase intermediates after key derivation - Convert to lib+bin crate for fuzz target accessibility - Replace Vec with VecDeque for O(1) log/bucket rotation - Add TUI minimum terminal size guard Testing: - 145 unit + property tests (was 15) - 6 proptest groups (frame roundtrip, hash, SNR, air time, peer list, padding) - 2 cargo-fuzz targets (gossip frame decode, peer list decode) - cargo-mutants: 0 missed, 241 caught, 54 unviable Documentation: - README with prerequisites, quick start, config reference, architecture - Module-level and item-level rustdoc on all public items - LICENSE (MIT), rustfmt.toml, .gitignore Infrastructure: - GitHub Actions CI (fmt, clippy, test, audit) - cargo-mutants config (.cargo/mutants.toml) - justfile for common tasks
This commit is contained in:
24 files changed
+3048
-563
No files matched your search
@@ -0,0 +1,55 @@
|
||||
# cargo-mutants configuration
|
||||
# Run with: cargo mutants
|
||||
# Install with: cargo install cargo-mutants
|
||||
|
||||
# Exclude entire files that are untestable (main requires full app, setup requires interactive stdin)
|
||||
exclude_globs = [
|
||||
"src/main.rs",
|
||||
"src/setup.rs",
|
||||
]
|
||||
|
||||
# Exclude specific functions that require hardware, network, terminal, or full async infrastructure
|
||||
exclude_re = [
|
||||
# Equivalent mutants: Instant arithmetic never produces exact equality,
|
||||
# so `< ttl` and `<= ttl` behave identically in practice.
|
||||
"replace < with <= in DedupCache",
|
||||
"replace < with <= in decode_peer_list",
|
||||
# rate_limit.rs: equivalent mutant (secs is always > 0 from lora_air_time)
|
||||
"replace > with >= in RateLimiter::from_radio_config",
|
||||
# radio.rs: hardware-dependent functions
|
||||
"radio_loop",
|
||||
"connect_and_run",
|
||||
# gossip.rs: async network functions
|
||||
"Gossip::new",
|
||||
"Gossip::shutdown",
|
||||
"spawn_accept_loop",
|
||||
"handle_incoming",
|
||||
"spawn_receiver",
|
||||
"spawn_broadcaster",
|
||||
"spawn_dht_heartbeat",
|
||||
"dht_read_and_join",
|
||||
"dht_publish",
|
||||
"dht_get_peers",
|
||||
# router.rs: async event loop
|
||||
"^src/router\\.rs:.* replace run ",
|
||||
"^src/router\\.rs:.* in run$",
|
||||
# tui.rs: terminal rendering functions
|
||||
"tui::run",
|
||||
"tui_loop",
|
||||
"restore_terminal",
|
||||
"draw_ui",
|
||||
"draw_header",
|
||||
"draw_network",
|
||||
"draw_radio",
|
||||
"draw_stats",
|
||||
"draw_log",
|
||||
"draw_activity",
|
||||
"draw_sparkline_section",
|
||||
"draw_shutdown_overlay",
|
||||
"panel_block",
|
||||
"status_pill",
|
||||
"kv_line",
|
||||
]
|
||||
|
||||
# Timeout per mutant test (seconds)
|
||||
timeout_multiplier = 3.0
|
||||
Reference in new issue
Block a user