v0.4.0 — tunable cadence threshold
Catch jittered beacons — tune the cadence regularity bar from the CLI.
Added
scan/explaingain--cad-max-cv F— the maximum inter-arrival coefficient of variation below whichcad.regularityflags a column as metronomic (automated) timing. Defaults to0.05(behavior unchanged when omitted).
Why
A perfectly periodic C2 beacon has CV ≈ 0; real channels add timing jitter to evade exactly this test. A deterministic jitter sweep showed the default 0.05 catches beacons up to CV ≈ 0.0494 and goes quiet by ≈ 0.0504 — so a ~10% jittered beacon slips through. Raise the bar to catch it:
CV~0.06 beacon default(0.05): quiet --cad-max-cv 0.15: FIRES
CV~0.10 beacon default(0.05): quiet --cad-max-cv 0.15: FIRES
CV~0.25 beacon --cad-max-cv 0.15: quiet --cad-max-cv 0.30: FIRES
Contract
The threshold is part of the config_version fingerprint (cdcv=), verified to shift 0.0500 → 0.1500 when overridden — so a non-default bar is a visible, versioned, reproducible choice, never a hidden knob. Same input + same config_version ⇒ byte-identical output.
Gates
proptest + cargo-mutants 0 missed on anomalyx/main.rs (50 mutants, 45 caught, 5 unviable), including the < 0.0 validation boundary.
Install: cargo install anomalyx
Full changelog: v0.3.0...v0.4.0