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 recognized
text formats (CSV, TSV, NDJSON, JSON) onto the engine-independent
[RecordSet] from ax-core. Binary columnar formats (Parquet, Arrow IPC)
land behind this same boundary in the Polars-backed slice — detectors never
see the difference.
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.