ax-normalize — any corpus → one [RecordSet]
The article's normalization promise: "given any corpus of information
regardless of its format, we'll normalize it." This crate maps every
recognized format onto the engine-independent [RecordSet] from ax-core,
so detectors never see the difference between a CSV and a Parquet file.
Formats are plugins: each is an independent [FormatParser] (one file
under [parsers]), resolved by a [ParserRegistry] via file extension then
content sniff. Adding a format is a new file plus one registration line —
see [parsers::default_registry]. Binary columnar formats (Parquet, Arrow
IPC) live behind the default-on polars feature.
Normalization is deterministic: column order is stable (header order for
tabular input, sorted key-union for JSON), and absence is explicit — a key
missing from one JSON row becomes [ax_core::Value::Null], never a guess.