Skip to content

v0.3.0 — column scoping

Choose a tag to compare

@copyleftdev copyleftdev released this 31 May 23:53
· 19 commits to main since this release
de47e51

Focus detection on the columns that matter — explicit, deterministic, no guessing.

Added

  • scan / explain gain --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::without projection primitives in ax-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