v0.3.0 — column scoping
Focus detection on the columns that matter — explicit, deterministic, no guessing.
Added
scan/explaingain--columns C,..(analyze only these columns) and--exclude C,..(analyze every column except these). Mutually exclusive. Applied before detection and to the--baseline, so drift comparison stays consistent.- New
RecordSet::select/RecordSet::withoutprojection primitives inax-core.
Why
The answer to identifier noise on wide corpora. On a real 20k-entry journalctl -o json capture, point flags ~10k mostly-meaningless outliers across journald's many ID/counter/timestamp fields (JOB_ID, PIDs, __REALTIME_TIMESTAMP, N_RESTARTS). --exclude of those fields collapses it to ~200 findings that matter — without touching detector config.
Explicit, never heuristic
A silent auto-skip would itself be a guess (the project's #1 rule is never guess) and would wrongly discard the near-unique numeric measurements the marquee detectors depend on (packet durationNanos, span durations, latencies). You name the scope. An unknown column on the primary corpus is a hard error (exit 2) so a typo can't silently scan nothing and read as "clean".
Contract
No envelope or config_version change — column scope is an input-side projection, so determinism is unchanged.
Gates
proptest + cargo-mutants 0 missed on both changed files (ax-core record.rs 21 mutants, anomalyx main.rs 43 mutants).
Install: cargo install anomalyx
Full changelog: v0.2.2...v0.3.0